Numberitem in rule immer "null"

Hallihallo,
nach der Migration von OH2 auf OH3 funktioniert eine meiner Rules nicht mehr. Dem wollte ich jetzt mal nachgehen… Es handelt sich um eine Homematic Steckdose an der Waschmaschine. Die liefert den Energieverbrauch und die Rule soll letztlich Bescheid sagen, wenn die WaMa fertig ist.

Ich habe die Rule eingedampft (s.u.) und bekomme in der Rule nach “Item … changed” nicht an den Wert des Items. Das ist ein NumberItem und egal, was ich probiere und wie und wo ich caste, der Wert ist immer “null”… Mit Einheiten (Number vs Number:) bin ich auch nicht weiter gekommen - kann aber schon sein, dass es daran liegt… bin auf jeden Fall zu doof :slight_smile:

Zur Rule: die “feuert” - also “changed” greift, wpower ist offenbar immer “null”. Unten in den Logs und auch in der Konsole sieht man, dass der Wert nicht null ist.

Ich würde auch gerne currentState und previousState verwenden (das wäre sogar notwendig für die Rule), die sind aber ebenfalls nicht (sinvoll für mich) belegt. Also “null”.

Any hint?!

Danke.

Rule:

rule "Waschmaschine fertig"
when
   Item HM_Steckdose_Waschmaschine_Power changed
then
   var wpower   = (HM_Steckdose_Waschmaschine_Power.state as Number)

   if( wpower ) {
      logInfo("Wama",wpower)
   } else {
      logInfo("Wama","wpower = null")
   }
end

Logs:

==> events.log <==
2023-02-23 11:51:43.069 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'HM_Steckdose_Waschmaschine_Power' changed from 22.92 to 5.39

==> openhab.log <==
2023-02-23 11:51:43.083 [INFO ] [org.openhab.core.model.script.Wama  ] - wpower = null

Item:

Number HM_Steckdose_Waschmaschine_Power    "Steckdose WaMa Momentanverbrauch"    (Homematic) {channel="homematic:HM-ES-PMSw1-Pl:ccu-pi:LXXXX:2#POWER"}

these should work:

logInfo("Wama",HM_Steckdose_Waschmaschine_Power.state.toString())
logInfo("Wama",HM_Steckdose_Waschmaschine_Power.newState.toString())
logInfo("Wama",HM_Steckdose_Waschmaschine_Power.previousState.toString())

It depends what you want to achieve in your rule. If you just want to get the states, do this:

var wpower = HM_Steckdose_Waschmaschine_Power.state.toString()

if you want to do some maths with the state, do this:

var Number wpower = HM_Steckdose_Waschmaschine_Power.state as Number
wpower = wpower + 1
logInfo("Wama",wpower.toString())

Thanks. This pushed me in the right direction…

This works:

  1. var wpower = (newState as Number).floatValue(), same with previousState as var ps)
  2. logInfo(“Wama”, “WaMa Power changed from {} to {}”, ps, wpower);

So proper casting in combination with proper usage of logInfo with placeholders works finally :slight_smile:

Also newState and previousState works when used properly.

Thanks. Can be closed.