Sensornetzwerke mit MySensors und pimatic

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.

Raspberry Pi 3 Model B+

Nach dem Blogbeitrag auf der offiziellen Raspberry Pi Webseite gibt es mit dem Raspberry Pi 3 Model B+ nun ein neues System in der Raspberry Pi Familie. Sobald die ersten Modelle auch auf deutschen Webseiten erhältlich sind wird auch die Einkaufsliste angepasst.

Schnellere Hardware

Zu den wesentlichen Neuerungen gehören die folgenden Punkte.

Eine schnellere CPU mit 1,4 GHz gegenüber den 1,2 GHz vorm Vorgänger. Genauer die 1,4GHz 64-bit quad-core ARM Cortex-A53 CPU.

Dual-band 802.11ac W-LAN somit also auch die Möglichkeit der Nutzung von 5GHz Frequenzen für eine schnellere Übertragung.

Bluetooth 4.2

Power-over-Ethernet (PoE) Unterstützung

Preislich wird der Raspberry Pi 3 Model B+ auf dem gleichen Niveau wie der Vorgänger liegen!

Raspberry Pi Terrarium Steuerung bauen

Für das Wohlergehen der eigenen Reptilien in der Terraristik ist eine Raspberry Pi Terrarium Steuerung sehr nützlich. Auf einen Blick lassen sich alle wichtigen Informationen ablesen und notwendige Anpassungen vornehmen. Dinge wie Winterruhe und Nachtabsenkungen funktionieren automatisch. Eine Kontrolle ist jederzeit möglich.

Anforderungen

Die Raspberry Pi Terrarium Steuerung muss einige Funktionen erfüllen. Wichtig ist die Steuerung von Licht, Temperatur und der Luftfeuchtigkeit. Dies unterscheidet das Raspberry Pi Terrarium nicht von einem Smart Home. Auch dort erfasst die Steuerung alle notwendigen Werte und schaltet dann alle Geräte zur richtigen Zeit.

Nützliche Erweiterungen sind das Anzeigen des Wetters im Heimatland zu Vergleichszwecken oder eine automatisierte Winterruhe. Durch die Automatismen können auch Benachrichtigungen an Smartphones verschickt werden. Nützlich ist auch ein Raspberry Pi Dashboard.

Vorbereitung

Am Anfang steht die Beschaffung des Raspberry Pi. Alle notwendigen Komponenten sind in der Einkaufsliste zusammengefasst. Im Anschluss kann dieser eingerichtet werden. Für die Steuerung von Licht und Heizung bieten sich Funksteckdosen an. Die eigentliche Steuerung übernimmt dann die Software der Haussteuerung auf dem Raspberry Pi.

Raspberry Pi Terrarium Umsetzung

Für die Umsetzung der einzelnen Teile gibt es bereits einige Artikel in diesem Blog. Das Vorgehen ist in den verlinkten Artikeln beschrieben.

  1. Kaufen und einrichten des Raspberry Pi (siehe oben).
  2. Anschließen aller Leuchtstoffröhren, Heizkabel, Strahler und Wärmeplatten an Funktsteckdosen.
  3. Sensoren verbinden.
  4. Haussterungssoftware einrichten (z.b. pimatic oder fhem).
  5. In der Einrichtungsphase alle Werte manuell überprüfen.

Kontrolle und Anpassung

Nach der erfolgreichen Installation und Einrichtung lassen sich alle Werte ablesen. Sind für Uhrzeiten oder Temperaturwerte Eingabefelder vorgesehen worden, dann können diese jederzeit manuell angepasst werden.

Seit gestern gibt es die developer preview (alpha v1) der Google Assistant API zur freien Verfügung. Auf der Developer Webseite sind neben der Ankündigung einige Samples veröffentlicht. Der in Python geschriebene Code steht auch für den Raspberry Pi zur Verfügung.

Google Assistant

Der Google Assistant ist ein persönlicher Assistent von Google für Android, Google Home und den Messenger Google Allo, der sowohl gesprochene als auch eingegebene natürliche Sprache empfängt und verarbeitet. Die Software ist der Nachfolger von Google Now. (Quelle: Wikipedia) In diversen Android Produkten von Smartphones bis zum Smart TV ist der Assistent im Einsatz. Jetzt können alle Entwickler von dem Dienst profitieren.

Google Assistant mit dem Raspberry Pi

Auf der Beispiele Webseite findet sich eine kleine Anleitung zur Einbindung des Dienstes in den Raspberry Pi. Die Komponenten sind schnell gekauft. Neben dem Pi selber wird nur ein Mikrofon und ein Lautsprecher benötigt. Nach der Einrichtung erfolgt die Erstellung eines Projektes und die Generierung von API Keys.

Das Sample selber steht über den Python Paketverwaltung zur Verfügung und lässt sich mit wenigen Zeilen Code installieren.

 

iBeacon Scanner mit Raspberry Pi

In der Vergangenheit hatte ich bereits über iBeacons für die Haussteruerung berichtet. Der Raspberry Pi 3 und der brandneue Raspberry Pi Zero W verbauen standardmäßig Bluetooth Chips. Beide Geräte sind dazu geeignet einen iBeacon in der Nähe zu scannen. Findet der Pi dann eine Gerät in der Nähe kann man mittels Skript auf die Präsenz reagieren.

Prüfen und scannen

Im ersten Schritt ermitteln wir den Bluetooth Status des Gerätes und scannen dann nach Bluetooth Low Energy (BLE) Geräten. Idealerweise taucht hier dann der erste iBeacon auf.

$ systemctl status bluetooth
$ sudo hcitool lescan --duplicates
20:CD:XX:XX:XX:XX (unknown)
20:CD:XX:XX:XX:XX (unknown)

Für eine weitere Analyse lassen sich die Daten mitschneiden.

$ sudo apt-get install bluez-hcidump
$ sudo hcidump --raw

Ausgabe optimieren

Die Ausgabe von hcidump ist nicht sehr leserlich. Mit einem Skript von radiusnetworks oder einem geklonten Skript auf Github.com lässt sich die Ausgabe optimieren.

$ wget http://developer.radiusnetworks.com/ibeacon/idk/ibeacon_scan
$ chmod u+x ibeacon_scan
$ sudo ./ibeacon_scan

Fehlerbehebung

Die Fehlermeldung „Set scan parameters failed: Input/output error“ weißt auf ein belegtes/gesperrtes Bluetooth Gerät hin (bsp. durch den Kill eines hci* Prozesses). Die folgende Lösung schafft Abhilfe.

$ sudo killall hcitool
$ sudo killall ibeacon_scan
$ hciconfig hci0 down
$ hciconfig hci0 up