LWT Online/Offline Erkennung

Die alternative Firmware für ESP8266 based devices

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
seppy
Beiträge: 731
Registriert: 24. Sep 2015 20:25
Answers: 4
Wohnort: Bonn

LWT Online/Offline Erkennung

Beitrag von seppy »

Hallo Zusammen,
in verschiedenen Tgreads ist das Thema immer mal wieder angesprochen worden, aber ich konnte mir bisher keine zufriedenstellende Gesamtlösung bilden.
Herrausforderung:
Ich habe inzwischen an sehr vielen Großverbrauchern (Weiße Ware, Kühlschrank, etc.) schaltbare Strommesssteckdosen die ich mit Tasmota beglückt habe. Das funktioniert auch wunderbar ... Jetzt ist es passiert, dass eines der Kinder die Steckdose meines Bier!!kühlschranks in der Garage ausgesteckt hat, weil der junge Mann sein ferngesteuertes Auto laden wollte. Ich bekomme davon natürlich nichts mit ... Folge ... Bier warm.

Lösungsansatz:
Im Konzept von MQTT gibt es ja das Last Will Testament (LWT) Konzept, was meinem Verständnis nach genau für solche Dinge gedacht ist. Ich verstehe aber noch nicht wie ich das konfiguriere?. Ich habe einen Testaufbau mit einer weiteren Zwischensteckdose gemacht, habe ein Channel auf das LWT Topic gesetzt und ein entsprechendes String Item angelegt. Ich dachte wenn ich jetzt die Dose einfach ausstecke müsste irgendwann der Broker eine LWT Message absetzen. Aber wann? es passiert leider nichts.

Hier gibt es doch einige die schon lange mit MQTT arbeiten und mir evtl. auf die Sprünge helfen können.
Danke und Grüße,
Seppy
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren

- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung

Benutzeravatar
udo1toni
Beiträge: 3963
Registriert: 11. Apr 2018 18:05
Answers: 40
Wohnort: Darmstadt

Re: LWT Online/Offline Erkennung

Beitrag von udo1toni »

LWT funktioniert folgendermaßen:

Schritt 1: Das Gerät meldet sich beim Broker an.
Schritt 2: es übermittelt das LWT topic und die Information, dieses (z.B.) auf OFFLINE zu setzen.
Schritt 3: Das Gerät setzt das Topic auf ONLINE.

Wenn nun die Verbindung zwischen Broker und Client verloren geht, setzt der Broker unmittelbar das entsprechende Topic auf OFFLINE, stellvertretend für das Gerät, welches das ja nicht mehr selbst tun kann.
Welche Werte hinterlegt werden, ist nicht definiert, da könnte auch Humdidumm oder 0815 stehen :)
Wichtig ist aber, dass das Tasmota Gerät das LWT setzt, das sollte regulär der Fall sein. Das LWT Topic wäre tele/%topic%/LWT, die Werte Online und Offline. Das LWT sollte auch auf Retain stehen.
Entsprechend müsste ein Channel in openHAB dafür so aussehen:

Code: Alles auswählen

Type switch: lwt "LWT" [ stateTopic="tele/topic/LWT",on="Online",off="Offline" ] 
Prüfe über mqtt spy oder ein anderes Tool, ob Du das LWT zu Gesicht bekommst.

Benutzeravatar
seppy
Beiträge: 731
Registriert: 24. Sep 2015 20:25
Answers: 4
Wohnort: Bonn

Re: LWT Online/Offline Erkennung

Beitrag von seppy »

Hm, ich dachte so hätt eich das gelöst. Dann muss ich heute abend mal in Ruhe schauen.
Melde mich wieder.
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren

- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung

Benutzeravatar
peter-pan
Beiträge: 890
Registriert: 28. Nov 2018 12:03
Answers: 6
Wohnort: Schwäbisch Gmünd

Re: LWT Online/Offline Erkennung

Beitrag von peter-pan »

...das geht ja gar nicht, wenn das "wichtigste" Haushaltgerät nicht mehr unsere "Grundnahrungsmittel" in der richtigen Kühlung halten kann. :o

Im Prinzip hat ja Udo alles schon gesagt.

Zur Veranschaulichung hier mal einBeispiel aus meinem SetUp. Es ist zwar ein Basic, aber die anderen funktionieren ja eh gleich.

.items

Code: Alles auswählen

Group:Switch:OR(OFF,ON)   gLWT           "Tasmotas Online [%s]"                             <siren1>                

