Rule nur einmal am Tag ausführen lassen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: Rule nur einmal am Tag ausführen lassen

Beitrag von udo1toni »

Schönen Urlaub und viel Spaß!

Was die beiden Rules betrifft: in openHAB macht man das durchaus mit zwei Rules, das ist das Konzept der Ereignisse. Gewöhnlich wird man aber nicht drölfzig Items mit dem gleichen Befehl ansteuern, sondern all diese Items in einer Gruppe zusammenfassen und dann die Gruppe ansteuern, aber das ist ein Thema für nach dem Urlaub... ;)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Grandlhuber
Beiträge: 26
Registriert: 22. Sep 2021 07:38
Answers: 0
Wohnort: Bamberg

Re: Rule nur einmal am Tag ausführen lassen

Beitrag von Grandlhuber »

So, leider konnte ich jetzt erst schreiben da es in den Kaff in dem wir urlaubten keinen Empfang gab (das sowas heutzutage noch vor kommt, unglaublich!). Und das Programm war straff, da konnte ich leider gar nix machen wenn ich mal Netz hatte :oops:

Zurück zum Thema:

Eine Gruppe habe ich schon gebildet (heist in diesem Fall Rolladen :D ).
Ich müsste dann aber 2 Gruppen machen mir etwas Zeit dazwischen da (wie ich schon geschrieben habe) nicht alle Rolläden gleichzeitig von Binding angesteuert werden können.

Ich probiere mal beide Lösungen aus für unterschiedliche Szenarien ( habe da ein paar ähnliche Anwendungsfälle). Technisch machen beide Lösungen ja ziemlich das gleiche.

So, und jetzt teste ich und versuche das beste draus zu machen. Melde mich wieder 8-)
Konfig: OpenHab 3.3.0 auf Raspi 4B+ (Raspian).
SomfyTahoma-Bridge im LAN-Modus, Brunnen-, Zisternensteuerung, Außenlampen, Heizung (WebKM200), PV-Anlage per MQQT, Miele-Trockner, Softliq SC18, Dreambox two sowie div. Shellys zur Steckdosensteuerung per Openhab vernetzt.
Visualisierung über Grafana. Daten in Influx gesichert.

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

Re: Rule nur einmal am Tag ausführen lassen

Beitrag von udo1toni »

Also, je nachdem, wie das Problem der Steuerung genau aussieht, brauchst Du dennoch keine zwei Gruppen. Beispiel:

Code: Alles auswählen

gRoll.members.forEach[ r|
    r.sendCommand(DOWN)
    Thread::sleep(500)
]
fährt alle halbe Sekunde einen Rollladen nach unten, der in der Gruppe gRoll ist. Das sind also zwei Befehle pro Sekunde, das machen die meisten Bussysteme spielend. Sollen die Läden in einer bestimmten Reihenfolge fahren, so braucht man ein Sortierkriterium, welches dann entweder im Namen oder im Label untergebracht sein muss, in der Form, dass man die Liste .members alphabetisch sortieren lassen kann.

Code: Alles auswählen

gRoll.members.sortBy[ name ].forEach[ r|...]
Es gibt natürlich auch noch andere Wege, es kommt ja nur darauf an, was man erreichen will :)

Unter Berücksichtigung der Gruppe und des einen Rollladens sähe die komplette Rule dann so aus:

Code: Alles auswählen

rule "Rolllaeden zu bei Dunkelheit"
when
    Item SonnensensorsudTerrasse_Luminance changed  // ein Number Item, welches die Helligkeit enthält
then
    if(WohnzimmerFest_Control.state == 100) // Rule bereits aktiviert?
        return;
    if(now.getHour < 16)    // zu früh?
        return;
    if(now.getHour > 18)    // zu spät?
        return;
    if(!(newState instanceof Number)) // liefert Sensor keinen Messwert?
        return;
    if((newState as Number).intValue > 165) // oberer Grenzwert noch nicht unterschritten?
        return;
    if((newState as Number).intValue < 65) // unterer Grenzwert bereits unterschritten?
        return;
   
    // alle Bedingungen sind erfüllt!
    Rolladen.members.forEach[ r | r.sendCommand(DOWN) Thread::sleep(500)]  // alternativ auch 100 statt DOWN
