FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Torxgewinde am 18 Mai 2020, 20:47:39

Titel: Espurna auf Shelly One in FHEM einbinden & LWT - Last Will sinnvoll nutzen
Beitrag von: Torxgewinde am 18 Mai 2020, 20:47:39
Hallo,
Espurna ist neben Tasmota und ESPHome eine beliebte Firmware für ESP8266-basierte Elektronik. Wie ich ein Shelly 1 in FHEM einbinde, beschreibe ich hier. Die Kommunikation läuft über MQTT, einen Broker sollte man bereits haben.

Wichtig ist, dass man mit dem MQTT Broker eine Verbindung aufbauen kann. Dies gelingt mit MQTT2_CLIENT:
defmod Mosquitto MQTT2_CLIENT <IP-Adresse-vom-Broker>:8883
attr Mosquitto SSL 1
attr Mosquitto icon mqtt
attr Mosquitto username <Nutzername>


Der Broker sollte mit SSL und einem komplizierten Passwort konfiguriert sein, damit der Dienst nicht durch triviales Abhören der Daten gestört werden kann. MQTT2_CLIENT muss auch das Passwort eingegeben bekommen. Das Passwort taucht nicht in der FHEM-Definition auf.

In dem Shelly One gibt man die MQTT-Broker Details (Broker-Adresse, Port, Nutzername und Passwort) ein. Leider ist weder bei Espurna noch bei Tasmota TLS/SSL in den vorkompilierten Binaries enthalten. Will man TLS, muss man selbst kompilieren und soviele Features deaktivieren bis genügend RAM zur Verfügung steht. Als Root-Topic habe ich "Bla/{hostname}" definiert, der Hostname ist "Kellerflurleuchte".
WICHTIG: in dem Feld "MQTT Keep Alive" gibt man "10" ein. Dies bedeutet, dass Espurna alle 10 Sekunden ein Testpaket zwischen Broker und Espurna-Gerät hin- und hersendet. Wird der Shelly einfach abgeschaltet, wird das vom Espurna-Gerät definierte Testament vom Broker veröffentlicht. Dies LWT (=Last Will) ist der Schlüssel, damit man das Espurna-Gerät zeitnah als "offline" kennzeichnen kann.

Zurück zu FHEM. Der Shelly One wird in FHEM mit einem MQTT2_DEVICE abgebildet:
defmod Kellerflurleuchte MQTT2_DEVICE
attr Kellerflurleuchte IODev Mosquitto
attr Kellerflurleuchte devStateIcon on:on off:off offline:light_question
attr Kellerflurleuchte devicetopic Bla/Kellerflurleuchte
attr Kellerflurleuchte readingList $DEVICETOPIC/relay/0:.*0 { state=>"off" }\
$DEVICETOPIC/relay/0:.*1 { state=>"on" }\
$DEVICETOPIC/status:.*0 { state=>"offline" }\
$DEVICETOPIC/uptime:.* { uptime=>$EVENT }
attr Kellerflurleuchte setList on $DEVICETOPIC/relay/0/set 1\
off $DEVICETOPIC/relay/0/set 0


Das Besondere:
Der State bildet drei Zustände ab: On, Off, Offline

Als Anhang ein Beispiel, wie es aussieht wenn der Shelly One einfach stromlos geschaltet wird.