Ankündigung

Einklappen
Keine Ankündigung bisher.

Fensterstatus prüfen

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

    Fensterstatus prüfen

    Hallo,

    ich würde gerne eine Überwachung für geöffnete Fenster konfigurieren. Denn bei uns kommt es des Öfteren vor, dass wir ein Fenster zum Lüften aufmachen, es aber vergessen zu schließen.
    Von der Sache her habe ich folgende Anforderungen:
    Trigger der losrennt, sobald ein Fenster geöffnet wird und dann alle 30 Minuten prüft, ob das Fenster noch offen ist und die Außentemperatur unter 20 Grad
    Sobald das Fenster geschlossen wird, soll der Trigger beendet werden
    Wenn ein Fenster offen ist und die Außentemperatur unter 20 Grad fällt, soll ebenfalls der Trigger loslaufen und alle 30 Minuten prüfen, ob das Fenster noch offen ist.

    Geht sowas? Wie würde ich den Trigger umsetzen ohne in eine Rekursionsschleife zu kommen?

    Danke für Hinweise!!

    Grüße Martin

    #2
    Geht sicherlich, aber was soll der Trigger dann machen und warum alle 30 Minuten immer wieder? Du kannst z.B. einen Timer starten, der dann eine Aktion ausführt. Interessant ist hier eher die Frage, wie ich die Funktionalität über mehrere Fensterkontakte nur mit einer Regel abbildet.

    Thomas

    Kommentar


      #3
      Was soll denn alle 30 Minuten passieren? Grundsätzlich sähe es so aus:
      Code:
      import org.joda.time.DateTime
      
      var Timer t_fenster_1 = null
      
      rule "Fenster 1"
      when
          Item Fenster_1 changed //Fenster_1 ist ein Contact Item
      then
          if (Fenster_1.state == OPEN) {
              if (t_fenster_1 != null) {
                  t_fenster_1.cancel
                  t_fenster_1 = null
              }
              t_fenster_1 = createTimer(now.plusMinutes(30))[|
                  if (Aussentemp.state as DecimalType < 20 ) {
                      // irgendeine Aktion
                      }
                  t_fenster_1.reschedule(now.plusMinutes(30)) //aus dem Kopf, hab grad keinen Designer zur Hand...
             ]
      }
          else if (Fenster_1.state == CLOSED) {
              t_fenster_1.cancel
              t_fenster_1 = null
      }
      end
      Die zweite Anforderung in Deiner Frage ist irgendwie identisch mit der ersten...

      Kommentar


        #4
        Hallo,

        danke für den ausführlichen Code. Die Aktion die ausgeführt werden soll, wird eine PushOver Nachricht aufs Handy sein, mit einer Erinnerung, dass das Fenster noch offen ist und wieder geschlossen werden sollte.

        Hinsichtlich dem Timer habe ich noch eine Frage: Dadurch dass nach dem Create Timer die Logik in [] abgebildet ist und auch innerhalb des Blocks das Neuplanen des Timers erfolgt, wird dieser Block immer wieder ausgeführt, bis der Timer gecancelled wird? Das würde dann ja genau meine Anforderung abbilden.

        Und könnte man die Variable für den Timer auch innerhalb der Regeln abbilden oder muss diese außerhalb definiert werden, um zu funktionieren?

        Danke Martin

        Kommentar


          #5
          Du must ihn außerhalb definieren. Wenn Du in in der Rule definierst ist zwar der Timer noch da, aber du hast am Ende der Rule kein Handle mehr auf den Du das Reschedule setzen kannst.

          Thomas

          Kommentar


            #6
            Danke für die Antwort, das kannich nachvollziehen.

            Grüße Martin

            Kommentar

            Lädt...
            X