Proton hat geschrieben: ↑20. Dez 2023 12:44Eine Konvertierung
Code: Alles auswählen
if (command == "UP"){
Gemeinschaftsraum_Rollladen_Gaube_Status.sendCommand("OPEN")
// bzw.
Gemeinschaftsraum_Rollladen_Gaube_Status.sendCommand(OPEN)
hat nicht funktioniert. Es geht bestimmt, aber ich weiß halt nicht wie

Nein, das kann nicht funktionieren, denn OPEN ist kein Befehl

Wenn Du ein Proxy Item verwendest, musst Du natürlich auch den Status in das Proxy Item schreiben. Z.B. die Items Rollladen_Proxy, Rollladen_Position und Rollladen_Relativ, benötigen zwei Rules (hier der Einfachheit halber als DSL Text Rules):
Code: Alles auswählen
rule "Befehl senden"
when
Item Rollladen_Proxy received command
then
switch(receivedCommand.toString) {
case "UP" : Rollladen_Relativ.sendCommand(UP)
case "DOWN" : Rollladen_Relativ.sendCommand(DOWN)
case "STOP" : Rollladen_Relativ.sendCommand(STOP)
default : Rollladen_Position.sendCommand(receivedCommand)
}
end
rule "Position übernehmen"
when
Item Rollladen_Position changed
then
Rollladen_Proxy.postUpdate(Rollladen_Position.state)
end
Diese beiden Rules sollten reichen, gesetzt den Fall, dass die Items alle vom Typ Rollershutter sind, oder zumindest die beiden, welche UP, DOWN und STOP verarbeiten können, und Position muss natürlich die aktuelle Position rückmelden, wenn der Rollladen stoppt, genauso wie es auf den Positionsbefehl reagieren muss.
Wenn Du die Items sinnvoll in Gruppen zusammenfasst kommst Du für eine beliebige Anzahl an solchen Item-Triplets mit einer Variante dieser beiden Rules aus:
Code: Alles auswählen
rule "Befehl senden"
when
Member of gRollProxy received command
then
val strRoll = triggeringItem.name.split("_").get(0)
switch(receivedCommand.toString) {
case "UP" : gRollRelativ.members.filter[i|i.name.startsWith(strRoll)].head.sendCommand(UP)
case "DOWN" : gRollRelativ.members.filter[i|i.name.startsWith(strRoll)].head.sendCommand(DOWN)
case "STOP" : gRollRelativ.members.filter[i|i.name.startsWith(strRoll)].head.sendCommand(STOP)
default : gRollPosition.members.filter[i|i.name.startsWith(strRoll)].head.sendCommand(receivedCommand)
}
end
rule "Position übernehmen"
when
Member of gRollPosition changed
then
val strRoll = triggeringItem.name.split("_").get(0)
gRollProxy.members.filter[i|i.name.startsWith(strRoll)].head.postUpdate(newState)
end
Hier also einfach drei Gruppen, für jede "Sorte" eine Gruppe, der erste Namensteil muss jeweils ein passendes Gegenstück in den beiden anderen Gruppen haben.
Man könnte auch mit einer Gruppe arbeiten, dann wird halt der Code in der Rule komplexer, weil anhand des Itemnamens weitere Unterscheidungen zu treffen sind. Da es hier nur um wenige Zeilen Code geht, ist die drei-Gruppen-Variante sicher die einfachste Lösung.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet