HowTo: Raspberry Pi - 1-Wire mit Node-Red zu Loxone

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Gast

    #1

    HowTo: Raspberry Pi - 1-Wire mit Node-Red zu Loxone

    Hallo zusammen,
    ich stand vor einer kleinen Herausforderung: durch die schrittweise erfolgende Renovierung habe ich immer mehr Sensoren in Loxone aufnehmen müssen. Für Temperatur und Luftfeuchtigkeit (bislang nur die beiden Werte) sind es zwar nur knapp 10 Sensoren, aber durch eine sternförmige Verkabelung (anders ist es bei uns leider nicht möglich, da wir Raum für Raum umbauen) treten durch die zunehmende Last auf dem 1-Wire-Bus (entstehend durch Anzahl der Sensoren und Leitungslänge, sind mittlerweile in Summe fast 100 Meter) immer mehr Probleme. Zudem wollte ich noch iButtons hinzufügen, die mittels parasitärer Stromversorgung über 1-Wire-Data versorgt werden. Beides zu mischen (auf einem Bus) stellte sich als noch fehleranfälliger heraus.

    Option 1: neue Loxone 1-Wire-Extension. Ok, kann man machen, bietet für um die 160 Euro einen Kanal. Wenn ich also 1-Buttons und sonstige Sensoren trennen möchte, muss ich schon zwei Extension kaufen, da mir die Leitungslänge zu viel „Gewicht“ auf den 1-Wire Bus bringt…

    Option 2: Sheepwalk Electronics. Nach einiger Recherche im Web bin ich auf diesen Anbieter gestossen. Bislang war es mir aber zu aufwendig, owfs Daten in Loxone zu pushen. Seit pmayer aber die Node-Red Contribution geschrieben hat (großen Dank an dieser Stelle nochmal), ist es deutlich leichter geworden. Zum Einsatz kommt ein RPI3 v2 (Raspberry Pi für die GPIO Ports), der einen DS2482-800 IC mit acht separaten 1-Wire-Kanälen bietet.

    Hier also meine Lösung:

    Zuerst wird eine Standard-Installation von Raspbian (Jessie Lite) auf dem Raspberry Pi durchgeführt. Dazu schreibe ich jetzt nichts, hier gibt es im Internet mehr als genug Anleitungen. Die IP Adresse habe ich fix gesetzt und mit apt-get remove dhcpd5 den hartnäckigen DHCP-Client entfernt, da sonst zwei Adressen von Pi genutzt werden (die fest und die dynamische). Wer via Router DHCP Adressen vergibt, sollte diesen Schritt natürlich überspringen ;-)
    Ebenso überspringe ich die Hardware Installation des RPI3 v2. Dazu finden sich auf der Webseite von Sheepwalk gute Informationen. Bitte beachtet die Pin-Belegung der RJ45 Stecker, über die die 1-Wire Busse angeschlossen werden. Ich habe direkt zwei Screw Terminals mitbestellt, da ist die Ausführung der Busse stark vereinfacht (nur für Kanäle 3-8). Die von mir gewählte Variante hat keine RTC (real time clock), da ich einen zentralen NTP verwende.
    Danach folgt:
    sudo apt-get update
    sudo apt-get upgrade
    sudo raspi-config
    In der Raspi-Config müssen unter „5 - Interfacing Options“ die Optionen „P5 - I2C“und „P7 - 1-Wire Interface“ aktiviert werden
    Danach muss der Raspberry mittels „sudo reboot“ neu gestartet werden.
    Um zu sehen, ob die Treiber für den i2c geladen wurden gibt man nach dem Neustart nun folgende Befehle ein:
    sudo modprobe i2c-bcm2708
    sudo modprobe i2c-dev
    Sollte hier alles funktioniert haben, kann man die Module automatisch laden:
    sudo nano /etc/modules
    In der Datei müssen dann “i2c-bcm2708” und “i2c-dev“ (ohne Anführungszeichen) eingetragen werden.
    Um zu sehen, ob alles da ist geben wir nun „sudo i2cdetect -y 1” ein. Dies sollten folgenden Output liefern (bei RPI3 mit 8 Busen):
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- 1c -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: -- -- -- -- -- -- -- --

    Falls der Befehl “i2cdetect” nicht funktioniert, müssen die i2c-tools nachinstalliert werden:
    sudo apt-get Install i2c-tools

    Nun installieren wir owfs:

    sudo apt-get install owfs ow-shell

    Da in der Standard-Installation Fake-Sensoren hinterlegt sind, ändern wir die /etc/owfs.conf
    sudo nano /etc/owfs.conf

    Hier ersetzen wir nun
    server: FAKE = DS18S20,DS2405
    durch
    #server: FAKE = DS18S20,DS2405
    und schreiben eine neue Zeile
    server: device=/dev/i2c-1

    Des Weiteren ändern wir folgende Zeilen ab:

    ! server: server = localhost:4304
    gegen
    ! server: server = 127.0.0.1:4304

    server: port = localhost:4304
    gegen
    server: port = 127.0.0.1:4304

    Den Grund dafür erläutere ich später.

    Um die Änderungen zu aktivieren starten wir den owserver Prozess neu:
    sudo service owserver restart

    Mit dem Befehl „owdir“ sollten nun die angeschlossen Sensoren anzeigt werden.

    Nun installieren wir Node-Red mittels des Script von der Node-Red Webseite. Einfach diesen Befehl in die CLI kopieren, den Rest macht Node-Red selbst.
    bash <(curl -sL https://raw.githubusercontent.com/no...js-and-nodered)

    Um Node-Red im Autostart zu aktivieren führen wir nun folgenden Befehl aus:
    sudo systemctl enable nodered.service

    Danach ist Node-Red wie gewohnt unter http://IPdesRaspberry:1880 erreichbar.

    Nun installieren wir “Manage palette” in Node-Red
    node-red-contrib-owfs

    Bei ersten Erstellen eines Flows mit einem owfs-Node werden die Daten für den owserver abgefragt. Hier ersetzen localhost und tragen die 127.0.0.1 ein. Um Sensoren auszulesen wählen wir natürlich „Read“. Beim Klick auf „Refresh“ sollten dann Sensoren angezeigt werden.

    Danach können die Daten mittels Loxone-Contribution an einen virtuellen Eingang von Loxone übergeben werden. Ebenso kann man die Daten in eine Datenbank schreiben oder weitere „Spielereien“ damit betreiben J

    Warum ersetzen wir localhost mit 127.0.0.1:

    Beim owfs Node scheint „localhost“ als Host nicht zu funktionieren, er verlangt offenbar eine IP Adresse. Daher setzen wir diese in der /etc/owfs.conf. Die Raspberry IP einzutragen funktioniert auch (muss dann in Node-Red und owfs.conf eingetragen werden). Nur leider funktionieren die CLI-Befehle des owfs (z.B. owdir) noch mit Angabe der IP Adresse, als „owdir -s eingetrageneIPinOWFS.CONF“.

    Komponenten und ca. Preise:
    Raspberry Pi 3: ca. 40 Euro
    RPI3 v2 inkl. zwei Screw Terminals: ca. 63 Euro inkl. Versand
    Hutschienen-Gehäuse: ca. 20 Euro (musste mit einem Dremel für die RJ45 Outlets angepasst werden)
    5V Hutschienen-Netzteil: ca. 20 Euro (Meanwell 2,4A)
    Stromkabel Micro-USB mit offenen Enden: ca. 3 Euro

    Summe: ca. 150 Euro für acht(!!!) 1-Wire-Kanäle
Lädt...