Piko hat geschrieben: ↑3. Apr 2020 20:29
Ja aber dann müsste ich für jeden Shelly eine rule machen.
Ich dachte da an etwas eleganteres. So aller Gruppe Shelly und da werden alle Werte umgewandelt. Bzw. Jeder Wert der sich ändert.
Vielleicht hat da ja noch jemand ne Idee.
Das ist sehr einfach, ein paar kleine Regeln müssen allerdings eingehalten werden. Im Groben:
Du definierst zwei Gruppenitems, ich nenne sie mal gIn und gOut. In der einen Gruppe werden alle Ankommenden Items gruppiert, in der anderen Gruppe alle abgehenden Items. Weiterhin muss sich der Name des abgehenden Items aus dem ankommenden Item ableiten lassen. Beispiel:
Code: Alles auswählen
Group gIn
Group gOut
Switch sIn_1 (gIn)
Switch sIn_2 (gIn)
Switch sOut_1 (gOut)
Switch sOut_2 (gOut)
Nun reicht eine Rule:
Code: Alles auswählen
rule "in und out"
when
Member of gIn changed
then
gOut.members.filter[ i|
i.name.split("_").get(1)==triggeringItem.name.split("_").get(1)
].head.sendCommand(triggeringItem.state)
end
Im Beispiel ist also jeweils der zweite Teil des Itemnamens identisch, der erste Teil des Namens unterscheidet sich, ist aber innerhalb der Gruppe gleich.
Im Beispiel wird einfach nur die Änderung des einen Items an das andere Item weitergegeben, man kan aber leicht beliebig komplexe Manipulationen einbinden.
Die Rule triggert, sobald einer der Member der Gruppe gIn sich ändert.
Welches Item das ist, ist in triggeringItem gespeichert.
In der Rule wird die Gruppe gOut gefiltert auf die Items, welche im zweiten Teil des Namens identisch zum triggernden Item sind. Theoretisch könnte das auf mehrere Items zutreffen, das Ergebnis dieses Filters ist also immer eine Liste, die auch
kein Element enthalten könnte. Wir interessieren uns hier für das erste Element der Liste (.head) (und da wir die Gruppen selbst gefüllt haben, wissen wir auch, dass dies immer das einzige Item der Liste ist.)