end
Die Rule kann ebenso gut über die UI angelegt werden, hier kann man die ganzen Abbruchbedingungen prima als "but only if" einbauen.
So:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: SonnensensorsudTerrasse_Luminance
    type: core.ItemStateChangeTrigger
conditions:
  - id: "2"
    configuration:
      itemName: WohnzimmerFest_Control
      operator: "<"
      state: "100"
    type: core.ItemStateCondition
  - id: "3"
    configuration:
      startTime: 16:00
      endTime: 19:00
    type: core.TimeOfDayCondition
  - id: "4"
    configuration:
      itemName: SonnensensorsudTerrasse_Luminance
      operator: "<"
      state: "150"
    type: core.ItemStateCondition
  - id: "5"
    configuration:
      itemName: SonnensensorsudTerrasse_Luminance
      operator: ">"
      state: "65"
    type: core.ItemStateCondition
actions:
  - inputs: {}
    id: "6"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: |-
            Rolladen.members.forEach[r | r.sendCommand(DOWN) Thread::sleep(500)]
    type: script.ScriptAction
Achtung! Der Code mag so funktionieren oder nicht, ich habe ihn nicht über die UI erstellt... :)
Da die Abbruchbedingung einer der Rollläden ist, braucht es noch nicht mal ein Reset, der Laden wird ja morgens automatisch geöffnet.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Grandlhuber
Beiträge: 26
Registriert: 22. Sep 2021 07:38
Answers: 0
Wohnort: Bamberg

Re: Rule nur einmal am Tag ausführen lassen

Beitrag von Grandlhuber »

So, habe die rule jetzt mal angelegt. Das mit dem

Code: Alles auswählen

gRoll.members.forEach[ r|
    r.sendCommand(DOWN)
    Thread::sleep(500)
]
kannte ich noch nicht. Das ist definitiv bei meinen Somfy Rolläden dabei. Der Tipp ist Genial :)

Eine bestimmte Reihenfolge muss nicht sein bei den Rolläden. Hauptsache, sie fahren runter. Wurde immer die gesamte Gruppe angesteuert blieb immer einer oben. Wobei es Zufall war, welcher grad oben blieb. Sprich: von den 11 gingen max. 10 runter. Hier scheint die limitation zu sein???.

Keine Ahnung was dann da Somfy mit der Tahomabox macht. Mit der gehts. Das war es aber auch schon. Solche genialen Regeln wie diese hier gehen nicht mit der Original Box. Deswegen habe ich einen Blick auf OpenHab geworfen :D .

Jetzt muss ich nur mal auf einen schlechten (bewölkten) Tag warten und sehen ob es triggert :mrgreen: .

Sag mal, bist du direkt von OpenHab ist woher kennst du dich so aus?

Grüße Oli
Konfig: OpenHab 3.3.0 auf Raspi 4B+ (Raspian).
SomfyTahoma-Bridge im LAN-Modus, Brunnen-, Zisternensteuerung, Außenlampen, Heizung (WebKM200), PV-Anlage per MQQT, Miele-Trockner, Softliq SC18, Dreambox two sowie div. Shellys zur Steckdosensteuerung per Openhab vernetzt.
Visualisierung über Grafana. Daten in Influx gesichert.

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

Re: Rule nur einmal am Tag ausführen lassen

Beitrag von udo1toni »

:) Ich nutze openHAB seit Version 1.0 (das war irgendwann, ca. 2012...) also habe ich ein bisschen Erfahrung.
Thread::sleep(500) legt eine 500 Millisekunden lange Pause ein. Wenn Du experimentierfreudig bist, kannst Du die Zeit auch noch etwas einkürzen, also z.B. auf 100 Millisekunden, das wären dann zehn Befehle pro Sekunde.
Die Limitierung ist fast immer die Anzahl Befehle pro Sekunde (hatte ich mit knx auch... neunzehn Läden... openHAB schießt einfach alle Befehle innerhalb einer Millisekunde gegen das Binding, welches nicht schlau genug ist, die Befehle zu puffern. aber schon zwanzig Millisekunden reichen, um die Läden super zuverlässig fahren zu lassen...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten