Ankündigung

Einklappen
Keine Ankündigung bisher.

Weihnachtsbeleuchtung Rules über einen Schalter aktivieren/deaktivieren

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

    Weihnachtsbeleuchtung Rules über einen Schalter aktivieren/deaktivieren

    Hallo,
    ich würde gerne meine Rules für Beleuchtung mit einem Dummy Schalter in der App ein bzw ausschalten. Das heißt z.B. wenn die Dekoration fertig ist dann aktiviere ich die Rules die ich hinterlegt habe und die funktioniert solange ich den Schalter wieder deaktiviere.
    Ich weiß leider nicht wo ich den Schalter reinpacken soll damit die Funktion gegeben ist.

    Rules:

    Code:
    rule "Sonnenuntergang Weihnachtslicht EIN Abend"
    when
    Channel "astro:sun:home:set#event" triggered START //Sonnenuntergang Weihnachtslicht EIN
    then
    Wohnzimmer_Steckdosen.sendCommand(ON)
    Buero_Steckdosen.sendCommand(ON)
    Ankleide_Steckdosen.sendCommand(ON)
    Balkon_Steckdosen.sendCommand(ON)
    end
    
    rule "Weihnachtslicht AUS Abend"
    when
    Time cron "0 0 0 * * ?" //Weihnachtslicht AUS 00:00 Uhr
    then
    Wohnzimmer_Steckdosen.sendCommand(OFF)
    Buero_Steckdosen.sendCommand(OFF)
    Ankleide_Steckdosen.sendCommand(OFF)
    Balkon_Steckdosen.sendCommand(OFF)
    end
    
    
    rule "Weihnachtslicht EIN Morgens"
    when
    Time cron "0 30 5 * * ?" //Weihnachtslicht AN 5:30 Uhr
    then
    Wohnzimmer_Steckdosen.sendCommand(ON)
    Buero_Steckdosen.sendCommand(ON)
    Ankleide_Steckdosen.sendCommand(ON)
    Balkon_Steckdosen.sendCommand(ON)
    end
    rule "Sonnenaufgang Weihnachtslicht AUS Morgens"
    when
    Channel "astro:sun:home:rise#event" triggered START //Sonnenaufgang Weihnachtslicht EIN
    then
    Wohnzimmer_Steckdosen.sendCommand(OFF)
    Buero_Steckdosen.sendCommand(OFF)
    Ankleide_Steckdosen.sendCommanod(OFF)
    Balkon_Steckdosen.sendCommand(OFF)
    end
    Item:
    Code:
    Switch Weihnachtslicht "Weihnachtslicht" ["Lighting"]
    Zuletzt geändert von domi1705; 09.12.2023, 22:09.

    #2
    Na, Du musst den Schalter als Bedingung innerhalb des Codes verwenden, z.B.
    Code:
    rule "Sonnenuntergang Weihnachtslicht EIN Abend"
    when
        Channel "astro:sun:home:set#event" triggered START //Sonnenuntergang Weihnachtslicht EIN
    then
        if(Weihnachtslicht.state != ON)
            return;
    
        Wohnzimmer_Steckdosen.sendCommand(ON)
        Buero_Steckdosen.sendCommand(ON)
        Ankleide_Steckdosen.sendCommand(ON)
        Balkon_Steckdosen.sendCommand(ON)
    end​
    Es böte sich natürlich an, zum Einen eine Gruppe mit den entsprechenden Items zu bilden:
    Code:
    Group:Switch:OR(ON,OFF) gWeihnachtslicht "Weihnachtsbeleuchtung"
    Switch Wohnzimmer_Steckdosen "Steckdosen Wohnzimmer" (gWeihnachtslicht) ...
    Switch Buero_Steckdosen      "Steckdosen Büro"       (gWeihnachtslicht) ...
    Switch Ankleide_Steckdosen   "Steckdosen Ankleide"   (gWeihnachtslicht) ...
    Switch Balkon_Steckdosen     "Steckdosen Balkon"     (gWeihnachtslicht) ...
    und dann diese Gruppe zu schalten.
    Zum Anderen wäre es eleganeter, die Beleuchtung vollautomatisch zu steuern. Weihnachtsbeleuchtung ist allgemein vom 1. Advent bis Heilige 3 Könige aktiv, in manchen Gegenden auch bis Maria Lichtmess.
    Code:
    // Globale Variablen vor der ersten Rule definieren!
     var Integer intStAdvent = 0
    
    rule "Feiertage"
     when
        Time cron "5 0 0 * * ?" or
        System started
     then
        val firstAdvent = LocalDate.of(now.getYear,12,25).minusDays(LocalDate.of(now.getYear,12,25).getDayOfWeek.getValue + 21)
        intStAdvent = firstAdvent.getDayOfYear
    end
    
    rule "Sonnenuntergang Weihnachtslicht EIN Abend"
    when
        Channel "astro:sun:home:set#event" triggered START  or      // Sonnenuntergang Weihnachtslicht EIN
        Time cron "0 30 5 * * ?"                                    // Weihnachtslicht AN 5:30 Uhr
    then
        if (now.getDayOfYear > 6 && now.getDayOfYear < intStAdvent) // außerhalb der Weihnachtszeit
            return;
    
        gWeihnachtslicht.members.forEach[i|                         // für jeden Gruppenangehörigen
            i.sendCommand(ON)                                       // sende Befehl
        ]
    end
    
    rule "Weihnachtslicht AUS Abend"
    when
        Channel "astro:sun:home:rise#event" triggered START or      // Sonnenaufgang Weihnachtslicht EIN
        Time cron "0 0 0 * * ?"                                     // Weihnachtslicht AUS 00:00 Uhr
    then
        if (now.getDayOfYear > 6 && now.getDayOfYear < intStAdvent) // außerhalb der Weihnachtszeit
            return;
    
        gWeihnachtslicht.sendCommand(OFF)                           // Befehl an Gruppe senden
    end​​
    Die erste Rule berechnet täglich um 0:00:05 Uhr den ersten Advent.
    Die beiden anderen Rules schalten die Beleuchtung tageszeitabhängig ein bzw. aus, indem sie die Gruppe verwenden. Rules können beliebig viel Trigger haben.
    Beim Einschalten habe ich die Auflösung der Befehle über eine Schleife verwendet, zum Ausschalten sende ich den Befehl an die Gruppe. Beide Varianten sind (hier) gleichwertig, der einzige Unterschied besteht darin, dass bei der ersten Variante noch extra Funktionen pro Schaltvorgang integriert werden könnten, während bei der zweiten Variante die Gruppe den Befehl auflöst und an alle Member versendet.

    Maria Lichtmess ist am 2. Februar (40 Tage nach Weihnachten), dann müsste man aus der 6 eine 33 machen
    Möchte man die Lightshow schon ab Montag nach Totensonntag aktivieren, kann man von intStAdvent auch noch 6 abziehen
    Zuletzt geändert von udo1toni; 10.12.2023, 13:29.

    Kommentar


      #3
      sehr gut, danke für Deine Hilfe!

      Kommentar

      Lädt...
      X