Abwesenheitsregel in Openhab

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

Moderatoren: seppy, udo1toni

violine21
Beiträge: 589
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Abwesenheitsregel in Openhab

Beitrag von violine21 »

Hallo,

auch mit den geschweiften Klammern?

Code: Alles auswählen

{  deine Wünsche   }

violine21
Beiträge: 589
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Abwesenheitsregel in Openhab

Beitrag von violine21 »

Hier mal eine Rule von meinem Flurlicht. Erst wenn alle 3 Bewegungen erkannt sind, schalten die Geräte.

Code: Alles auswählen

rule "Beleuchtung Flur oben"
when
    Item HmIPSMITest11MOTION changed or
    Item HmIPSMITest21MOTION changed or
    Item OGTreppePrasenzmelder1PRESENCEDETECTIONSTATE changed
then
    if(HmIPSMITest11MOTION.state == ON && HmIPSMITest21MOTION.state == ON && OGTreppePrasenzmelder1PRESENCEDETECTIONSTATE.state == ON)
    {SDimmer_D1_Dimmer.sendCommand(8)
    SRelais_A2.sendCommand(ON)}
end

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

Re: Abwesenheitsregel in Openhab

Beitrag von udo1toni »

HeHa hat geschrieben: 25. Jan 2020 09:50
Die Regel nach Änderung mit Deinem Vorschlag:

Code: Alles auswählen

rule "Abwesenheit ALEXA Ausschalten"
when
  Item HenningsAHandy changed or
  Item RitasHandy changed or
  Item HenningsHandy changed
then
if(HenningsAHandy.state == CLOSED && RitasHandy.state == CLOSED && HenningsHandy.state == CLOSED)
Mehrfachsteckdos_02_S5.sendCommand(OFF)
Printer.sendCommand(OFF)
Buero_S.sendCommand(OFF)
TplinkEGOG.sendCommand(OFF)
TplinkKG.sendCommand(OFF)
dlinkWo.sendCommand(OFF)
Einliegerwohnung.sendCommand(OFF)
Light1_ColorTemperature_Switch.sendCommand(OFF)
Light3_ColorTemperature_Switch.sendCommand(OFF)
Light2_ColorTemperature_switch.sendCommand(OFF)
end
hat leider auch geschalten, wenn nur ein Gerät CLOSED bekommt.
Was kein Wunder ist, denn da fehlen Klammern.

Code: Alles auswählen

rule "Abwesenheit ALEXA Ausschalten"
when
    Item HenningsAHandy changed or
    Item RitasHandy changed or
    Item HenningsHandy changed
then
    if(HenningsAHandy.state == CLOSED && RitasHandy.state == CLOSED && HenningsHandy.state == CLOSED) {
        Mehrfachsteckdos_02_S5.sendCommand(OFF)
        Printer.sendCommand(OFF)
        Buero_S.sendCommand(OFF)
        TplinkEGOG.sendCommand(OFF)
        TplinkKG.sendCommand(OFF)
        dlinkWo.sendCommand(OFF)
        Einliegerwohnung.sendCommand(OFF)
        Light1_ColorTemperature_Switch.sendCommand(OFF)
        Light3_ColorTemperature_Switch.sendCommand(OFF)
        Light2_ColorTemperature_switch.sendCommand(OFF)
    }
end
Allerdings gäbe es eine wesentlich elegantere Möglichkeit: Du ordnest alle Items zwei Gruppen zu:

Code: Alles auswählen

Group:Contact:OR(OPEN,CLOSED) gAbwesend 
Group gGeneralAus "Aus"

Contact HenningsAHandy "Handy Henning A" (gAbwesend)
Contact RitasHandy "Handy Rita" (gAbwesend)
Contact HenningsHandy "Handy Henning" (gAbwesend)

Switch Mehrfachsteckdos_02_S5 "Steckdose" (gGeneralAus)
Switch Printer "Drucker" (gGeneralAus)
Switch Buero_S "Büro" (gGeneralAus)
Switch TplinkEGOG "TPlink EGOG" (gGeneralAus)
Switch dlinkWo "dlink Wohnung" (gGeneralAus)
Switch Einliegerwohnung "Einliegerwohnung" (gGeneralAus)
Switch Light1_ColorTemperature_Switch "Licht1" (gGeneralAus)
Switch Light2_ColorTemperature_Switch "Licht2" (gGeneralAus)
Switch Light3_ColorTemperature_Switch "Licht3" (gGeneralAus)
(Wenn Du Paper UI zum Erstellen verwendest, kannst Du die Gruppenzugehörigkeit auch dort einstellen)
Nun reduziert sich die Rule auf diesen Code:

Code: Alles auswählen

rule "Abwesenheit ALEXA Ausschalten"
when
    Item gAbwesend changed to CLOSED
then
    gGeneralAus.sendCommand(OFF)
end
Man könnte es auch noch etwas allgemeiner programmieren:

Code: Alles auswählen

rule "Abwesenheit ALEXA Ausschalten"
when
    Member gAbwesend changed
then
    if(gAbwesend.members.filter[i|i.state != CLOSED].size == 0) {
        gGeneralAus.members.forEach[i|
            if(i.state != OFF)
                i.sendCommand(OFF)
        ]
    }
