Bei immer mehr MQTT Devices wie diese hier z.B. *D1 Mini*, *NoceMCU ESP-12F* oder *WiFi Steckdosen* die ich einsetze, müssen die Geräte auch überwacht werden und bei Fehler (Offline) bzw. Ausfall möchte ich gerne informiert werden. Wie ich das umgesetzt habe, habe ich euch hier mal dokumentiert.
Methode 1 – LWT (Last Will and Testament):
Hierbei nutzen wir die implementierte Funktion von MQTT und zwar LWT (Last Will and Testament). Hierbei wird automatisch eine Nachricht, in dem Namen des Clients, vom Broker aus veröffentlicht, wenn der Client nicht mehr erreichbar ist. Also eine Art Monitoring, die dafür genutzt werden kann, um openHAB die Infos zu übergeben und eine Benachrichtigung zu bauen. Hier mal ein Beispiel:
Das entspreche Thing (.things) dafür ergänzen:
Bei Tasmota sieht es z.B. so aus:
Type string : lwt "LWT" [ stateTopic="tele/tasmota_2A321B/LWT" ]
Bei ESPHome Devices kann es z.B. so aussehen:
Type switch: fuellung_lwt "LWT" [ stateTopic="BrunnenSonde/status/LWT",on="Connected",off="Disconnected" ]
Das entsprechende Item (.items) dafür ergänzen:
String KU_SchuKo_Spuehlm_Reachable "Spühlmaschine LWT" <siren> (Unreach_Group_LWT) {channel="mqtt:topic:mqttbroker:tasmota_2A321B:lwt"}
Switch KE_BrunnenSonde_fuellung_lwt "Brunnen Füllhöhe LWT" <siren> (Unreach_Group_LWT) {channel="mqtt:topic:mqttbroker:BrunnenSonde:fuellung_lwt"}
Und die Gruppe nicht vergessen:
Group Unreach_Group_LWT
Nun noch die passende Rule (.rules) dafür erstellen oder ergänzen:
rule "Unreach/LWT Benachrichtigung"
when
Member of Unreach_Group_LWT changed
then
if(triggeringItem.state == OFF || triggeringItem.state == "Offline") {
logInfo("geraetestatus.rules", "Ein Smarthome Geraet kann nicht erreicht werden, bitte pruefen: {}",triggeringItem.name)
sendNotification("xx@xx.de", "Ein Smarthome Geraet kann nicht erreicht werden, bitte prüfen: " +triggeringItem.name)
}
end
Methode 2 – Expire:
Leider lief die LWT Variante bei mir nicht immer zuverlässig. Ich kann leider nicht genau sagen warum, aber Tasmota Geräte wurden als Offline angezeigt, obwohl diese Erreichbar waren. Deshalb habe ich die „Expire“ Funktion von openHAB dafür genutzt, um eine entsprechende Benachrichtigung zu erstellen. Hierzu sagt man bei den Items das wenn sich der Status innerhalb X Sekunden/Minuten/Stunden/Tage nicht ändert, dann soll diese z.B. das Item auf 0 setzen. Weitere Infos hierzu findet ihr bei openHAB: https://www.openhab.org/docs/configuration/items.html#parameter-expire
Das entspreche Thing (.things) dafür ergänzen:
Ich habe hierfür die Uptime Infos genommen, man kann da aber varrieren, wichtig ist das die Infos aktualisiert werden:
Bei Tasmota z.B.
Type number : uptime [stateTopic="tele/tasmota_2A321B/STATE", transformationPattern="JSONPATH:$.UptimeSec"]
Das entsprechende Item (.items) dafür ergänzen:
Wir nutzen hierbei die Expire Funktion von openHAB, die wir hier am Ende ergänzen:
Number:Time KU_SchuKo_Spuehlm_Uptime "Uptime [%.1f s]" (Uptime_Group_Tasmota) {channel="mqtt:topic:mqttbroker:tasmota_2A321B:uptime", expire="1h,state=0"}
Und die Gruppe nicht vergessen:
Group Uptime_Group_Tasmota
Nun noch die passende Rule (.rules) dafür erstellen oder ergänzen:
rule "Uptime Benachrichtigung"
when
Member of Uptime_Group_Tasmota changed
then
if(triggeringItem.state == 0|s){
logInfo("geraetestatus.rules", "Ein Smarthome Geraet kann nicht erreicht werden, bitte pruefen: {}",triggeringItem.name)
sendNotification("xx@xx.de", "Ein Smarthome Geraet kann nicht erreicht werden, bitte prüfen: " +triggeringItem.name)
}
end