//192.168.178.xx                         basic-03                                           
Switch    Sonoff_Basic_03                "Schreibtischlampe Büro [MAP(de.map):%s]"          <tablelamp>             (EG_Buro,gSonoff,gLight)     { channel="mqtt:topic:hans:basic03:power" }
Number    Sonoff_Basic_03_RSSI           "Schreibtischlampe Büro RSSI [%s]"                 <qualityofservice>      (EG_Buro,gRSSI)              { channel="mqtt:topic:hans:basic03:rssi" } 
String    Sonoff_Basic_03_Version        "Schreibtischlampe Version 31[%s]"                 <sonoff_basic>          (gSonoffs,gVer)              { channel="mqtt:topic:hans:basic03:version" } 
Switch    Sonoff_Basic_03_Unreach        "Schreibtischlampe Ereichbarkeit [%s]"             <siren1>                (EG_Buro,gLWT)               { channel="mqtt:topic:hans:basic03:reachable" }
String    Sonoff_Basic_03_Hardware       "Schreibtischlampe ChipSet 31[%s]"                 <sonoff_basic>          (gSonoffs,gHard)             { channel="mqtt:topic:hans:basic03:hardware" } 
String    Sonoff_Basic_03_IPAddress      "Schreibtischlampe IP-Address [%s]"                <sonoff_basic>          (gSonoffs,gHard)             { channel="mqtt:topic:hans:basic03:ipaddress" } 
.things

Code: Alles auswählen

    Thing topic basic03 "Sonoff Basic 03 Schreibtischlampe" @ "MQTT2" {
    Channels:
        Type switch : power     "Power "                 [ stateTopic="stat/basic_03/POWER", commandTopic="cmnd/basic_03/POWER" ]
        Type number : rssi      "WiFi Signal Strength"   [ stateTopic="tele/basic_03/STATE", transformationPattern="JSONPATH:$.Wifi.RSSI"]
        Type string : version   "Firmware Version    "   [ stateTopic="stat/basic_03/STATUS2", transformationPattern="JSONPATH:$.StatusFWR.Version"]
        Type switch : reachable "Reachable"              [ stateTopic="tele/basic_03/LWT",transformationPattern="MAP:reachable.map" ]
        Type string : hardware  "Chip Set            "   [ stateTopic="stat/basic_03/STATUS2", transformationPattern="JSONPATH:$.StatusFWR.Hardware"]
        Type string : ipaddress "IP Address          "   [ stateTopic="stat/basic_03/STATUS5", transformationPattern="JSONPATH:$.StatusNET.IPAddress"]


//        Type switch : powerx     "Power X"                 [ stateTopic="stat/basic_03/POWER", trigger=true ]  // Trigger Channel; no need to define an item // Test with Channel Event Trigger - test_mqtt.rules
    }
reachable.map

Code: Alles auswählen

Online=ON
Offline=OFF
online=ON
offline=OFF
-=Undefined
Connected=ON
"Connection Lost"=OFF
.rules

Code: Alles auswählen

import org.eclipse.smarthome.model.script.ScriptServiceUtil

rule "gLWT_Logging"

when Member of gLWT changed // to OFF
then
   if(Sonoff_LWT_Logging.state == ON) {
      var GenericItem tempItemName = ScriptServiceUtil.getItemRegistry.getItem(triggeringItem.name.replace("_Unreach","_Version")) as  GenericItem
      logInfo ("sonoff_gLWT_Logging", "Ausgabe-Gerät: "  + triggeringItem.label + ": " +triggeringItem.state.toString + " : " + triggeringItem.name + " Release-Version: " + tempItemName.state.toString)     
    }
end
//===============================================================================================
Die Regel wird getriggert über das Gruppen-Item. (OFF,ON)
Ich habe das LWT-Thing mit einem TransformationPattern umgesetzt (weiss aber nicht mehr warum- wahrscheinlich geklaut :oops: )

Beim Systemstart, wird schon bemerkt, wenn eine Item nicht mehr da ist(in diesem Fall die Schreibtischlampe:

Code: Alles auswählen

2020-02-14 22:15:44.041 [INFO ] [ome.model.script.sonoff_gLWT_Logging] - Ausgabe-Gerät: Deckenlampe York Ereichbarkeit: ON : Sonoff_T1_01_Unreach Release-Version: NULL
2020-02-14 22:15:44.048 [INFO ] [ome.model.script.sonoff_gLWT_Logging] - Ausgabe-Gerät: Schreibtischlampe Ereichbarkeit: OFF : Sonoff_Basic_03_Unreach Release-Version: NULL
2020-02-14 22:15:44.070 [INFO ] [ome.model.script.sonoff_gLWT_Logging] - Ausgabe-Gerät: Steckdose RasPi 3b+ Ereichbarkeit: ON : Sonoff_socket_03_Unreach Release-Version: NULL
...............................................
Das Ganze sieht dann in der SiteMap so aus:
Übersicht:
lwt.jpg
Detail:
lwt-det.jpg
Wenn das Gerät wieder online ist triggert die Rule im Logger

Code: Alles auswählen

2020-02-14 22:40:56.107 [INFO ] [ome.model.script.sonoff_gLWT_Logging] - Ausgabe-Gerät: Schreibtischlampe Ereichbarkeit: ON : Sonoff_Basic_03_Unreach Release-Version: NULL
In deinem Falle wäre es natürlich besser, wenn die Regel beim Rausziehen des Steckers, die Alarmanlage mit Blaulicht anschalten würde, damit man den Temperaturanstieg in Grenzen halten kann. ;)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
seppy
Beiträge: 731
Registriert: 24. Sep 2015 20:25
Answers: 4
Wohnort: Bonn

