Home.

Blog

Kmoser's Tech-Blog

Samstag
29
Juli 2017

MySensors Gateway

MySensors ist eine offene Platform für Hard- und Software zur DIY-Heimautomatisierung. Dabei richtet sich das Augenmerk von MySensors hauptsächlich auf die Hardware sowie die entsprechende Firmware auf den Devices.

Zur Darstellung und Verwaltung der Sensoren und Aktoren wird weitere Software benötigt. Dabei ist man aber nicht an ein Produkt gebunden sondern kann es in viele Lösungen integrieren. Ich z.B. werde die Sensoren hier in Fhem einbinden.

Damit Fhem mit den MySensors Geräten kommunizieren kann benötigt man ein Gateway. Auf der Website von MySensors sind einige Varianten beschrieben. Die Verbindung kann via USB, Ethernet oder WiFi erfolgen. Auch eine Möglichkeit das Funkmodul direkt an die GPIO Pins des Rasperry zu hängen gibt es.

Die Ethernet-Variante bietet sich an wenn man den Standort des Gateways so wählen muss dass er nicht in der Nähe des Rechner mit der Hausautomationssoftware steht, also z.B. wenn der Rechner im Keller steht und man den Gateway z.B. im Erdgeschoss aufstellen möchte um auch noch die höheren Stockwerke erreichen zu können. Bei der WiFi Variante ist es ähnlich nur dass man kein Ethernet Kabel benötigt.

Ich habe mich für die USB-Variante entschieden, da diese keine zusätzliche Stromversorgung benötigt und mein Rechner mit Fhem ziemlich zentral steht. Der Aufbau des Gateways ist extrem simpel und besteht eingentlich nur aus zwei Komponenten, dem Arduino Nano und dem nRF24L01+ Funk-Modul.

Warum noch eine Anleitung

Es gibt bereits etliche Anleitungen im Netz wie man einen solchen Gateway zusammenbaut aber viele davon sehen irgendwie "geschustert" aus. Ich muss gestehen ich bin kein so großer Freund von Heißkleber oder Klebern im Allgemeinen zur Befestigung von Bauteilen in meinen Projekten. Daher möchte ich euch hier meinen Versuch vorstellen der ganz ohne Kleber auskommt.

Materialliste

Typ Menge Notizen Link Einzelpreis Gesamtpreis
Arduino 1 Mit 3.3V Regler, Pinleisten nicht verlötet(!!) AliExpress 2,14 € 2,14 €
nRF24L01+ 1 Mit externer Antenne AliExpress 1,79 € 1,79 €
10µF Elko 1 AliExpress 1,89 € 0,02 €
100nF Kondensator 1 Conrad 0,10 € 0,10 €
Buchsenleiste 1 einreihig, 2x15 Pin AliExpress 1,08 € 0,08 €
Buchsenleiste 1 zweireihig, 8 Pin AliExpress 0,94 € 0,04 €
Platine 1 60mm x 40mm AliExpress 0,55 € 0,55 €
Alu Profil-Gehäuse 1 60 x 45 x 25 Conrad 15,99 € 15,99 €

Gesamtpreis 20,71 €.

Vor- und Nachteile des Systems

Wie alles im Leben hat auch dieses System seine Vor- und Nachteile.

Vorteile

In erster Linie sind die Sensoren günstig und einfach zu bauen. Außerdem sind die Sensoren mit nRF24L01 Funkchip gegenüber Sensoren die zur Datenübertragung WLan verwenden, wie z.B. Sensoren auf ESP8266 Basis, sehr energiesparend. Die Boards mit aufgedruckter Antenne benötigen laut Datenblatt nur maximal 13.5mA wenn sie "wach" sind, 900nA im Power-Down Mode und 26µA im Sleep-Mode. Daher eignen sich diese Sensoren auch gut für Batteriebetrieb. Die Boards mit externer Antenne und integriertem Verstärker benötigen mehr. Diese benötigen bis zu 115mA beim Senden.

Nachteile

