i would like to do two “simple” calculations in a rule an would be glad, if someone could help me at this point.
I have already read the topic of comparing and converting dates and times, but the relationships are quite complex.
It would be great, if anyone could help me to finish the rule.
Thanks in advance,
Alex
rule "calculation"
when
Time cron .....
then
var Number Kilometer = 123
var ??? date = 31.12.2022
item1.sendCommand( (date - today) * Kilometer )
item2.sendCommand( ((date - today) * Kilometer ) + 2500 )
end
in a nutshell, you need to translate the var date to zonedDateTime. Today you get with „now“. Also consider to change sendCommand to postUpdate and make sure you send the string to the item .toString . unless you really want to action something with this item.
Now i updated my rule to this, but actually it doesnt work:
rule "BMW G31 Km-Sollwerte errechnen"
when
Time cron "0 0 0 ? * * *" or
Item BMW_G31_Trigger_KM_Calc changed to ON
then
import java.time.temporal.ChronoUnit
val var_bmw_g31_vertragsende = "2022-09-08T00:00:00.000+0200"
val var_bmw_g31_restlaufzeit = now.until(var_bmw_g31_vertragsende, ChronoUnit.DAYS)
val var_bmw_g31_km_tag = 55
val var_bmw_g31_km_soll = var_bmw_g31_restlaufzeit * var_bmw_g31_km_tag
val var_bmw_g31_km_soll_tol = (var_bmw_g31_restlaufzeit * var_bmw_g31_km_tag) + 2500
bmw_g31_km_soll.postUpdate(var_bmw_g31_km_soll)
bmw_g31_km_soll_tol.postUpdate(var_bmw_g31_km_soll)
end
I get the following error message:
20:16:56.932 [ERROR] [.internal.handler.ScriptActionHandler] - Script execution of rule with UID 'bmw-2' failed: The name 'import' cannot be resolved to an item or type; line 29, column 5, length 6 in bmw
20:38:53.607 [ERROR] [.internal.handler.ScriptActionHandler] - Script execution of rule with UID 'bmw-2' failed: An error occurred during the script execution: Could not invoke method: java.time.ZonedDateTime.until(java.time.temporal.Temporal,java.time.temporal.TemporalUnit) on instance: 2021-04-04T20:38:53.605350+02:00[Europe/Berlin] in bmw
I found a solution now, thanks again for your help! There was an issue with the conversion of the dates.
Here is the “final” code, if someone is interested in:
rule "BMW G31 Km-Sollwerte errechnen"
when
Time cron "0 0 0 ? * * *" or
Item BMW_G31_Trigger_KM_Calc changed to ON
then
val String var_bmw_g31_vertragsstart_string = "2019-09-09T00:00:00.000+02:00"
val var_bmw_g31_start_km = 21126
val var_bmw_g31_toleranz = 2500
val DateTime var_bmw_g31_vertragsstart = parse(var_bmw_g31_vertragsstart_string)
val var_bmw_g31_restlaufzeit = now.until(var_bmw_g31_vertragsstart, ChronoUnit.DAYS)
val var_bmw_g31_km_tag = 55
val var_bmw_g31_km_soll = (var_bmw_g31_restlaufzeit * var_bmw_g31_km_tag * -1) + var_bmw_g31_start_km
val var_bmw_g31_km_soll_tol = ((var_bmw_g31_restlaufzeit * var_bmw_g31_km_tag) * -1) + var_bmw_g31_toleranz + var_bmw_g31_start_km
bmw_g31_km_soll.postUpdate(var_bmw_g31_km_soll)
bmw_g31_km_soll_tol.postUpdate(var_bmw_g31_km_soll_tol)
BMW_G31_Trigger_KM_Calc.postUpdate(OFF)
end