Ich bin im Loxone Forum auf die 1-Wire Master Platinen von Sheepwalk Electronics (Externer Link: http://www.sheepwalkelectronics.co.uk) aufmerksam geworden. Da wir nächstes Jahr mit der Bewässerung und vielleicht einem kleinen Pool loslegen wollen, habe ich mir eine Platine bestellt. Die Wahl viel schnell auf die RPI2 1-Wire Platine, da diese gegenüber der RPI1 1-Wire Platine viele Vorteile bietet. Unter anderem eine geregelte 5V Spannungsversorgung (wichtig für einen stabilen 1-Wire Bus), einen Überspannungsschutz (DS9503) und einen richtigen I2C-to-1-Wire Chip (DS2482-100) der sehr leistungsfähig ist. Wie auch bei der Loxone 1-Wire Extension die wir für die 1-Wire Sensoren im Haus nutzen, ist ab einer bestimmten Länge des Bussystesm bzw. Anzahl an Teilnehmern mit Problemen zu rechnen.
Übergangsweise habe ich die RPI2 Platine auf den zweiten Raspberry Pi gesteckt um ein wenig damit zu spielen. Wenn man alles genau nach Anleitung macht, sind die Sensoren (Im Bild zu sehen ein DS18B20) schnell ausgelesen.
Hier eine kleine Anleitung:
Zum testen habe ich wie oben auf dem Bild zu sehen, einen DS18B20 Temperatursensor mit 5V Spannungsversorgung (3adrig) an die 1-Wire Platine angeschlossen und die Platine auf den Raspberry Pi gesteckt.
Damit die benötigten Kernel Module gleich beim Start geladen werden muss folgende Datei geöffnet
1 |
sudo joe /etc/modules |
und folgende Zeilen hinzufügt werden
1 2 |
i2c-bcm2708 i2c-dev |
Zum Laden der Module muss der Raspberry Pi neugestartet oder wer nicht warten kann manuell geladen werden
1 2 |
sudo modprobe i2c-bcm2708 sudo modprobe i2c-dev |
Nachdem die Module geladen wurden kann geprüft werden, ob die I2C Schnittstelle die Platine erkannt hat
1 |
sudo i2cdetect -y 1 |
es sollte folgende Ausgabe erscheinen
1 2 3 4 5 6 7 8 9 |
0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- |
Die Ausgabe bedeutet, dass an der Adresse 18 ein I2C Gerät in diesem Falle die RPI2 Platine antwortet.
Jetzt muss noch die OWFS (1-Wire File System) Software installiert werden
1 |
sudo apt-get install owfs ow-shell |
Nach der Installation ist es sehr wichtig noch die Konfiguration anzupassen
1 |
joe /etc/owfs.conf |
Folgende Zeile kann mit # auskommentiert werden, da hiermit nur Fake Sensoren generiert werden die mich zuerst sehr verwirrt haben. Zum probieren vielleicht ganz nett, man sollte nur dran denken!
1 |
FAKE = DS18S20,DS2405 |
Zusätzlich muss folgende Zeile eingefügt werden
1 |
server: device=/dev/i2c-1 |
Zum einlesen der Konfiguration kann man den ganzen Raspberry Pi neustarten oder nur den OWFS Serivce neustarten, was natürlich etwas schneller geht
1 |
sudo service owserver restart |
Jetzt kann das virtuelle 1-Wire Filesystem (OWFS) mit
1 |
owget |
ausgelesen werden. Als Ergenis erhält man das root Verzeichnis
1 2 3 4 5 6 7 8 9 |
/28.F73924030000 /bus.0 /uncached /settings /system /statistics /structure /simultaneous /alarm |
Der virtuelle Ordner 28.F73924030000 entspricht dann dem DS18B20. Die auslesbaren Werte erhält man dann mit
1 |
owget /28.F73924030000 |
Die Liste unterscheidet sich je nach Sensor / Aktor ein wenig
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/28.F73924030000/address /28.F73924030000/alias /28.F73924030000/crc8 /28.F73924030000/errata /28.F73924030000/family /28.F73924030000/fasttemp /28.F73924030000/id /28.F73924030000/locator /28.F73924030000/power /28.F73924030000/r_address /28.F73924030000/r_id /28.F73924030000/r_locator /28.F73924030000/temperature /28.F73924030000/temperature10 /28.F73924030000/temperature11 /28.F73924030000/temperature12 /28.F73924030000/temperature9 /28.F73924030000/temphigh /28.F73924030000/templow /28.F73924030000/type |
Das Auslesen der Temperatur aus dem Sensor funktioniert wie folgt
1 |
owget /28.F73924030000/temperature |
Es gibt auch eine fertige HTTP Schnittstelle in der das ganze viel einfacher geht 🙂
1 |
http://<Raspberry Pi IP Adresse>:2121 |
Wenn man z. B. nur die Temperatur von der Adresse 28.F73924030000 auslesen will kann man das mit
1 |
http://<Raspberry Pi IP Adresse>:2121/28.F73924030000/temperature |
Hallo, können Sie in wenigen schritten erklären wie die Einbindung der 1 wire Messwerte in die loxone Steuerung integriert werden kann?
Hallo Benjamin,
Sorry, da kann ich dir leider nicht weiterhelfen. Ich hatte es mir eigentlich vorgenommen, bin aber nicht mehr dazu gekommen. Den letzten Satz im Beitrag, dass in kürze weitere Beiträge folgen, habe ich daher entfernt.
Ein Lösungsansatz wäre über einen „virtuellen HTTP Eingang“ auf dem Loxone Miniserver die Daten direkt von der OWFS Webseite abzufragen bzw. zu parsen. Alternativ ein Shell Skript das die Temperatur ausliest und dann an einen virtuellen Eingang übergibt. Das Skript wird dann per Cronjob gestartet. Das Shell Skript habe ich nur eben schnell zusammengesucht und ist daher ungetestet. Vielleicht hilft es dir ja trotzdem weiter?!
Wenn du noch Fragen hast, melde dich gerne nochmal.
Viele Grüße
Stefan