Der größte Nachteil von MySensors ist dass die Kommunikation nicht verschlüsselt ist, daher sollte man dieses System nur für nicht kritische Anwendungen verwenden. Also nicht die Heizung oder den Türöffner darüber steuern. Es gibt aber immerhin eine Möglichkeit die Authentizität und Integrität von Kommandos zu verifizieren. Dies benötigt aber noch ein zusätzliches Bauteil. Das ist leider noch mit der Post unterwegs zu mir und wird daher zu einem späteren Zeitpunkt behandelt.

Vorbereitung

Da der nRF24L01 mit externer Antenne mehr Strom am 3.3V Pin benötigt kann als der normale  Arduino Nano liefern kann benötigt man einen separaten 3.3V Spannungsregler. Ich habe zufällig bei AliExpress einen alternativen Nano von RoboDyn gefunden der bereits einen 3.3V Regler auf dem Board hat und bis zu 500mA liefern kann. Und er kostet teilweise sogar weniger als ein normaler Arduino.

Eine weitere schöne Sache an dem Nano ist, dass er ohne verlötete Stiftleisten daherkommt. Man spart etwas Platz wenn man die Stiftleisten "verkehrt" herum einlötet. Damit zeigt der USB-Port nach unten und nimmt keinen zusätzlichen Platz weg. Und Platz ist echt knapp in dem von mir gewählten Gehäuse. Die Pfostenleiste wird also gegenüber dem normalen Nano auf der Oberseite anstatt auf der Unterseite eingelötet.

Ein weiteres Problem was das Thema Platz betrifft sind die Steckerleisten am Funkmodul. Diese sind auch "falsch" herum eingelötet. Die Höhe des Moduls ist die Summer aus Antennenstecker, Platine und Steckerleiste, was natürlich Platzverschwendung ist.

Die Steckerleiste muss also raus und von der anderen Seite wieder rein. Um die Leiste zu entfernen habe ich zuerst die Pins mit einem Seitenschneider so nah wie möglich am Plastik abgeknipst und dann vorsichtig den Kunststoff entfernt. Anschließend habe ich die noch verbliebenen Pin-Reste mit dem Lötkolben einzeln herausgelötet. Zum Schluss noch eine neue doppelreihige, 8 Pin Stiftleiste eingelötet und das Modul war nur noch halb so hoch :-)

Testaufbau

Die ersten Gehversuche auf dem Steckbrett haben gut funktioniert. Hier kann man testen ob alles so funktioniert wie erwartet und ggf. noch Anpassungen am Aufbau machen.

Sketch

Der Sketch für den seriellen Gateway gibt es direkt auf www.mysensors.org.

Bevor man den Sketch allerdings kompilieren kann muss man die MySensors Library installieren. Dazu in der Arduio IDE im Dropdown Menü

Sketch > Bibliothek einbinden > Bibliotheken verwalten

auswählen und über die Suche nach "mysensors" suchen. Die Bibliothek jetzt über den Button "Installieren" auf dem Computer installieren.

Platine

Auf der Platine sitzen der Nano und das nRF24L01 Funkmodul nebeneinander. Auf diese Weise passen sie gerade so in das Gehäuse ein. Ist etwas fummlig beide in das Gehäuse zu bekommen und man muss ggf. ein bisschen an den Rändern der Experimentierplatine schleifen bis es passt, aber irgendwann passt es :-) Wichtig ist die Platine genau so zuzuschneiden wie es im Bild der Fall ist. Es gibt eine Standardgröße von Lochrasterplatinen die genau in das Gehäuse passen. Mit diesen wird es nicht funktionieren. Mit der so zuschnittenen Platine passt alles gerade so in das Gehäuse. Ggf. auf ein größeres Gehäuse ausweichen.

Ich habe mal versucht die Verkabelung mit Fritzing zu veranschaulichen. Richtig deutlich wird es vermutlich erst mit den Fotos der Platine von oben und unten weiter unten.

Die folgenden vier Bilder zeigen die fertig verlötete Platine. An einem Ground-Pin habe ich einen Abzweig mit einem runden Kabelschuh angelötet (Bild 3) um eine leitende Verbindung mit dem Gehäuse herstellen zu können. Ohne diese ist Verbindung wäre sonst die Schirmung die das Gehäuse bieten würde hinfällig.

