Berechnung des Sonnenstandes

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

mauri
Beiträge: 58
Registriert: 13.05.2008, 19:03

Berechnung des Sonnenstandes

Beitrag von mauri » 18.08.2010, 22:02

Ich wollte mein Jalousien mit dem aktuellen Sonnestand steuern, Da die CCU kein Sin und Cos Operationonen erlaub habe ich folgende Lösung entwickelt:
Auf der Seite http://susdesign.com/sunposition/index.php kann man Sich für seinen Standort die aktuellen Daten berechnen lassen. Ich habe mir die Daten alle 15 Minuten berechnen lassen.
Mit einem tcl Script lese ich dann die Daten aus und übergebe sie an an die CCU:

Code: Alles auswählen

#!/bin/tclsh



load tclrega.so



proc readfile {} {
  set command ""
  #Time
  append command "var hmtimeH = system.Date('%H');"
  append command "var hmtimeM = system.Date('%M').ToInteger();"
  append command "var hmtimemi = (hmtimeM /15)*15;"
  append command "if (hmtimemi==0) {var hmtime = hmtimeH+':00';}"
  append command "else {var hmtime = hmtimeH+':'+hmtimemi.ToString();}"
  append command "var hmdate = system.Date('%D').ToString().Substr(0,5);"
  array set result [rega_script $command]
  set mytime $result(hmtime)
  set mydate $result(hmdate)
  set filename "/usr/local/etc/config/addons/rega/Azimut.csv"
  set f [open $filename]
  while {[gets $f line]>=0} {
    set fields [split $line "\t"]
    set date_ [lindex $fields 0]
    set time_ [lindex $fields 1]
    if {($date_ == $mydate) && ($time_ == $mytime)} {
      set alt [lindex $fields 2]
      set azimute [lindex $fields 3]
      set Command ""
      append command "var sAltaO = dom.GetObject('SunAltitudeAngle');"
      append command "var sAltaV = sAltaO .Value();"
      append command "var sAzaO = dom.GetObject('SunAzimuthAngle');"
      append command "var sAzaV = sAzaO .Value();"
      append command "sAltaO.State('$alt');"
      append command "sAzaO.State('$azimute');"
      array set result [rega_script $command]
    }
  }
}
readfile
Dieses Script rufe ich alle 15 Minuten auf

Code: Alles auswählen

string stdout;
string stderr;
system.Exec("tclsh /usr/local/etc/config/addons/rega/CalcAzimuth.tcl", &stdout, &stderr);
Wichtig ist, dass man sich die Systemvariablen vorher anlegt....
Sunangle.PNG
Sunangle.PNG (16.29 KiB) 9044 mal betrachtet
Die genaue Beschreibung zu Azimuth und Sunangle findet man auch unter:
http://susdesign.com/sunposition/index.php
1 CCU, 7 Jalousieaktoren, 2 Dimmaktoren, 4 Schaltaktoren, Wetterstation, 2x Keymatic,
1Stellaktor, den ich leider nicht über die CCU regeln kann, und many to come

bumaas
Beiträge: 128
Registriert: 29.03.2010, 16:40
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Berechnung des Sonnenstandes

Beitrag von bumaas » 19.08.2010, 09:31

Hallo Mauri,

die Idee ist absolut genial! Das ist genau das, wonach ich schon lange gesucht habe. Bislang krankte mein Rolladenscript daran, dass die Abschattungszeiten und das -niveau im Jahresverlauf verschieden sind. Ich habe mich bislang damit beholfen, diese Daten monatsbezogen vorzugeben, aber nun wird das entfallen können. :D

Ich habe die Daten auf der besagten Seite ermitteln lassen und dabei folgende Einstellungen vorgegeben (ich benenne sie mal, damit auch andere es leichter nachvollziehen können):

Time Basis: clock time
Data to calculate: altitude, azimuth
latitude: 51.7191 North (für Paderborn)
longitude: 8.75439 East (für Paderborn)
time zone: Z(GMT)
frequenzy: every day
resolution: every 15 minutes
start date: Jan
time: 00:00
delimiter: tab
angle units: degrees
leap year: true
date style: 01/21
time style 14:00
include header: false

Das Ergebnis ist unter "/usr/local/etc/config/addons/rega/Azimut.csv" (Achtung: Azimut hier ohne "h") zu speichern. Das schöne ist, dass diese Datei (solange man nicht umzieht ;-)) immer gültig ist.

Kannst du die Einstellungen bestätigen? Da du für die Systemvariable SunAltiduteAngle den Wertebereich 0 bis 360 vorgegeben hast, ich in der azimuth.csv Datei aber Werte von ca. -60 bis + 60 stehen habe, muss wohl noch irgendetwas unterschiedlich sein.

Bei der Timezone bin ich mir ebenfalls noch unsicher. Ich vermute, dass es - um Winterzeit/Sommerzeit auszugleichen - am besten ist, als Zeitzone GMT+0 zu wählen. Im Skript wäre dann die aktuelle Uhrzeit noch zu korrgieren. Der Zeitabstand zu GMT lässt sich mit system.Date(%z) leicht ermitteln.

Die Änderung im tcl Script wäre dann:

Code: Alles auswählen

  append command "time hmtimeSys = system.Date('%Y-%m-%d %H:%M').ToTime() - system.Date('%z').Substr(0,3).ToInteger() * 3600;"
  append command "var hmtimeH = hmtimeSys.Format('%H');"
  append command "var hmtimeM = hmtimeSys.Format('%M').ToInteger();"
  append command "var hmtimemi = (hmtimeM /15)*15;"
  append command "if (hmtimemi==0) {var hmtime = hmtimeH+':00';}"
  append command "else {var hmtime = hmtimeH+':'+hmtimemi.ToString();}"
  append command "var hmdate = hmtimeSys.Format('%D').ToString().Substr(0,5);"
