Ankündigung

Einklappen
Keine Ankündigung bisher.

Timer Funktionen im OH1

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

    Timer Funktionen im OH1

    Hallo zusamman,

    aktuell habe ich eine Regel, die bei mir im Flur das Licht für 45 Sek. anschaltet, wenn über den Bewegungssensor eine Bewegung registriert wurde.

    Das funktioniert auch sehr gut.

    Jetzt kann es ja passieren, dass innerhalb der 45 eine weitere Bewegung erkannt wird und somit der Timer um 45 Sek. verlängert werden soll.
    Da dachte ich spontan an
    Code:
    timer.reschedule(now.plusSeconds(45))
    , allerdings führt das nun dazu, dass der TImer nie endet.

    Gibt es eine Möglichkeit, den Timer zu verlängern wenn er aktiv ist
    Code:
    timer!=null
    ?
    Oder habe ich nur den Weg über das canceln und neusetzen des Timers?

    Danke
    Martin


    #2
    Kommt ja darauf an, was Du nun genau in die Rule reingeschrieben hast. Grundsätzlich jedenfalls funktioniert das Verlängern des Timers genau so.
    Code:
    var Timer myTimer=null
    
    rule "meine Rule"
    when
        Item MyItem received command
    then
        if(myTimer!=null)
            myTimer.reschedule(now.plusSeconds(45))
        else
            myTimer = createTimer(now.plusSeconds(45), [|
                MyItem2.sendCommand(OFF)
                myTimer = null
            ])
    end
    Natürlich ist der Code unvollständig, z.B. ist der Trigger eventuell zu allgemein, aber die Idee dahinter sollte klar sein.
    Falls der Timer ungleich null ist, läuft er gerade, also eine neue Ablaufzeit setzen.
    Falls andererseits der Timer = null ist, wird er neu angelegt.
    Wenn der Timer abläuft, wird der Timer auf null gesetzt (alternativ könnte man auch zusätzlich mit OR auf MyTimer.hasTerminated testen, dann müsste man die Timer-Variable nicht auf null setzen).

    Kommentar


      #3
      Hi,

      danke für deine Antwort. Das dachte ich mir auch.
      Allerdings habe ich folgende Aussage von Kai Kreuzer gefunden, die mich unsicher macht:
      reschedule only works if the timer is still scheduled (i.e. not yet executed).
      Bedeutet das, dass der Timer nur dann verlängert wird, wenn der Timer noch am "runterzählen" ist? Sobald er aber gefeuert hat, dann kann man ihn nicht mehr verlängern?

      Danke
      Martin

      Kommentar


        #4
        Wird ja in dem Beispiel von udo1toni so gezeigt:
        - so lange der Timer läuft, wird er neu gestartet (reschedule)
        - wenn der Timer noch nicht läuft bzw. schon abgelaufen ist, wird ein neuer erzeugt (create)

        Bei Erstellen des Timers wird ja vorgegeben, dass er nach Ablauf auf null gesetzt wird (myTimer = null)

        Andreas


        Kommentar


          #5
          Ok. Dann sollte es eigentlich funktionieren. Ich teste das heute abend noch einmal.

          Kommentar


            #6
            Danke für euere Unterstützung, ich habe es gestern abend eingebaut und es funktioniert.

            Grüße Martin

            Kommentar

            Lädt...
            X