I want to have a rule which will send me a group items based on some criteria which state is on.
Now I have this:
val ZonesOn = Zones.members.filter [ i | i.state == "ON" ] as StringItem
However I get a cast error:
2018-07-22 20:37:10.668 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Triggered Zone': Could not cast [Zone7 (Type=StringItem, State=ON, Label=Bejárati ajtó, Category=switch, Groups=[Zones])] to org.eclipse.smarthome.core.library.items.StringItem; line 9, column 18, length 63
What I’m doing wrong? Also, it can happen sometimes that more than 1 member is ON. So I want to concatenate to the end of a string. How this can be done?
The error is gone However this only returns ‘null’ even when I can clearly see that there is members which state is ON. Can you help me with this a little?
rule "Triggered alarm"
when
Item AlarmZones changed
then
if(ArmState.state.toString == "arm"){
if(AlarmZones.state == ON) {
val ZonesOn = AlarmZones.members.filter[ i | i.state == ON ].map[ name ].reduce[ s, name | s + ", " + name]
sendTelegram("bot1","Alarm in zone(s): " + ZonesOn)
}
}
end
The group-members must be type Switch.
You can change to
rule "Triggered alarm"
when
Item AlarmZones changed to ON
then
if(ArmState.state == "arm"){
val ZonesOn = AlarmZones.members.filter[ i | i.state == ON ].map[ name ].reduce[ s, name | s + ", " + name]
sendTelegram("bot1","Alarm in zone(s): " + ZonesOn)
}
end
rule "Triggered alarm"
when
Item AlarmZones received update
then
logInfo("___1",ArmState.state +" "+ AlarmZones.state.toString)
if(ArmState.state == "arm"){
val ZonesOn = AlarmZones.members.filter[ i | i.state == ON ].map[ name ].reduce[ s, name | s + ", " + name]
logInfo("___2",ZonesOn)
if (ZonesOn === null) {logInfo("___3","=== null")}
// sendTelegram("bot1","Alarm in zone(s): " + ZonesOn)
}
end
Thanks this works really well! However the item names returned (Zone1, etc…). Is it possible to map this value to something else? Can I return the label of the item?