Ankündigung

Einklappen
Keine Ankündigung bisher.

Rolladen fahren nach Sonnenstand

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

    #31
    Ja, stimmt, ich hab zwei Items, einmal als Switch und einmal als Date definiert. Werds gleich mal anpassen.

    Ich hab die Rule nicht selber erstellt, die gabs hier in dem Thread weiter vorne. Und das war die einzige Rule, in der ich annähernd kapiert habe, was darin vor sich geht. Die anderen gezeigten Möglichkeiten waren mir allesamt zu hoch... Bin kein Programmier-Profi.
    Und ganz ehrlich verstehe ich auch nicht, was du an meiner eingesetzten Rule nicht so toll findest. Was ist da schlecht daran? Zuviel Rechenleistung?


    Könntest du deine Rule für die Rollo-Steuerung mal hier posten? Die Variante würde mich auch interessieren.


    Hab meine astro.items mal geändert und die Rule ausgebessert, aber weiterhin der selbe Fehler:
    Code:
    // Rollos hoch
    Switch        Rollos_astro_up                                { astro="planet=sun, type=rise, property=start, offset=-10" }
    DateTime    Rollos_astro_up_time    "Rollos Astro hoch [%1$tH:%1$tM]"                    <sun>            (Astro)        { astro="planet=sun, type=rise, property=start, offset=-10" }
    Zuletzt geändert von halloween; 21.05.2015, 10:44.

    Kommentar


      #32
      Naja, ich finde die Herangehensweise halt zu kompliziert gedacht.
      .items:
      Code:
      Group GS_C1        "Rollläden Kind 1"    <rollershutter>        (GS_FF)
      Group GS_C2        "Rollläden Kind 2"    <rollershutter>        (GS_FF)
      Group GS_Bath    "Rollläden Bad"        <rollershutter>        (GS_FF)
      
      Switch   Sunrise_Event  "Aufgang [%s]"                                (MyAstro)    {astro="planet=sun, type=rise, property=start, offset=-25"}
      Switch   Sunset_Event   "Untergang [%s]"                            (MyAstro)    {astro="planet=sun, type=set, property=end, offset=25"}
      DateTime Shutter_open_Time    "Läden auf [%1$tH:%1$tMh]"        <clock>    (MyAstro)    {astro="planet=sun, type=rise, property=start, offset=-25"}
      DateTime Shutter_close_Time    "Läden zu [%1$tH:%1$tMh]"        <clock>    (MyAstro)    {astro="planet=sun, type=set, property=end, offset=25"}
      .rules:
      Code:
      import org.openhab.core.library.types.*   //keine Ahnung,
      import org.openhab.model.script.actions.* //welche dieser imports
      import org.openhab.core.types.Command     //für diesen Rule-Satz
      import java.lang.Math                     //gebraucht werden...
      import org.joda.time.DateTime
      
      var boolean BIsDay = false
      
      rule "Sunrise"
      when
          Item Sunrise_Event received update ON
      then
          BIsDay = true
          GS_Bath?.members.forEach(Shutter|Shutter.sendCommand(UP))
          if (now.getMinuteOfDay>= (6*60+45) ) {
              GS_C1?.members.forEach(Shutter|Shutter.sendCommand(UP))
              GS_C2?.members.forEach(Shutter|Shutter.sendCommand(UP))
          }
      end
      
      rule "06:45" // Montag - Donnerstag
      when
          Time cron "0 45 6 * * ?"
      then
          GS_Bath?.members.forEach(Shutter|Shutter.sendCommand(UP))
          if (BIsDay == true ) {
              GS_C1?.members.forEach(Shutter|Shutter.sendCommand(UP))
              GS_C2?.members.forEach(Shutter|Shutter.sendCommand(UP))
          }
      end
      
      rule "20:00" //Täglich
      when
          Time cron "0 00 20 * * ?"
      then
          GS_C1?.members.forEach(Shutter|Shutter.sendCommand(DOWN))
          GS_C2?.members.forEach(Shutter|Shutter.sendCommand(DOWN))
          if (BIsDay == false ) {
              GS_Bath?.members.forEach(Shutter|Shutter.sendCommand(DOWN))
          }
      end
      
      rule "Sunset"
      when
          Item Sunset_Event received update ON
      then
          BIsDay = false
          GS_C1?.members.forEach(Shutter|Shutter.sendCommand(DOWN))
          GS_C2?.members.forEach(Shutter|Shutter.sendCommand(DOWN))
          if (now.getMinuteOfDay>= (20*60) ) {
              GS_Bath?.members.forEach(Shutter|Shutter.sendCommand(DOWN))
          }
      end
      Das ist so ziemlich der komplette Codeblock zum Steuern (allerdings habe ich die Feiertagslogik und unterschiedliche Weckzeiten mal rausgenommen, ebenso wie die restlichen Rollladengruppen, aber es soll ja auch mehr ums Prinzip gehen)
      Ich nutze viele kleine Rules, die dafür jeweils nur einen Trigger haben. Die zusätzlichen Einschränkungen werden dadurch sehr simpel. Wie Du sehen kannst, fahren die Läden im Bad bei Sonnenaufgang, spätestens aber um 6:45 Uhr auf. Dafür fahren die Rollläden der Kinder bei Sonnenuntergang, spätestens aber um 20 Uhr zu.

      Kommentar


        #33
        Achso... wenn Du den gleichen Fehler bekommst, hast Du vermutlich an der falschen Stelle verbessert.
        Ich meinte diese Passage:
        Code:
        if (!now.isAfter((Rollos_astro_up.state as DateTimeType).calendar.timeInMillis)) {
        Da muss Rollos_astro_up_time.state stehen.

        Kommentar


          #34
          Zitat von udo1toni Beitrag anzeigen
          Achso... wenn Du den gleichen Fehler bekommst, hast Du vermutlich an der falschen Stelle verbessert.
          Ich meinte diese Passage:
          Code:
          if (!now.isAfter((Rollos_astro_up.state as DateTimeType).calendar.timeInMillis)) {
          Da muss Rollos_astro_up_time.state stehen.
          Da hab ichs ja verbessert. Ich hab das mit DateTimeType schon gesehen.

          Was seltsam ist: Wenn ich die rule onthefly ändere, kommt nur der einzelne Fehler, wenn ich meinen Odroid komplett neustarte, dann ist das ganze Log mit allem möglichem Müll voll und Openhab geht nicht mehr. Sobald ich die Regel wieder auskommentiere und neu starte, alles wieder ok.

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

          Hab mir deine Regeln mal angeschaut. Leider kapier ich da einiges nicht...

          Was ist "BIsDAY"?

          Ich will das bei mir anders haben, also Rollos auf bei Sonnenaufgang, frühestens aber um 06:30 Uhr. Derzeit gehen die Rollos bei mir um 5:xx Uhr hoch - da wache ich dann immer auf - das wird bis zur Sonnenwende ja immer noch schlimmer.

          Bei dir macht die erste Rule "Sunrise" die Rollos zum Sonnenaufgang auf. Wenn der jetzt z.B. erst um 7 wäre, dann würden die Rollos mit der zweiten Rule trotzdem um 06:45 aufgehen. Und wenn dann um 7 die erste Reigel greift, dann wird aber doch ein "UP" Befehl gesendet, obwohl die Rollos längst oben sind, oder nicht?

          Kommentar


            #35
            Zitat von halloween Beitrag anzeigen

            Was ist "BIsDAY"?
            Du liest aber schon alles, was ich poste, oder? BIsDay ist eine Rule-übergreifende Variable (also am Anfang vor den Rules definiert), die ich bei Sonnenaufgang auf true setze und bei Sonnenuntergang wieder auf false setze. Könnte ich auch mit einem Dummy-Item machen...
            Zitat von halloween Beitrag anzeigen
            Ich will das bei mir anders haben, also Rollos auf bei Sonnenaufgang, frühestens aber um 06:30 Uhr. Derzeit gehen die Rollos bei mir um 5:xx Uhr hoch - da wache ich dann immer auf - das wird bis zur Sonnenwende ja immer noch schlimmer.

            Bei dir macht die erste Rule "Sunrise" die Rollos zum Sonnenaufgang auf. Wenn der jetzt z.B. erst um 7 wäre, dann würden die Rollos mit der zweiten Rule trotzdem um 06:45 aufgehen. Und wenn dann um 7 die erste Reigel greift, dann wird aber doch ein "UP" Befehl gesendet, obwohl die Rollos längst oben sind, oder nicht?
            Die erste Rule setzt BIsDay bei Sonnenaufgang auf true. Außerdem fährt sie die Rollläden hoch, falls es schon 6:45 Uhr ist (MinuteOfDay ist größer als 6*60+44).
            Die zweite Rule Fährt die Läden um 6:45 hoch, falls schon Sonnenaufgang war (BIsDay = true). Teile meiner Läden fahren aber nur nach Uhrzeit oder nur nach Sonnenstand, die sind dann natürlich außerhalb der 2. Bedingung.
            Die dritte Rule fährt die Läden um 20 Uhr zu. Beim Bad fahren die Läden allerdings um 20 Uhr nur zu, falls schon Sonnenuntergang war (BIsDay=false)
            Die vierte Rule setzt BIsDay bei Sonnenuntergang auf false. Außerdem fährt sie die Rollläden im Bad runter, falls es nach 20 Uhr ist (MinuteOfDay ist größer als 20*60).

            Dass teilweise an schon geöffnete Rollos nochmals ein öffnen-Befehl geschickt wird, nehme ich bewusst in Kauf. Meine Rollladenmotoren erkennen selbsttätig die Endlage, da passiert also nichts, wenn sie nochmal in die gleiche Richtung gesteuert werden. Das sollte aber allgemein so sein, sonst müsstest Du das ja auch in Deiner Rule irgendwie abfangen - wäre aber easy, z.B. in der forEach-Schleife:
            Code:
            GS_C1?.members.forEach(Shutter|(if Shutter.state!=0) Shutter.sendCommand(UP))
            Mein ursprünglicher Einwand ging ja vor allem darum, dass eine Rule zwei unabhängige Trigger hat, die sie dann aber unterschiedlich behandeln muss. Da erscheint es mir einfacher, zwei Rules mit je einem Trigger zu bauen, die dann nur je eine zusätzliche Bedingung abfragen muss.

            Kommentar


              #36
              Ok, ich werd es mal mit deiner Variante ausprobieren, mit meiner komme ich aktuell nicht weiter.

              Ich hab zwar jetzt deine Regeln einigermaßen kapiert, aber ich finde, dass deine erste Regel doch so ziemlich das selbe ist, das ich auch mache?
              Bei dir heisst SunriseLimit eben BIsDay - und wenn der Sonnenaufgang nach 6:45 Uhr ist, gehen die Rollos hoch.

              Also muss die Bedingung "nach Sonnenaufgang" sowie "nach 6:45 Uhr" erfüllt sein. Wie bei mir auch? Der Unterschied ist wohl nur, dass du das innerhalb der Regel abfragst und ich das mit einem zusätzlichen Trigger für die Zeit mache - ist das so korrekt? Ich verstehs leider nicht, warum 2 Trigger schlechter sind als die Abfrage innerhalb der Rule... Aber egal, ich glaubs dir einfach, dass deine Variante die programmiertechnisch schönere Variante ist.

              Sorry wenn ich vielleicht doof frage, aber ich bin noch ziemlich am Anfang mit Openhab.
              Zuletzt geändert von halloween; 22.05.2015, 19:49.

              Kommentar


                #37
                Naja, ob das die "schönere" Variante ist... vermutlich nicht, der Punkt ist, dass Du ja auch innerhalb der Rule Bedingungen hast, beide Bedingungen fragen das gleiche ab, was Deine Trigger schon vorher erledigen, wobei zumindest die eine Abfrage wegen des TypeCastings schwierig ist. Diese benötige ich gar nicht, weil ich in meiner Variablen BIsDay speichere, ob das variable Event Sonnenaufgang schon eingetreten ist, während Du das fixe Event "früheste erlaubte Zeit" speicherst. Die seit Mitternacht verstrichenen Minuten werden natürlich als Integer oder Long dargestellt, das ist einfach im Handling.

                Grundsätzlich funktionieren beliebig viele Trigger für eine Rule, allerdings gerade mehrere Cron-Events verursachen bei Einigen hier im Forum Probleme. Ob also Deine Unterscheidung zwischen Werktagen und Wochende in der Rule "SunriseLimit on" funktionieren wird, ist auch nicht ganz sicher.

                Kommentar


                  #38
                  Und wie kann ich das sonst lösen mit den Wochentagen, wenn es beim cron-Event damit zu Problemen kommen kann?

                  Kommentar


                    #39
                    Naja, auf die hässliche Art... Die Rule mehrfach anlegen, mit jeweils einem Trigger. Du kannst natürlich auch eine Rule bauen, die dann auf einen anderen Trigger reagiert, und diesen Trigger wiederum durch Mini-Rules auslösen, also...
                    Code:
                    Rule 1
                    when Time cron 1
                    then MyTrigger on
                    
                    Rule 2
                    when Time cron 2
                    then MyTrigger on
                    ...
                    Rule MyTrigger
                    when MyTrigger updated to on
                    then Läden fahren (oder nicht...)
                    Den Trigger musst Du in dem Fall nichtmal zurücksetzen, weil updated auch triggert, wenn sich das Item nicht ändert.

                    Das ist natürlich nur ein workaround, bis der Bug beseitigt ist...

                    Kommentar


                      #40
                      Ich hab jetzt meine Regeln nochmal überarbeitet. Aber jetzt wird garnichts mehr ausgeführt...

                      Kann bitte mal jemand drüberschauen, wo der Fehler liegen könnte?

                      Hier die rollosteuerung.rules
                      Code:
                      import org.openhab.core.library.types.*   //keine Ahnung,
                      import org.openhab.model.script.actions.*          //welche dieser imports
                      import org.openhab.core.types.Command          //für diesen Rule-Satz
                      import java.lang.Math                                       //gebraucht werden...
                      import org.joda.time.*
                      
                      
                      rule "SunriseLimit on --- Mo-Fr"
                      when
                          Time cron "0 30 6 ? * MON-FRI"
                      then
                          sendCommand(SunriseLimit, ON)
                      end
                      
                      rule "SunriseLimit on --- Sa-So"
                      when
                          Time cron "0 30 7 ? * SAT-SUN"
                      then
                          sendCommand(SunriseLimit, ON)
                      end
                      
                      rule "SunriseLimit off"
                      when
                          Item Rollos_astro_down received update ON
                      then
                          sendCommand(SunriseLimit, OFF)
                          sendCommand(Rollos_is_day, OFF)
                      end
                      
                      
                      rule "Rollos hoch Astro"
                      when
                          Item Rollos_astro_up received update ON
                      then
                          sendCommand(Rollos_is_day, ON)
                          if (SunriseLimit.state == ON) {
                              sendCommand(Rollos, UP)
                          }
                      end
                      
                      rule "Rollos hoch nicht vor xx Uhr"
                      when
                          Item SunriseLimit received update ON
                      then
                          if (Rollos_is_day.state == ON) {
                              sendCommand(Rollos, UP)
                          }
                      end
                       
                      
                      rule "Rollos abends Astro zufahren"
                      when
                          Item Rollos_astro_down changed to ON
                      then {
                          sendCommand(Rollos, DOWN)
                      }
                      end

                      Kommentar


                        #41
                        Irgendwo ist da noch ein Fehler - mir schmiert nach einiger Zeit Openhab komplett ab, wenn die Rollosteuerungs-Rules aktiv sind. Dann geht kein Webinterface mehr. Die Werte werden aber weiterhin abgefragt, wie ich der event.log entnehmen kann. Aber über Webinterface oder Android kein Zugriff mehr. Nach einem Reboot gehts wieder für kurze Zeit und irgendwann schmiert das Webinterface wieder ab.

                        In der openhab.log steht kein Fehler - da sieht alles ganz normal aus.

                        Wenn ich die Rules auskommentiere, läuft Openhab problemlos.



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

                        Kann es sein, dass die Astro-Switches seit kurzem read-only sind? Ich konnte bisher in der Weboberfläche den Schalter "Astro-Rollo-runter" betätigen und die Rollos fuhren. Jetzt sehe ich im Log, dass es sich bei dem Switch um ein read-only Element handelt. Ich hab die Bindings allesamt seit kurzem von 1.6 auf 1.7 beta upgedatet.
                        Zuletzt geändert von halloween; 25.05.2015, 06:59.

                        Kommentar


                          #42
                          Die geschweiften Klammern in der letzten Regel sind nicht nötig, vielleicht veschluckt sich openHAB da.

                          Ansonsten würde ich zum Testen die Aktionen mal mit Logging ergänzen und alle Regeln auskommentieren und dann schrittweise wieder dazu nehmen.

                          Kommentar


                            #43
                            Hab die Klammern entfernt und teste es nochmal.

                            Das Logging wird nichts nutzen, weil Openhab die letzten Male immer ziemlich bald abgeschmiert ist, noch bevor eine der Regeln was zu tun hätte bekommen. Werd mal eine nach dem anderen dazuschalten.

                            Kommentar


                              #44
                              Ich glaube ich habe den Fehler endlich gefunden...

                              Ich hatte eine alte rollosteuerung.rules als Sicherheitskopie umbenannt in rollosteuerung.rules.old und im Ordner rules gelassen. Das muss irgendwie trotzdem noch aktiviert gewesen sein, obwohl ich die Endung .old hinzugefügt habe. Jetzt habe ich die Datei gelöscht und so wie es scheint, funktioniert es jetzt... Seltsam...


                              Ich habe gesehen, dass es 2 Astro-Addons gibt. einmal ...openhab.action.astro.1.7.0 und einmal openhab.binding.astro.1.7.0.

                              Welches benötigt man für was bzw. was ist der Unterschied der beiden?
                              Zuletzt geändert von halloween; 25.05.2015, 19:13.

                              Kommentar


                                #45
                                Unterschied Astro-Binding und Astro.Action Siehe Wiki-Eintrag Actions ...

                                Astro Action
                                With the Astro-Action you can calculate sunrise and sunset DataTime values in rules.

                                Stellt also Astro als Funktion bereit, um (unabhängig von vorhandenen Items) z.B. Sonnenaufgang und Untergang zu berücksichtigen.

                                Kommentar

                                Lädt...
                                X