Item aus Gruppe per Switch deaktivieren

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

Antworten
mad-mike
Beiträge: 402
Registriert: 6. Jan 2021 18:05
Answers: 2

Item aus Gruppe per Switch deaktivieren

Beitrag von mad-mike »

Hallo zusammen.

Ich möchte ein Item Switch einer Gruppe per anderen Switch deaktivieren.

Hintergrund:

Ich nutze eine Gruppe wo alle Lampen hinterlegt sind, und diese beinhalten auch die Lampen vom Kinderzimmer.

Nun ist das Kind ja auch manchmal Zuhause und ich dachte mir, man kann das irgendwie per Switch deaktivieren damit die Lampen im Kinderzimmer nicht ausgehen..

Im 2ten step will ich versuchen das ganze per rule zu Steuern aber dazu später... (Soweit bin ich noch nicht :mrgreen: )

Ich dachte mir irgendwie: wenn Item "Kind Zuhause on" dann Item Kinderzimmer Lampe in Gruppe deaktiviert....

Geht sowas?

Danke und Gruß.
Gruss mad-mike

openHABian 4.1.1 auf Raspberry Pi 4 Mod. b (8GB) ;)

Benutzeravatar
udo1toni
Beiträge: 13856
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Item aus Gruppe per Switch deaktivieren

Beitrag von udo1toni »

Nein, das geht nicht. Andersrum geht es aber: Du definierst eine Rule, um alle Lichter auszuschalten (ist ohnehin zuverlässiger als über das Group Item einen Befehl an alle zu senden).
In der Rule hast Du nun mehrere Möglichkeiten, entweder Du durchläufst die Gruppe und prüfst (falls "deaktiviert") jeweils, ob das Item nicht berücksichtigt werden soll:

Code: Alles auswählen

gLights.members.filter[i|i.state == ON].forEach[light|
    if(!(active.state != ON && light.name == "LichtKind"))
        light.sendCommand(OFF)
]
Alternativ kannst Du das Licht auch komplett aus der Gruppe raus lassen und separat in der Rule schalten.

Falls die Gruppe sowohl Switch Items als auch Dimmer Items enthält, muss man das gesondert berücksichtigen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

mad-mike
Beiträge: 402
Registriert: 6. Jan 2021 18:05
Answers: 2

Re: Item aus Gruppe per Switch deaktivieren

Beitrag von mad-mike »

Wie würde das denn aussehen?? :oops:
Alles was ich versucht habe, hat die Rule abgebrochen mit fehler meldungen...

Also das gruppen Item heisst:

Code: Alles auswählen

Lampe
Und das item vom Kind heisst:

Code: Alles auswählen

Constantin
Vielleicht errinnerst du dich noch an anderer stell hattest du mir mal dies gebaut:

Code: Alles auswählen

var Timer tZentralAus = null                                                                // ein Zeiger für einen Timer
var Integer iZentralAus                                                                     // ein Zähler
val Integer iMio = 1000000

rule "Zentral_off"
when
    Channel "shelly:shelly25-relay:784c5f2ecc:relay2#button" triggered SHORT_PRESSED or     // Taster - Haustür
    Item Zentral_taster changed to ON                                                       // APP
then
    tZentralAus?.cancel                                                                     // Falls Timer existiert, weg damit
    iZentralAus = 5                                                                         // Zähler initialisieren
    tZentralAus = createTimer(now.plusNanos(10*iMio), [|                                    // Timer anlegen und fast sofort starten
        iZentralAus-=1                                                                      // Zähler runterzählen
        if(iZentralAus < 1) {                                                               // falls am Ende angekommen
            Lampe.sendCommand(OFF)                                                          // Gruppe OFF
            HTTPURLThing_km7.sendCommand(ON)                                                // Relais ON
            Zentral_taster.sendCommand(OFF)                                                 // APP Schalter
        } else {                                                                            // ansonsten
            Shelly107_Betrieb.sendCommand(if(Shelly107_Betrieb.state != ON) ON else OFF)    // toggle Relais
            tZentralAus.reschedule(now.plusNanos((if(iZentralAus > 1) 500 else 1000)*iMio)) // plane den Timer erneut ein
        }
    ])
end
Nun hatte ich versucht den teil mit ""Lampe.sendCommand(OFF)"" durch deinen Teil oben zu ersetzen... Aber irgendwie bin ich gescheitert. :roll:

Gruss
Gruss mad-mike

openHABian 4.1.1 auf Raspberry Pi 4 Mod. b (8GB) ;)

Benutzeravatar
udo1toni
Beiträge: 13856
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Item aus Gruppe per Switch deaktivieren

Beitrag von udo1toni »

So müsste das eigentlich gehen:

Code: Alles auswählen

var Timer tZentralAus = null                                                                // ein Zeiger für einen Timer
var Integer iZentralAus                                                                     // ein Zähler
val Integer iMio = 1000000

rule "Zentral_off"
when
    Channel "shelly:shelly25-relay:784c5f2ecc:relay2#button" triggered SHORT_PRESSED or     // Taster - Haustür
    Item Zentral_taster changed to ON                                                       // APP
then
    tZentralAus?.cancel                                                                     // Falls Timer existiert, weg damit
    iZentralAus = 5                                                                         // Zähler initialisieren
    tZentralAus = createTimer(now.plusNanos(10*iMio), [|                                    // Timer anlegen und fast sofort starten
        iZentralAus-=1                                                                      // Zähler runterzählen
        if(iZentralAus < 1) {                                                               // falls am Ende angekommen
            Lampe.members.filter[i|i.state == ON].forEach[licht|                            // für jedes eingeschaltete Item der Gruppe
                if(!(licht.name == "Constantin" && active.state == OFF))                    // prüfe, ob Name == Constantin und gleichzeitig Item active OFF)
                    list.sendCommand(OFF)                                                   // falls nicht, sende OFF ans Item 
            ]
            HTTPURLThing_km7.sendCommand(ON)                                                // Relais ON
            Zentral_taster.sendCommand(OFF)                                                 // APP Schalter
        } else {                                                                            // ansonsten
            Shelly107_Betrieb.sendCommand(if(Shelly107_Betrieb.state != ON) ON else OFF)    // toggle Relais
            tZentralAus.reschedule(now.plusNanos((if(iZentralAus > 1) 500 else 1000)*iMio)) // plane den Timer erneut ein
        }
    ])
end
Der Punkt ist, dass nicht die Gruppe den Befehl bekommt (und dann stellvertretend an die einzelnen Items weiterreicht), sondern die Gruppe wird durchlaufen, für jedes Item der Gruppe wird das Lambda ausgeführt (das Lambda ist der Inhalt zwischen [ und ]).

Ob man die Gruppe zunächst nach den ITems filtert, die eingeschaltet sind, ist erst mal unerheblich.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten