GPIO Tutorial-Reihe - Part 5: 1-wire Temperatursensor

Mit ** gekennzeichnete Links auf dieser Seite sind Affiliatelinks.

GPIO Tutorial-Reihe - Part 5: 1-wire Temperatursensor
GPIO Tutorial-Reihe - Part 5: 1-wire Temperatursensor
  • 29.09.2017
  • Hardware
  • 1wire

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

Hausbau-Kurs

Schaltplan

1-wire Temperatursensoren

»1-wire Temperatursensoren«

Komponenten

MAKKA® 5X 1M Wasserdicht Digital Temperaturfühler Temperatur Sensor DS18b20 **

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

Hausbau-Kurs

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?

Du willst mehr?

Smart-Home-Trainings von A-Z

Steig' noch tiefer in die Themen ein und meistere Deine Projekte! Über 14.000 Teilnehmer konnten sich schon von der Qualität der Online-Kurse überzeugen.

ioBroker-Master-Kurs

ioBroker-Master-Kurs

Mehr Infos
Hausbau-Kurs

Hausbau mit KNX

Mehr Infos
Lox-Kurs

Lox-Kurs

Mehr Infos
Node-RED-Master-Kurs

Node-RED-Master-Kurs

Mehr Infos