Seite 3 von 4

Re: Abwesenheitsregel in Openhab

Verfasst: 25. Jan 2020 10:16
von violine21
Hallo,

auch mit den geschweiften Klammern?

Code: Alles auswählen

{  deine Wünsche   }

Re: Abwesenheitsregel in Openhab

Verfasst: 25. Jan 2020 10:18
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

Re: Abwesenheitsregel in Openhab

Verfasst: 25. Jan 2020 10:34
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.

Re: Abwesenheitsregel in Openhab

Verfasst: 25. Jan 2020 11:33
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

Re: Abwesenheitsregel in Openhab

Verfasst: 25. Jan 2020 12:14
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: )

Re: Abwesenheitsregel in Openhab

Verfasst: 25. Jan 2020 13:14
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).

Re: Abwesenheitsregel in Openhab

Verfasst: 25. Jan 2020 13:38
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 ?

Re: Abwesenheitsregel in Openhab

Verfasst: 26. Jan 2020 14:08
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.)

Re: Abwesenheitsregel in Openhab

Verfasst: 26. Jan 2020 17:09
von peter-pan
@udo1toni

...super, Danke. Werd ich gleich mal ausprobieren. :)

Re: Abwesenheitsregel in Openhab

Verfasst: 22. Feb 2020 12:33
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