Robins Blog – Technik und Multimedia

Fhem: Sensoren an Fhem nRF24L01+ Transceiver

Update 09.11.2014 Aktualisierung Blog-Beitrag Gateway-LAN Interface

Update: 01.11.2014 Achtung, es ist ein besseres Modul entwickelt worden, welches auch schon in Fhem eingecheckt ist, ich werde bald einen neuen Blog-Beitrag darüber schreiben.

Update 15.10.2014 Blog-Beitrag erweitert

Jetzt ist möglich auch mit Fhem Daten (Temperaturen, Luftfeuchtigkeit, Aktoren) mit den nRF24L01+ – Modulen zu senden und zu empfangen.

Möglich wurde das erst mit einem Arduino-Gateway-MQTT-Sketch, welcher MQTT-Daten senden und empfangen kann.
Im Fhem-Forum hat der Fhem-Entwickler nTruchsess dann ein Wrapper geschrieben, mit den dann die MQTT Daten gelesen werden können. Und das klappt sehr gut.
Installation Fhem-seitig:
Hier ist es noch etwas holprig zu installieren. Zunächst muss man vom Trunk die kompletten Verzeichnisse /opt/fhem/FHEM/lib/Net installieren. Wichtig: Gebt sofort alle Rechte auf dieses Verzeichnis:

cd /opt/fhem/FHEM/lib
chmod -R 777 Net,dann noch die Rechte/Eigentümer
chown -R fhem:root Net

Jetzt Fhem nochmal neu booten und das Modul 00_MQTT.pm sollte erkannt werden.

In der Fhem-Konfig gibt man dann die Konfiguration vom MQTT-Gateway ein (feste IP) und die einzelnen Devices.

define mqtt MQTT 192.168.178.234:1883
attr mqtt keep-alive 60
define mqtt_Temperaturmodul MQTT_DEVICE
attr mqtt_Temperaturmodul IODev mqtt
attr mqtt_Temperaturmodul alias Temperaturmodul-Test
attr mqtt_Temperaturmodul stateFormat transmission-state
attr mqtt_Temperaturmodul subscribeReading_state MyMQTT/1/0/V_TEMP
define mqtt_Blumen MQTT_DEVICE
attr mqtt_Blumen IODev mqtt
attr mqtt_Blumen stateFormat transmission-state
attr mqtt_Blumen subscribeReading_state MyMQTT/20/0/V_TRIPPED
define mqtt_Distanz MQTT_DEVICE
attr mqtt_Distanz IODev mqtt
attr mqtt_Distanz stateFormat transmission-state
attr mqtt_Distanz subscribeReading_state MyMQTT/21/1/V_DISTANCE
define mqtt_18b20 MQTT_DEVICE
attr mqtt_18b20 IODev mqtt
attr mqtt_18b20 stateFormat transmission-state
attr mqtt_18b20 subscribeReading_state MyMQTT/21/0/V_TEMP

MyMQTT/1/0/V_TEMP, MyMQTT/21/0/V_TEMP könnte bei Euch anders heißen, also drauf achten, was im Serial-Monitor vom Arduino rüberkommt und korrigieren.

Installation MySensors-MQTT-Gateway.
Hier nimmt man den aktuellen Sketch und kopiert ihn auf dem Arduino drauf. Wichtig: Auf die richtige IP für Euer Netzwerk achten und im Sketch die Änderung vornehmen.

Technik MQTT: Die Technik vom „Message Queue Telemetry Transport“-Protokoll ist schon sehr alt und wurde dafür genutzt um Probleme bei den Öl-Pipelines (Leckagen) festzustellen. Vorteil dieses Protokolls ist der geringe Datenaustausch zwischen der Zentrale (Broker) und den einzelen Sensoren. So ist es nicht verwunderlich, das selbst Facebook diese Technik noch benutzt, um die DFÜ-Raten gering zu halten. Wichtig ist vielleicht noch zu wissen, das MyMQTT/20/0/V_TRIPPED oder MyMQTT/21/0/V_TEMP nicht der Sensor gemeint ist, sondern der Kanal, mit dem der Broker mit dem Device kommuniziert. Deshalb kann man nicht nur Daten aus den Sensoren, die sich auf dem gleichen Kanal befinden, lesen, sondern auch schreiben. In unserem Fall könnte der Kanal auch heißen: MyMQTT/Wohnzimmer/Temperatur oder MyMQTT/Wohnzimmer/Luftfeuchte. So kann man natürlich auch Wildcards (+,#) einsetzen um beispielsweise alle Informationen von einem Kanal empfangen, beispielsweise MyMQTT/Wohnzimmer/+ . Hier würde man die Temperatur und Luftfeuchte vom Sensor empfangen. Die Software in mySensors und Fhem ist noch nicht komplett ausgereift, aber man arbeitet dran.

Installation MySensor-Devices
Hier kann man aus der MySensors.org Seite den aktuellen Sketch draufbeamen.

Alle notwendigen Sketches für die Arduinos gibt es bei mySensors.org

Ich habe Euch ein kurzes Youtube-Video gemacht, um die Funktionsweise zu zeigen.

Selber bauen: Die Zutaten

Sensor, je nach Gusto, die folgenden Links führen zu Amazon.de:
Hier ein Testaufbau eines Temperatursensors

Das Gateway mit MQTT-Sketch:
Ich habe dafür einen Arduino Uno R3 mit Ethernet-Shield genommen, weil auf einem Arduino Nano mit ENC28J60-Netzwerk-Shield nicht mehr in den Speicher passte. Die nachfolgenden Links führen zu amazon.de

und natürlich Fhem.

Gateway-LAN (oder auch Seriell): Ich habe hier aus Standard-Komponenten anstatt eines Arduino-UNO einen Arduino Nano genommen und als Netzwerk-Interface einen ENC28J60 mit einem nRF24L01+. Diese habe ich zusammengelötet und noch mit 3 Status-LED (Transmit, Receive und Error) versehen. Alles zusammen habe ich in einem Raspberry Pi Leergehäuse gepackt. Sketch usw. gibt es bei Mysensor.org. Wie das am Ende aussieht, seht ihr hier auf dem Foto.

Die einzelnen Bauteile (Raspberry Pi – Gehäuse, LAN-Interface, Platine, Arduino Nano, nRF24L01+, LEDs) habe ich noch vorrätig, Anfrage im Kommentarfeld genügt!

Serial- und LAN- Gateway für MySensors, mit Status LEDs (Transmit / Receive / Error-Inclusion)

 

Die mobile Version verlassen