Sensornetzwerke mit MySensors und pimatic

Lesedauer ~4 Minuten

Wird pimatic (oder FHEM) für die Haussteuerung mit dem Raspberry Pi eingesetzt ergibt sich oft das Problem, dass die Sensoren nicht in direkter Nähe zum Raspberry Pi stehen. Möchte man beispielsweise in der Küche, im Badezimmer und im Schlafzimmer die Temperatur erfassen um damit Heizungen zu steuern sind verteilte Sensoren notwendig. Diese lassen sich mit Hilfe des MySensors Projektes einfach bauen.

MySensors

Bei MySensors handelt es sich um ein Opensource Framework für die Erstellung von IoT (Internet of Things) Anwendungen über Funkstrecken. Das MySensors Projekt stellt Software und Quellcode für viele Anwendungsszenarien zur Verfügung. Die Systeme sind dabei so erstellt, dass die Funkmodule alle Nachrichten in einem Mesh-Netzwerk weiter verteilen. Dadurch ist eine hohe Reichweite möglich.

Grundlegend gibt es in dem Netzwerk Nodes. Dabei ist zwischen Sensor- und Gateway-Nodes zu unterscheiden. Die Gateway-Nodes empfangen Daten und geben diese mittels Seriellem Protokoll oder über W-LAN an ein Steuersystem (Controller) weiter. In unserem Fall wird dies pimatic übernehmen. Die Sensor-Nodes sammeln die Daten der angeschlossenen Sensoren und schicken diese mittels Funkchip an ein Gateway. Die Sensor-Nodes sind dabei Arduinos (Nano, Micro oder selten Uno). Das Gateway ist entweder ein ESP8266 oder in diesem Artikel der Raspberry Pi (entweder mit pimatic Installation oder als eigenes System). Funkchips sind hierbei nRF24L01+ oder RFM69 Module. Beide sind jedoch nicht untereinander kompatibel! Die nRF24L01+ sind einfacher zu konfigurieren und preiswerter. Die RFM69 dementsprechend teurer und aufwändiger zu konfigurieren jedoch auch robuster und mit besserer Reichweite.

In diesem Artikel brauchen wir folgendes.

ACHTUNG: Im Standard ist die Kommunikation unverschlüsselt. Kritische Sensoren und Aktoren sollten daher nicht über die unverschlüsselte Standardkonfiguration laufen.

Raspberry Pi Gateway einrichten

Der Raspberry Pi muss mit dem Funkmodul verbunden werden. Hier gibt es eine ganze Menge an Kombinationsmöglichkeiten, einen Raspberry Pi 1, B, B+, 2, 3, … mit den diversen Modulen. Abhilfe schafft die Wiring Liste von MySensors.

Sind alle Kabel an der richtigen Stelle geht es an die Einrichtung der Software. In der aktuellen Lösung kann der hier beschriebene Code genutzt werden um einen virtuellen seriellen Gateway zu erstellen.

ALTERNATIVE: Sind bereits viele der GPIO Ports belegt oder soll eine eigene Lösung für MySensors gebaut werden dann kann ein Serial Gateway mit einem weiteren Arduino aufgebaut werden. Die Verkabelung erfolgt wie unten bei dem Arduino beschrieben. Danach ist dieser mit dem Code von der MySensors Serial Gateway Seite zu bestücken und mit dem Raspberry Pi über USB zu verbinden.

Arduino und Sensor vorbereiten

Als erstes muss der Arduino mit dem Funkmodul verbunden werden. Hierzu gibt es die Skizze auf der MySensors Seite unter NRF24L01+ & Arduino. Bei dem gewählten Arduino ist zu beachten, dass die reinen 5V Arduinos unbedingt einen Regulator auf 3.3V benötigen damit das Funkmodul nicht gebraten wird! Bei dem Arduino Nano sind 3.3V Ausgänge vorhanden, der Uno hat diese ebenfalls.

Sobald der Arduino angeschlossen ist erfolgt der Anschluss eines Sensors. Der einfach DS18B20 Temperatursensor ist unter den Beispielen auf der Webseite gelistet. Der Anschluss des kombinierten DHT22 ist jedoch auch sehr einfach. Die Skizze dazu findet sich unter dem Eintrag Air Humidity Sensor. Dort ist ebenfalls ein Arduino Sketch abgelegt mit dem das Netzwerk und der Sensor aktiviert werden.

Prüfen

Sind beide Arduinos bzw. die Kombination Arduino und Raspberry Pi eingerichtet sollte der Sensor Arduino an den PC angeschlossen werden. Über den „Serial Monitor“ der Arduino Entwicklungsumgebung können die Ausgaben überprüft werden. Da ggf. noch kein Controller angeschlossen ist (pimatic) erhält der Arduino noch keine eindeutige ID. Abhilfe schafft die folgende Definition am Anfang des DHT22 Programms.

#define MY_NODE_ID 14

Hiermit erhält der Arduino testweise die ID 14. Diese ist dann auch im Output zu erkennen. Der Output sollte ungefähr wie folgt sein.

[...]
4186 MCO:BGN:INIT OK,TSP=1
4202 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:23.9
T: 23.90
4210 TSF:MSG:SEND,14-14-0-0,s=0,c=1,t=1,pt=7,l=5,sg=0,ft=0,st=OK:47.4
H: 47.40
4217 MCO:SLP:MS=60000,SMS=0,I1=255,M1=255,I2=255,M2=255

Wenn das Gateway ebenfalls ein Arduino ist ergibt sich im „Serial Monitor“ der folgende Output.

0;255;3;0;9;TSF:MSG:READ,14-14-0,s=255,c=3,t=26,pt=1,l=1,sg=0:2
0;255;3;0;9;TSF:MSG:SEND,0-0-14-14,s=255,c=3,t=27,pt=1,l=1,sg=0,ft=0,st=OK:1
0;255;3;0;9;TSF:MSG:READ,14-14-0,s=1,c=1,t=0,pt=7,l=5,sg=0:23.9
14;1;1;0;0;23.9
0;255;3;0;9;TSF:MSG:READ,14-14-0,s=0,c=1,t=1,pt=7,l=5,sg=0:47.5
14;0;1;0;1;47.5

Sensor in pimatic einbinden

Die Einbindung in pimatic erfolgt mit dem Plugin „pimatic-plugin-mySensors“.

Probleme

Ich konnte die Verbindung nur zwischen zwei Arduino Uno Varianten herstellen. Mit einem geklonten Mini war leider keine saubere Kommunikation möglich. Bei einem Original sollten hier aber keine Probleme auftreten.