Ankündigung

Einklappen
Keine Ankündigung bisher.

Rule nur in bestimmten Zeitraum ausführen

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

    Rule nur in bestimmten Zeitraum ausführen

    Hallo zusammen,

    ich möchte, dass eine bestimmte Rule nur zwischen dem 01.12 und 15.01.2019 ausgeführt wird.

    Kann mir jemand ein Beispiel geben wie ich das in die Rule einpflegen muss?

    Viele Grüße
    Sascha

    #2
    Na ja, Du musst halt die Werte abfragen:
    Code:
    rule "testrule"
    when
        //irgendein trigger
    then
        if((now.getMonth == 12 && now.getYear == 2019) || (now.getMonth == 1 && now.getYear == 2020 && now.getDayOfMonth < 16)) {
            // auszuführender Code
        }
    end
    Eine andere Frage ist, wozu dieser Zeitraum.
    Ich habe bei mir die Adventszeit so abgebildet:
    Code:
    // globale Variablen zu Beginn der Datei definieren! var long intStAdvent
    rule "Feiertage" when
        Time cron "5 0 0 * * ?" or
        System started
    then
        intStAdvent = parse(now.getYear + "-12-25").minusDays(((parse(now.getYear + "-12-25").getDayOfWeek) + 28)).getDayOfYear + 1  // Montag vor 1. Advent
    end
     
    rule "Weihnachtslicht ein"
    when
        Time cron "0 0 6 * * ?" or
        Time cron "0 30 16 * * ?"
    then
        if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent) {
            logDebug("x-mas","Weihnachtsbeleuchtung ein.")
            SchaltGruppe3_Ch4.sendCommand(ON)
        }
    end
    
    rule "Weihnachtslicht aus"
    when
        Time cron "0 0 9 * * ?" or
        Time cron "0 30 22 * * ?"
    then
        if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent) {
            logDebug("x-mas","Weihnachtsbeleuchtung aus.")
            SchaltGruppe3_Ch4.sendCommand(OFF)
        }
    end

    Kommentar


      #3
      Hallo,

      vielen lieben Dank für die ausführliche Erklärung.

      Darf ich fragen, was bei dem zweiten Skript zeitlich gemacht wird?

      Berechnet der immer den Zeitraum neu oder was macht das Skript`?

      Kommentar


        #4
        Zitat von SaschaQ Beitrag anzeigen
        Hallo,

        vielen lieben Dank für die ausführliche Erklärung.

        Darf ich fragen, was bei dem zweiten Skript zeitlich gemacht wird?

        Berechnet der immer den Zeitraum neu oder was macht das Skript`?
        Hi

        intStAdvent wird jede Nacht oder bei Sytemstart berechnet und sollte das Datum des Montags vor dem 1. Advent ergaben. dies wird dann im zweiten Teil genutzt und das aktuelle Datum zu vergleichen und dann eben die Weihnachtsbeleuchtung, bzw verschiedene Stevkdosen dann zu schalten Schau doch mal den Threat https://knx-user-forum.de/forum/supp...eiertage/page2 an, dort haben wir ein Script geschrieben, mit dem alle Feiertage (auch Adventstage) berechnet werden, so schalte ich z.B. Am Totensonntag keine Weihnachts/Adventsbeleuchtung ein.

        viele Grüße,
        Jörg

        Kommentar


          #5
          Der Totensonntag ist der Sonntag vor dem Montag vor dem 1. Advent Die Adventszeit beginnt mit dem Montag vor dem 1. Advent, vorher sollte auch keine Weihnachtsbeleuchtung aktiv sein (auch wenn Kaufhausketten und Lebensmittelmärkte da anderer Ansicht sind).

          Kommentar


            #6
            Hi Udo,

            bis wann läuft deine Beleuchtung denn laut dem Skript.

            Also vom Totensonntag bis?

            Kommentar


              #7
              Zitat von udo1toni Beitrag anzeigen
              Der Totensonntag ist der Sonntag vor dem Montag vor dem 1. Advent Die Adventszeit beginnt mit dem Montag vor dem 1. Advent, vorher sollte auch keine Weihnachtsbeleuchtung aktiv sein (auch wenn Kaufhausketten und Lebensmittelmärkte da anderer Ansicht sind).
              Ich starte mit der Beleuchtung mit den Weihnachtsmärkten ;-)

              now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent) der erste Teil sagt kleiner 7 also täglich (wenn ich nicht irre) da Sonntag 0 und Samstag 6 ist der zweite Teil sagt größer dem Wert der Variable (als Datum) also bis 31.12. denn der 01.01. ist dann kleiner als intStAdvebt. viele Grüsse, Jörg

              Kommentar


                #8
                Meine Beleuchtung springt das erste Mal am Montag nach dem Totensonntag an (also dem Montag vor dem 1. Advent) und zuletzt am 6. Januar (if(now.getDayOfYear < 7)), also Heilige 3 Könige. Man könnte auch Mariä Lichtmeß nehmen, das wäre der 2. Februar. Die Bräuche sind wohl regional etwas unterschiedlich.

                Gerade lese ich in Wikipedia, dass die Adventszeit erst am Vorabend des 1. Advent beginnt, also Samstag Abend. Hei, da muss ich wohl flugs die Regeln anpassen...

                Kommentar


                  #9
                  Zitat von udo1toni Beitrag anzeigen
                  Gerade lese ich in Wikipedia, dass die Adventszeit erst am Vorabend des 1. Advent beginnt, also Samstag Abend.
                  Gerade dank Googlr gefunden

                  Beginn der Adventszeit
                  Die Adventszeit beginnt mit der ersten Vesper des ersten Adventssonntags und endet am Heiligen Abend mit der ersten Vesper von Weihnachten. Die westliche christliche Adventszeit dauert 22 bis 28 Tage und hat immer vier Sonntage, mit Ausnahme der Bistümer, die am Ambrosianischen Ritus festhalten.

                  Der Grund für die unterschiedliche Länge der Adventszeit liegt in der Tatsache, dass der Beginn an einen Sonntag gebunden ist, das Ende aber einen Monatstag, den 24. bzw. 25. Dezember. Der letzte Adventssonntag ist dabei der Sonntag vor dem 25. Dezember, womit sich als frühestmögliches Datum der 18. und als spätestmögliches der 24. Dezember ergibt. Daraus folgt: die Adventszeit beginnt am Sonntag zwischen dem 27. November und dem 3. Dezember.

                  Der 1. Adventssonntag ist der viertletzte Sonntag vor dem 25. Dezember, die Adventszeit endet am Weihnachtstag. Früher galt die Adventszeit als Fasten- und Bußzeit, in der nicht getanzt und nicht geheiratet werden durfte.
                  Zitat von udo1toni Beitrag anzeigen
                  Hei, da muss ich wohl flugs die Regeln anpassen...
                  Japp, und ich werde auch noch einmal meine Zeitspanne überdenken ;-)

                  Kommentar


                    #10
                    Ich möchte nun das die Weihnachtsbeleuchtung zwischen dem 27.11 und 16.01 anspringt.


                    if((now.getMonth == 11 && now.DayOfMonth == 27) || (now.getMonth == 1 && now.getDayOfMonth < 16)) {



                    funktioniert das damit?

                    Kommentar


                      #11
                      Nein, denn diese Bedingung ist ausschließlich am ersten bzw. letzten Tag erfüllt, nicht aber in der Zwischenzeit. Einfacher geht es mit .getDayOfYear. Entweder kleiner als 17 (= 16. Januar als Maximum) oder größer als 331 (26.11., aber Achtung! im Schaltjahr wäre es dann 332)

                      Kommentar

                      Lädt...
                      X