Take a look at the design pattern “working with groups in rules”.
Here is how I solved this:
items:
Contact DoorSensor1_Status_WC "Fenster WC [MAP(de.map):%s]" <window> (gContact) { channel="mihome:sensor_magnet:xiaomi:DoorSensor1:isOpen"}
Contact DoorSensor2_Status_Wohnzimmer "Tür Küche [MAP(de.map):%s]" <window> (gContact) { channel="mihome:sensor_magnet:xiaomi:DoorSensor2:isOpen" }
rule:
rule "Fenster Alarm"
when
Channel "mihome:sensor_magnet:xiaomi:DoorSensor1:isOpenAlarm" triggered ALARM or
Channel "mihome:sensor_magnet:xiaomi:DoorSensor2:isOpenAlarm" triggered ALARM
then
//format event
var String chnl = String::format("%s", receivedEvent)
//get ID
val contact = chnl.split(":").get(3)
//find contact switch for ID
val contactSwitch = gContact.members.findFirst[ t | t.name.split("_").get(0) == contact ] as ContactItem
//get room name
val room = contactSwitch.name.split("_").get(2)
logInfo("contact", "Fenster im "+ room +" hat Alarm getriggert!")
end