Re: LWT Online/Offline Erkennung

Beitrag von seppy »

Hi und danke Euch.
Mit dem Gedankenanstoß habe ich es in etwa so gebaut wie Du. Aber ich habe eine "Optimierung" vorgenommen. Ich nutze die regelmäßigen Messages um den Status zu validieren.
Da sich die Devices ja nur nach einem Neustart mit ihrem LWT = Online melden, aber nicht wenn der Broker mal weg war, oder die Netzwerkverbindung einen Hickup hatte, habe ich noch folgenden Helfer gebaut:

Auszug things

Code: Alles auswählen

Type number : uptimesec
            "UptimeSec"
            [stateTopic="tele/mqttclient_smartplug8/STATE", transformationPattern="JSONPATH:$.UptimeSec" ]
Auszug items

Code: Alles auswählen

Number SmartPlug8UPTIMESEC 
    (gMQTTDeviceUPTIMESEC)
    {channel="mqtt:topic:ThgSmartPlug8:uptimesec"}
Passende Regel:

Code: Alles auswählen

rule "Event_MQTTUnreachedUpdate"
when
	Member of gMQTTDeviceUPTIMESEC changed
then
	logDebug("HomeBox.Event_MQTTUnreachedUpdate", "Item {} hat ausgelöst",triggeringItem.name)
    val replace = newArrayList("UPTIMESEC","ENERGYCurrent","ENERGYToday","ENERGYTotal","StateRes","Res","CurState","State")
    var trigger = null
    replace.forEach[x|
		if (triggeringItem.name.toString.trim().contains(x)){
			logDebug("HomeBox.Event_MQTTUnreachedUpdate", "Ersetze {} durch UNREACH",x)
        	trigger = triggeringItem.name.toString.trim().replaceAll(x,"UNREACH")
		}
    ]
	if (trigger !== null) {
		val mqttItem = ScriptServiceUtil.getItemRegistry?.getItem(trigger)
		logDebug("HomeBox.Event_MQTTUnreachedUpdate", "Item {} in Registry gesucht",mqttItem.name)
		// Setze den UnreachedState auf OFF da das Thing gesehen wurde
		if (mqttItem.state != OFF) {
			logInfo("HomeBox.Event_MQTTUnreachedUpdate", "Item {} --> Setze entsprechendes Thing via {} Online",trigger,mqttItem.name.toString)
			mqttItem.sendCommand(OFF)
		}
	}
end 
In der Regel sind noch die Optionen für weitere Trigger. Die habe ich noch nicht zurückgebaut.
Gibt es Kommentare, bzw. andere Lösungen für das Problem?

Grüße,
Seppy
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren

- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung

Benutzeravatar
peter-pan
Beiträge: 890
Registriert: 28. Nov 2018 12:03
Answers: 6
Wohnort: Schwäbisch Gmünd

Re: LWT Online/Offline Erkennung

Beitrag von peter-pan »

Das hört sich interessant an. Komme aber heute nicht mehr dazu, es genauer anzuschauen. Ich werde mich mal im Laufe der nächsten Woche in das Thema vertiefen.

Gruss - Peter

Benutzeravatar
udo1toni
Beiträge: 3963
Registriert: 11. Apr 2018 18:05
Answers: 40
Wohnort: Darmstadt

Re: LWT Online/Offline Erkennung

Beitrag von udo1toni »

seppy hat geschrieben: 16. Feb 2020 14:38 Da sich die Devices ja nur nach einem Neustart mit ihrem LWT = Online melden, aber nicht wenn der Broker mal weg war
Wenn der Client den Kontakt zum Broker verliert und wieder erlangt, muss er das LWT erneut setzen. Ist das nicht der Fall, dann ist das ein Fehler in der Implementation.
Der Client muss davon ausgehen, dass der Kontakt zum Broker nur für den Client verloren gegangen war und somit der Broker das LWT gesetzt hat.

Benutzeravatar
seppy
Beiträge: 731
Registriert: 24. Sep 2015 20:25
Answers: 4
Wohnort: Bonn

Re: LWT Online/Offline Erkennung

Beitrag von seppy »

Dann vermute ich, dass die Tasmota Implementierung an der Stelle nicht sauber ist. Denn genau dieses Verhalten hatte ich bei mir.
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren

- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung

Antworten