Hello, I have rule to calculate daily monthly and yearly energy consumtion.
I read value once a day from my energy meter.
Everything is ok but when I calculate difference between two values it gives me strange numbers.
here is rule:
rule "zuzycie energa"
when
Item LicznikEnerga_EnergaZuzycie received update
then
var Number licznik_energa_dzis1
var Number licznik_energa_miesiac1
var Number licznik_energa_rok1
if (LicznikEnerga_EnergaZuzycie.historicState(now.withHour(0).withMinute(0).withSecond(0).withDayOfMonth(1).withDayOfYear(1)) === null) { var licznik_energa_rok1 = 0 } else {
licznik_energa_rok1 = LicznikEnerga_EnergaZuzycie.historicState(now.withHour(0).withMinute(0).withSecond(0).withDayOfYear(1)).state as Number }
if (LicznikEnerga_EnergaZuzycie.historicState(now.withHour(0).withMinute(0).withSecond(0).withDayOfMonth(1)) === null) { var licznik_energa_miesiac1 = 0 } else {
licznik_energa_miesiac1 = LicznikEnerga_EnergaZuzycie.historicState(now.withHour(0).withMinute(0).withSecond(0).withDayOfMonth(1)).state as Number }
if (LicznikEnerga_EnergaZuzycie.historicState(now.withHour(0).withMinute(0).withSecond(0)) === null) { var licznik_energa_dzis1 = 0 } else {
licznik_energa_dzis1 = LicznikEnerga_EnergaZuzycie.historicState(now.withHour(0).withMinute(0).withSecond(0)).state as Number }
val licznik_energa_dzis3 = licznik_energa_obecnie1 - licznik_energa_dzis1
val licznik_energa_miesiac3 = licznik_energa_obecnie1 - licznik_energa_miesiac1
val licznik_energa_rok3 = licznik_energa_obecnie1 - licznik_energa_rok1
postUpdate(licznik_energa_dzis, licznik_energa_dzis3)
postUpdate(licznik_energa_miesiac, licznik_energa_miesiac3)
postUpdate(licznik_energa_rok, licznik_energa_rok3)
end
I don’t think that’s a Number, it’s a Quantity (with units).
See
That looks like a problem too; here a new variable named licznik_energa_rok1 is declared and created (regardless of if any other variable already exists with that name), it is set to zero, but then discarded at the end of the code block, the closing }.
So it doesn’t do anything useful at all.
rule "zuzycie energa"
when
Item LicznikEnerga_EnergaZuzycie received update
then
if (LicznikEnerga_EnergaZuzycie.historicState(now.withHour(0).withMinute(0).withSecond(0).withDayOfMonth(1).withDayOfYear(1)) === null) { val licznik_energa_rok1 = 0 } else {
licznik_energa_rok1 = LicznikEnerga_EnergaZuzycie.historicState(now.withHour(0).withMinute(0).withSecond(0).withDayOfYear(1)).state as QuantityType<Number> }
if (LicznikEnerga_EnergaZuzycie.historicState(now.withHour(0).withMinute(0).withSecond(0).withDayOfMonth(1)) === null) { val licznik_energa_miesiac1 = 0 } else {
licznik_energa_miesiac1 = LicznikEnerga_EnergaZuzycie.historicState(now.withHour(0).withMinute(0).withSecond(0).withDayOfMonth(1)).state as QuantityType<Number> }
if (LicznikEnerga_EnergaZuzycie.historicState(now.withHour(0).withMinute(0).withSecond(0)) === null) { val licznik_energa_dzis1 = 0 } else {
licznik_energa_dzis1 = LicznikEnerga_EnergaZuzycie.historicState(now.withHour(0).withMinute(0).withSecond(0)).state as QuantityType<Number> }
val licznik_energa_obecnie1 = LicznikEnerga_EnergaZuzycie.state as QuantityType<Number>
val licznik_energa_dzis3 = licznik_energa_obecnie1 - licznik_energa_dzis1
val licznik_energa_miesiac3 = licznik_energa_obecnie1 - licznik_energa_miesiac1
val licznik_energa_rok3 = licznik_energa_obecnie1 - licznik_energa_rok1
postUpdate(licznik_energa_obecnie, licznik_energa_obecnie1)
postUpdate(licznik_energa_dzis, licznik_energa_dzis3)
postUpdate(licznik_energa_miesiac, licznik_energa_miesiac3)
postUpdate(licznik_energa_rok, licznik_energa_rok3)
end
and now I got error:
2022-10-23 15:07:52.657 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID ‘energa-1’ failed: Could not cast 14300.87 to org.openhab.core.library.types.QuantityType; line 10, column 27, length 134 in energa