Du kannst das nicht in einer Rule erschlagen (bzw geht das schon, aber eben nicht so).
Eine Rule ist immer ereignisgesteuert. Das Ereignis kann zeitlich sein, eine Statusänderung, ein Befehl...
Deine Rule soll auf beide Kontakte reagieren, also müssen beide Kontakte die Rule triggern.
Innerhalb der Rule musst Du dann vier Fälle unterscheiden, Kontakt 1 ist CLOSED und Kontakt 2 ist CLOSED, Kontakt 1 ist OPEN und Kontakt 2 ist CLOSED, Kontakt 1 ist CLOSED und Kontakt 2 ist OPEN, sowie Kontakt 1 ist OPEN und Kontakt 2 ist OPEN.
Eine einfache Form wäre so:
Code: Alles auswählen
var Integer nDoors = 0
if(GartenturContact_OpenClose.state == OPEN) nDoors = 1
if(GaragenturContact_OpenClose.state == OPEN) nDoors += 2
switch(nDoors) {
case 0: { // beide zu
// Licht aus
// telegramm senden?
}
case 1: { // Gartentür offen
// Licht weiß
// telegramm senden?
}
case 2: { // Garage offen
// Licht grün
// telegramm senden?
}
case 3: { // Beide offen
// Licht rot
// telegramm senden?
}
}
Vorteil gegenüber mehrfachem Prüfen der Zustände ist, dass die Itemregistry exakt zweimal angesprochen wird, ansonsten kann das bis zu 8 mal passieren, mindestens aber zweimal. Das switch-case dürfte um Längen schneller sein als Bool'sche Algebra mit Bedingungen.
Die Rule muss nur triggern, sobald sich einer der beiden Kontaktzustände ändert, also zweimal changed als Triggerart und eben die beiden Items. Namen des zweiten Items habe ich geraten...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet