Ankündigung

Einklappen
Keine Ankündigung bisher.

Aktion bei Sonnenauf- und untergang

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

    Aktion bei Sonnenauf- und untergang

    Hallo zusammen,

    ich stehe vor folgendem Problem und habe bisher noch keine Lösung gefunden.

    Also ich möchte, dass zum Sonnenuntergang bei mir eine Hue angeschalten und zum Sonnenaufgang wieder ausgeschalten wird.
    Dazu gibt es ja das Astro-Binding, wo man den Sunset oder Sunrise als Switch einbauen könnte.

    Über eine Regel wäre es dann möglich, dass ich sage, wenn dieser Switch eine Update bekommt, dass ich dann die Hue schalte.

    Allerdings kommt es ab und zu vor, dass ich den Rechner, auf dem Openhab läuft, unter Tags neu starte. Dann kann ich nicht auf die Ereignisse reagieren.

    Jetzt würde ich gerne über eine Regel beim Systemstart prüfen, ob die aktuelle Systemzeit zwischen Sonnenaufgang und Sonnenuntergang ist und entsprechend schalten.

    Allerdings tue ich mich mit dem Datentypen noch schwer, daher folgende Fragen:
    - Wie kann ich vergleichen, ob die aktuelle Uhrzeit zwischen Sonnenaufgang- und untergangszeit vom Astro Binding ist?
    - Wie kann ich in der Regel zum Systemstart forcieren, dass das Astrobinding ausgeführt und der Wert ermittelt wird? Kann man die Daten statt in ein Item auch in eine Variable schreiben lassen und diese dann mit der aktuellen Uhrzeit vergleichen?

    Danke Martin

    #2
    Hallo Martin,

    mir fallen da zwei mögliche Lösungen zu deinem Problem ein

    Variante 1:
    Wie du geschrieben hast die Zeiten vergleichen.
    Dazu in den Items für Sonnenauf- und Sonnenuntergang je 1 Switch als Trigger und ein DateTime-Item mit der Uhrzeit für Auf-/Untergang anlegen.

    Mit folgender Rule dann die Zeiten vergleichen
    Code:
    rule "Item Astro_Dark setzen"
    //schaltet den Switch Astro_Dark, der angibt ob es draußen Dunkel ist
        when
            System started or
            Item Astro_Sunset_Event changed to ON or
            Item Astro_Sunrise_Event changed to ON
        then
            if (now.isAfter((Astro_Sunset_Time.state as DateTimeType).calendar.timeInMillis) ||
                now.isBefore((Astro_Sunrise_Time.state as DateTimeType).calendar.timeInMillis))
                {postUpdate(Astro_Dark, ON)}
            else {postUpdate(Astro_Dark, OFF)}
    end
    Mit dem "System started" trigger sollte die Regel auch beim Start von Openhab greifen

    Variante 2:
    Nur auf die Events des Astro-Bindung reagieren.
    Code:
    rule "Astro_dark on"
    //schaltet den Switch Astro_dark ein, der angibt ob es draußen Dunkel ist
        when
            Item Astro_Sunset_Event changed to ON
        then
            postUpdate(Astro_dark, ON)
    end
    
    rule "Astro_dark off"
    //schaltet den Switch Astro_dark aus, der angibt ob es draußen Dunkel ist
        when
            Item Astro_Sunrise_Event changed to ON
        then
            postUpdate(Astro_dark, OFF)
    end
    Um den Zustand beim Neustart von Openhab zu erhalten, muss das entsprechende Item (bei dir der Switch für die Hue, hier Astro_dark) dann in den Persistence-Service aufgenommen werden mit der Strategie restoreOnStartup. MapDB ist hierfür eigentlich ideal geeignet
    Code:
    // persistence strategies have a name and a definition and are referred to in the "Items" section
    Strategies {
        everyMinute : "0 * * * * ?"
        everyHour : "0 0 * * * ?"
        everyDay  : "0 0 0 * * ?"
    
        // The following strategies are already statically defined
        // everyChange: persist the state whenever its state has changed
        // everyUpdate: persist the state whenever its state has been updated, even if it did not change
        // restoreOnStartup:If state is undefined at startup -> last persisted value is loaded and the item is initialized with this state
        
        // if no strategy is specified for an item entry below, the default list will be used
        default = everyChange
    }
    
    /* 
     * Each line in this section defines for which item(s) which strategy(ies) should be applied.
     * You can list single items, use "*" for all items or "groupitem*" for all members of a group
     * item (excl. the group item itself).
     */
    Items {
        Astro_dark : strategy = everyChange, restoreOnStartup
    }
    Hoffe das hilft dir weiter. Beide Varianten hatte ich schon im Einsatz. Aktuell nutze ich Variante 2, da weniger Items benötigt und ich meine Rules möglichst nach dem KISS-Prinzip (Keep It Short and Simple) erstelle, d.h wo möglich genau 1 Trigger der dann 1 Aufgabe/Berechnung auslöst.

    Grüße
    Sebastian

    Kommentar


      #3
      Super, danke für die Ausführliche Anleitung. Ich werde das bald testen, tendiere aktuell zu deinem Vorschlag 2.

      Kommentar


        #4
        So, ich habe das entsprechend konfiguriert, aber die Regeln werden einfach nicht ausgeführt. Keine Ahnung warum? Gibt es grundsätzlich Probleme mit dem Astro Binding in der 1.8.0 Version?

        Kommentar


          #5
          Nein, eigentlich nicht. Du könntest mal spaßeshalber den Ruletrigger auf received update ON ändern. Eventuell wird das Item nie aktiv aus OFF gesetzt.

          Kommentar


            #6
            Was ich schon gemacht hatte, war den Status nur auf received update gestellt hatte. Aber mein IF-Statement Astro_Sunrise_Event.state==ON hat nicht gegriffen.
            Ich werde später mal in das Log file schauen, was er genau gemacht hat.

            Kommentar


              #7
              Ich hab grad mal bei mir nachgeschaut, und der State des Events ist OFF. Ich denke auch, dass der State quasi immer OFF ist, bis auf den kurzen Moment, in dem der Trigger kommt. Eventuell ist der State schon wieder OFF, wenn die Rule beim if() angekommen ist. received update ON funktioniert bei mir jedenfalls.

              Kommentar


                #8
                Zeige doch mal deine rule. Welche Variante hast du denn gewählt? Und was macht die if Abfrage genau? Das Astro Event ist auf jeden Fall nur eine kurze Zeit auf ON.

                Kommentar


                  #9
                  Hi,

                  das ist meine Regel:

                  Code:
                  rule "r_NightModeOn"
                  when     Item is_Sunset_Event received update
                  then
                  
                      if(is_Sunset_Event.state==ON)
                      {
                          in_NightMode.postUpdate(1)
                          pushover("Nachtmodus an")
                          logInfo("myRules","r_NightMode.Nachtmodus an = True")
                      }
                      
                      logInfo ("myRules","r_NightModeOn.Nachtmodus=is_Sunset_Event.state {}")
                      logInfo ("myRules","r_NightModeOn.Nachtmodus")
                      
                  end
                  Die Regel wurde heute auf jeden Fall ausgeführt, die beiden logInfos außerhalb der IF Bedingung wurden ausgeführt.

                  Das Item ist wie folgt definiert:
                  Code:
                  Switch     is_Sunset_Event    {astro="planet=sun, type=set, property=end"}
                  Danke

                  Kommentar


                    #10
                    In dem Fall wird die if Schleife nicht ausgeführt, da der Status wie schon erwähnt direkt wieder auf OFF zurück gesetzt wird. Lass die if Schleife mal weg. Die brauchst du hier nicht.

                    Kommentar


                      #11
                      Wie schonmal erwähnt... received update ON geht zuverlässig...

                      Kommentar


                        #12
                        Danke für die Hilfe. received update ON war der richtige Hinweis. Somit schaltet meine Variable und ich kann auf Sonnenauf- und Untergangsevents reagieren.

                        Grüße Martin

                        Kommentar

                        Lädt...
                        X