end
Letztere Variante hat den Vorteil, dass man leicht zusätzliche Befehle pro geschaltetem Item, oder auch spezielle Bedingungen, die auslösenden Items betreffend, einbauen kann.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

HeHa
Beiträge: 50
Registriert: 13. Nov 2019 17:41
Answers: 1

Re: Abwesenheitsregel in Openhab

Beitrag von HeHa »

Hallo vielen Dank,

ich versuche gerdade meine Variante mit den Klammern { } ... und es sieht so aus, als ob das oh wunder funktioniert.

@udo1toni: Ja das ist ein wunderschöner Ansatz. Den werde ich auch hernehmen .. wenn ich erstmal das Regelwerk verstanden habe. und wie man an den Klammern gesehen hat ist das noch nicht der Fall.

Ich werde jetzt jedes Gerät (Handies) einzeln ausschalten und sehen wie sich die Regel nun verhält.

Gruß Und Danke an violine21 (Ich hab die Klammern jeweils in Deinen Beiträgen einfach überlesen oder ignoriert - Sorry)

Henning

Benutzeravatar
peter-pan
Beiträge: 2564
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Abwesenheitsregel in Openhab

Beitrag von peter-pan »

HeHa hat geschrieben: 25. Jan 2020 11:33 if(gAbwesend.members.filter[i|i.state != CLOSED].size == 0)
... Entschuldigung, wenn ich dazwischen grätsche. Was bedeutet "size == 0" ? :?: (Bitte nicht lachen, ein Dummy frägt :oops: )
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

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

Re: Abwesenheitsregel in Openhab

Beitrag von udo1toni »

peter-pan hat geschrieben: 25. Jan 2020 12:14
HeHa hat geschrieben: 25. Jan 2020 11:33 if(gAbwesend.members.filter[i|i.state != CLOSED].size == 0)
... Entschuldigung, wenn ich dazwischen grätsche. Was bedeutet "size == 0" ? :?: (Bitte nicht lachen, ein Dummy frägt :oops: )
Nix Dummie ;)

gAbwesend ist ein Group Item.
.members ist eine Liste aller direkt zugehörigen Items.
.filter[] liefert ebenfalls eine Liste zurück, in der alle Items enthalten sind, auf welche die Filterbedingung zutrifft.
.size liefert die Anzahl Elemente in dieser Liste.

Zusammengefasst sucht die Zeile nach allen Elementen, die nicht CLOSED als Status haben. Wenn die Anzahl der Elemente größer 0 ist, ist mindestens ein Handy "anwesend" (oder unbestimmt).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
peter-pan
Beiträge: 2564
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Abwesenheitsregel in Openhab

Beitrag von peter-pan »

...aah, siehste ! Sag ich's doch. Da krieg ich immer Hilfe. ;)

.size ist also die Anzahl. Verstanden und Danke.

Gruss
Peter

P.S.: Kann ich das irgendwo nachlesen, was da alles möglich ist ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

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

Re: Abwesenheitsregel in Openhab

Beitrag von udo1toni »

peter-pan hat geschrieben: 25. Jan 2020 13:38 P.S.: Kann ich das irgendwo nachlesen, was da alles möglich ist ?
Bestimmt :) Ich bin aber lesefaul (nur in den Foren nicht...)

Die Rules DSL setzt auf XTend auf, welches wiederum von Java abstammt. Das Objektmodell ist also von Java abgeleitet. Nun muss man "nur noch" wissen, mit welcher Art Objekt man es zu tun hat. Du nutzt ja auch VSCode, da kannst Du Dir (wenn alles korrekt konfiguriert ist) jede mögliche gültige Fortführung eines Befehls anzeigen lassen (<ctrl>+<space>), also z.B. wenn Du ein Gruppenitem angegeben hast, findest Du in der Liste members und allMembers (neben massig anderen Methoden), der Hilfetext ist manchmal nicht sehr ausssagekräftig, aber die meisten Methoden sind sprechend bezeichnet, man hat also gute Chancen, auf Anhieb die richtige Methode zu finden. Hast Du members eingegeben, bekommst Du filter, sort usw. gelistet, es ist manchmal erhellend, solche Listen durchzublättern und zu versuchen, dem Namen der Methode die wahrscheinliche Funktion zu entnehmen. Dabei muss man immer im Hinterkopf behalten, welches Objekt man gerade in der Hand hat. head beispielsweise ist das erste Element der Liste und gibt dann (da es sich ja um eine Liste von Items handelt) ein genericItem zurück. oder evtl. sogar eine ganz bestimmte Sorte Item (Number, String, Switch, Dimmer usw.)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
peter-pan
Beiträge: 2564
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Abwesenheitsregel in Openhab

Beitrag von peter-pan »

@udo1toni

...super, Danke. Werd ich gleich mal ausprobieren. :)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Abwesenheitsregel in Openhab

Beitrag von int5749 »

peter-pan hat geschrieben: 25. Jan 2020 13:38 P.S.: Kann ich das irgendwo nachlesen, was da alles möglich ist ?
Bin zwar ebenso lesefaul (zumeist aber verschmähe ich das Papier und streune durch Internet auf der Suche nach .... 43)

Schau mal hier=> https://community.openhab.org/t/design- ... ules/20512 da ist einiges über die Filterfunktion beschrieben, mit der Udo1Toni so zaubern kann ;)

Viele Grüße,
Jörg
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

Antworten