Ich werde es bei nächster Gelegenheit ausprobieren und auch mein Rolladenscript mal online stellen.

Viele Grüße

Burkhard

Anmerkung: der IE 8 braucht bei mir 3 Minuten zur Berechnung, Safari 5 ca 2 sec.

mauri
Beiträge: 58
Registriert: 13.05.2008, 19:03

Re: Berechnung des Sonnenstandes

Beitrag von mauri » 20.08.2010, 00:50

Hallo,
Ja die Einstellungen sind soweit ok. Man kann aber auch die Header Inkludieren. Als Zeit Habe GMT +1 genommen.
Die negativen Zahlen beim Azimuth brauche ich nicht, da hier die Sonne unterm Horizint ist. Du hast aber Recht, dass ritigerweise von -90 bis +90 eingestellt werden müsste.
Ich selbst habe esr erst ein paar Wochen laufen und muss die Einstellungen mit der Sommerzeit noch prüfen......
Werde das mal mit den Sonnenuntergangszeiten vergleichen....
Have Fun
Michael
1 CCU, 7 Jalousieaktoren, 2 Dimmaktoren, 4 Schaltaktoren, Wetterstation, 2x Keymatic,
1Stellaktor, den ich leider nicht über die CCU regeln kann, und many to come

bumaas
Beiträge: 128
Registriert: 29.03.2010, 16:40
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Berechnung des Sonnenstandes

Beitrag von bumaas » 20.08.2010, 10:43

Hallo Michael,
mauri schrieb:
Die negativen Zahlen beim Azimuth brauche ich nicht, da hier die Sonne unterm Horizint ist. Du hast aber Recht, dass ritigerweise von -90 bis +90 eingestellt werden müsste.
Du meinst sicherlich die Altidude (= Höhenwinkel) und nicht den Azimut (= Himmelsrichtung) ;-). Dann passt es.

Zur Zeit (Sommerzeit) gilt bei uns übrigens GMT + 2. Für die Winterzeit gilt GMT +1.

Viele Grüße

Burkhard

deatheye
Beiträge: 7
Registriert: 18.08.2010, 14:30

Re: Berechnung des Sonnenstandes

Beitrag von deatheye » 22.08.2010, 15:34

Hey... eine wirklich gute Idee. Hat das Script hochgeladen, aber irgendwie werden keine Werte geladen.
Muss man sonst noch was machen, außer das Script hochlanden und die Systemvariablen erstellen?

bumaas
Beiträge: 128
Registriert: 29.03.2010, 16:40
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Berechnung des Sonnenstandes

Beitrag von bumaas » 22.08.2010, 16:27

deatheye schrieb:
Hat das Script hochgeladen, aber irgendwie werden keine Werte geladen
Kannst du etwas genauer schreiben, was du bereits getan hast, und was nicht funktioniert?

Gruß

Burkhard

deatheye
Beiträge: 7
Registriert: 18.08.2010, 14:30

Re: Berechnung des Sonnenstandes

Beitrag von deatheye » 22.08.2010, 16:54

Sicher... ich werde es zumindest versuchen. Habe die Systemvariablen SunAltitudeAngle und SunAzimuthAngle erstellt und das CalcAzimuth.tcl per ftp auf die ccu im folgenden pfad hochgeladen: /usr/local/etc/config/addons/rega/CalcAzimuth.tcl
der ordner rega musste ich selber erstellen

dann rufe ich das CalcAzimuth.tcl per programm in der ccu auf:

string stdout;
string stderr;
system.Exec("tclsh /usr/local/etc/config/addons/rega/CalcAzimuth.tcl", &stdout, &stderr);

Die Werte für SunAltitudeAngle und SunAzimuthAngle ändern sich aber nicht...

bumaas
Beiträge: 128
Registriert: 29.03.2010, 16:40
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Berechnung des Sonnenstandes

Beitrag von bumaas » 22.08.2010, 22:20

Ok. Sieht soweit gut aus. Aber hast du auch auf der angegebenen Webseite die Datei für deinen Ort erstellen lassen? Achte darauf, dass du die Eingaben so vornimmst, wie ich sie weiter oben beschrieben habe. Das Ergebnis ist dann nach nach "/usr/local/etc/config/addons/rega/Azimut.csv" zu kopieren.

Viele Grüße

Burkhard

deatheye
Beiträge: 7
Registriert: 18.08.2010, 14:30

Re: Berechnung des Sonnenstandes

Beitrag von deatheye » 22.08.2010, 23:15

Hab ich alles gemacht, aber trotzdem verändern sich die Werte nicht. Hab schon mehere Stunden geschaut, aber bisher keinen Fehler gefunden.
Verstehe ich irgendwie nicht... bin alles mehrmal durchgegangen... Muss man noch was mit der CCU machen?

bumaas
Beiträge: 128
Registriert: 29.03.2010, 16:40
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Berechnung des Sonnenstandes

Beitrag von bumaas » 22.08.2010, 23:37

Seltsam. Versuch mal im Script Tester die folgenden Zeilen auszuprobieren:

Code: Alles auswählen

string stdout;
string stderr;
system.Exec("tclsh /usr/local/etc/config/addons/rega/CalcAzimuth.tcl", &stdout, &stderr);

WriteLine(stdout);WriteLine(stderr);
WriteLine("fertig");
Was kommt dabei heraus?

Viele Grüße

Burkhard

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“