1-Wire Extension für den Raspberry Pi

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.1-Wire Extension

Ü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.

1-Wire Extension auf Raspberry Pi

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

sudo joe /etc/modules

und folgende Zeilen hinzufügt werden

i2c-bcm2708
i2c-dev

Zum Laden der Module muss der Raspberry Pi neugestartet oder wer nicht warten kann manuell geladen werden

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

sudo i2cdetect -y 1

es sollte folgende Ausgabe erscheinen

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

sudo apt-get install owfs ow-shell

Nach der Installation ist es sehr wichtig noch die Konfiguration anzupassen

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!

FAKE = DS18S20,DS2405

Zusätzlich muss folgende Zeile eingefügt werden

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

sudo service owserver restart

Jetzt kann das virtuelle 1-Wire Filesystem (OWFS) mit

owget

ausgelesen werden. Als Ergenis erhält man das root Verzeichnis

/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

owget /28.F73924030000

Die Liste unterscheidet sich je nach Sensor / Aktor ein wenig

/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

owget /28.F73924030000/temperature

Es gibt auch eine fertige HTTP Schnittstelle in der das ganze viel einfacher geht 🙂

http://<Raspberry Pi IP Adresse>:2121

Wenn man z. B. nur die Temperatur von der Adresse 28.F73924030000 auslesen will kann man das mit

http://<Raspberry Pi IP Adresse>:2121/28.F73924030000/temperature

2 thoughts to “1-Wire Extension für den Raspberry Pi”

  1. Hallo, können Sie in wenigen schritten erklären wie die Einbindung der 1 wire Messwerte in die loxone Steuerung integriert werden kann?

    1. 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?!

      #!/bin/sh
      SENSOR1=`cat /var/1-Wire/28.F73924030000/temperature | sed 's/^[ t]*//'`
      wget http://:@/dev/sps/io/VI1/$sensor1
      

      Wenn du noch Fragen hast, melde dich gerne nochmal.

      Viele Grüße
      Stefan

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

code