1Wire

Hier nun das Ergebnis der angekündigten 1-Wire Tests auf dem Raspberry. Zusammengefasst kann ich jetzt schon sagen dass das Ganze einen sehr soliden Eindruck macht und ohne Zweifel als sinnvolle Sensorik für das Smarthome eingesetzt werden kann. Aber von vorne… Hier ist meine Stückliste:
- Raspberry Pi (ich habe zum Testen einen Pi 2 Model B verwendet)
- RPI2 GPIO Host Adapter für Raspberry Pi(Berrybase)
- 1-Wire Temperatursensor I Kit(Shop von Thomas Heldt)
- 20 Meter Telefonkabel 3 adrig
Anmerkung: Der Shop von Thomas Held ist leider mittlerweile geschlossen. Sehr schade !
Vorab zum Sensor: Das Kit “1-Wire Temperatursensor I Kit” kann im Bestellverlauf optional fertig verlötet bestellt werden. Ich kann nur jedem raten dass zu machen. 2 der verwendeten Bauteile sind so winzig dass ich grosse Schwierigkeiten hatte diese überhaupt irgendwie zu greifen. Das Löten war ein Abenteuer.
Zur Installation wird der Raspberry ausgeschaltet und vom Strom getrennt. Der RPI2 Host Adapter wird einfach ganz am Ende auf die GPIO Leiste gesteckt. Am besten schließt man die 3 Adern der Telefonleitung vorher an. Dann am anderen Ende der Leitung entsprechend anschliessen. Der Host Adapter hat folgende Anschlüsse:
- +5V Versorgungsspannung
- Masse
- Datenleitung
Einige Sensoren benötigen wohl keine extra Spannungsversorgung über 5Volt. In unserem Beispiel schliessen wir die 5V an.
Sind alle Leitungen angeschlossen kann der Raspberry wieder gestartet werden.
Für die Verwendung des 1-Wire Busses (bzw. hier i2c Bus) müssen 2 Kernel Module geladen werden. Zur Laufzeit geht das so:
1 2 |
sudo modprobe i2c-bcm2708 sudo modprobe i2c-dev |
Um diese Module dauerhaft bei jedem neuen Bootvorgang zu laden müssen die Modulnamen in /etc/modules eingetragen werden:
1 |
sudo vim /etc/modules |
(nur die Namen – nicht “modprobe”)
In der Boot Konfiguration musste ebenfall eine Zeile auskommentiert werden
1 |
sudo vim /boot/config.txt |
1 |
dtparam=i2c_arm=on |
Dann habe ich das Pakewt i2c-tools installiert:
1 |
sudo apt-get install i2c-tools |
Danach habe ich den Pi einmal neu gestartet.
Nun könnt Ihr den Befehl i2cdetect nutzen um zu Prüfen ob Eurer Bus Adapter korrekt erkannt wurde:
1 |
i2cdetect -y 1 |
Das Ergebniss sollte in etwas so aussehen:
1 2 3 4 5 6 7 8 9 10 |
root@raspberrypi:~# i2cdetect -y 1 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: -- -- -- -- -- -- -- -- |
Danach habe ich das sog. 1-Wire Filesystem installiert.
1 |
sudo apt-get install owfs ow-shell |
Apt meldete mir hier eine fehlerhafte Installation am Ende. Daher habe ich dann nochmal alle Paket entfernt und neu installiert:
1 |
sudo apt-get remove owfs owfs-common owfs-fuse owftpd owhtt |
Dann nochmal:
1 |
sudo apt-get install owfs ow-shell |
Im Basissetup werden ein paar nicht vorhandene Sensoren “simuliert”. Wenn Ihr einen echten Sensor zu Verfügung habt solltet Ihr diese deshalb deaktivieren.
1 |
vim /etc/owfs.conf |
Hier sind alle Zeilen die “FAKE” enthalten auszukommentieren.
Desweiteren muss in derselben Datei folgende Zeile hinzugefügt werden um das Device für den Server zu setzen:
1 |
server: device=/dev/i2c-1 |
Danach startet man den Dienst owserver einmal neu:
1 |
systemctl restart owserver |
Ich erhielt dabei eine Fehlermeldung:
1 2 |
Job for owserver.service failed because the service did not take the steps required by its unit configuration. See "systemctl status owserver.service" and "journalctl -xe" for details. |
Dies konnte ich beheben indem ich nicht “systemctl” genutzt habe sondern “service”
1 |
service owserver restart |
Sehr strange – egal…
Prüfen ob der Server läuft könnt Ihr dann wieder mit systemctl:
1 |
systemctl status owserver |
Jetzt wird es interessant…
Mit dem Befehl owget könnt Ihr Euch das virtuelle 1-Wire Dateisystem anzeigen lassen:
1 2 3 4 5 6 7 8 9 10 |
root@raspberrypi:~# owget /28.80B0960B0000 /bus.0 /uncached /settings /system /statistics /structure /simultaneous /alarm |
Der Ordner “/28.80B0960B0000” entspricht hier meinem angeschlossenen Temperatursensor. Um sich die Features des Sensors genauer anzuschauen probieren wir daher jetzt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
1root@raspberrypi:~# owget /28.80B0960B0000 /28.80B0960B0000/address /28.80B0960B0000/alias /28.80B0960B0000/crc8 /28.80B0960B0000/errata /28.80B0960B0000/family /28.80B0960B0000/fasttemp /28.80B0960B0000/id /28.80B0960B0000/latesttemp /28.80B0960B0000/locator /28.80B0960B0000/power /28.80B0960B0000/r_address /28.80B0960B0000/r_id /28.80B0960B0000/r_locator /28.80B0960B0000/scratchpad /28.80B0960B0000/temperature /28.80B0960B0000/temperature10 /28.80B0960B0000/temperature11 /28.80B0960B0000/temperature12 /28.80B0960B0000/temperature9 /28.80B0960B0000/temphigh /28.80B0960B0000/templow /28.80B0960B0000/tempres /28.80B0960B0000/type |
Das einzige Feature was für uns vermutlich aktuell wirklich interessant ist “temperature”, also:
1 2 |
owget /28.80B0960B0000/temperature 24.3125root@raspberrypi:~# |
Voila – wir sind am Ziel.
Ein cooles Feature ist noch das wir die Werte auch per WebGui abfragen können. Dazu musste ich noch das Paket owhttpd nachinstallieren und den Server starten.
1 2 |
apt-get install owhttpd systemctl start owhttpd |
Über den Browser könnt Ihr dann wie folgt abfragen:
http://[IP oder DNS Eures Raspberry]:2121/[SensorID (siehe oben)]/temperature
FAZIT: Eine runde Sache funktioniert einwandfrei.
Den shop vom Heldt gibt es nicht mehr
Das stimmt. Das musste ich leider auch schon feststellen. Sehr schade !