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