Seite 1 von 1

MQTT Nachricht in Zeitstempel umformen

Verfasst: 18. Jul 2019 15:51
von dyfcom
Hallo,

Meine Wetterstation sendet über mqtt ein "true" wenn sie online geht, um die Sensordaten zu übermitteln, wenn sie wieder in den Ruhemodus sendet sie ein "false".

Ich möchte gerne in meiner Sitemap die letzte Aktualisierung anzeigen lassen, also von wann die Daten sind.

Ich bin ganz ehrlich, ich weiß nicht wie genau ich daran gehe, hab jetzt 2 Stunden rumprobiert und brauche Hilfe :roll:

Also ich würde es über eine rule machen, weiß aber nicht genau was ich dafür brauche. Ich bin mir auch nicht sicher, wo ich die korrekte Uhrzeit herbekomme (Über DateTime?)

Code: Alles auswählen

rule "lastupdate"
when
	Item Wetterstation_Status changed [from false] [to true]
then
    	val Wetterstation_Zeit = ???
end

Re: MQTT Nachricht in Zeitstempel umformen

Verfasst: 18. Jul 2019 16:38
von peter-pan
Probiere einfach mal folgendes:

Code: Alles auswählen

rule "lastupdate_test"
when
	Item Wetterstation_Status changed
then
    logInfo("test update", "Status Wetterstation " + Wetterstation_Status.state)
end
Dann kannst im Log Viewer gleich sehen, was für ein Status tatsächlich vom Item empfangen wird. und damit kannst du dann wieder in der when-Bedingung arbeiten.

Re: MQTT Nachricht in Zeitstempel umformen

Verfasst: 18. Jul 2019 17:01
von dyfcom
Moin,

also Log sagt mir dann, dass sich der Status von false nach true bzw von true nach false ändert.

Code: Alles auswählen

[vent.ItemStateChangedEvent] - Wetterstation_Status changed from false to true
 [INFO ] [e.smarthome.model.script.test update] - Status Wetterstation true 
Weiß jetzt nicht genau, wie ich in zb ein neues "Item Wetterstation_Zeit" die Uhrzeit reingeschrieben bekomme

Re: MQTT Nachricht in Zeitstempel umformen

Verfasst: 18. Jul 2019 17:42
von dyfcom
Hab es hinbekommen:
-ntp Binding installiert und konfiguriert

in .items:

Code: Alles auswählen

DateTime Datum  "[%1$tA, %1$td.%1$tm.%1$tY]"                                                                                                             { channel="ntp:ntp:local:dateTime" }
DateTime Zeit   "[%1$tH:%1$tM]"                                                                                                                          { channel="ntp:ntp:local:dateTime" }

String   Wetterstation_Status               "Status[%s]"                     <network>       (Outside, gStatus)          ["Status"]                      {channel="mqtt:topic:smarthome:sensoren:wetterstation_Status"}
String   Wetterstation_Zeit                 "Zeit [%s Uhr]"                  <network>       (Outside, gZeit)            ["Status"]   



Zeit_aenderung.rule:

Code: Alles auswählen

rule "Wetterstation_Zeit"
when
	Item Wetterstation_Status changed
then
    Wetterstation_Zeit.sendCommand(Zeit.state.format("%1$tH:%1$tM"))
end

Re: MQTT Nachricht in Zeitstempel umformen

Verfasst: 18. Jul 2019 20:19
von udo1toni
Das NTP Binding sollte man ohnehin installieren :) aber für einen Zeitstempel braucht es das nicht:

Code: Alles auswählen

DateTime lastWheather "Letzte Aktualisierung um [%1$tT]"
Switch Wetterstation_Status "Status [%s]" <network> (Outside, gStatus) ["Status"] {channel="mqtt:topic:smarthome:sensoren:wetterstation_Status"}

Code: Alles auswählen

rule "Sendezeit anzeigen"
when
    Item Wetterstation_Status changed to ON
then
    lastWheather.postUpdate(new DateTimeType(now.toString))
end
Da hier ein logisches Signal ausgewertet werden soll, bietet es sich an, dieses auch als logisches Signal zu speichern, nicht als String.
Da ein Zeitstempel verwendet werden soll, bietet es sich an, diesen in einem DateTime Item zu speichern, nicht als String.
Strings sind bäh, es sei denn, man möchte einen String darstellen!

Eventuell muss auch der Channel Typ angepasst werden, damit Switch funktioniert.
Falls der Status in der UI angezeigt werden soll, so nimmt man dafür ein Text Widget, damit keine Schaltfläche gemalt wird.

Re: MQTT Nachricht in Zeitstempel umformen

Verfasst: 26. Okt 2019 19:06
von Rudi
Danke, habe 2 Stunden gesucht und deine Lösung hat es sofort zum Erfolg gebracht