Ankündigung

Einklappen
Keine Ankündigung bisher.

LBS mit EXEC, Fragen zur best practice

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

    LBS mit EXEC, Fragen zur best practice

    Moin,

    nach etwas Suchen und Analyse diverser Bausteine und Befragung des Wiki bin ich schon etwas schlauer geworden und habe für meinen Gardena LBS (190016020) den Daemon gewählt, weil man flexibler auf Anforderungen reagieren kann.

    Wählt man hingegen den Weg per Trigger immer den EXEC neu zu starten und überwacht die maximale Laufzeit und baut gleichzeitig eine Mehrfachstart-Verhinderung ein - dann fällt mir keine elegante Lösung ein, wie man nach einem Timeout des EXEC-Skripts wieder in einen Zustand kommt, dass er neu gestartet werden kann (normal macht man ja eine Variable, die man am Ende des EXEC wieder passend setzt - das passiert ja nicht, wenn der EXEC abbricht).

    Wie löst ihr sowas?
    OpenKNX www.openknx.de | NanoBCU und OpenKNX-HW verfügbar

    #2
    Wenn ein EXEC Skript für einen einmaligen Durchlauf getriggert wird, dann sollte es nicht in einen Timeout laufen, sondern sich deutlich vor der maximal erlaubten Laufzeit beenden und vorher die Variable zurücksetzen, die im LBS Bereich einen Mehrfachstart des EXEC Skript verhindert. Die von dir geschilderte Situation sollte also gar nicht auftreten.

    Den Daemon solltest du dann verwenden, wenn der LBS auf Veränderungen reagieren soll, die nicht vom LBS getriggert werden, z.B. Statusänderungen über APIs, etc.

    Wenn du z.B. nur den Gardena steuern willst, dann reicht ein Trigger EXEC. Wenn du auch den Status überwachen willst, dann sollte es wohl ein Daemon sein.

    Kommentar


      #3
      Ich hänge mich mit meiner Frage gleich mal hier an:

      Kann man einen Daemon Exec abbrechen? Wenn ja wie? Ich habe es so versucht, aber anscheinend einen Denkfehler:
      Code:
      ....
      [e#12                = Stop Cycle        #init=0                ]
      ....
      [v#99 = 0]
      ...
      ###[LBS]###
      ...
      if($E[12]['value'] == 1 && $E[12]['refresh'] == 1)
              {
                  setLogicElementVar($id, 99, 1);
              }
      ...
      ###[/LBS]###
      
      ###[EXEC]###
      ...
      while (getSysInfo(1)>=1 || getLogicElementVar($id,99) == 0)
      {
      ...
      }
      ###[/EXEC]###
      Gruß
      Stefan

      Kommentar


        #4
        Wenn du aus dem ODER (||) ein UND (&&) machst, dann sollte es funktionieren.

        Kommentar

        Lädt...
        X