Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Steuerung per Sonnenauf- und Untergangszeit

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

    #16
    Hallo,

    auf https://code.google.com/p/openhab-sa...e_sun_position hat sich wohl noch ein kleiner Syntax-Fehler eingeschlichen:

    Bei "postUpdate(Sun_Dawn_Astronomical, ..." fehlt direkt nach dem "if" IMHO noch eine öffnende Klammer.

    Gruß,
    Martin

    Kommentar


      #17
      - √ - Steuerung per Sonnenauf- und Untergangszeit

      Stimmt, sorry!

      Ergänze ich nachher noch, hab ich wohl beim formatieren im Wiki versehentlich gelöscht...

      Kommentar


        #18
        So, hab es verbessert. Danke noch mal für den Hinweis!

        Kommentar


          #19
          kleine Ungenauigkeit

          Nach meinem Verständnis verbirgt sich in der Berechnung des Sonnenstands eine (kleine) Ungenauigkeit, da die Tageszahl aus Monat, Tag und Stunde zusammengesetzt wird, dabei aber für jeden abgelaufenen Monat 30 Tage angenommen werden. Im Mittel stimmt das zwar, eleganter erscheint mir aber, die Funktion now.getDayOfYear zu verwenden, die direkt den korrekten Tag des Jahres ausgeben sollte - für das logging ist natürlich das Klartextdatum angenehmer...

          Kommentar


            #20
            Es ist ja eh eine Berechnungsmethode die nur ungefähre Werte ermittelt (die aber für die praktische Anwendung in der Hausautomatisierung vollkommen reichen). Der Fehler durch die Methode dürfte wahrscheinlich größer sein als der durch die Bestimmung des Datums, genau kann ich es aber nicht sagen.

            Interessehalber hab ich auch mal die aufwändigere Version von ABC der Astronomie umgesetzt (tagesgenau) und lasse mir beide Varianten parallel anzeigen. Aktuell kommen beide auf 5:26 Uhr als Sonnenaufgang (Differenz also < 1min) und -1.3° bzw. -0.97° Sonnenhöhe, Azimut sind 308,9° zu 308,78°, die Berechnung wird aber auch nur alle paar Minuten ausgeführt. Die Unterschiede halte ich für praktisch zu vernachlässigen.

            Die genauere Variante hab ich aber schon in C umgesetzt und übermittle die Werte per Rest-API, in einer Regel wäre mir das viel zu aufwändig gewesen.

            Aber recht hast Du natürlich.

            Kommentar


              #21
              Kann mir jemand sagen, wie ich anhand dieser Berechnungen an sonnigen Tagen die Rollos zur Beschattung nutzen kann? Welcher Wert ist da relevant? Ich habe schon versucht herauszufinden, welche Werte angezeigt werden, wenn die Sonne anfängt durch Fester X zu scheinen, aber ich bilde mir ein, dass die Werte jeden Tag anders sind (bei wolkenlosem Himmel ;-))

              Gruß Jan

              Kommentar


                #22
                @Jan0815:
                Code:
                Sun_Height.postUpdate(sonnenhoehe)
                Sun_Azimut.postUpdate(azimut)
                Mit Sun_Azimut bekommst du die Sonnenposition horizontal - also "um dein Haus herum". Sun_Height ist die Höhe überm Horizont.

                Die minimale/Sonnenaufgang und maximale/Mittag Sonnenhöhe ändert sich stetig im Jahresverlauf.

                Du kannst z.B. deine Hausseiten als Switches definieren um so die gezielte Beschattung zu steuern. Wenn die Sonne (Azimut) in einem bestimmten Bereich ist, soll der Schalter ein sonst aus sein.

                Darauf aufbauend eine Regel zum Rollofahren.

                Grüße

                Kommentar


                  #23
                  In den Google Groups gibt es eine erweiterte Regel, die auch die Beleuchtung der vier Hausseiten berechnet: Klick

                  Dazu muss oben in der Regel noch die Ausrichtung des Hauses konfiguriert werden.

                  Aber Achtung: die Regel hat bei der Berechnung der Differenz zu GMT noch einen Bug der jeweils beim Tageswechsel auftritt. Der läßt sich aber wie folgt korrigieren:

                  Ersetze
                  var localgmtdiff = local_time.get(java::util::Calendar::HOUR_OF_DAY) - hour //Timezone

                  Durch
                  var localgmtdiff = local_time.get(java::util::Calendar::ZONE_OFFSET)/3600000

                  Kommentar


                    #24
                    Hi,

                    Zitat von Jockel Beitrag anzeigen
                    die Regel hat bei der Berechnung der Differenz zu GMT noch einen Bug der jeweils beim Tageswechsel auftritt. Der läßt sich aber wie folgt korrigieren
                    das klingt mir nach einem Fall für das Samples-Wiki, oder?

                    Gruß,

                    Thomas E.-E.
                    Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

                    Kommentar


                      #25
                      Die Sonnenstandsberechnung im Sample-Wiki hat den Bug, zumindest auf den ersten Blick, nicht.

                      Die erweiterte Regel ist ja nicht von mir, daher würde ich die ungerne in das Wiki eintragen ohne den Autor und auch den ursprünglichen Ersteller (lexikon.astronomie,info) zu fragen.

                      Kommentar


                        #26
                        Läuft bei mir leider nicht...

                        Ich bekommen diverse Fehleremeldungen bei der Regel:

                        Hier meine rules mit Anmerkungen:

                        import org.openhab.core.library.types.*
                        import java.lang.Math

                        // import the decimal type as we refer to it in a rule
                        import org.openhab.core.library.types.DecimalType

                        // Constants
                        var Number K = 0.017453

                        // Change this reflecting your destination
                        var Number latitude = 59.580000
                        var Number longitude = 06.000000

                        var Number counter

                        rule "Set Sun sonnenhoehe and Dawn States"
                        when
                        Time cron "0 0/5 * * * ?"
                        then
                        var Number tageszahl
                        var Number deklination
                        var Number zeitgleichung
                        var Number stundenwinkel
                        var Number x
                        var Number y
                        var Number sonnenhoehe Ich bekomme bei der Variablen sonnenhoehe die Fehlermeldung:
                        "Multiple markers at this line
                        - The value of the local variable sonnenhoehe is not used
                        - Duplicate variable name 'sonnenhoehe'"

                        var Number azimut

                        var month = now.getMonthOfYear
                        var day = now.getDayOfMonth
                        var hour = now.getHourOfDay
                        var minute = now.getMinuteOfHour

                        // Source: Sonnenhoehe mit Tabellenkalkulation
                        tageszahl = (month - 1) * 30 + day + hour / 24
                        deklination = -23.45 * Math::cos((K * 360 * (tageszahl + 10) / 365).doubleValue)
                        zeitgleichung = 60.0 * (-0.171 * Math::sin((0.0337*tageszahl+0.465).doubleValue) - 0.1299 * Math::sin((0.01787*tageszahl-0.168).doubleValue))
                        stundenwinkel = 15.0 * (hour.doubleValue + (minute.doubleValue/60.0) - (15.0-longitude)/15.0 - 12.0 + zeitgleichung/60.0)
                        x = Math::sin((K * latitude).doubleValue()) * Math::sin((K * deklination).doubleValue()) + Math::cos((K * latitude).doubleValue()) * Math::cos((K * deklination).doubleValue()) * Math::cos((K * stundenwinkel).doubleValue())
                        y = - (Math::sin((K*latitude).doubleValue) * x - Math::sin((K*deklination).doubleValue)) / (Math::cos((K*latitude).doubleValue) * Math::sin(Math::acos(x.doubleValue)))
                        sonnenhoehe = Math::asin(x.doubleValue) / K

                        ...in der Formel wird bei sonnenhoehe folgendes geplottet:
                        "Incompatible types. Expected org.openhab.core.library.items.NumberItem
                        but was java.math.BigDecimal"


                        var break = hour.doubleValue + (minute.doubleValue/60.0) <= 12.0 + (15.0-longitude)/15.0 - zeitgleichung/60.0
                        if (break) {
                        azimut = Math::acos(y.doubleValue) / K
                        } else {
                        azimut = 360.0 - Math::acos(y.doubleValue) / K
                        }

                        logDebug("Sun.rules", "month: " + month)
                        logDebug("Sun.rules", "day: " + day)
                        logDebug("Sun.rules", "hour: " + hour)
                        logDebug("Sun.rules", "minute: " + minute)
                        logDebug("Sun.rules", "tageszahl: " + tageszahl)
                        logDebug("Sun.rules", "deklination: " + deklination)
                        logDebug("Sun.rules", "zeitgleichung: " + zeitgleichung)
                        logDebug("Sun.rules", "stundenwinkel: " + stundenwinkel)
                        logDebug("Sun.rules", "x: " + x)
                        logDebug("Sun.rules", "y: " + y)
                        logDebug("Sun.rules", "sonnenhoehe: " + sonnenhoehe)
                        logDebug("Sun.rules", "azimut: " + azimut)

                        logDebug("Sun.rules", "Calculated new SunHeight angle '" + sonnenhoehe + "°'")
                        logDebug("Sun.rules", "Calculated new Azimut angle '" + azimut + "°'")

                        // Berechnungen auf den Bus schicken ...

                        Sun_Height.postUpdate(sonnenhoehe)
                        Sun_Azimut.postUpdate(azimut)
                        end

                        rule "calculate dawn"
                        when
                        Item Sun_Height changed
                        then
                        Sun_Dawn_Solar.postUpdate( if (Sun_Height.state < 0) ON else OFF )
                        Sun_Dawn_Civil.postUpdate( if (Sun_Height.state < -6) ON else OFF )
                        Sun_Dawn_Nautical.postUpdate( if (Sun_Height.state < -12) ON else OFF )
                        Sun_Dawn_Astronomical.postUpdate( if (Sun_Height.state < -18) ON else OFF)
                        end
                        In der Regel "calculate dawn" bekomme ich die folgende Fehlermeldung:"Multiple markers at this line
                        - Couldn't resolve reference to JvmIdentifiableElement 'postUpdate'.
                        - This expression is not allowed in this context, since it doesn't
                        cause any side effects.
                        - Couldn't resolve reference to JvmIdentifiableElement 'Sun_Dawn_Solar'."



                        rule "switch on outdoor-lights at sunset"
                        when
                        Item Sun_Dawn_Astronomical changed to ON
                        then
                        Light_Outdoor_Frontdoor.sendCommand(ON)
                        Light_Outdoor_Carport.sendCommand(ON)
                        Light_Outdoor_Balcony.sendCommand(ON)
                        end


                        rule "switch off outdoor-lights at sunrise"
                        when
                        Item Sun_Dawn_Astronomical changed to OFF
                        then
                        Light_Outdoor_Frontdoor.sendCommand(OFF)
                        Light_Outdoor_Carport.sendCommand(OFF)
                        Light_Outdoor_Balcony.sendCommand(OFF)
                        end
                        Was mache ich falsch???

                        Vielen Dank für Hilfe!

                        Kommentar


                          #27
                          wie sieht denn Deine *.items Datei aus?
                          Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

                          Kommentar


                            #28
                            Problem gelöst! Die .items waren z.T. falsch definiert!

                            Sent from my GT-N8010 using Tapatalk HD

                            Kommentar


                              #29
                              Noch ein Nachtrag bzw. eine Anmerkung:

                              Die Definitionen der Auf- und Untergänge sind zwar ganz interessant, aber beim Schalten einer Aussenbeleuchtung mit dieser Regel und den Standard-Werte der Sonnenhöhe erreicht man meines Erachtens mit 0, -6, -12 oder gar mit -18 nicht wirklich den gewünschten Effekt!

                              Besser wäre ein Schalter:

                              Sun_Dawn_Personal.postUpdate( if (Sun_Height < - 1) ON else OFF)
                              Sun_Dawn_Personal. postUpdate( if (Sun_Height < - 2) ON else OFF)

                              Sent from my GT-N8010 using Tapatalk HD

                              Kommentar


                                #30
                                So mache ich das schon länger, aber selbst das ist je nach Wetterlage unbefriedigend, dazu schwankt die Helligkeit zu sehr z.B. mit der Bewölkung. Aktuell nehme ich daher noch die Helligkeitswerte eines KNX-BM hinzu, warte aber eigentlich auf den Wiregate Helligkeitssensor für außen.

                                Kommentar

                                Lädt...
                                X