Ankündigung

Einklappen
Keine Ankündigung bisher.

Weihnachtsbeleuchtung per Rule schalten

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

    #16
    Ja, das meinte ich ja: Eine Action, aber irgendwo doch wie ein Script und auch auf eine Steuerdatei (XML) angewiesen.
    dafür aber mächtiger, und ähnlich flexibel wie das gemeinschaftlich entwickelte Script. Mit Start und Endzeiten von Feiertagen, etc.
    evtl schaue ich mir das mal an, wenn ich herausfinde/verstehe wie die beiden wichtigsten Feiertage abgefragt werden können, von denen sich ja diverse andere ableiten.

    Kommentar


      #17
      Hallo,

      ich habe momentan folgende Weihnachtsregel aktiv:


      rule"Weihnachts-Deko einschalten"
      when
      Time cron "0 17 17 ? * MON,TUE,WED,THU,FRI,SAT,SUN *" or
      Time cron "0 37 6 ? * MON,TUE,WED,THU,FRI,SAT,SUN *"

      then
      SD_AS_Terrasse_Robo_temp.sendCommand(ON)
      SD_AS_Terrasse_WEST.sendCommand(ON)
      end


      rule"Weihnachts-Deko ausschalten"
      when
      Time cron "0 07 23 ? * MON,TUE,WED,THU,FRI,SAT,SUN *" or
      Time cron "0 23 8 ? * MON,TUE,WED,THU,FRI,SAT,SUN *"

      then
      SD_AS_Terrasse_Robo_temp.sendCommand(OFF)
      SD_AS_Terrasse_WEST.sendCommand(OFF
      end



      Wie müsste die Regel ergänzt werden, dass sie nur in der Adventzeit auslösen würde, z.B. vom 1. Advent bis zum 20. Januar ?

      Kommentar


        #18
        Zitat von cupra6 Beitrag anzeigen


        Wie müsste die Regel ergänzt werden, dass sie nur in der Adventzeit auslösen würde, z.B. vom 1. Advent bis zum 20. Januar ?
        Ich gehe mal nicht auf die Farben ein, die schlecht zu lesen sind

        Schau doch mal hier => https://knx-user-forum.de/forum/supp...99#post1432899

        Ist innerhalb dieses Threats beschrieben. Dann nur noch an das Enddatum anpassen

        Einschalten am 1. Advent => https://knx-user-forum.de/forum/supp...66#post1433766
        Zuletzt geändert von JoergA; 13.02.2020, 20:21.

        Kommentar


          #19
          Dein Time cron Ausdruck ist ja etwas seltsam...

          So grundsätzlich, wenn es um Weihnachtsbeleuchtung geht, reden wir von einem Zeitraum, der sich von November bis Januar erstreckt (falls man statt Heilige drei Könige Mariä Lichtmess nimmt, käme noch der Februar dazu). Also sollte Time cron eher den Monat einschränken, aber sicher nicht den Wochentag.
          Code:
          rule"Weihnachts-Deko einschalten"
          when
              Time cron "0 17 17 * 11,12,1,2 ?" or
              Time cron "0 37 6 * 11,12,1,2 ?"
          then
              SD_AS_Terrasse_Robo_temp.sendCommand(ON)
              SD_AS_Terrasse_WEST.sendCommand(ON)
          end
          
          
          rule"Weihnachts-Deko ausschalten"
          when
              Time cron "0 07 23 * 11,12,1,2 ?" or
              Time cron "0 23 8 * 11,12,1,2 ?"
          then
              SD_AS_Terrasse_Robo_temp.sendCommand(OFF)
              SD_AS_Terrasse_WEST.sendCommand(OFF
          end
          Die Berechnung des 1. Advent ist recht einfach, siehe Link im letzten Post, oder hier:
          Code:
          intStAdvent = parse(now.getYear + "-12-25").minusDays(((parse(now.getYear + "-12-25").getDayOfWeek) + 21)).getDayOfYear
          Die Berechnung muss nur einmal am Tag ausgeführt werden, am besten kurz nach Mitternacht. Die Variable muss natürlich global definiert sein. Sie enthält dann den Tag im Jahr als Zahl zwischen 1 und 366 (Der Wert schwankt zwischen 330 - 337).
          In der Schaltrule kann man dann abfragen, ob der Tag des Jahres des aktuellen Datums kleiner als 7 (heilige drei Könige) oder größer/gleich intStAdvent ist:
          Code:
          rule"Weihnachts-Deko einschalten"
          when
              Time cron "0 17 17 * 11,12,1,2 ?" or
              Time cron "0 37 6 * 11,12,1,2 ?"
          then
              if(now.getDayOfYear >= intStAdvent || now.getDayOfYear < 7) {
                  SD_AS_Terrasse_Robo_temp.sendCommand(ON)
                  SD_AS_Terrasse_WEST.sendCommand(ON)
              }
          end
          
          
          rule"Weihnachts-Deko ausschalten"
          when
              Time cron "0 07 23 * 11,12,1,2 ?" or
              Time cron "0 23 8 * 11,12,1,2 ?"
          then
              if(now.getDayOfYear >= intStAdvent || now.getDayOfYear < 8) { // abschalten auch am 7. Januar
                  SD_AS_Terrasse_Robo_temp.sendCommand(OFF)
                  SD_AS_Terrasse_WEST.sendCommand(OFF
              ]
          end

          Kommentar


            #20
            Hallo es ist ja bald wider so weit und der Advent rückt näher.

            Nach dem Umstig auf OH3 funktioniert die Regel mit dem Parsen nicht mehr.
            Code:
            intStAdvent = parse(now.getYear + "-12-25").minusDays(((parse(now.getYear + "-12-25").getDayOfWeek) + 21)).getDayOfYear
            Offensichtlich hat sich dort etwas an der Sprachbibliothek geändert.
            gibt es mittlerweile eine Reverenz zu der Lib?
            Also welche Möglichkeiten ausser
            Code:
            now.getDayOfWeek
            oder ähnlich gibt es denn noch und wie kann ich diese jetzt parsen?
            Gruß

            Guido

            Kommentar


              #21
              In der Tat gibt es eine Doku zur aktuellen Bibliothek (es handelt sich um JavaTime, früher war es Joda Time). Der gesuchte Ausdruck lautet nun
              Code:
              now.getDayOfWeek.getValue
              denn getDayOfWeek liefert nun den Namen des Wochentags als String.

              Kommentar


                #22
                Hallo Udo,

                danke für deinen Antwort. Und die Information zur lib. So weit so gut, leider wird auch das "parse" angemarkert. gibt es da auch was neues?
                Gruß

                Guido

                Kommentar


                  #23
                  Ich hab das jetzt gerade mal getestet. So sollte es passen:
                  Code:
                  intStAdvent = LocalDate.now.withMonth(12).withDayOfMonth(25).minusDays(LocalDate.now.withMonth(12).withDayOfMonth(25).getDayOfWeek.getValue+21).getDayOfYear​

                  Kommentar


                    #24
                    Hallo Udo,

                    danke für deine Unterstützung.
                    Gruß

                    Guido

                    Kommentar


                      #25
                      Update

                      So müsste es auch gehen:
                      Code:
                      intStAdvent = LocalDate.of(now.getYear,12,25).minusDays(LocalDate.of(now.getYear,12,25).getDayOfWeek.getValue + 21).getDayOfYear​
                      etwas kürzer

                      Kommentar


                        #26
                        Wo du es auch immer her holst ;-)

                        Danke
                        Gruß

                        Guido

                        Kommentar


                          #27
                          Na, in dem Fall, weil ich letzte Woche selbst von openHAB2.5.12 auf openHAB3.3 umgestiegen bin und dann selbst über die Zeile gestolpert bin (mit Ephemeris habe ich mich noch nicht auseinandergesetzt) parse funktioniert auch noch, aber ich habe noch nicht rausgefunden, wie genau. Die Idee von parse war ja hauptsächlich, dass man das Datum "einfach so" hinschreiben kann, was am ehesten mit .of(year,month,day) auch geht. Ich habe auch eine Datei mit den Ferienterminen, dort wäre das Konstrukt mit .withMonth()... einfach echt hässlich geworden. Wenn man now.getYear noch in eine kurze Variable year speichert, wird es noch "verständlicher":
                          Code:
                          val year = now.getYear
                          intStAdvent = LocalDate.of(year,12,25).minusDays(LocalDate.of(year,12,25).getDayOfWeek.getValue + 21).getDayOfYear
                          Also nimm den 25. Dezember des aktuellen Jahrs, ziehe von diesem den Wochentag als Zahl des selben Datums ab (womit wir auf dem Sonntag vor dem 25.12. landen, das ist der 4. Advent). Um vom 4. Advent auf den 1. Advent zu kommen, müssen wir weitere drei Wochen in die Vergangenheit, also - 21 Tage (oder eben die 21 zu dem Wochentag dazu zählen, um einen Rechenschritt zusammenzufassen).

                          Kommentar


                            #28
                            Danke für die Erklärung, ich war nurwieder über die Syntax erstaunt (yaer,12,25) wo findet man das, dass man dies so kombinieren kann.
                            Gruß

                            Guido

                            Kommentar


                              #29
                              Tante Google, die offizielle Oracle Doku... https://docs.oracle.com/javase/8/doc...LocalDate.html wäre die Seite zu LocalDate.
                              Manchmal ist es etwas tricky, zu verstehen, was die eigentlich wollen (liegt natürlich daran, dass ich von IT Ahnung habe - mehr aber auch nicht... ich ahne...)
                              Und selbstverständlich ist die offizielle community extrem hilfreich.

                              Kommentar


                                #30
                                Zitat von udo1toni Beitrag anzeigen
                                Na, in dem Fall, weil ich letzte Woche selbst von openHAB2.5.12 auf openHAB3.3 umgestiegen bin ...
                                Oha, nun ist es doch passiert, was Du so lange vor Dir herschoben hast

                                Kommentar

                                Lädt...
                                X