Selbstverständlich funktioniert die Rückmeldung an den Taster
Das Problem ist nur: Du bekommst lediglich den Zustand des gerade ausgewählten Lichts. Nutze dafür postUpdate (!).
Wo ich gerade drüber nachdenke, kannst Du aber auch eine kleine Rule verwenden, um jeweils den Status der gerade ausgewählten Leuchte anzuzeigen.
Code: Alles auswählen
rule "Taster A"
when
Item Taster_A received command
then
var Integer iSelect = 0
if(selectButton_A.state instanceof Number)
iSelect = (selectButton_A.state as Number).intValue
switch(iSelect) {
case 1: {
Auswahl_1.sendCommand(receivedCommand)
}
case 2: {
Auswahl_2.sendCommand(receivedCommand)
}
case 3: {
Auswahl_3.sendCommand(receivedCommand)
}
case 4: {
Auswahl_4.sendCommand(receivedCommand)
}
case 5: {
Auswahl_5.sendCommand(receivedCommand)
}
case 6: {
Auswahl_6.sendCommand(receivedCommand)
}
case 7: {
Auswahl_7.sendCommand(receivedCommand)
}
default: {
logWarn("tasterA","Ungültige Auswahl: {}",selectButton_A.state)
}
}
if(iSelect > 0 && iSelect < 8) // falls gültiger Zeiger
Taster_A.postUpdate(receivedCommand.toString) // setze Status des Items gemäß empfangenen Befehl
end
rule "Taster A Selection changed"
when
Item selectButton_A changed
then
var Integer iSelect = 0
if(selectButton_A.state instanceof Number)
iSelect = (selectButton_A.state as Number).intValue
switch(iSelect) {
case 1: {
Taster_A.postUpdate(Auswahl_1.state)
}
case 2: {
Taster_A.postUpdate(Auswahl_2.state)
}
case 3: {
Taster_A.postUpdate(Auswahl_3.state)
}
case 4: {
Taster_A.postUpdate(Auswahl_4.state)
}
case 5: {
Taster_A.postUpdate(Auswahl_5.state)
}
case 6: {
Taster_A.postUpdate(Auswahl_6.state)
}
case 7: {
Taster_A.postUpdate(Auswahl_7.state)
}
default: {
logWarn("tasterAselect","Ungültige Auswahl: {}",selectButton_A.state)
}
}
end
Es gibt übrigens noch eine weitere Möglichkeit, die die Rules erheblich kürzer macht, und das sind Gruppen. Damit die Zuordnung der Items hier funktioniert, muss der Name des Items die Indexzahl enthalten (das wäre im obigen Code schon der Fall)
Nehmen wir an, alle Items Auswahl_n befinden sich in der Gruppe gAuswahl, dann sähen die passenden Rules so aus:
Code: Alles auswählen
rule "Taster A"
when
Item Taster_A received command
then
var Integer iSelect = 0
if(selectButton_A.state instanceof Number)
iSelect = (selectButton_A.state as Number).intValue
if(iSelect < 1 || iSelect > 7) { // falls ungültiger Zeiger
logWarn("tasterA","Ungültige Auswahl: {}",selectButton_A.state)
return; // Abbruch der Rule
}
Taster_A.postUpdate(receivedCommand.toString) // setze Status des Tasters gemäß empfangenen Befehl
gAuswahl.members.filter[i|i.name.split("_").get(1) == iSelect.toString].head.sendCommand(receivedCommand)
end
rule "Taster A Selection changed"
when
Item selectButton_A changed
then
var Integer iSelect = 0
if(selectButton_A.state instanceof Number)
iSelect = (selectButton_A.state as Number).intValue
if(iSelect < 1 || iSelect > 7) { // falls ungültiger Zeiger
logWarn("tasterAselection","Ungültige Auswahl: {}",selectButton_A.state)
return; // Abbruch der Rule
}
Taster_A.postUpdate(gAuswahl.members.filter[i|i.name.split("_").get(1) == iSelect.toString].head.state) // setze Status des Tasters gemäß gewählter Leuchte
end
Das zu schaltende Item bzw. der zu erfragende Status wird aus der Gruppe anhand des Namens herausgefiltert. Es bleibt eine Liste von Items mit einem Eintrag übrig.
Das erste Item dieser Liste wird verwendet (das ist dann ein Item, keine Liste von Items)
Wenn Du Deine Items anders benannt hast, reicht es, die Indexzahl irgendwo im Namen einzubauen, abgetrennt mit den Unterstrichen. Wichtig ist dabei, dass die Indexzahl jeweils an der gleichen Stelle steht (im obigen Beispiel an Position 2, da der Index der durch .split() erzeugten Liste 0-basiert ist, muss man 1 abziehen. .get(1) liefert also den 2. Teilstring)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet