MQTT Nachricht in Zeitstempel umformen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
dyfcom
Beiträge: 14
Registriert: 27. Jan 2019 22:02
Answers: 0

MQTT Nachricht in Zeitstempel umformen

Beitrag 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

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

Re: MQTT Nachricht in Zeitstempel umformen

Beitrag 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.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

dyfcom
Beiträge: 14
Registriert: 27. Jan 2019 22:02
Answers: 0

Re: MQTT Nachricht in Zeitstempel umformen

Beitrag 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

dyfcom
Beiträge: 14
Registriert: 27. Jan 2019 22:02
Answers: 0

Re: MQTT Nachricht in Zeitstempel umformen

Beitrag 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

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

Re: MQTT Nachricht in Zeitstempel umformen

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Rudi
Beiträge: 32
Registriert: 22. Sep 2019 18:52
Answers: 0

Re: MQTT Nachricht in Zeitstempel umformen

Beitrag von Rudi »

Danke, habe 2 Stunden gesucht und deine Lösung hat es sofort zum Erfolg gebracht

Antworten