Wozu das Koppelrelais gut sein soll, erschließt sich mir nicht

ist aber auch nicht weiter tragisch, das wird schon so passen. Also Shelly steuert indirekt das Stromstoßrelais, dessen Zustand (An/Aus) wiederum über den Tastereingang des Shelly abgegriffen wird?
Der Taster ist dann logischerweise entkoppelt, hat also keine Wirkung auf Shelly Ausgang. Soweit korrekt?
Dann hast Du also ein Switch Item ShellyEingang und ein weiteres Switch Item ShellyAusgang (Namen werden abweichen, schon klar).
In der Rules DSL sähe dann eine passende Rule so aus:
Code: Alles auswählen
rule "alles aus"
when
Item AllesAus received command OFF
then
if(ShellyEingang.state != OFF)
ShellyAusgang.sendCommand(ON)
end
Falls der Shelly OFF meldet, wenn das Licht ON ist, musst Du die Logik natürlich umdrehen, also
Code: Alles auswählen
rule "alles aus"
when
Item AllesAus received command OFF
then
if(ShellyEingang.state != ON)
ShellyAusgang.sendCommand(ON)
end
Wenn Du mehrere Shellies hast, die gleichartig angelegt sind, kannst Du die in die selbe Rule einbauen:
Code: Alles auswählen
rule "alles aus"
when
Item AllesAus received command OFF
then
if(ShellyEingang.state != OFF)
ShellyAusgang.sendCommand(ON)
if(Shelly2Eingang.state != OFF)
Shelly2Ausgang.sendCommand(ON)
end
Wichtig ist nur, dass die richtigen Eingänge abgefragt und die richtigen Ausgänge gesteuert werden.
Wenn es um mehr als zwei oder drei Shellies geht, bietet es sich an, die Rule etwas allgemeiner zu fassen. Dabei ist es dann wichtig, die Namen der Items so zu gestalten, dass sie sich voneinander ableiten lassen, so:
Code: Alles auswählen
Group:Switch gShellyIn
Group:Switch gShellyOut
Switch Shelly1_Eingang (gShellyIn)
Switch Shelly1_Ausgang (gShellyOut)
Switch Shelly2_Eingang (gShellyIn)
Switch Shelly2_Ausgang (gShellyOut)
Switch DritterShelly_Eingang (gShellyIn)
Switch DritterShelly_Ausgang (gShellyOut)
Es gibt nun also zwei Gruppen gShellyIn und gShellyOut, in denen jeweils die Eingänge bzw. die Ausgänge zusammengefasst sind. Dabei ist jeweils der erste Teil des Namens in beiden Gruppen identisch für das identische Gerät. Beim dritten Shelly habe ich bewusst einen komplett abweichenden Namen gewählt, um klarzustellen, dass es nicht nur um einen Zähler gehen muss.
Nun kann die Rule wie folgt aussehen:
Code: Alles auswählen
rule "alles aus"
when
Item AllesAus received command OFF
then
gShellyIn.members.filter[i|i.state != OFF].forEach[j|
gShellyOut.members.filter[k|
k.name.contains(j.name.split("_").get(0))
].head.sendCommand(ON)
]
end
Anordnung um der besseren Lesbarkeit willen.

Für alle Shelly Eingänge, für die gilt, dass der Zustand nicht OFF ist, wird ein Befehlsblock ausgeführt. Deser Befehlsblock sucht das erste Element der Gruppe gShellyOut, für das gilt, dass der Itemname den ersten Teil des Itemnamens enthält, der gerade (aus der Eingangsgruppe) abgearbeitet wird. Dieses Element bekommt den Befehl ON.
Sieht kompliziert aus, aber ab dem 3. Itempaar lohnt sich der Aufwand. Es ist egal, wieviele Itempaare in der Gruppe zusammengefasst sind, ob das nun ein, zwei, fünfzig oder tausend Paare sind, die Rule kümmert sich um alle.
An diesem kleinen Beispiel kann man auch sehr gut sehen, wie mächtig die Rules DSL sein kann.
Der Code lässt sich aber auch über Blockly oder javaScript realisieren (wobei ich da raus bin... hab mich damit noch nicht intensiv auseinandergesetzt...)