ich quale mich seit Tagen mit einem - bestimmt banalen - Problem.
Ich habe - gefühlt - auch schon alle Ansätze aus allen Foren dieser Welt versucht. Das Thema ist ja alles andere als neu aber bei funktioniert es irgenwie nicht.
Bei mir läuft openHAB 2.5.12.
Ich habe mehrere Tasmota POW im einsatz die den Stromverbrauch des angeschlossenen Geräte messen und aufzeichenen.
Nun möchte ich, dass mir die Dauer der Messung in Tagen angezeigt wird.
Dazu gibt Tasmota einen MQTT-String aus:
Code: Alles auswählen
2022-04-07T18:22:28
Code: Alles auswählen
rule "Beginn der Messung Tasmota 042"
when
Time cron "*/30 * * * * ?" or //nur während der Testphase
Item Tasmota042_Dunstabzug_Messbeginn_RAW received update or
Item Tasmota042_Dunstabzug_Messbeginn_RAW changed
then
val DateTimeType Tasmota042_Dunstabzug_Messbeginn_DateTime = DateTimeType.valueOf(Tasmota042_Dunstabzug_Messbeginn_RAW.state + ".000+0200") //umwandeln in DateTime
Tasmota042_Dunstabzug_Messbeginn.postUpdate(Tasmota042_Dunstabzug_Messbeginn_DateTime.format("%1$tA, %1$td. %1$tB %1$tY, %1$tH:%1$tM Uhr")) //lesbares Format für die Anzeige in openHAB
end
Code: Alles auswählen
Donnerstag, 07. April 2022, 18:22 Uhr
Alle bisherigen Versuche sind leider ohne Erfolg gewesen.
Keine Ahnung ob ein Import fehlt oder ich einfach die falschen Funktionen ansetzte.
Teilweise versuche ich einfach nur schon mal eine Differenz in Millisekunden zu erhalten.
Dazu habe ich erstmal die Systemzeit in ein DateTime-Item gelegt:
Code: Alles auswählen
//Jetzt minütlich in DateTime SystemZeit_Jetzt speichern
rule "Jetzt als Variable"
when
Time cron "0 * * * * ?"
then
val DateTimeType DateTime_Jetzt = (new DateTimeType())
SystemZeit_Jetzt_1Min.postUpdate(DateTime_Jetzt)
end
Nun habe ich folgendes getestet:
Code: Alles auswählen
val Tasmota042_start = Tasmota042_Dunstabzug_Messbeginn_DateTime.zonedDateTime
val Tasmota042_end = SystemZeit_Jetzt_1Min.previousState(true,"influxdb").timestamp
Tasmota042_Dunstabzug_Messdauer.postUpdate(Duration.between(Tasmota042_start, Tasmota042_end).toMillis())
Code: Alles auswählen
val date_1 = Tasmota042_Dunstabzug_Messbeginn_DateTime.zonedDateTime
val date_2 = SystemZeit_Jetzt_1Min.zonedDateTime
//val seconds_between = date_1.until(date_2, ChronoUnit.SECONDS)
//val minutes_between = date_1.until(date_2, ChronoUnit.MINUTES)
val days_between = date_1.until(date_2, ChronoUnit.DAYS)
//val weeks_between = date_1.until(date_2, ChronoUnit.WEEKS)
//val months_between = date_1.until(date_2, ChronoUnit.MONTHS)
//val years_between = date_1.until(date_2, ChronoUnit.MONTHS)
Tasmota042_Dunstabzug_Messdauer.postUpdate(days_between)
Code: Alles auswählen
val date_1 = Tasmota042_Dunstabzug_Messbeginn_DateTime.getStateAs(DateTimeType).zonedDateTime
val date_2 = SystemZeit_Jetzt_1Min.getStateAs(DateTimeType).zonedDateTime
//val seconds_between = date_1.until(date_2, ChronoUnit.SECONDS)
//val minutes_between = date_1.until(date_2, ChronoUnit.MINUTES)
val days_between = date_1.until(date_2, ChronoUnit.DAYS)
//val weeks_between = date_1.until(date_2, ChronoUnit.WEEKS)
//val months_between = date_1.until(date_2, ChronoUnit.MONTHS)
//val years_between = date_1.until(date_2, ChronoUnit.MONTHS)
Tasmota042_Dunstabzug_Messdauer.postUpdate(days_between)
und:
Code: Alles auswählen
val Date1 = new DateTime((Tasmota042_Dunstabzug_Messbeginn_DateTime).zonedDateTime.toInstant.toEpochMilli)
val Date2 = new DateTime((SystemZeit_Jetzt_1Min).zonedDateTime.toInstant.toEpochMilli)
var double diff = (Date2.millis - Date1.millis)/1000
Tasmota042_Dunstabzug_Messdauer.postUpdate(diff)
Erkennt jemand meinen Fehler und kann helfen?
Danke und Gruß
Florian