Ankündigung

Einklappen
Keine Ankündigung bisher.

Fragen zu lock.lock / lock.unlock und der Reihenfolge von Rules

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Fragen zu lock.lock / lock.unlock und der Reihenfolge von Rules

    Hi,

    ich baue gerade an einer State-Machine, die mit ein paar Timern und einer handvoll Rules gebaut ist. Das funktioniert auch erstmal ganz gut, aber ich habe bei der Ausgabe meiner Debug Messages gesehen, dass diese machmal sehr zögerlich erscheinen, machmal auch recht flott. Ich bin mir nicht sicher, ob das auch Auswirkungen auf die Laufzeit der Rules hat, aber beim Nachdenken über den Setup bin ich zu der Erkenntnis gelangt, dass es passieren kann, dass durch gleichzeitiges oder nahezu gleichzeitigem Beträtigen von physikalischen (in diesem Falle)Lichtschaltern einzelne Rules des Konstruktes auch (pseudo) gleichzeitig laufen können.

    Beim Forschen, was ich dagegen tun kann, bin ich über lock/unlock gestolpert und habe schon gedacht, dass das dieses Problem lösen könnte. Dann habe ich mal google dazu befragt und erfahren, dass lock/unlock auch gewisse Seiteneffekte haben kann, wenn aus z.B. Fehlergründen das unlock nicht erfolgt. Die bevorzugte Lösung dieses Themas wäre "Synchronized Block". Leider finde ich dazu nichts in der OpenHAB Docu.

    Also bleiben folgende Fragen:
    1. gibt es die Synchronized Block Version in OpenHAB?
    2. Wenn ja, was für ein "import" ist dazu nötig?
    3. Wonach muß ich suchen oder wo muß ich suchen, um dafür Dokumentation zu finden?
    3. Kann ich davon ausgehen, dass in einer Rule alle Statements wirklich in der eingetragenen Reihenfolge abgearbeitet werden, oder können "langsame" Statments von "schnelleren" überholt werden?
    4. Wenn es denn dazu kommt, dass eine Rule aufgrund eines Fehlers nicht das "unlock" Statement erreicht, was ist zu tun, um den "lock" zu lösen? "Hilfsrule" starten die nur aus "MeinLock.unlock" besteht? Restart openHAB? Oder Reboot?


    Gruß
    Peter


    #2
    Hi,

    ich habe meine Antworten in

    https://community.openhab.org/t/expl...-command/14347

    gefunden. Vielen Dank an udo1toni für den Hinweis in einem anderen Thread.

    Gruß
    Peter

    Kommentar


      #3
      Zu 1. Keine Ahnung (gilt natürlich erst recht für 2. und leider ebenfalls für das erste 3. )
      Zum zweiten 3.: Die Rule wird Schritt für Schritt abgearbeitet. Du kannst Dir einen einfachen lock-Mechanismus auch selbst bauen, indem Du zu Beginn prüfst, ob eine (außerhalb der Rule definierte) Variable true ist. Wenn das der fall ist, beendest Du die Rule sofort, falls die Variable aber false ist, setzt Du sie auf true und arbeitest Deine Befehle ab. Natürlich musst Du unbedingt am Ende die Variable wieder auf false setzen.
      Der lock-Mechanismus sorgt im Zweifel dafür, dass jeder Ruleaufruf auch abgearbeitet wird, aber erst, wenn der vorherige Aufruf komplett fertig ist.
      Zu 4: Du könntest das in der Tat auch von einer anderen Rule aus zurücksetzen, allerdings konterkarierst Du damit natürlich die Funktion des lock. Ich denke, es kommt auch darauf an, wie lange die Rule braucht, um durchzulaufen. Normalerweise sollte eine Rule nur wenige msec bis wenige 100msec benötigen, also könntest Du zu Beginn einen Timer starten, der das Rücksetzen übernimmt. das Blöde daran ist, 1. kann auch so ein Timeraufruf klemmen, und 2. ist damit ja nicht sichergestellt, dass die Rule auch schon wieder inaktiv ist, meines Wissens gibt es keine einfache Möglichkeit, eine laufende Rule von außen "anzuhalten".

      Kommentar

      Lädt...
      X