Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeitbasierte Regelausführung ohne Trigger

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

    Zeitbasierte Regelausführung ohne Trigger

    Hallo zusammen,

    ich suche aktuell nach einer Lösung für meine Automation. Es geht um eine Openhab-Alarmanlage die ich bauen möchte

    Zur Rule:

    Die Rule soll immer dann ausgelöst werden, wenn einer der Sensoren eine Statusänderung erhält. Natürlich könnte ich auch minütliche Ausführung über cron time machen, aber das finde ich doof, lieber wäre mir ich könnte das ganze in der Ausführung definieren.

    Also sinngemäß soll die Logik so aussehen:
    when Item Sensor1 received changed or Item Sensor2 received changed
    then if time cron = 0:00-6:00 do alarm Geht das irgendwie? Danke für eure Hilfe Grüße Michael

    #2
    Dürfte etwa so gehen:

    Code:
    when
      Item Sensor1 changed or
      Item Sensor2 changed 
    then
      if (now.getHourOfDay <=6) {
        do alarm
      }
    end
    Gruß
    Tobias

    Kommentar


      #3
      Korrekturhinweis: es muss if (now.getHourOfDay <=5) heißen - oder alternativ if (now.getHourOfDay < 6) Ab 0:00 Uhr liefert getHourOfDay 0, zwischen 5:00 Uhr und 6:00 Uhr liefert getHourOfDay 5, eben das, was auf der 24-Stunden-Anzeige vor dem Doppepunkt steht...

      Kommentar


        #4
        Ahh Mist, Du hast recht, wie konnte mir nur so ein böser Schnitzer unterlaufen ;-)
        Gruß
        Tobias

        Kommentar


          #5
          Naja, böser Schnitzer... ich weiß nicht... ist halt mehr, dass ich immer meinen Senf dazu geben muss

          Kommentar


            #6
            Hallo zusammen,

            vielen Dank, muss ich nachher mal testen.

            Jetzt noch etwas weiter gesponnen, wie sähe das ganze aus, wenn ich es nur zwischen 1 und 6 Uhr (oder ganz fies 3-4 Uhr und 17-18 Uhr) haben will? Kann ich da eine Range angeben, oder müsste ich das über ne doppelte if else Abfrage machen?

            Also im Sinne von

            if
            now.getHourOfDay < 6 aber now.getHourOfDay > 1
            do ...

            Aber insgesamt ist Openhab einfach richtig gut, muss ich hier mal los werden. Mittlerweile laufen Jalousien, Türsensoren und Heizungsregler wunderbar darüber, muss halt nur noch die ganzen Regeln schreiben wann was warum was machen soll

            Grüße
            Michael
            Zuletzt geändert von FeaR; 21.01.2016, 09:50.

            Kommentar


              #7
              Da gibt es natürlich unterschiedliche Herangehensweisen

              Grundsätzlich kannst du aber einfach Bereiche testen, um beim Beispiel von oben zu bleiben:
              Code:
              if (now.getHourOfDay > 0 && now.getHourOfDay < 6) // 01:00:00 Uhr bis 05:59:59
              if ((now.getMinuteOfDay > 149 && now.getHourOfDay < 4) || now.getHourOfDay == 17 ) // 02:30:00 Uhr bis 03:59:59 und 17:00:00 Uhr bis 17:59:59
              Ich habe das letzte Beispiel noch etwas umformuliert, um es interessanter zu machen
              && bedeutet logisches und, || bedeutet logisches oder. Bei bool'scher Algebra empfiehlt sich die großzügige Anwendung von Klammern um Unklarheiten von vornherein zu vermeiden

              Wenn es minutengenau sein soll, kannst Du einfach getMinuteOfDay verwenden, wie Du im letzten Beispiel sehen kannst, musst Dann halt etwas rechnen, ebenso gibt es das Ganze für Sekunden oder Millisekunden.

              Ich habe eine Regel, die zwischen 7 Uhr und 20 Uhr matchen soll, da habe ich es so formuliert:
              Code:
              if (now.plusHours(4).getHourOfDay > 10)
              Ich zähle also vier Stunden zur Uhrzeit hinzu, bedeutet, um 20 Uhr kommt nach der Berechnung 0 , um 7 Uhr kommt nach der Berechnung 11 heraus. Durch diesen Kniff spare ich mir die doppelte Abfrage. Ob das letztlich weniger Rechenzeit benötigt, keine Ahnung da müsste ein Java Experte mit intimen Kenntnissen der Joda-Erweiterung etwas äußern.

              Kommentar


                #8
                Moin,

                den Trick mit der Addition ist klasse und nach meiner Meinung nach super elegant. Müsste es in deinem Beispiel anber nicht > 11 heißen?

                Gruß
                Thomas

                Kommentar


                  #9
                  Nein, bei x > 11 wäre x ja mindestens 12. 12 -4 = 8 -> Regel matched ab 8 Uhr.

                  Kommentar


                    #10
                    Huhu, super Sache danke dir vielmals. Echt geniale simple Lösung mit dem +4.

                    Momentan kämpfe ich noch mit meiner Müllregel, aber danach werde ich mich unmittelbar der Regel widmen. Denke das klappt dann

                    Kommentar

                    Lädt...
                    X