Ankündigung

Einklappen
Keine Ankündigung bisher.

Rule für Treppenlicht

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

    Rule für Treppenlicht

    Hallo,

    bin wie schon erwähnt Anfänger in Sachen Openhab.
    Ich würde gerne eine Treppenlichtschaltung als Rule realisieren.
    Dafür habe ich mir die Rule aus dem Demo ein wenig abgeändert
    Code:
    rule "Treppenlicht"
    when
        Item Licht_Treppe received command
    then
        if(receivedCommand==ON) {
            if(timer==null) {
                // first ON command, so create a timer to turn the light off again
                timer = createTimer(now.plusSeconds(180)) [|
                    sendCommand(Licht_Treppe, OFF)
                ]
            } else {
                // subsequent ON command, so reschedule the existing timer
                timer.reschedule(now.plusSeconds(10))
            }
        } else if(receivedCommand==OFF) {
            // remove any previously scheduled timer
            if(timer!=null) {
                timer.cancel
                timer = null
            }    
        }
    end
    Funktioniert auch ganz gut, allerdings nur wenn ich das Licht per App bzw. Webseite einschalte.
    Wenn ich die Lichtschalter manuell bediene, klappt es leider nicht.

    Kann mir jemand einen Gedankenanstoß geben??

    MfG

    Teasy

    #2
    So hat es geklappt
    Code:
    rule "Treppenlicht_1"
    when
        Item Licht_Treppe changed
    then
        if(Licht_Treppe.state==ON) {
            if(timer==null) {
                // first ON command, so create a timer to turn the light off again
                timer = createTimer(now.plusSeconds(120)) [|
                    sendCommand(Licht_Treppe, OFF)
                ]
            } else {
                // subsequent ON command, so reschedule the existing timer
                timer.reschedule(now.plusSeconds(10))
            }
        } else if(Licht_Treppe.state==OFF) {
            // remove any previously scheduled timer
            if(timer!=null) {
                timer.cancel
                timer = null
            }    
        }
    end
    Kann mir jemand erklären was
    timer.reschedule(now.plusSeconds(10))
    bedeutet??

    Kommentar


      #3
      klar

      timer.reschedule(now.plusSeconds(10))

      bedeutet das em aktuellen Endzeitpunkt der Variablen "timer" 10 sekunden hinzugefügt werden. D.h. der Timer verlängert wird.

      Kommentar


        #4
        hmm, ich würde sagen das der Timer auf eine neue Endzeit gesetzt wirt, und zwar auf "jetzt" + 10 Sekunden. Wenn ich richtig liege passt das dann nicht ganz zu einem Treppenlichtautomaten ... oder ?

        Holger

        Kommentar


          #5
          ja der timer müsste dann um 10 erhöht werden, falls also noch ein paar sekunden des alten Timers "übrig" sind.

          Alternativ kannst du auch Timer=Cancel sagen und danach den Timer neuanlegen, so wäre es todsicher, dass der Timer immer max. 10 Sekunden beträgt.

          Ich weiß aber nicht was du dir nicht unter einem "Treppenlichtautomaten" vorstellen kannst

          Kommentar


            #6
            Hatte das ja aus der Demo-Rule und nur für meine Zwecke abgeändert.
            Also kann der Teil aus dem Code raus, wenn ich nur möchte das die Lampe im Treppenhaus 120 Sekunden an ist.

            Guten Rutsch

            Gruß Teasy

            Kommentar

            Lädt...
            X