Ankündigung

Einklappen
Keine Ankündigung bisher.

Timer canceln

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

    Timer canceln

    Hallo,

    Ich beiß mir grad die Zähne an einer rule aus.
    Ich habe Homematic Tür-/Fensterkontakte und möchte meine Frau darauf "hinweisen" (mit Mail/Prowl) das man die Badezimmertür (besonders im Winter) auch zumachen kann bzw. diese nicht aufstehen muss ;-).
    Dazu soll der Timer loslaufen wenn die Türe aufgeht bzw "Item Bad_Tuer " ein "OPEN" empfängt. Wenn innerhalb 2 Minuten kein "CLOSED" kommet soll eine Mail abgesetzt werden. Wenn ein innerhalb 2 Minuten ein "CLOSED" kommt soll die Ausführung gestoppt werden bzw. der Timer gelöscht und nichts passieren.
    Hab schon mehrere Varianten ausprobiert, so richtig wills aber nicht. Der Timer wird irgendwie nicht gecancled. Im Moment siehts so aus:
    Code:
    import org.openhab.model.script.actions.Timer
    
    var Timer timer_BT
    rule "Alarm Note Badtuer"
    when
        Item Bad_Tuer received update
    then
        if(Bad_Tuer.state==OPEN) {
               timer_BT = createTimer(now.plusSeconds(120)) [|
                sendMail("...@gmail.com", "Achtung...", "Die Badezimmertuer ist auf!!")
                ]
            } else {
        if(Bad_Tuer.state==CLOSED) {
            timer_BT.cancel
            }
        }
    end
    Die Items melden alle Status correct im log.

    Kann mich jemand erleuchten? Daaaanke
    PhilW
    Zuletzt geändert von PhilW; 08.06.2015, 10:13.
    Google oder Wiki-Hilfe-Hinweise nehme ich nur an wenn sie mich total blamieren..... dann ertrage ich sie auch in Demut und Dankbarkeit;-)

    #2
    Moin Moin,

    schau dir mal diesen Beitrag an....

    MfG

    Kommentar


      #3
      Morjen,

      danke werd ich nachher mal probieren.
      Rein im Kopf würde das ja so aussehen:
      Code:
      import org.joda.time.DateTime
      
      var Timer timer_BT = null
      
      rule "Alarm Note Badtuer auf"
          when
              Item Bad_Tuer received update OPEN
          then
               if (timer_BT!=null){
                  timer_BT.cancel
                  timer_BT = null
              }
              timer_BT = CreateTimer(now.plusMinutes(2)) [|
              sendMail("....@gmail.com","Achtung", "Die Badezimmertuer ist auf!!")]
          
      end
      
      rule "Alarm Note Badtuer zu"
          when
              Item Bad_Tuer received update CLOSED
          then
                  timer_BT!=null{
                  timer_BT.cancel
                  timer_BT = null
              }
      end
      Wenn die Tür innerhalb der 2 Minuten zu geht will ich ja nix mehr ausführen nur noch den Timer canceln ist das den nach dem "then" richtig?

      Gruss
      PhilW
      Google oder Wiki-Hilfe-Hinweise nehme ich nur an wenn sie mich total blamieren..... dann ertrage ich sie auch in Demut und Dankbarkeit;-)

      Kommentar


        #4
        Mir fällt spontan auf, dass Du auf update triggerst. Wenn ich es richtig im Kopf habe, dann kommen updates regelmäßig von den Türkontakten, was aber nicht heisst, dass dann die Tür geschlossen wird. Wenn also nach einem open ein Update open kommt, dann wird ein weiterer Timer gestartet, so dass dan zwei laufen. Bei einem close hats du aber nur zugriff auf den einen Timer, der in deiner Variable steht. versuche es mal mit changed to open satt received to open

        Thomas

        Kommentar


          #5
          Ahhhja,
          sehr guter Hinweiss, danke. Hatte mich schon gewundert warum die Mail ein paar mal kam. Das "update" kommt zwar sehr selten im log, aber es kommt ;-)
          Heisst also:
          Code:
          import org.joda.time.DateTime
          var Timer timer_BT = null
          
          rule "Alarm Note Badtuer auf"
              when
                  Item Bad_Tuer changed from CLOSED to OPEN
              then
                   if (timer_BT!=null){
                      timer_BT.cancel
                      timer_BT = null
                  }
                  timer_BT = CreateTimer(now.plusMinutes(2)) [|
                  sendMail("....@gmail.com", "Achtung", "Die Badezimmertuer ist auf!!")]
              
          end
          
          rule "Alarm Note Badtuer zu"
              when
                  Item Bad_Tuer changed from OPEN to CLOSED
              then
                      timer_BT!=null{
                      timer_BT.cancel
                      timer_BT = null
                  }
          end
          Richtig?
          Zuletzt geändert von PhilW; 08.06.2015, 12:23.
          Google oder Wiki-Hilfe-Hinweise nehme ich nur an wenn sie mich total blamieren..... dann ertrage ich sie auch in Demut und Dankbarkeit;-)

          Kommentar


            #6
            Sieht für mich gut aus, jetzt könntest du beide Rules noch in eine einzige packen.
            Code:
            rule "Alarm Note Badtuer auf"
              when Item Bad_Tuer changed
            then
              if (timer_BT!=null){
                  timer_BT.cancel
                  timer_BT = null
              }
              if (Bad_Tuer.state = OPEN) {
                           timer_BT = CreateTimer(now.plusMinutes(2)) [| sendMail("....@gmail.com", "Achtung", "Die Badezimmertuer ist auf!!")]
              }
            end
            Thomas

            Kommentar


              #7
              Zitat von dibbler42 Beitrag anzeigen
              Sieht für mich gut aus, jetzt könntest du beide Rules noch in eine einzige packen.
              Code:
              rule "Alarm Note Badtuer auf"
              when Item Bad_Tuer changed
              then
              if (timer_BT!=null){
              timer_BT.cancel
              timer_BT = null
              }
              if (Bad_Tuer.state = OPEN) {
              timer_BT = CreateTimer(now.plusMinutes(2)) [| sendMail("....@gmail.com", "Achtung", "Die Badezimmertuer ist auf!!")]
              }
              end
              Ähm ok, jetzt bin ich verwirrt ;-). Heisst nur wenn "= OPEN" wird der Timer aktiviert und wenn Bad_Tuer wieder "changed" wird er gecanceld?
              Muss man erst mal drauf kommen wenn man nicht den ganzen Tag mit codes rummacht.
              Danke
              PhilW
              Zuletzt geändert von PhilW; 08.06.2015, 12:55.
              Google oder Wiki-Hilfe-Hinweise nehme ich nur an wenn sie mich total blamieren..... dann ertrage ich sie auch in Demut und Dankbarkeit;-)

              Kommentar


                #8
                Fehler, das muss == heißen. Ja, aber genau so funktioniert es ein change nach Tür auf und dann geht es ebn nicht aufer sonder nur noch zu :-) Ich baue gerade ähnliches für das Lüften in Abhängigkeit des Taupunktes.

                Thomas

                Kommentar


                  #9
                  Irre, eyeyey da kommen einem ja noch sooo viele Ideen..., wenn ich nicht bald aufhöre neue rules zu bauen, krieg ich bestimmt Ärger mit meiner Frau ;-)))

                  Danke nochmal
                  Gruss
                  PhilW
                  Google oder Wiki-Hilfe-Hinweise nehme ich nur an wenn sie mich total blamieren..... dann ertrage ich sie auch in Demut und Dankbarkeit;-)

                  Kommentar


                    #10
                    Du musst einfach den WaF (Woman acceptance Factor) entsprechend hochschrauben und bei ihr fragen, was ihr den nützen würde. Bei mir geht z.B. das Licht im Keller an, wenn man die Türaufmacht. Meine Frau findet das luxus ...


                    Thomas

                    Kommentar


                      #11
                      Klar, diese Spielereien hab ich auch und die weiss sie auch zu schätzen, nur der Einsatz dieser "Vorschrifts&Überwachungs-Rules" wie "mach die Tür zu" oder "die Heizung muss keine 25 Grad haben" oder " dein Smartphone hat sich erst um 0:30 Uhr ins WLan eingebucht" etc. müssen mit Bedacht eingesetzt werden...
                      Google oder Wiki-Hilfe-Hinweise nehme ich nur an wenn sie mich total blamieren..... dann ertrage ich sie auch in Demut und Dankbarkeit;-)

                      Kommentar


                        #12
                        Ich bin mir nicht so sicher, ob der Code aus #7 so funktioniert, denn wenn das Update innerhalb der 2 Minuten Timerlaufzeit kommt, wird der Timer gecanceled und anschließend (da die Tür ja offen ist) neu gestartet, die Mail wird aber nicht verschickt, weil der Timer ja nicht bis zum Ende lief.

                        EDIT: Ach... grad gesehen... Item changed... ja, dann passt das naürlich so Das nächste Mal genau hinschauen, bevor man rum motzt ...
                        Zuletzt geändert von udo1toni; 08.06.2015, 19:14.

                        Kommentar


                          #13
                          N'Abend,

                          so, also funzt nicht wirklich. Im log kommt:
                          Code:
                          2015-06-08 18:37:40.371 [INFO ] [runtime.busevents             ] - Bad_Tuer state updated to OPEN
                          2015-06-08 18:37:40.521 [ERROR] [o.o.c.s.ScriptExecutionThread ] - Error during the execution of rule 'Alarm Note Badtuer auf': The name '<XFeatureCallImplCustom> != <XNullLiteralImpl>' cannot be resolved to an item or type.
                          Als Amateur kann ich mit der Fehlermeldung nix anfangen. Ich könnte vielleicht interpretieren das es mit der:
                          Code:
                          (timer_BT!=null)
                          zusammenhängt.
                          Bei GoogleGroups steht ja das man die "org.openhab.model.script.actions.*" oder auch mit ".timer" einfügen soll, nützt aber nix. Fehlermeldung kommt trotzdem.
                          Ideen??

                          Gruss
                          PhilW
                          p.s. ach so bin auf OH 1.7
                          Google oder Wiki-Hilfe-Hinweise nehme ich nur an wenn sie mich total blamieren..... dann ertrage ich sie auch in Demut und Dankbarkeit;-)

                          Kommentar


                            #14
                            Hast Du vor der ersten Rule im Rulefile
                            Code:
                            var Timer timer_BT = null
                            stehen? Der Platz für dei Variablendefinition ist zwingend ganz am Anfang (genau wie die imports).

                            Kommentar


                              #15
                              Jau hab ich. Sieht komplett so aus:
                              Code:
                              import org.openhab.model.script.actions.*
                              
                              var Timer timer_BT = null
                              
                              rule "Alarm Note Badtuer auf"
                              when
                                   Item Bad_Tuer changed
                              then
                                  if (timer_BT!=null){
                                  timer_BT.cancel
                                  timer_BT = null
                                  }
                                  if (Bad_Tuer.state==OPEN) {
                                      timer_BT = CreateTimer(now.plusMinutes(2)) [| sendMail("...@gmail.com", "Achtung", "Die Badezimmertuer ist auf!!")]
                                      }
                              end
                              Zuletzt geändert von PhilW; 08.06.2015, 21:52.
                              Google oder Wiki-Hilfe-Hinweise nehme ich nur an wenn sie mich total blamieren..... dann ertrage ich sie auch in Demut und Dankbarkeit;-)

                              Kommentar

                              Lädt...
                              X