Seite 1 von 1

Status von Homie-Device abfragen

Verfasst: 29. Apr 2020 16:19
von super-mario
Hallo an alle Forumbenutzer,
gibt es eine möglichkeit den Status eines Homie-MQTT-Devices abzurufen?
Ich habe ein WeMos mit der Homie-Konvention (3.0) erstellt der über Mosquitto seine Daten an OpenHab 2.5.4 sendet.
Das funktioniert auch alles so weit.
Ich habe die Werte in PaperUI, und auch auf dem BasicUI über .items und .sitemap konfiguriert.
Wie schon gesagt würde ich mir gerne den Status der Verbingung in meiner .sitemap anzeigen lassen. Ich kann den Status in der PaperUI unter Configuration - Things (grün "ONLINE") sehen aber wie komme ich an diesen Wert ran?
Meine vermutung ist, dass es der Werte "homie/WeMosSensor2/$state" ist. Auf den kann ich aber nicht zugreifen. Vermutlich sind alle Werte mit einem $-Zeichen nicht öffentlich!

Vielen Dank für die Hilfe

Re: Status von Homie-Device abfragen

Verfasst: 29. Apr 2020 18:17
von udo1toni
Nein. Es geht hier ja um einen openHAB-internen Wert. Du kannst das in einer Rule abfragen, der passende Trigger lautet

Code: Alles auswählen

Thing <thingUID> changed [from <status>] [to <status>]
Eine entsprechende Rule wird also triggern, wenn sich der Status des Things ändert. Innerhalb der Rule könntest Du dann z.B. ein Item auf ON oder OFF setzen, welches mit keinen weiteren Channels verknüpft ist.

Man muss allerdings dazu sagen, dass die Anzeige ONLINE/OFFLINE nicht unbedingt zuverlässig ist. In mqtt gibt es einen anderen Mechanismus, das ist das LWT (Last Will & Testament) Topic. Im Wemos ist das LWT vermutlich mit "offline" belegt und anschließend sendet das Wemos auf diesem Topic ein online.
Solange der Broker noch Kontakt zum Wemos hat, also Telegramme empfängt, passiert nichts. Sobald der Kontakt verloren geht, setzt der Broker das LWT für diesen Wemos auf offline, weil das "der letzte Wille" ist. Soweit ich weiß, unterstützen alle Implementationen von mqtt diesen Weg, ob nun Tasmota, ESPeasy...

Re: Status von Homie-Device abfragen

Verfasst: 30. Apr 2020 11:14
von super-mario
Vielen Dank für die schnelle Antwort.
Ich hab es hinbekommen!
Hier mal meine (Test)-Code aus der Test.rules Datei als Beispiel:

Code: Alles auswählen

rule "Device Contact"
when
  Thing "mqtt:homie300:FirstMosquittoBroker:WeMosSensor2" changed
then
    var Status = getThingStatusInfo("mqtt:homie300:FirstMosquittoBroker:WeMosSensor2").getStatus()
		logInfo("Test.Contact.event", "WeMos " + Status)
		if (Status.toString() == "OFFLINE")	{
			logInfo("Test.Contact.event", "WeMos is OFFLINE")
			OG_Office_Contact.sendCommand(OFF)
		}
		else {
			logInfo("Test.Contact.event", "WeMos ONLINE")
			OG_Office_Contact.sendCommand(ON)
		}
end 
Ich hatte mir in der Zwischenzeit noch eine zweite Bridge in einer Test.things Datei erstellt. Mit dieser kann ich nun direkt den auf den WeMos-Homie /./$state zugreifen. Der liefert mir dann "lost, init, ready", welche ich mir dann auch irgendwie zuorden könnte.
Beide Lösungen (müssen) auf dem LWT beruhen, da sie bei Verbindungsverlust triggern.

Für mich ich die Sache gelöst und kann geschlossen werden.
Nochmal vielen Dank