Ankündigung

Einklappen
Keine Ankündigung bisher.

Sonnen auf/untergang

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

    Sonnen auf/untergang

    Heya

    ich möchte gerne meine Rolläden nach Sonnenauf/untergang steuern.

    Ich habe folgenden Seite gefunden: https://code.google.com/p/openhab-sa...mer_for_sunset
    Leider konnte ich mich dort nicht registrieren und habe die api von openweathermap verwendet.
    Ich habe ein XSL geschrieben, das mir die Zeit im Format hh:mm:ss ausgibt und im Ordner "transforms" gespeichert.
    Das item habe ich wie unter dem link beschrieben angelegt:
    Code:
    String strSunset "Sunset" <clock> (gWeather) { http="<[http://api.openweathermap.org/data/2.5/weather?q=Speyer&mode=xml:XSLT(C:\temp\openhab-runtime-1.3.1\configurations\rules\sunset.xsl)]" }String strSunset "Sunset" <clock> (gWeather) { http="<[http://api.openweathermap.org/data/2.5/weather?q=Speyer&mode=xml:XSLT(sunset.xsl)]" }
    Wenn ich in einer rule allerdings die Zeit ausgeben möchte bekomme ich den Fehler: Uninitialized

    Was könnte der Fehler sein?

    #2
    Ich antworte mir mal selbst:

    Richtig wäre dann folgendes
    Code:
    String strSunset "Sunset" <clock> (gWeather) { http="<[http://api.openweathermap.org/data/2.5/weather?q=Speyer&mode=xml:XSLT(C:\temp\openhab-runtime-1.3.1\configurations\rules\sunset.xsl)]" }String strSunset "Sunset" <clock> (gWeather) { http="<[http://api.openweathermap.org/data/2.5/weather?q=Speyer&mode=xml:60000:XSLT(sunset.xsl)]" }
    die Zahl vor XSLT gibt an, wie oft die Website gepollt werden soll. Ich hatte entweder gar keinen oder einen zu hohen Wert eingegeben. Vielleicht versuche ich es auch mal mich caching...

    Kommentar


      #3
      Hi,

      könntest Du das sunset.xsl auch noch posten. Hätte Interesse an Deiner Lösung ;-)

      Danke Dir!

      Gruß Michael

      Kommentar


        #4
        Alternativ gäbe es im Example-Wiki auch eine Regel zur Berechnung von Sonnenauf- und Untergang, die ist vielleicht etwas flexibler!

        Kommentar


          #5
          Klar

          die Datei sunset.xsl mit folgendem Inhalt erstellen und in configurations/transform/ kopieren

          Code:
          <?xml version="1.0"?>
          <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
                  
                  <xsl:output indent="yes" method="xml" encoding="UTF-8" omit-xml-declaration="yes" />
          
                  <xsl:template match="/">
          
           		 <xsl:variable name = "sunset" > <xsl:value-of select="current/city/sun/@rise"/></xsl:variable> 
          				<xsl:value-of select="substring-after($sunset,'T')"/>
          
                  </xsl:template>
          
          </xsl:stylesheet>
          Warscheinlich muss man das mit dem Substring gar nicht machen und kann das Datum wie es kommt als DateTime parsen. Muss ich mal ausprobieren...

          Das Item so wie oben beschrieben definieren (und eben die gewünschte location auswählen)
          Dann nicht vergessen, das http binding Modul in "addons" zu kopieren.

          Zum Schluss dann noch die Rule enstprechend anlegen. Ich habe sie ziemlich genau aus dem Beispiel übernommen.

          An der Konfiguration openhab.cfg habe ich nichts geändert.

          Kommentar


            #6
            Zitat von Jockel Beitrag anzeigen
            Alternativ gäbe es im Example-Wiki auch eine Regel zur Berechnung von Sonnenauf- und Untergang, die ist vielleicht etwas flexibler!
            Meinst Du die Berechnung des Sonnenstandes? Damit weiß ich zwar, wann Sonnenuntergang ist, im 5 Minuten Raster (bzw. wie cron eingestellt ist), aber es wird nicht konkret die Sonnuntergangszeit berechnet. Es wird nur verglichen, wann steht die Sonne unterhalb des Horizonts und definiert das als Sonnenuntergang.
            Damit kann ich keine Regel erstellen z.B.
            Rollo runterfahren 30 Minuten vor Sonnenuntergang

            Oder sehe ich das falsch oder gibt es noch ein anderes Beispiel?

            Kommentar


              #7
              Außerdem ist so ein wesentlich geringerer Rechenaufwand nötig - gerade im Smarthome sollte das nicht vergessen werden.

              @staehler siehst du richtig.

              Grüße
              Sascha

              Kommentar


                #8
                Bei mir macht sich der Rechenaufwand nicht negativ bemerkbar, hängt aber natürlich von der Hardware ab.

                Das Skript was ich kenne berechnet auch Sonnenauf- und Untergang, könnte auch in einer Regel verwendet werden und die Berechnung 1x am Tag reicht. Ich mache es allerdings so, dass ich eine Zusätzliche Variable bei Sonnenhöhe =4° setze und die Regeln darauf trägere. Erscheint mir auch sinnvoller als nach der Zeit. Es bleibt aber das Problem, dass es je nach Witterung bei gleichem Sonnenstand sehr unterschiedlich hell sein kann, da hilft dann nur eine Messung die dann mit dem Sonnenstand kombiniert werden kann.

                Spätestens wenn man eine Beschattungssteuerung realisieren will kommt man um die Berechung des Sonnenstandes aber eh nicht herum, die Regel die ich verwende erledigt das auch.

                Ich bin mir jetzt allerdings nicht sicher, ob ich die Regel aus dem Wiki oder der Mailingliste bei google habe, posten möchte ich sie eher nicht, da ich nicht weiss wie es um das Copyright der verwendeten Formeln bestellt ist.

                Kommentar


                  #9
                  Hier ist der Link zu der Regel: https://groups.google.com/forum/?fro...ab/rizklYcQMq0

                  Die dortige Regel hat allerdings einen Bug beim Wechsel Sommer- Winterzeit, die Differenz wird besser folgendermaßen berechnet:

                  Code:
                  var localgmtdiff                = (local_time.get(java::util::Calendar::ZONE_OFFSET) + local_time.get(java::util::Calendar::DST_OFFSET))/3600000
                  Außerdem werden die Dämmerungszustände nicht korrekt berechnet, das hab ich geändert zu:

                  Code:
                  postUpdate(Sun_DawnTwilight_Civil_ext,        	if( (height <   0)  && (height >=  -6) && (hour < 12)) {ON} else {OFF})
                  postUpdate(Sun_DawnTwilight_Nautical_ext,     	if( (height <  -6)  && (height >= -12) && (hour < 12) ) {ON} else {OFF})
                  postUpdate(Sun_DawnTwilight_Astronomical_ext, 	if( (height < -12)  && (height >= -18) && (hour < 12) ) {ON} else {OFF})
                  	
                  postUpdate(Sun_DuskTwilight_Civil_ext,        	if( (height <   0)  && (height >=  -6) && (hour > 12)) {ON} else {OFF})
                  postUpdate(Sun_DuskTwilight_Nautical_ext,     	if( (height <  -6)  && (height >= -12) && (hour > 12) ) {ON} else {OFF})
                  postUpdate(Sun_DuskTwilight_Astronomical_ext, 	if( (height < -12)  && (height >= -18) && (hour > 12) ) {ON} else {OFF})
                  Ich triggere in meinen Regeln auf diese beiden Variablen:

                  Code:
                  postUpdate(SunNight, 							if( height < 0 )  {ON} else {OFF})
                  	postUpdate(SunDark, 							if( height <   4.0 )  {ON} else {OFF})

                  Kommentar


                    #10
                    In diesem Thread gibt es eine rule zum berechnen der Sonnenaufgangs-/Sonnenuntergangszeiten. Die muss man nur einmal täglich aufrufen, und zusätzlich bei Systemstart, damit man dann auf entsprechende Zeitpunkte triggern kann.

                    Kommentar

                    Lädt...
                    X