GPIO Tutorial-Reihe - Part 5: 1-wire Temperatursensor
Wie versprochen geht es heute schon mit 1-wire weiter. Es soll ja nicht langweilig werden! 1-wire kann als Modul in Raspbian aktiviert werden und erstellt dann ganz automatisch Dateien auf der Festplatte/SD-Karte, welche mit einem fertigen Modul von FHEM ausgelesen werden können.
Was wird benötigt?
- Eine FHEM-Installation
- Ein Raspberry Pi (1, 2 oder 3)
- DS18b20 Temperatur-Sensoren
Video
Schaltplan
»1-wire Temperatursensoren«
Komponenten
Befehle
Als erstes muss 1-Wire erstmal aktiviert werden. Die generell Verarbeitung / Kommunikation mit dem Bus findet direkt im Raspberry Pi statt. Am Ende werden also nur Dateien auf die Festplatte gelegt, welche dann von FHEM ausgelesen werden. So kompliziert ist es also nicht.
sudo raspi-config (1-wire aktivieren)
sudo vi /boot/config.txt
dtoverlay=w1-gpio,gpiopin=4
Wenn alles verkabel wurden, kann man wie folgt prüfen, ob der erste angeschlossene Temperatur-Sensor richtig erkannt wurde. Ist dies der Fall, werden im folgenden Pfad neue Order und Dateien angelegt.
cd /sys/bus/w1/devices/
cd 28-0417005d05ff
cat w1_slave
Die Datei w1_slave in jedem Verzeichnis ist jene, welche auch später von FHEM ausgelesen wird. Ob der Inhalt korrekt ist, kann dabei ganz einfach kontrolliert werden. Wichtig ist nur, dass das Wort “YES” enthalten ist. Darunter steht die Temperatur in Celsius. Der Wert muss durch 1000 geteilt werden um auf die richtige Temperatur zu kommen - aber das macht später FHEM für uns.
65 01 4b 46 7f ff 0c 10 42 : crc=42 YES
65 01 4b 46 7f ff 0c 10 42 t=22312
Da GPIO4 nicht mehr entwickelt wird, muss das Modul erst einmal in das FHEM-Verzeichnis kopiert werden, damit es beim nächsten Start von FHEM auch automatisch geladen wird.
cd /opt/fhem/contrib
sudo cp 58_GPIO4.pm ../FHEM/58_GPIO4.pm
Natürlich muss dann ein Neustart von FHEM durchgeführt werden um das Modul zu laden.
shutdown restart
Als erstes können wir nun den BUSMASTER anlegen. Ich habe es so verstanden, dass normalerweise danach die gefundenen Slaves per Autocreate automatisch erstellt werden. Das hat in meinem Fall nur leider nicht funktioniert und ich musste alle Sensoren per Hand anlegen - auch kein Beinbruch!
define 1wire GPIO4 BUSMASTER
Schaut man sich den Inhalt der folgenden Datei an, findet man eine Liste mit genauso vielen Einträgen wie angeschlossene Sensoren. Natürlich ist es ratsam die Sensoren nach und nach anzuschließen, damit man die entsprechenden Geräte in FHEM auch zuordnen kann.
Ansonsten kann man auch alle Sensoren hinzufügen und durch einzelnes erwärmen per Hand oder Atem herausfinden bei welchem die Temperatur steigt. Ist aber etwas mühseliger.
cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slaves
Mit jeder der ausgelesenen IDs können wir dann ein neues Gerät in FHEM erstellen. Jetzt sollte die Temperatur des Sensors korrekt angezeigt werden. Diesen Vorgang wiederholen wir einfach für alle Geräte.
define 1wire_Temp1 GPIO4 28-0417005d05ff
Update
Natürlich kann man die Werte auch direkt per MQTT übermitteln, falls auf dem Raspberry Pi gar kein fhem installiert wurde. Das heißt, dass wir den Wert selbst lesen und dann per MQTT publishen. In meinem Fall sieht das Ganze wie folgt aus:
cat /sys/bus/w1/devices/28-0417005d05ff/w1_slave | grep -E -o "t=[0-9]{0,5}" | cut -c 3-
Ein wenig Erklärung dazu habe ich im Video gezeigt. Die ID den Sensors muss natürlich angepasst werden, da diese immer unterschiedlich ist.
sudo apt-get install mosquitto-clients bc
vi 1wire-cron.sh
Der Inhalt sieht man ende wie folgt aus. Einfach die ID des Sensors anpassen, dann die IP des MQTT-Brokers und das Topic. Fertig.
#!/bin/bash
roomtemp=$(cat /sys/bus/w1/devices/28-0417005d05ff/w1_slave | grep -E -o "t=[0-9]{0,5}" | cut -c 3-)
roomtempc=$(bc -l <<< "$roomtemp/1000" | cut -c -6)
mosquitto_pub -h 192.168.178.11 -t /SmartHome/Keller/Temperatur -m $roomtempc
Nun noch den Cronjob anlegen
crontab -e
*/5 * * * * bash /home/pi/1wire-cron.sh
Und wir bekommen alle 5 Minuten den Wert des Sensors per MQTT zugestellt. Einfach, oder?