Ankündigung

Einklappen
Keine Ankündigung bisher.

Rolladen fahren nach Sonnenstand

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

    #16
    Weis niemand was zu meiner Frage? Wird der Switch Sonnenaufgang_Event nur kurz auf "on" gesetzt und ist danach gleich wieder auf "off" oder bleibt er den ganzen Tag über auf "on", bis die Sonne wieder untergeht?

    Kommentar


      #17
      Ich verwende das Astro Binding noch nicht, muss mich aber mal damit beschäftigen.
      Ich hole mir die Sonnenauf / untergangszeiten von Wonderground um Mitternacht / Systemstart..
      Diese Zeiten werden aller 5 Minuten bzw. bei Helligkeitsänderungen mit der aktuellen Uhrzeit verglichen und dann setze ich eigene Switche.
      Nicht so schön, läuft aber schon einige Zeit..
      Holger

      PS: danke RoRo für die Erklärung, da kann ich auch einiges verbessern an meinen riesen if- Abfragen
      Zuletzt geändert von HolgerW; 06.04.2015, 12:37.

      Kommentar


        #18
        Zitat von halloween Beitrag anzeigen
        Wird der Switch Sonnenaufgang_Event nur kurz auf "on" gesetzt und ist danach gleich wieder auf "off" oder bleibt er den ganzen Tag über auf "on", bis die Sonne wieder untergeht?
        Der Switch wird nur kurz auf ON und dann gleich wieder auf OFF gesetzt. So steht's auch im Wiki:
        If you bind it to a Switch, a event is scheduled and the state of the Switch is updated to ''ON'', immediately followed by a ''OFF'' at the calculated time.
        Tschoeeee
        Roland

        Kommentar


          #19
          Habs mittlerweile hinbekommen. Nachdem ich alles neu gemacht habe, hats funktioniert. War wohl ein Tippfehler drin.


          Was mir aufgefallen ist: Wenn ich manchmal was an den Config-Dateien von Openhab ändere, dann steht danach plötzlich beim Astro-Plugin überall "-nicht initialisiert" drin. Ich hab in der astro.map drin, dass das bei einem Fehler angezeigt werden soll. Und ich lasse mir diverse Dinge in der Visu anzeigen, z.B. Sonnenaugfgangs-Zeit usw.

          Wie kann man das wieder in Ordnung bringen? Muss ich jedesmal den openhab-service neu starten oder den Server neu booten? Oder geht das auch irgendwie anders? Und wird meine Rule trotzdem ausgeführt, auch wenn openhab "nicht intitialisiert" anzeigt?

          Kommentar


            #20
            Ich hab hier mal was zur verwendeten Sprache bei den Openhab-rules gefunden. Vielleicht kanns ja wer gebrauchen. http://docs.jboss.org/drools/release...html/ch04.html

            Kommentar


              #21
              Hallo zusammen,

              vor ein paar Beiträgen hier kam die Frage, ob ich zu der diskutierten Implementierungsidee auch den kompletten Code posten kann.
              Nachdem es inzwischen gut funktioniert ... hier ist er:

              Ich logge gerne den Status der Regeln im Log-file mit.

              An der Terrassentür gibt es einen Homematic-Drehgriff-Sensor.
              Wenn die Tür offen ist (state==2), dann geht der zugehörige Rolladen nicht runter, damit ich mich nicht aussperre :-)


              Code:
              ## im Items-file:
              
              // *** --------------------------------------------------------- ***
              // *** Konfiguration des ASTRO Bindings
              // *** der zugehörige Ort wird in der openhab.cfg konfiguriert
              // *** --------------------------------------------------------- ***
              
              // neue Notation ab V1.6 des astro bindings
              DateTime Astro_Sunrise_Time  "Sonnenaufgang [%1$tH:%1$tM h]"    <sun> {astro="planet=sun, type=rise, property=start"}
              DateTime Astro_Sunset_Time   "Sonnenuntergang [%1$tH:%1$tM h]" <moon> {astro="planet=sun, type=set,  property=end"}
              
              // Options: rise, set, noon, night, morningNight, astroDawn, nauticDawn, civilDawn, astroDusk, nauticDusk, civilDusk, eveningNight, daylight
              DateTime Astro_Shutters_UP_Time    "Rolläden auf [%1$tH:%1$tM h]" <sun> {astro="planet=sun, type=civilDawn, property=start"}
              Switch   Astro_Shutters_UP_Event                                        {astro="planet=sun, type=civilDawn, property=start"}
              DateTime Astro_Shutters_DOWN_Time  "Rolläden zu [%1$tH:%1$tM h]" <moon> {astro="planet=sun, type=civilDusk, property=end"}
              Switch   Astro_Shutters_DOWN_Event                                      {astro="planet=sun, type=civilDusk, property=end"}
              Switch   Shutters_up_7h       // interner Schalter
              
              
              
              
              ## im Rules-file:
              
              /* -------------------------------------------------------------------------
               * Regeln zur automatischen Rolladensteuerung nach Sonnenauf- und Untergang
               * -------------------------------------------------------------------------
               */
              
              rule "Rule_Astro_Shutters_UP"
               when
                  Item Astro_Shutters_UP_Event received update ON
              then
                  logInfo("Rule_Astro_Shutters_UP: ", "Start")
                  postUpdate(Shutters_up_7h, OFF)   // doppelt, aber zur Sicherheit
                  if (Shutters_auto_mode.state==ON) {
                     if (now.getHourOfDay > 6) {    // d.h. die Astro-Zeit ist mindestens 7h
                       sendCommand(vShutter_EG_All, UP)
                       logInfo("Rule_Astro_Shutters_UP: ", "Opened")    
                      }
                     else {                         // d.h. die Astro-Zeit ist vor 7h
                          logInfo("Rule_Astro_Shutters_UP: ", "Delayed until 7h")
                       postUpdate(Shutters_up_7h, ON)   // Trigger setzen, damit um 7h geöffnet wird    
                      }
                   }
                   else {
                     logInfo("Rule_Astro_Shutters_UP: ", "Auto mode OFF executed")
                   }
              end
              
              rule "Rule_7h_Shutters_UP"
               when
                 Time cron "0 0 7 * * ?"    // each day at 7h
               then
                logInfo("Rule_7h_Shutters_UP: ", "Start")
                if ((Shutters_auto_mode.state==ON) && (Shutters_up_7h.state==ON)) {
                  sendCommand(vShutter_EG_All, UP)
                  logInfo("Rule_7h_Shutters_UP: ", "Opened")        
                }
                postUpdate(Shutters_up_7h, OFF)
              end
              
              
              rule "Rule_Astro_Shutters_DOWN"
               when
                  Item Astro_Shutters_DOWN_Event received update ON
              then
                  logInfo("Rule_Astro_Shutters_DOWN: ", "Start")
                  if (Shutters_auto_mode.state==ON) {
                     sendCommand(vShutter_EG_All, DOWN)
                     // hier: Wenn Terrassentür offen ist, dann dieser Rolladen wieder STOP
                     // damit man sich nicht aussperrt. Gekippt ist OK
                     if (EG_WZ_TTuer.state==2) sendCommand(vShutter_EG_WZ2, STOP)
                    
                     logInfo("Rule_Astro_Shutters_DOWN: ", "Auto mode DOWN executed")
                   }
                   else {
                     logInfo("Rule_Astro_Shutters_DOWN: ", "Auto mode OFF executed")
                   }
              end

              Grüße
              Heiko (funcarver)

              Kommentar


                #22
                Zitat von halloween Beitrag anzeigen
                Wenn ich manchmal was an den Config-Dateien von Openhab ändere, dann steht danach plötzlich beim Astro-Plugin überall "-nicht initialisiert" drin. [...] Muss ich jedesmal den openhab-service neu starten oder den Server neu booten? Oder geht das auch irgendwie anders? Und wird meine Rule trotzdem ausgeführt, auch wenn openhab "nicht intitialisiert" anzeigt?
                Standardmäßig berechnet das astro-Binding nur um Mitternacht (und einmalig beim Start von openHAB) alle benötigten Werte. Wenn Du an bestimmten Config-Dateien rumschraubst (dürfte vor allem die *.items betreffen) werden Teile von openHAB neu initialisiert, das Astro-Binding rechnet aber erst um Mitternacht neu.
                Und Nein, solange da nicht initialisiert steht, wird auch nichts ausgeführt. Wann auch...?
                Die Lösung ist aber einfach, Du kannst in der openhab.cfg für das astro-Binding ein Berechnungsintervall angeben. das ist natürlich vor allem interessant, wenn Du Dir aktuelle Astro-Stände (z.B. Sonnenhöhe und -richtung) anzeigen lassen willst, löst aber auch Dein Problem, indem das astro-Binding dann z.B. alle zwei Minuten die angezeigten Werte neu berechnet. Dann ist die Gefahr relativ gering, dass wegen neu geladenen Konfig irgendwelche Läden nicht auf- oder zufahren.

                Kommentar


                  #23
                  Das seltsame daran ist, dass ich ja schon 120 als Refresh-Wert drinstehen hab... Wenn ich an der items-Datei was ändere, stehen danach "nicht initialisiert" drin und geht auch nicht mehr weg, selbst wenn ich die 2 Minuten verstrichen sind. Ich werd das mal beobachten.


                  Ich hab jetzt alles mögliche über Dämmerung, Sonnenaufgang, bürgerliche Dämmerung usw durchgelesen. Einige hier nehmen die bürgerliche Dämmerung, andere den Sonnenaufgang und wieder andere den Sonnenaufgang mit Offset.

                  Ist denn Dämmerung (astronomisch) und Sonnenaufgang nicht das selbe? Bin noch am Feintuning.

                  Kommentar


                    #24
                    Zitat von halloween Beitrag anzeigen
                    Das seltsame daran ist, dass ich ja schon 120 als Refresh-Wert drinstehen hab...
                    welche UI verwendest Du denn?

                    Ist denn Dämmerung (astronomisch) und Sonnenaufgang nicht das selbe?
                    http://de.wikipedia.org/wiki/D%C3%A4mmerung

                    Kommentar


                      #25
                      Ich verwende die Classic UI.

                      ---------------------

                      Hab das mit der Dämmerung gerade in Openhab anzeigen lassen.

                      Ende civilDawn = Beginn Sonnenaufgang

                      Dann müsste logischerweise Ende nauticDawn = Beginn civilDawn sein.
                      Zuletzt geändert von halloween; 08.04.2015, 13:32.

                      Kommentar


                        #26
                        ich benutze folgende Items:
                        Code:
                        Switch   Sunrise_Event "Aufgang [%s]" {astro="planet=sun, type=rise, property=start, offset=-25"}
                        Switch   Sunset_Event  "Untergang [%s]" {astro="planet=sun, type=set, property=end, offset=25"}
                        Mit dem offset verschiebe ich den Zeitpunkt etwas vor Sonnenaufgang bzw. etwas nach Sonnenuntergang. Diese Events werden vom Astro-Binding in dem entsprechenden Moment gesetzt, so dass eine eventuelle Reinitialisierung für die Steuerung egal ist.

                        Kommentar


                          #27
                          So recht zufrieden bin ich noch nicht. Gestern ging der Rollo zu Beginn Sonnenaufgang auf, das war mir zu spät, weil es draussen schon richtig hell war. Abends ging er 20 Minuten nach Sonnenuntergang runter, da wars draussen eigentlich auch noch zu hell, meinem Empfinden nach. Heute morgen hab ich Beginn civilDawn eingestellt, das war mir zu früh :-(

                          Ich werde jetzt mal noch die zusätzliche Regelung "nicht vor xx Uhr" mit einbauen, vielleicht komme ich dann zu einem befriedigendem Ergebnis für mich. Und dann gehts schon bald los mit Sonnenschutz-Programmierung für den Sommer... Die nächste Baustelle :-)

                          Kommentar


                            #28
                            Hallo Halloween,

                            für den Sonnenschutz verwende ich folgende Regel - vielleicht hilft es dir als Basis:

                            Code:
                            rule "Sonnenschutz Automatisch - WESTEN"
                            when
                                Time cron "0 */20 11-18 * * ?"
                            
                            then
                                var int azimuth = (Azimuth.state as DecimalType).intValue
                            
                                if (azimuth > 200 && azimuth < 280) {
                                      if(SunAuto.state==ON){
                                        if (SunAutoActiveW.state==OFF){
                                            postUpdate(SunAutoActiveW, ON) 
                                            logWarn("Rule","Sonnenschutz Automatisch Executed")
                                            gSSchutzAutoW?.members.forEach(Rollershutter|
                                                sendCommand(Rollershutter, DOWN)
                                            )
                                            logWarn("Rule","Sonnenschutz Automatisch Executed - THREAD PASSED")
                                            createTimer(now.plusSeconds(15)) [|
                                            gSSchutzAutoW?.members.forEach(Rollershutter|
                                                sendCommand(Rollershutter, STOP)
                                            )
                                            ]
                                        }
                                        if (SunAutoActiveW.state==ON){
                                            logWarn("Rule","Sonnenschutz WESTEN Automatisch Executed - Already acticvated")
                                        }        
                                    }
                                     else if(SunAuto.state==OFF){
                                        if (SunAutoActiveW.state==ON){
                                                postUpdate(SunAutoActiveW, OFF)
                                                gSSchutzAutoWup?.members.forEach(Rollershutter|
                                                sendCommand(Rollershutter, UP)
                                                )            
                                        }
                                    }
                                }
                            end
                            Wichtig ist der Azimuth den ich aus dem Astrobinding raus geholt habe - damit bestimme ich die Sonnenrichtung. Kannst du entweder über probieren / anzeigen lassen im OH oder über http://www.sonnenverlauf.de/ rausfinden. Variiert natürlich etwas übers Jahr hin, aber das passt meistens - in Verbindung mit der Elevation (Sonnenhöhenwinkel) könnte man das abdecken - habe ich aber aktuell nicht inkludiert - kommt vielleicht noch.

                            Das Item SunAuto wird bei mir über den Solaroutput aktiviert. D.h. ab einer bestimmten kWH zahl aktiviere ich den Sonnenschutz. SunAutoActiveW = ON verhindert das wiederholte ausführen der Regel. Damit die Fensterläden entsprechend auf Höhe bleiben.

                            Hoffe das hilft
                            Karsten

                            Kommentar


                              #29
                              Hallo,
                              hab gestern meine Rollosteuerung neu programmiert und dabei die Funktion eingebaut, dass sie trotz Astro-Programm nicht vor z.B. 6:30 Uhr morgens hochfahren sollen.

                              Ich bekomme jetzt jedoch eine Fehlermeldung im Log und die Rollos sind heute morgen nicht hochgefahren.

                              Kann vielleicht mal jemand drüberschauen, was da falsch läuft?

                              Fehlermeldung im Log:
                              Code:
                              2015-05-21 07:42:04.392 [ERROR] [o.o.c.s.ScriptExecutionThread ] - Error during the execution of rule 'Rollos morgens hoch': Cannot cast org.openhab.core.library.types.OnOffType to void

                              Meine rollosteuerung.rules
                              Code:
                              import org.joda.time.*
                              
                              /* ---alte Rule - nicht mehr in Betrieb ---
                              rule "Rollos morgens Astro hochfahren"
                              when
                                   Item Rollos_astro_up changed to ON
                              then {
                                   sendCommand(Rollos, UP)
                              }
                              end
                              */
                              
                              rule "SunriseLimit on"
                              when
                                  Time cron "0 30 6 ? * MON-FRI" or
                                  Time cron "0 30 6 ? * SAT-SUN"
                              then
                                  sendCommand(SunriseLimit, ON)
                              end
                              
                              
                              rule "SunriseLimit off"
                              when
                                  Item Rollos_astro_down received update ON
                              then
                                  sendCommand(SunriseLimit, OFF)
                              end
                               
                              
                              rule "Rollos morgens hoch"
                              when
                                  Item Rollos_astro_up received update ON or
                                  Item SunriseLimit received update ON
                              then
                                  if (!now.isAfter((Rollos_astro_up.state as DateTimeType).calendar.timeInMillis)) {
                                          logInfo("Rolladen", "noch vor Sonnenaufgang")
                                          return 1
                                  }
                                  if (SunriseLimit.state == OFF) {
                                          logInfo("Rolladen", "SunriseLimit noch nicht erreicht")
                                          return 1
                                  }
                                  logInfo("Rolladen", "Sunrise + SunriseLimit passed")
                                  logInfo("Rolladen", "Rolladen hoch")
                                  sendCommand(Rollos, UP)
                              end    
                              
                              
                              rule "Rollos abends Astro zufahren"
                              when
                                  Item Rollos_astro_down changed to ON
                              then {
                                  sendCommand(Rollos, DOWN)
                              }
                              end

                              Was ich auch nicht ganz verstehe... Am Anfang der Rules steht immer irgendwas von Java, das vorher geladen werden muss. Ich hab aber keine Ahnung, was ich da bei den Rules benötige... Wie kommt man da drauf?

                              Kommentar


                                #30
                                Zitat von halloween Beitrag anzeigen
                                Code:
                                rule "Rollos morgens hoch"
                                when
                                Item Rollos_astro_up received update ON or
                                Item SunriseLimit received update ON
                                then
                                if (!now.isAfter((Rollos_astro_up.state as DateTimeType).calendar.timeInMillis)) {
                                logInfo("Rolladen", "noch vor Sonnenaufgang")
                                return 1
                                }
                                if (SunriseLimit.state == OFF) {
                                logInfo("Rolladen", "SunriseLimit noch nicht erreicht")
                                return 1
                                }
                                logInfo("Rolladen", "Sunrise + SunriseLimit passed")
                                logInfo("Rolladen", "Rolladen hoch")
                                sendCommand(Rollos, UP)
                                end
                                Also, wenn ich mal grob drüber schaue, hast Du ein Item Rollos_astro_up, was vom Typ OnOff ist, also ein Switch. Dann versuchst Du, den Status dieses Items als DateTimeType umzuwandeln. Welches Datum erwartest Du bei ON, welches bei OFF? Oder mit anderen Worten: Was Du da versuchst, kann nicht gehen.

                                Hast Du eventuell noch ein zweites Item, was die Sonnenaufgangszeit beinhaltet, und nur die Namen der Items verwechselt?

                                Im übrigen verstehe ich nicht, warum Du eine Rule mit zwei komplett voneinander unabhängigen Events triggerst, nur um dann anschließend in er Rule umständlich die beiden Fälle auseinander zu dividieren. Ich habe eine Rule für den Zeitpunkt, da kontrolliere ich innerhalb der Rule, ob schon Sonnenaufgang war. Eine zweite Rule triggert nur auf Sonnenaufgang, da kontrolliere ich innerhalb der Rule, ob schon die Wunschzeit erreicht ist. Mag sein, dass das nicht so elegant ist, dafür ist es aber einfach erstellt. Falls wirklich gewünscht, kann man die Zeitangaben als Variable am Anfang des Files definieren, das habe ich aus Faulheit nicht gemacht (und weil ich das TypeCasting nicht verstehe...)
                                Was ich auch nicht ganz verstehe... Am Anfang der Rules steht immer irgendwas von Java, das vorher geladen werden muss. Ich hab aber keine Ahnung, was ich da bei den Rules benötige... Wie kommt man da drauf?
                                Hast Du die Fehlermeldung, Java betreffend? Daraus kann man eventuell mehr ablesen (die findest Du in ./logs/openhab.log, falls sie beim Start zu schnell über den Bildschirm huscht...

                                Kommentar

                                Lädt...
                                X