Seite 1 von 1

Rules verzögerung - OpenHab3

Verfasst: 17. Sep 2021 16:38
von Wolle39
Hallo zusammen.

Ich habe ein Rule die ein sends a command to a item (insgesamt 7 Stück) sendet.
Also wenn der Status eines Items wechselt werden die 7 anderen Items angesprochen.

Es scheint so, als wären das zu viele auf einmal, den es werden nicht immer alle geschaltet.
Das ganze habe ich über die OpenHab - Rules vorgenommen.

Hier der Code

Code: Alles auswählen

triggers:
  - id: "1"
    configuration:
      itemName: Szenen_Beleuchtung
      command: "4"
    type: core.ItemCommandTrigger
conditions: []
actions:
  - inputs: {}
    id: "8"
    configuration:
      itemName: Anel1_LichtEingang
      command: ON
    type: core.ItemCommandAction
  - inputs: {}
    id: "3"
    configuration:
      itemName: Anel1_Grillplatz
      command: ON
    type: core.ItemCommandAction
  - inputs: {}
    id: "4"
    configuration:
      itemName: Anel1_LichtEingang
      command: ON
    type: core.ItemCommandAction
  - inputs: {}
    id: "5"
    configuration:
      itemName: Anel1_Treppenlichter
      command: ON
    type: core.ItemCommandAction
  - inputs: {}
    id: "6"
    configuration:
      itemName: Anel1_WasserLED
      command: ON
    type: core.ItemCommandAction
  - inputs: {}
    id: "7"
    configuration:
      itemName: Anel1_Wasserlauf
      command: ON
    type: core.ItemCommandAction
  - inputs: {}
    id: "2"
    configuration:
      itemName: Anel1_Baumlichter
      command: ON
    type: core.ItemCommandAction


Kann ich da eine Verzögerung zwischen jedem command einbauen?

Danke und Gruß
Wolle

Re: Rules verzögerung - OpenHab3

Verfasst: 17. Sep 2021 18:53
von BOP
Ich kann mir nicht vorstellen, dass openHAB das nicht schafft. Ich denke da liegt das Problem woanders.

Aber, warum packst du die Items nicht alle in eine Gruppe und schaltest dann die Gruppe? Für das Vorhaben benötigt es doch keine Rule, die Items einzeln schaltet.

Re: Rules verzögerung - OpenHab3

Verfasst: 17. Sep 2021 19:58
von udo1toni
Das Problem ist nicht openHAB :) sondern das Binding, welches die Koppelung zwischen openHAB und Hardware bildet. Anders ausgedrückt: openHAB ist nicht zu langsam, sondern zu schnell. Anel kann nur eine bestimmte Anzahl Kommandos pro Zeiteinheit senden. Leider ist es regelmäßig so, dass Bindings nicht in der Lage sind, die Befehle (unbegrenzt) zu puffern. Die Lösung mit einer Verzögerung ist also naheliegend und richtig.

Die Rule allerdings ist nicht geeignet, eine Verzögerung einzubauen.
Eine simple Rule auf Basis der Rules DSL sähe so aus:

Code: Alles auswählen

rule "szene aufrufen"
when
    Item Szenen_Beleuchtung received command 4
then
    Anel1_LichtEingang.sendCommand(ON)
    Thread::sleep(250)
    Anel1_Grillplatz.sendCommand(ON)
    Thread::sleep(250)
    Anel1_LichtEingang.sendCommand(ON)
    Thread::sleep(250)
    Anel1_Treppenlichter.sendCommand(ON)
    Thread::sleep(250)
    Anel1_WasserLED.sendCommand(ON)
    Thread::sleep(250)
    Anel1_Wasserlauf.sendCommand(ON)
    Thread::sleep(250)
    Anel1_Baumlichter.sendCommand(ON)
end
Diese Rule ist allerdings nicht sonderlich schön. Du willst die Lampen gemeinsam schalten, dann nutze ein Group Item und ordne die Items dem Group Item zu. Nehmen wir an, das Group Item heißt gAnel, dann sähe die Rule so aus:

Code: Alles auswählen

rule "szene aufrufen"
when
    Item Szenen_Beleuchtung received command 4
then
    gAnel.members.forEach[ i |
        i.sendCommand(ON)
        Thread::sleep(250)
    ]
end
Die 250 steht für 250 Millisekunden, das entspricht dann also vier Kommandos pro Sekunde.

Die Rule ist (in beiden Formen) auch über die UI anzulegen. Dabei wird der Trigger wie gehabt definiert, der Teil zwischen then und end landet bei add Action mit "Run a Script -> Rule DSL" in einem Script.

Re: Rules verzögerung - OpenHab3

Verfasst: 18. Sep 2021 08:26
von Wolle39
Hallo udo1toni.

Wie immer auf den Punkt!
So gemacht und es schnurrt jetzt alles.

Vielen Dank für deine / eure Unterstützung.

Gruß Wolle