Trying a different method to do multiuser room presence.
Essentially room presence detected by ble (or manually switched)
Room presence is turned on/off by rules on groups which work
I can create a group with the rooms that are on
I can create a group with the numbers of people in the room
What I’m struggling with is how to take the rooms that are occupied take their temperatures and produce the lowest value. I had hoped I could do it via groups…but maybe just need write lots of if statements. Ive commented out the 1 that doesn’t work
rule "change room with ble presence"
when
Member of gRoomPresence changed
then
if (Heating_Type.state == "Home")
{
val Number kitchenpresencecount=(gRoomPresence?.members.filter[i|i.state.toString == "kitchen"].size)
val Number livingroompresencecount=(gRoomPresence?.members.filter[i|i.state.toString == "livingroom"].size)
val Number firstfloorpresencecount=(gRoomPresence?.members.filter[i|i.state.toString == "firstfloor"].size)
val Number offpresencecount=(gRoomPresence?.members.filter[i|i.state.toString == "off"].size)
kitchen_PresenceCount.postUpdate(kitchenpresencecount)
livingroom_PresenceCount.postUpdate(livingroompresencecount)
firstfloor_PresenceCount.postUpdate(firstfloorpresencecount)
off_PresenceCount.postUpdate(offpresencecount)
val place=(triggeringItem.state.toString + "_PresenceSwitch")
sendCommand(place,"ON")
gPresenceCount.members.filter[i | (i.state as Number == 0)].forEach[i | var String p = (i.name.toString.split("_").get(0) + "_PresenceSwitch") sendCommand(p,"OFF")]
gOccupiedRooms.members.forEach[i | gOccupiedRooms.removeMember(i)]
gPresenceSwitch.members.filter[s | s.state == ON].forEach[i | gOccupiedRooms.addMember(i)]
// val MinTemp = gOccupiedRooms.members.findFirst[p | p.state == (gOccupiedRooms.name.toString.split("_").get(0) + "_Temp").state] as NumberItem
Heating_Monitoring_Temp.sendCommand(MinTemp)
}
end