Ankündigung

Einklappen
Keine Ankündigung bisher.

Rolladen fahren nach Sonnenstand

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

    Rolladen fahren nach Sonnenstand

    N'Abend,

    ich trau mich gar nicht zu fragen, steht bestimmt schon irgendwo im Forum, ich finde es aber nicht...

    Habe folgende Rule:
    rule "Astro Regeln"
    when
    Item Elevation changed or
    System started
    then
    if (Elevation.state < -6) {
    if (IsDay.state==ON || IsDay.state==Uninitialized || IsDay.state==Undefined) {
    logInfo("Astro Regeln", "Sonnenstand < -6 Grad - Es ist Nacht")
    sendCommand(IsTwilight, OFF)
    sendCommand(IsDay, OFF)
    sendCommand(IsNight, ON)
    }
    }
    if (Elevation.state >= -6 && Elevation.state <= 0) {
    if (IsDay.state==ON || IsDay.state==Uninitialized || IsDay.state==Undefined) {
    logInfo("Astro Regeln", "-6 Grad <= Sonnenstand <= 0 Grad - Es ist Dämmerung")
    sendCommand(IsTwilight, ON)
    sendCommand(IsDay, OFF)
    sendCommand(IsNight, ON)
    }
    }
    if (Elevation.state > 0) {
    if (IsDay.state==OFF || IsDay.state==Uninitialized || IsDay.state==Undefined) {
    logInfo("Astro Regeln", "Sonnenstand > 0 Grad - Es ist Tag")
    sendCommand(IsTwilight, OFF)
    sendCommand(IsDay, ON)
    sendCommand(IsNight, OFF)
    }
    }

    end
    Die benutze ich auf meine Tag/Nacht KNX-Umschaltung und weise denen GA's zu, was auch alles klappt
    Jetzt würde ich gerne mit 30 Minuten Verzögerung die Rolladen rauf/runterfahren wollen um nicht immer die cron Jobs in einer extra rule nachführen zu müssen.
    Sowas wie:
    "if (Elevation.state < -6) (also Nacht) warte 30 Minuten und sende dann "Rolladen_Wohnzimmer_Fenster.sendCommand(255)"
    Muss ich das in einer extra rule machen???

    Da ich nicht der code Programmierer bin wär es nett wenn mir jemand unter die Arme greifen könnte um das zu verwirklichen.

    Danke schon mal im Vorraus
    PhilW
    Google oder Wiki-Hilfe-Hinweise nehme ich nur an wenn sie mich total blamieren..... dann ertrage ich sie auch in Demut und Dankbarkeit;-)

    #2
    Hi,
    Hast du gesehen, dass es ein Astro Binding gibt? Das unterstützt auch offsets. Ich nutze es und es funktioniert super.

    https://github.com/openhab/openhab/wiki/Astro-binding

    Grüße
    Michael

    Kommentar


      #3
      Hallo Michael,

      jaja, das Astro Binding habe ich ja wie gesagt schon im Einsatz. Nur wie komme ich jetzt weiter?
      Mir fehlt der Anstoss in Zusammenhang mit dem Elevation state.

      Gruss
      PhilW
      Google oder Wiki-Hilfe-Hinweise nehme ich nur an wenn sie mich total blamieren..... dann ertrage ich sie auch in Demut und Dankbarkeit;-)

      Kommentar


        #4
        Hi Phil,
        ich glaub' ich steh jetzt gerade aber sowas von auf dem Schlauch. Weiß nicht genau was du machen willst. Entweder ich denke zu einfach oder habe nicht verstanden was deine Frage ist. Ich poste hier mal meine Konfig mit dem Astro-Binding.

        items:
        Code:
         /*Astro */
        Switch Sunrise_Event {astro="planet=sun, type=rise, property=start"}
        Switch Sunrise_Event_15 {astro="planet=sun, type=rise, property=start, offset=15"} // 15 Minuten nach Sonnenaufgang
        Switch Sunrise_Event_30 {astro="planet=sun, type=rise, property=start, offset=30"} // 30 Minuten nach Sonnenaufgang
        Switch Sunrise_Event_60 {astro="planet=sun, type=rise, property=start, offset=60"}
        Code:
         /*KNX*/
        Rollershutter Shutter_Kids_Bathroom "Rolladen" <rollershutter>    (room_Kids_Bathroom) { knx="0/2/4, 0/2/11" }
        Rollershutter Shutter_Parents_Bathroom "Rolladen" <rollershutter> (room_Parents_Bathroom) { knx="1/2/6, 1/2/11" }
        Rules:
        Code:
        rule "Sonnenaufgang30"
        when
        Item Sunrise_Event_30 received update ON
        then {
        
        sendCommand(Shutter_Kids_Bathroom, UP)
        sendCommand(Shutter_Parents_Bathroom, UP)
        }
        end
        Diese Rule öffnet die beiden Rolläden jeden Tag um 30 Minuten nach Sonnenaufgang.

        Mehr isses nicht. :-)

        Hilft das? Oder versteh' ich dich nicht :-)?

        Grüße
        Michael
        Zuletzt geändert von mitch77; 21.03.2015, 22:06.

        Kommentar


          #5
          Morjen,

          ja sorry wenn ich mich da unklar ausgedrückt habe. Ich wollte die 3 Switche "IsDay, IsNight und IsTwilight" mit den Zeitoffsets benutzen.
          Dein "Anstoss" hat schon ausgereicht, hab jetzt
          Switch IsNight_30 {astro="planet=sun, type=set, property=start, offset=30"} // 30 Minuten nach Sonnenuntergang
          etc. angelegt. Damit gehts.
          Vielen Dank nochmal

          Gruss
          PhilW
          Google oder Wiki-Hilfe-Hinweise nehme ich nur an wenn sie mich total blamieren..... dann ertrage ich sie auch in Demut und Dankbarkeit;-)

          Kommentar


            #6
            Super, freut mich wenn ich helfen konnte.
            Schönen Sonntag noch.

            Kommentar


              #7
              Hallo zusammen,
              in meiner OpenHAB-Installation (V1.6.1 auf Banana-Pi mit SATA-SSD) verwende ich auch das Astro-Binding zur Steuerung der Rolläden.

              In letzter Zeit ist mir aber aufgefallen, dass die Rolläden morgens schon sehr früh öffnen, z.B. um 5.51h.
              Das ist zwar korrekt, mir aber viel zu früh.

              Realisieren würde ich gerne die Funktion: Öffne am Start der Dämmerung , aber nicht vor 07.00h

              Der Offset-Parameter des Astro-Bindings ist nicht zielführend, da sich die Differenz ja jeden Tag ändert.

              Ist das eine Funktion, die generell auch für andere Nutzer sinnvoll ist ?
              Dann würde ich ein Feature-Request-Ticket an das Astro-Binding einstellen.

              In der Zwischenzeit .... hat jemand ein Codebeispiel parat, wie man in einer Regel Uhrzeiten vergleicht
              um damit den oben beschriebenen Fall selbst zu implementieren ?

              Grüße
              funcarver

              Kommentar


                #8
                Hi funcarver,

                wie klingt folgender Vorschlag:
                Code:
                import org.joda.time.*
                
                rule "Rolladen"
                
                when 
                    //Sonnenaufgang
                then
                    if (now.getHourOfDay > 6)
                    // Fahre Rolläden hoch
                     else
                      // Tue nichts
                end
                Grüße

                Michael

                Kommentar


                  #9
                  Vielleicht hilft dieser Ansatz weiter.
                  Ich verwende die Funktionen von wonderground um mir die Sonnenaufgangszeit zu holen.
                  Dann berechne ich um Mitternacht die Wartezeit für einen Timer:
                  Umrechnung in Minuten seit Mitternacht:
                  Mitternacht: 0
                  7:00 Uhr: 7*60 +0= 420
                  5:51 Uhr: 5*60 + 51 = 351

                  Jetzt beide vergleichen und die höhere von beiden ist die Verzögerung in Minuten, also
                  createTimer(now.plusMinutes(420)) [|
                  { Start Rolläden...

                  Du kannst das aber auch in deinem Event so machen.
                  Ist es vor 7 Uhr erstellst du einen Timer bis 7:00 Uhr, ansonsten einen mit 1 Minute oder lässt die Rolläden gleich hochfahren.

                  Holger
                  Zuletzt geändert von HolgerW; 24.03.2015, 08:01.

                  Kommentar


                    #10
                    Hallo Michael und Holger,

                    danke erst mal für Eure guten Vorschläge.
                    Der Ansatz von Holger erfordert einiges an code und Type-Conversionen, um die Zeit-Differenz jeden Tag zu berechnen.
                    Auch das Astro-binding liefert nicht nur das Event, sondern auch die zugehörige Uhrzeit.
                    Daraus könnte ich die Minuten-Differenz berechnen.

                    Der Vorschlag von Michael gefällt mir gut, nur würde ich ihn noch erweitern und mit einer anderen Cron-Regel koppeln:

                    Code:
                    import org.joda.time.*
                    
                    rule "Rolladen_Astro"
                    when
                        //Sonnenaufgang-Event aus Astro-Binding
                    then
                        if (now.getHourOfDay > 6)
                        // Fahre Rolläden hoch: sendCommand()
                         else
                        postUpdate(Up_at_7, TRUE)  
                    end
                    
                    
                    
                    rule "Rolladen_Cron"
                    when
                       cron  "at 07:00h"
                    then
                       if (Up_at_7==TRUE) {
                       //Fahre Rolladen jetzt erst hoch: sendCommand()
                       postUpdate(Up_at_7, FALSE)
                       }
                       else
                       // Tue nichts
                    end

                    Dann brauche ich keine Differenz-Zeiten zu berechnen. Das sollte es sein.

                    Ich werde den pseudo-code mal richtig implementieren und ausprobieren.

                    Grüße
                    Heiko (funcarver)

                    Kommentar


                      #11
                      Könntest du deinen "verbesserten" Code vielleicht hier mal posten?

                      Kommentar


                        #12
                        Leider habe ich den Thread hier erst heute gefunden, dabei hatte ich das Problem vor einiger Zeit auch schon und habe eine etwas aufwendigere, dafür aber auch flexiblere Lösung gebastelt. Ich möchte nämlich auch, dass die Rollläden bei Sonnenaufgang hochfahren, an Wochentagen aber frühestens um 7:15, am Wochenende frühestens um 8:30 Uhr.

                        Dafür habe ich einen virtuellen (unsichtbaren) Switch SunriseLimit definiert, der per Cron um 7:15 bzw. 8:30 ein- und bei Sonnenuntergang wieder ausgeschaltet wird:

                        Hierzu habe ich folgendes im items-File:
                        Code:
                        Switch SunriseLimit "virtueller Sonnenaufgang" (Persist)
                        DateTime Sunrise_Time "Sunrise [%1$tH:%1$tM]" <calendar> {astro="planet=sun, type=rise, property=start"}
                        Switch Sunrise_Event {astro="planet=sun, type=rise, property=start"}
                        in rrd4j.persist mache ich den Schalter SunriseLimit persistent:
                        Code:
                        Items {
                            Persist* : strategy = everyChange, everyMinute, restoreOnStartup
                        }
                        Und nun noch die Rules, die SunriseLimit setzen und die Rollläden hoch fahren:
                        Code:
                        rule "Sunrise Limit on" when
                            Time cron "0 15 7 ? * MON-FRI" or
                            Time cron "0 30 8 ? * SAT-SUN"
                        then
                            sendCommand(SunriseLimit, "ON")
                        end
                        
                        rule "Sunrise Limit off"
                        when
                            Item Sunset_Event received update ON
                        then
                            sendCommand(SunriseLimit, "OFF")
                        end
                          
                        rule "Rollaeden hoch"
                        when
                            Item Sunrise_Event received update ON or
                            Item SunriseLimit received update ON
                        then
                            var pause = 0
                            var delta = 10
                            if (!now.isAfter((Sunrise_Time.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")
                            if (Rolladen_Roland.state > 0) {
                                createTimer(now.plusSeconds(pause)) [|
                                    logInfo("Rolladen", "Rolladen Roland hoch")
                                    sendCommand(Rolladen_Roland, "UP")
                                ]
                                pause = pause + delta
                            }
                            // Weitere Rollläden folgen analog im Abstand von delta Sekunden, um meine Homematic funktechnisch nicht zu überlasten...
                        end
                        Vielleicht hilft das ja dem ein oder anderen als Anregung.

                        Tschoeeee
                        Roland

                        Kommentar


                          #13
                          Ich lasse meine Sonnenauf- und untergangszeiten in der Sitemap anzeigen, ausserdem zu Testzwecken die Switch für Sonnenaufgang_Event usw.

                          Bei mir sind jedoch alle Schalter auf "off". Sollten die nicht während des Tages auf "on" sein? Oder schalten die Switche nur ganz kurz auf "on" - direkt zum Sonnenaufgang und dann sofort wieder auf "off"?

                          Wenn ich die Schalter manuell auf "on" schalte, fahren meine Rollos sofort ab oder auf. Jedoch nicht zum eigentlichen Zeitpunkt morgens oder abends... Woran kann das liegen? Hab meine astro.items mit dem obigen Beispiel verglichen. Ist eigentlich alles genauso.

                          Kommentar


                            #14
                            Hi,
                            das "return 1" sehe ich zum ersten Mal. Damit kann ich die Rule beenden ? Was bewirkt die Zahl 1 ?
                            Holger

                            Kommentar


                              #15
                              Zitat von HolgerW Beitrag anzeigen
                              das "return 1" sehe ich zum ersten Mal. Damit kann ich die Rule beenden ? Was bewirkt die Zahl 1 ?
                              Ja, damit kann man die Rule beenden. Alternativ kannst Du natürlich auch den Großteil der Rule in ein riesiges if () {} packen, aber da ich doch einige Rollläden z.T. noch mit weiteren Spezialbedingungen habe, wird die Einrückung/Klammerung dann doch recht unübersichtlich und da finde ich es schöner, die Sonderbedingungen auf obige Weise abzufrühstücken.

                              Die 1 ist nur irgendein Rückgabewert, ich habe bisher noch keine Wirkung damit gehabt, vermutlich kann man da auch 0 oder 42 hinschreiben, habe ich aber nicht ausprobiert.

                              Ohne Rückgabewert hat das der Designer zwar auch gefressen, aber danach hatte ich einen seltsame Java-Fehler im Log, der vermuten ließ, dass er dann irgendwas anderes zurückgegeben hat, was openHAB wohl garnicht mochte. Mit der 1 ist das System zufrieden...

                              Ich suche immer noch eine gut lesbare Anleitung oder Sprachreferenz für Xtext/Xbase (oder wie hieß die rules zugrunde liegende Sprache?), bislang nutze ich nur Copy&Paste aus irgendwelchen Samples oder probiere mit Intuition aus, was der Designer akzeptiert.

                              Tschoeeee
                              Roland

                              Kommentar

                              Lädt...
                              X