MySensors Starter Guide
![Info blue.png](/w/images/thumb/7/7e/Info_blue.png/40px-Info_blue.png)
MYSENSORS | |
---|---|
Zweck / Funktion | |
Einbindung eines MySensors-Gateways | |
Allgemein | |
Typ | Gerätemodul |
Details | |
Dokumentation | EN / DE |
Support (Forum) | Sonstige Systeme |
Modulname | 00_MYSENSORS.pm |
Ersteller | {{{ModOwner}}} |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
MYSENSORS_DEVICE | |
---|---|
Zweck / Funktion | |
Einbindung einer MySensor-Node | |
Allgemein | |
Typ | Gerätemodul |
Details | |
Dokumentation | EN / DE |
Support (Forum) | Sonstige Systeme |
Modulname | 10_MYSENSORS_DEVICE.pm |
Ersteller | {{{ModOwner}}} |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Einführung
MySensors ist ein open-Source-Projekt. Der Schwerpunkt liegt auf selbstgemachten Funk-Sensoren für die Hausautomatisierung und das "Internet der Dinge" in einer Art Baukastensystem. Die Bauanleitungen des Projekts für die einzelnen Musterbausteine sind in der Regel einfach nachzubauen, die Hard- und Softwarebauteile lassen sich dabei auch (fast beliebig) kombinieren.
Nodes und Children
Nodes
Die Kombination von einem Microcontroller und einem Funkchip wird jeweils als "Node" bezeichnet. Ein MySensors-Netzwerk besteht also (in der Regel) aus mindestens zwei Nodes, nämlich einer Gateway-Node und einer Sensor-Node. Jede Node ist durch eine sog. NodeID innerhalb des Netzwerks eindeutig identifizierbar, wobei die "0" jeweils für das Gateway reserviert ist. Als Microcontroller werden in der Regel Arduinos (Nano oder Micro) verwendet, für das GW häufiger auch ESP8266. Als Funkchips lassen sich derzeit Module mit nRF24L01+ und RFM69 verwenden, die allerdings jeweils eine eigene Funktechnik verwendet und daher innerhalb eines Netzwerks nicht gemischt werden können.
Children
Als Child wird alles bezeichnet, was jeweils innerhalb einer Node unterschieden werden soll. Beispiel: An einer Node wird ein BME280 angeschlossen. Dies ist ein I2C-Sensor, der drei Werte liefert, nämlich Temperatur, Luftfeuchtigkeit und Luftdruck. Jeder dieser Meßgrößen erhält üblicherweise eine eigene ChildID zugewiesen.
Softwarestand
![Info green.png](/w/images/thumb/0/02/Info_green.png/20px-Info_green.png)
Bei Abfassung dieses Artikels war
- 1.6.12 der Stand der verwendeten Arduino-IDE
- 2.0.0 die stable-Version von MySensors.
- 2.0.1-beta der aktuelle Development-Zweig von Mysensors
Vor- und Nachteile von MySensors
Vorteile
- Preisgünstig
- Modular, Elemente können (fast) beliebig kombiniert werden
- Es kann ein sog. ACK verlangt werden. Damit läßt sich sicherstellen, dass eine Node einen Befehl auch tatsächlich erhalten hat (Bidirektionalität).
- Auf den Microcontrollern kann eine eigene Funktionalität unabhängig von der zentralen FHEM-Instanz vorgesehen werden (z.B. LED-Licht direkt bei Bewegung schalten).
- MQTT kann unterstützt werden.
Nachteile
- Standardmäßig wird ein nicht verschüsselter Funkstandard verwendet, so dass von der Verwendung in sicherheitsrelevanten Funktionen (Türschließer usw.) abzuraten ist.
Zum Start
Für erste Tests sind sinnvoll:
![Info green.png](/w/images/thumb/0/02/Info_green.png/20px-Info_green.png)
- eine Arduino mit USB-Anschluß (Nano) oder ein ESP8266
- ein weiterer Arduino Nano
- zwei nRF24L01+ (alternativ: zwei RFM69)
- Die Arduino-IDE
- die gewünschte Sensorik, also z.B. einen DS18B20+Widerstand, ein Bewegungsmelder-Modul, ... siehe dazu [1], wo auch Bezugsquellen zu finden sind.
MySensors in FHEM
Allgemein
Die Nutzung von MySensors in FHEM ist (nicht nur für den Anfänger) mit der standardmäßig eingeschalteten autocreate-Funktion einfach umsetzbar. Die Kenntnis der FHEM-Grundlagen und Durcharbeitung der Anfänger-Lektüren wird im Folgenden vorausgesetzt. Insbesondere sind Erste Schritte in FHEM und Heimautomatisierung mit FHEM Pflicht! Dort werden wesentliche Punkte für ein Verständnis von FHEM vermittelt, auch wenn manches nicht mehr ganz aktuell ist. So sollte man z.B. ein direktes Editieren der fhem.cfg unterlassen.
Im Folgenden werden immer wieder Auszüge aus der Konfiguration dargestellt. Diese dienen zur Erläuterung und Veranschaulichung. Die Bearbeitung der Konfiguration sollte - zur Verhinderung von Fehlern - nach Möglichkeit immer über das "Befehl-Eingabefeld" und die "Objektdetails" erfolgen.
Vorbereitung: Gateway
Zunächst ist das I/O-Device zu definieren, also das Gateway. Dies ist in MYSENSORS beschrieben.
![Info blue.png](/w/images/thumb/7/7e/Info_blue.png/40px-Info_blue.png)
![Info blue.png](/w/images/thumb/7/7e/Info_blue.png/40px-Info_blue.png)
Serielles Gateway am Raspberry PI:
define MyGateway_0 MYSENSORS /dev/ttyUSB0@115200
Nach erfolgreicher Definition ist das Gateway im Raum "Everything" in der Gruppe "MYSENSORS" zu finden. Wenn unten "initialized" oder "opened" angezeigt wird, ist FHEM in der Lage, mit dem MySensors-Netz zu kommunizieren. Es sollte dann noch auf autocreate gestellt werden.
Das Gateway ist auch ein MySensors-Device
![Info blue.png](/w/images/thumb/7/7e/Info_blue.png/40px-Info_blue.png)
![Info green.png](/w/images/thumb/0/02/Info_green.png/20px-Info_green.png)
Da am Gateway gleichzeitig auch bereits Sensoren angeschlossen sein können, legt FHEM direkt auch ein erstes MYSENSORS_DEVICE mit der NodeID "0" an. Sollten bereits ChildIDs im presentation()-Abschnitt des Gateway-Sketches enthalten gewesen sein, werden auch die zum Typ des präsentierten Sensor-Child-Typs passenden Readings automatisch angelegt.
Das erste Funk-MySensors-Device
In der Regel ist aber das erste "echte" MySensors-Device die 2. Node, die neben dem Gateway in Betrieb genommen wird. Hier gilt das Vorgesagte entsprechend: Nach dem ersten Start sind neu erkannte Devices ebenfalls im Raum "Everything" in der Gruppe "MYSENSORS" zu finden, die readings werden automatisch angelegt. Sobald Meßwerte übermittelt werden, werden die Readings damit gefüllt und entsprechend der per Sketch programmierten Vorgaben aktualisiert.
Details der Wechselwirkung zwischen FHEM und MySensors
Vergabe der NodeID
Die Vergabe der NodeID kann entweder im einzelnen Sketch erfolgen oder automatisiert. Dabei vergibt FHEM in der Regel fortlaufend Nummern ab 100. Die erste Node mit automatischer Nummernvergabe ist daher in der Regel das Device MYSENSORS_100.
![Info blue.png](/w/images/thumb/7/7e/Info_blue.png/40px-Info_blue.png)
Fehlende Sensor-Typen und Readings
Für Anfänger ist zu empfehlen, nur Typen und Variablen zu nutzen, die in der 10_MYSENSORS_DEVICE.pm auch hinterlegt sind. Die Angaben dort zu "receives" und "sends" sind aus der Sicht der Node gemeint. Gibt es einzelne Sensor-Typen oder Readings (noch) nicht, gibt es folgende Möglichkeiten:
- Noch nicht vorhandene Typen kann man umgehen, indem man vergleichbare andere nimmt, also z.B. Wasser- statt Gaszähler (Stand: 11/2015)
- Fehlende Readings können auch
- in die 10_MYSENSORS_DEVICE.pm manuell eingepflegt werden, das automatische Anlegen geht dann aber ggf. bei einem Update wieder verloren
- manuell, z.B.
attr MYSENSOR_99 mapReading_ir_send3 3 ir_send
Ist das Reading einmal angelegt, wird es auch automatisch befüllt, sobald die Node einen entsprechenden Wert sendet.
Austausch von Variablen oder Texten
Es ist möglich, Informationen auch bidirektional zwischen FHEM und den Nodes auszutauschen. Dies ermöglicht z.B. die Ansteuerung von Displays oder die Konfiguration von FHEM aus. Hierzu ist es am einfachsten, ein oder mehrere S_CUSTOM-Child zu präsentieren, die jeweils bis zu 5 Variablen ermöglichen. Die Zuordnung innerhalb der Node zu internen Variablen erfolgt dann über die Auswertung der Messages entsprechend der [[[ChildID und der Variablennummer].
OTA
MySensors unterstützt zwar grundsätzlich OTA-updates, man muß dafür aber vorübergehend einen anderen Controller als FHEM einsetzen (Stand 11/2016). Ein Howto ist Topic=59388.0|LinkText=hier zu finden.
Links, Tricks, Kniffe und Erfahrungen
Wichtige Links
- Mehrere Sensoren (Children) kann man recht einfach an einen einzigen Arduino anschließen und ist dabei nur durch die Größe des Speichers begrenzt. Die Vorgehensweise erläutert dieses [Beispiel] .
EEPROM
Die Nodes speichern einen Teil ihrer Einstellungen im sog. EEPROM. Dazu gehören z.B. die NodeID, der letzte bekannte "nächste" Punkt im Netzwert (RepeaterID) oder der Zustand von Relais. In der Regel ist nur die NodeID problematisch und kann beim flashen per Sketch auf einen anderen als den bisherigen Wert gestellt werden. Wer dennoch das EEPROM löschen möchte, muß den MySensor-Lösch-Sketch nehmen, der nicht "0000..." ins EEPROM schreibt wie der Arduino-Standard-Lösch-Sketch, sondern "FFFF...".
Funk-Themen
Viele berichtete Probleme bei der Einrichtung von MySensors-Netzwerken haben ihren Ursprung in einer unzureichenden Funkverbindung.
![Info blue.png](/w/images/thumb/7/7e/Info_blue.png/40px-Info_blue.png)
Abhilfemaßnahmen
- Einen bzw. mehrere [Kondensatoren] einlöten. Es sind auch fertige Module erhältlich, die diese Bauteile und einen Spannungsregler bereits enthalten, auf die der NRF mit einem Stecksockel aufgesteckt wird.
- Einen anderen Kanal wählen; die verwendeten Frequenzen liegen im b/g-WLAN-Bereich, so dass wechselseitige Störungen möglich sind. In Deutschland sind die Kanäle bis 84 erlaubt.
- Ein allgemeiner Guide zur Verwendung der nrf24l01+-Module ist [hier] zu finden.
- Für das Gateway empfielt es sich, ein Modul mit externer Antenne zu verwenden (NRF24L01+PA+LNA Antenna version).
- Einstellen des richtigen PA_LEVEL_...s: Insbesondere der Standardsketch für das serielle Gateway definiert diesen als LOW, was korrekt ist, wenn der interne Spannungsregler des Arduino verwendet ist. Besser ist es, die benötigten 3,3V mittels eines seperaten Spannungsreglers zu erzeugen und dann den PA_LEVEL_MAX einzustellen.
- Funkstrecken lassen sich recht unkompliziert mit Repeatern überbrücken. Dieser muß nicht zwingend eine eigene Node sein. Jede (sinnvollerweise nicht Batterie-gespeiste) Node kann per
#define MY_REPEATER_FEATURE
zum Repeater gemacht werden. - Sonstige Vorschläge ohne Erfolgsgarantie, aber mit Unterhaltungswert:
Ablauf des Starts einer Node
Beim Start durchlaufen alle Nodes nacheinander bestimmte vordefinierte Programmroutinen in folgender Reihenfolge:
MySensors 2.0.0
- setup()
- presentation()
- loop()
MySensors 2.0.1-beta
- before()
- presentation()
- setup()
- loop()
Im Detail
Dieser Ablauf ermöglicht, die Arduino-Pins vorzukonfigurieren und angeschlossenes Equipment an der für den Programmablauf richtigen Stelle zu initialisieren. Dies ist u.U. wichtig, da
- eine Node nicht in loop() geht, solange die presentation() nicht erfolgreich war (also solange der Controller nicht verfügbar ist). Eine Failsafe-Initialisierung von Schnittstellen muß demnach in before() (2.0.1) erfolgen.
- die Initialisierung anderer SPI-Hardware auf einem gemeinsamen Bus mit den NRF-Modulem vor der presentation() erfolgen muß.
Beispiel-Sketche
- [Mehrfachsensor], allerdings noch für MySensors Vers. 1.5.4
- Bidirektionale Topic=26807|msg=449776|LinkText=Infrarot-Fernbedienung aus FHEM raus iVm. remotecontrol
- mehrere [Dallas-Temperatursensoren] auf einem Bus eindeutig erkennen
- [Display] ansteuern
--Beta-User (Diskussion) 16:19, 16. Nov. 2016 (CET)