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