Anschließend den Nano und das Funkmodul aufstecken und auf Funktion prüfen. Von den Versuchen auf dem Steckbrett hatte ich noch einen MySensors Sensor mit einem DHT22 rumliegen. So etwas eignet sich hervorragend zum Testen.

Prinzipiell sieht man aber auch bei der Initialisierung des Gateways in der seriellen Konsole ob die Verbindung zum Funkmodul erfolgreich war. Ob der Gateway aber wirklich empfängt lässt sich natürlich nur mit einem zweiten Device wie einem Sensor ermitteln.

Gehäuse

Um die leitende Verbindung zwischen Ground-Abzweig mit dem Kabelschuh und dem Gehäuse herzustellen musste ein bisschen was von dem Teil weggefräst werden in dem später eine der beiden Schraube sitzt, hier links im Bild. Mit einem Dremel und einem für Alu geeigneten Fräser (z.B. Wolfram-Karbid) ist das schnell erledigt.

Die Unterseite der Platine sitzt ja ziemlich fest durch den Einschub in die Nut des Aluprofils und es besteht eher nicht wie Wahrscheinlichkeit dass die Lötpunkte hier das Gehäuse berühren. Auf der Oberseite bin ich mir da nicht ganz so sicher. Deshalb habe ich eine kleine Isolierung in Form von zwei Papierstreifen eingefügt bevor ich das Modul in das Gehäuse geschoben habe. Mag sein dass das überflüssig ist, lässt mich aber ruhiger schlafen :-)

Der Kabelschuh musste noch ein bisschen bearbeitet werden, damit dieser in die gefräste Aussparung passt.

Rahmen drauf und noch ein Loch in den Deckel gebohrt, dann alles verschrauben und ferig ist die Vorderseite.

Von vorne kann sich das Gateway damit schon mal sehen lassen :-)

Den Ausschnitt für den USB Port habe ich mit einem kleinen Fräser auf einem Kreuztisch von Proxon gemacht. Könnte man aber auch problemlos mit einem kleinen Bohrer und einer Feile machen. Wollte den Tisch aber mal ausprobieren ;-)

Schön in anders aber dafür dass ich mit der Metallverarbeitung gerade erst anfange ganz ok. Es erfüllt auf jeden Fall erst mal seinen Zweck :-)

Der Abstand des USB Port vom Arduino und dem Gehäusedeckel ist fast ein bisschen viel. Der Micro-USB Stecker passt zwar und hält auch aber da ist auch noch Potenzial für Optimierung.

Einbindung in Fhem

Der Gateway kann selber ja noch nicht viel. Um mit dem Gateway Daten auszutauschen muss dieser in eine Hausautomationssoftware, in diesem Beispiel Fhem, eingebunden werden.

Wenn man, wie ich, mehrere Gateways auf Arduinos Basis verwedet die einen CH340 USB nach Seriell Adapter verwenden (die meißten China-Clones tun das), dann muss man das serielle Device, wie hier im Beispiel, mit by-path angeben. Es muss aber darauf geachtet werden, dass die Gateways immer in den selben USB-Ports eingesteckt werden.

Hat man einen Arduino mit einem FT232RL USB nach Seriell Adapter, dann kann/sollte man stattdessendie Variante mit by-id verwenden.

Um also das Device für das neue Gateway zu ermitteln vor und nach dem Einstecken des Gateways folgenden Befehl ausführen:

ll /dev/serial/by-path/

Das Device das beim Einstecken hinzugekommen ist, muss im dem define von Fhem verwendet werden.

define MySensorsGw01 MYSENSORS /dev/serial/by-path/pci-0000:00:1d.1-usb-0:1:1.0-port0@115200
attr MySensorsGw01 autocreate 1
attr MySensorsGw01 first-sensorid 10
attr MySensorsGw01 requestAck 1
attr MySensorsGw01 room 2.5 MySensors

Wenn man jetzt noch einen fertigen Sensor vom Zusammebau hat und diesen mit Strom versorgt, sollte der Sensor automatisch in Fhem als neues Device angelegt werden.