Seite 1 von 1

rule für Berechnung Zeitdifferenz

Verfasst: 1. Jun 2023 13:23
von jensilein
Hallo,
ich möchte mit der folgenden rule die Differenz zwischen zwei Zeitpunkten in Minuten berechnen.

Code: Alles auswählen

rule "Timedifference"
when 
   Time cron 	 "0 0/1 * 1/1 * ? *"  
then	
val oldDate = new DateTime((Weather_LastUpdate.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli)
val newDate = new DateTime(now())
var double diff = (newDate.millis - oldDate.millis)/60000
TimeDifference.postUpdate(diff)
end
Leider bekomme ich da ständig diese Fehlermeldung. Würde mich sehr über Hilfe bei der Lösungsfindung freuen.

Code: Alles auswählen

2023-06-01 13:18:45.505 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'last_weather_update-1' failed: An error occurred during the script execution: null in last_weather_update

Re: rule für Berechnung Zeitdifferenz

Verfasst: 1. Jun 2023 15:59
von udo1toni
Wie ist Weather_LastUpdate definiert?
Mein Vorschalg wäre folgender:

Code: Alles auswählen

rule "Timedifference"
when
    Time cron "0 * * * * ?" //einmal pro Minute, zur vollen Minute
then
    if(!(Weather_LastUpdate.state instanceof DateTimeType)) {
        logWarn("calcDiff","Weather_LastUpdate.state liefert falschen Datentyp: {}",Weather_LastUpdate.state)
        return;
    }
    val Long    lOld = (Weather_LastUpdate.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli
    val Long    lNew = now().toInstant.toEpochMilli
    var Integer diff = ((lNew-lOld)/60000).intValue
    TimeDifference.postUpdate(diff)
end
Du musst nicht umständlich DateTime Objekte erzeugen, Dich interessiert ja nur die Differenz (in vollen Minuten), das ist dann ein Integer Wert - könnte man natürlich auch als Float berechnen, aber Bruchteile von Minuten werden gewöhnlich nicht als Dezimalzahl angegeben. Man könnte stattdessen TimeDifference als String definieren und die Differenz als Text in Minuten und Sekunden ausgeben.

Re: rule für Berechnung Zeitdifferenz

Verfasst: 1. Jun 2023 16:28
von jensilein
Hallo, das item Weather_LastUpdate ist folgendermaßen definiert:

DateTime Weather_LastUpdate "Zeitpunkt letztes Update Wetterdaten" {channel="openweathermap:weather-and-forecast:OWM_Bridge:local:current#time-stamp"}

Re: rule für Berechnung Zeitdifferenz

Verfasst: 1. Jun 2023 16:40
von jensilein
Vielen Dank für die Anregung und Hilfe. Die rule funktioniert aus dem Stand genau so, wie ich es mir gewünscht hatte.