Sonnenstandsberechnung 2.0 für Rolladen, Markisen, Lampen

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

Moderator: Co-Administratoren

joe.oster
Beiträge: 288
Registriert: 17.06.2013, 12:15
Wohnort: NRW
Danksagung erhalten: 2 Mal

Re: Sonnenstandsberechnung 2.0 für Rolladen, Markisen, Lampe

Beitrag von joe.oster » 12.03.2014, 22:52

funkleuchtturm hat geschrieben:Vom Skript kann das Einfrieren m.E. nicht verursacht werden; ich habe selbst bei minütlichem Aufruf keinerlei Probleme.
das kann ich bestätigen, seit dem Erscheinen von Skript 1 habe ich es im Minuten Takt laufen und seit dem Erscheinen von Skript 2 sogar beide im Minutentakt, um bei den geloggten Werten die Unterschiede zu sehen. :wink:

Joe

-=FuF=-
Beiträge: 97
Registriert: 30.12.2013, 21:08
Hat sich bedankt: 2 Mal

Re: Sonnenstandsberechnung 2.0 für Rolladen, Markisen, Lampe

Beitrag von -=FuF=- » 12.03.2014, 23:34

Hi Eugen,

soweit ich jetzt gesucht habe, gibt es einige tclsh-Scripte, die Daten von extern holen und dieses Näherungsverfahren. Wäre nicht eine sinnvolle Lösung, die Berechnung des Sonnenstands in ein tclsh zu verschieben, das per cron oder CUxD aufgerufen wird?
Dort gäbe es die trigonometrischen Funktionen.

Mir ist schon klar, dass das Deinem sauberem Ansatz widerspricht, vielleicht wäre es jedoch um vieles einfacher...

Christian

drhwpot
Beiträge: 173
Registriert: 04.11.2012, 11:05
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Sonnenstandsberechnung 2.0 für Rolladen, Markisen, Lampe

Beitrag von drhwpot » 12.03.2014, 23:57

Hallo Eugen,
Hallo Joe,

die Hinweise auf die sehr kurzfristigen Aufrufe des Skriptes kann ich gut nachvollziehen.

Ich habe jedoch noch zwei Fragen, da ich bei meiner Fehlersuche nicht weiter komme und ohne Skript es keinerlei Fehlereinträge gibt und ich aber nicht auf das Skript verzichten möchte.

Ich lasse derzeitig noch das allgemein bekannte Tageszeitenskript laufen. Die zeitliche Ausführung der beiden Skripte liegt sehr eng zusammen. Tageszeitenskript wird alle 300 S mittels Timer ausgeführt und das Sonnenstandskript nach 300 S ebenfalls mittels Timer gestartet – wobei die Ausführung um 7 S verzögert wird. Könnte hieraus eine Überlastung / Überlagerung resultieren, oder gehen meine Überlegungen in die vollkommen falsche Richtung?

Könnte es daher kommen, dass ich bei Positionsangaben (Längengrad) nicht mit den Standardwert für München 11,6 sondern mit 11,784512 - also sechs Nachkommastellen gearbeitet habe und diese im Skript die Rechenleistung der CCU 2 „genervt“ hat.

Beste Grüße
HP
1 x RaspberryMatic - tinker board S; 2 x Funk LAN Gateway (HM-LGW-O-TW-W-EU); 2 x HMW-Sen-SC-12-DR; 10 x Rollladenaktor (HM-LC-Bl1PBU-FM); 5 x Schalter ( HM-LC-Sw1PBU-FM); 4 x Schaltaktor (HmIP-BSM); 2 x Dimmer (HM-LC-Dim1TPBU-FM); 8 x Jalousienaktor-IP (HmIP-BBL); 8 x Fensterdrehgriff ( HM-Sec-RHS); 1 x Bewegungsmelder (HM-Sen-MDIR-O); 1 x Außensenor (HM-WDS10-TH-O); 1 x Temperaturfüller ( HM-WDS30-TO); 1 x Wettersensor HmIP-SWO-B; 5 x Schalt-Mess-Steckdose (HMIP-PSM) , CUxD - Timer, CUxD SyS EX, WH-3000 SE Pro, Prowl Push, Serviemeldungen via Push; FW: 3.63.9.20220521 ; Historian V3.0.2;

Benutzeravatar
funkleuchtturm
Beiträge: 2367
Registriert: 13.06.2011, 16:42
Hat sich bedankt: 23 Mal
Danksagung erhalten: 357 Mal
Kontaktdaten:

Re: Sonnenstandsberechnung 2.0 für Rolladen, Markisen, Lampe

Beitrag von funkleuchtturm » 13.03.2014, 07:00

-=FuF=- hat geschrieben:Hi Eugen,

soweit ich jetzt gesucht habe, gibt es einige tclsh-Scripte, die Daten von extern holen und dieses Näherungsverfahren. Wäre nicht eine sinnvolle Lösung, die Berechnung des Sonnenstands in ein tclsh zu verschieben, das per cron oder CUxD aufgerufen wird?
Dort gäbe es die trigonometrischen Funktionen.
... und genau das wollte ich auf keinen Fall, weil ...
1. der Bezug von wichtigen Daten aus dem Internet viel zu unsicher ist, dass man davon wichtige Funktionen abhängig macht und
2. ein Tcl-Skript ggf. bei jedem Update oder Neuausetzen der CCU neu installiert werden muss und...
3. die ganzen Aufrufe von externen Programmen mit system.exec oder meiner Erfahrung soweit möglich vermindert werden sollte.
drhwpot hat geschrieben:ch lasse derzeitig noch das allgemein bekannte Tageszeitenskript laufen. Die zeitliche Ausführung der beiden Skripte liegt sehr eng zusammen. Tageszeitenskript wird alle 300 S mittels Timer ausgeführt und das Sonnenstandskript nach 300 S ebenfalls mittels Timer gestartet – wobei die Ausführung um 7 S verzögert wird. Könnte hieraus eine Überlastung / Überlagerung resultieren, oder gehen meine Überlegungen in die vollkommen falsche Richtung?
... kann "eigentlich"nicht sein. Dann leg die Auslösezeitpunkte doch mal weit auseinander.
drhwpot hat geschrieben:önnte es daher kommen, dass ich bei Positionsangaben (Längengrad) nicht mit den Standardwert für München 11,6 sondern mit 11,784512 - also sechs Nachkommastellen gearbeitet habe und diese im Skript die Rechenleistung der CCU 2 „genervt“ hat.

nee, das macht nichts!
Viele Gruesse
Eugen
________________________________________________
SmartHome-Eintopf mit feinem Homeduino-Gemüse
... und für Feinschmecker gibt´s den WIFFI, den WEATHERMAN-2, den PULSECOUNTER und den AIRSNIFFER
mit vielen Kochrezepten für den ambitionierten Homematiker

-=FuF=-
Beiträge: 97
Registriert: 30.12.2013, 21:08
Hat sich bedankt: 2 Mal

Sonnenstandsberechnung 2.0 für Rolladen, Markisen, Lampen

Beitrag von -=FuF=- » 13.03.2014, 07:30

Hi Eugen,

Ich kenne Deine Argumente, aber
1. der Bezug von wichtigen Daten aus dem Internet viel zu unsicher ist, dass man davon wichtige Funktionen abhängig macht und
Ich meinte hier berechnen, nicht abholen. Tclsh scheint weit mächtiger zu sein, als hm Script.
2. ein Tcl-Skript ggf. bei jedem Update oder Neuausetzen der CCU neu installiert werden muss und...
Bei Neuaufsetzen vielleicht, Updates gingen hier bisher problemlos, ein zusätzliches Backup der eigenen Anpassungen braucht man sowieso.
3. die ganzen Aufrufe von externen Programmen mit system.exec oder meiner Erfahrung soweit möglich vermindert werden sollte.
hier läuft das Tageszeiten-Script - per cron - bisher völlig Problemlos.

ich wollte hier einen Kompromiss zwischen externen Script, das Daten abholt und hm Script mit Annäherungsverfahren vorschlagen.

Dass es annähernd genau geht hast Du ja schon gezeigt, vielleicht ist es halt einfacher/debugbarer...

Christian

joe.oster
Beiträge: 288
Registriert: 17.06.2013, 12:15
Wohnort: NRW
Danksagung erhalten: 2 Mal

Re: Sonnenstandsberechnung 2.0 für Rolladen, Markisen, Lampe

Beitrag von joe.oster » 13.03.2014, 07:36

drhwpot hat geschrieben:Ich lasse derzeitig noch das allgemein bekannte Tageszeitenskript laufen. Die zeitliche Ausführung der beiden Skripte liegt sehr eng zusammen. Tageszeitenskript wird alle 300 S mittels Timer ausgeführt und das Sonnenstandskript nach 300 S ebenfalls mittels Timer gestartet – wobei die Ausführung um 7 S verzögert wird. Könnte hieraus eine Überlastung / Überlagerung resultieren, oder gehen meine Überlegungen in die vollkommen falsche Richtung?
Hallo HP,

ich brauche ebenfalls dieses Tageszeiteskript und starte dieses jede Minute zusammen mit den beiden Sonnenstand-Skripten in einem Skript und bei mir läuft die CCU2 zur Zeit seit 22 Tagen störungsfrei.

Joe

paul53
Beiträge: 2554
Registriert: 26.04.2012, 20:42
Wohnort: Berlin
Danksagung erhalten: 15 Mal

Re: Sonnenstandsberechnung 2.0 für Rolladen, Markisen, Lampe

Beitrag von paul53 » 14.03.2014, 00:53

Anbei ein HM Script zur Sonnenstandsberechnung, bei dem ähnliche Ansätze wie die von Eugen "funkleuchtturm" verfolgt werden.
Die Näherungen (Taylor-Reihen) liefern ein gute Genauigkeit. Die größte Ungenauigkeit liefert die Näherung der arcsin-Funktion, die bei einer höheren Genauigkeitsanforderung erweitert werden kann.

Code: Alles auswählen

! Berechnung des Sonnenstandes und Speicherung in SV "Sonnenhöhe" und "Sonnenazimut"

! Deklaration lokaler Variablen
real x;         ! Eingangsgröße der (inversen) Winkelfunktionen
real y;         ! Ergebnis der Funktionen
real lat;       ! lokaler Breitengrad in °
integer jetzt;  ! aktuelle Uhrzeit in Minuten
integer sa;     ! Sonnenaufgang in Minuten
integer su;     ! Sonnenuntergang in Minuten
integer sz;     ! Sonnenzeit in Minuten
integer tag;    ! Tag des Jahres
real d;         ! Deklination
real t;         ! Stundenwinkel in °
real h;         ! Sonnenhöhe in °
real a;         ! Azimut in °

real sinlat;    ! Sinus(lat)
real coslat;    ! Cosinus(lat)
real sind;      ! Sinus(d)
real cosd;      ! Cosinus(d)
real sint;      ! Sinus(t)
real cost;      ! Cosinus(t)
real sinh;      ! Sinus(h)
real tana;      ! Tangens(a)

! Konstanten
real D = 57.296;   ! 180/Pi
real R = 0.01745;  ! Pi/180
real P2 = 1.5708;  ! Pi/2

! Uhrzeiten holen und zu Sonnenzeit
jetzt = system.Date("%M").ToInteger() + 60 * system.Date("%H").ToInteger();
sa = system.SunriseTime("%M").ToInteger() + 60 * system.SunriseTime("%H").ToInteger();
su = system.SunsetTime("%M").ToInteger() + 60* system.SunsetTime("%H").ToInteger();
sz = jetzt + 720 - (sa+su)/2;
if (sz > 1440) { sz = sz - 1440;}
if (sz < 0) { sz = sz + 1440;}

! Deklination berechnen
tag = system.Date("%j").ToInteger() + 10;
if (tag > 365) {tag = tag - 365;}
x = (360.0 / 365.0) * tag;
! y = cos(x)
x = 90.0 - x;
if (x < -90.0) {x = -180.0 - x;}
x = R * x;
y = x * (1.0 - (x*x/6.0) * (1.0 - x*x/20.0));
d = -23.45 * y;
x = R * d;
sind = x * (1.0 - (x*x/6.0) * (1.0 - x*x/20.0));
cosd = 1.0 - 0.5*x*x * (1.0 - (x*x/12.0) * (1.0 - x*x/30.0));

! Breitengrad
lat = system.Latitude();
x = R * lat;
sinlat = x * (1.0 - (x*x/6.0) * (1.0 - x*x/20.0));
coslat = 1.0 - 0.5*x*x * (1.0 - (x*x/12.0) * (1.0 - x*x/30.0));

! Stundenwinkel
t = (0.25 * sz) - 180.0;
! sin (t)
x = t;
if (t < -90.0) {x = -180.0 - t;}
if (t > 90.0) {x = 180.0 - t;}
x = R * x;
sint = x * (1.0 - (x*x/6.0) * (1.0 - x*x/20.0));
! cos(t)
x = t + 90.0;
if (x > 90.0) {x = 180.0 - x;}
x = R * x;
cost = x * (1.0 - (x*x/6.0) * (1.0 - x*x/20.0));

! Sonnenhöhe
sinh = (sinlat * sind) + (coslat * cosd * cost);
x = sinh;
! arcsin
y = x * (1.0 + (x*x/6.0) + (x*x*x*x*3.0/40.0) + (x*x*x*x*x*x/12.6));
h = D * y;

! Azimut
tana = sint / ((sinlat * cost) - (coslat * sind / cosd));
x = tana;
! arctan
y = x / (1.0 + 0.28*x*x);
if (x > 1.0) {y = P2 - (x / (0.28 + x*x));}
if (x < -1.0) {y = (0.0-P2) - (x / (0.28 + x*x));}
a = D * y;
y = 180.0 + a;
if ((t < 0.0) && (a >= 0.0)) {y = a;}
if ((t > 0.0) && (a <= 0.0)) {y = 360.0 + a;}
a = y;

! In SV schreiben
dom.GetObject("Sonnenhöhe").State(h);
dom.GetObject("Sonnenazimut").State(a);

! Bei Bedarf Anzeige in SV "Sonnenstand" vom Typ Zeichenkette
var szh = sz / 60;
var szm = sz - (60 * szh);
if (szh > 9) {szh = szh.ToString();}
else {szh = "0"#szh.ToString();}
if (szm > 9) {szm = szm.ToString();}
else {szm = "0"#szm.ToString();}
string s = "Höhe: "#h.ToString(1)#" ° Azimut: "#a.ToString(0)#" ° Zeit: "#szh#":"#szm;
dom.GetObject("Sonnenstand").State(s);
Changelog:

14.03.2014 - Da für die arcsin-Funktion mit der Taylorreihe bis x^7 die Abweichung bei 61° Sonnenhöhe schon -1° beträgt, habe ich den Faktor für x^7 von 5/112 auf 1/12,6 geändert. Damit beträgt die Abweichung für alle Winkel bis 61° nur noch +/- 0,25°.
Zuletzt geändert von paul53 am 25.04.2014, 19:14, insgesamt 8-mal geändert.
Versionen: HM-CC-TC 2.1, HM-LC-Sw1 1.9, HM-CC-RT-DN 1.1, HM-MOD-RPI-PCB 1.2.1 (keine CCU)

drhwpot
Beiträge: 173
Registriert: 04.11.2012, 11:05
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Sonnenstandsberechnung 2.0 für Rolladen, Markisen, Lampe

Beitrag von drhwpot » 14.03.2014, 09:34

Hallo Eugen,

es liegt wohl nicht am Skript, das Problem ist auch ohne Skript aufgetreten. Ich bin leider sehr ratlos (vgl. http://homematic-forum.de/forum/viewtop ... 26&t=17550).

Hast Du eine Idee?

Beste Grüße
HP
1 x RaspberryMatic - tinker board S; 2 x Funk LAN Gateway (HM-LGW-O-TW-W-EU); 2 x HMW-Sen-SC-12-DR; 10 x Rollladenaktor (HM-LC-Bl1PBU-FM); 5 x Schalter ( HM-LC-Sw1PBU-FM); 4 x Schaltaktor (HmIP-BSM); 2 x Dimmer (HM-LC-Dim1TPBU-FM); 8 x Jalousienaktor-IP (HmIP-BBL); 8 x Fensterdrehgriff ( HM-Sec-RHS); 1 x Bewegungsmelder (HM-Sen-MDIR-O); 1 x Außensenor (HM-WDS10-TH-O); 1 x Temperaturfüller ( HM-WDS30-TO); 1 x Wettersensor HmIP-SWO-B; 5 x Schalt-Mess-Steckdose (HMIP-PSM) , CUxD - Timer, CUxD SyS EX, WH-3000 SE Pro, Prowl Push, Serviemeldungen via Push; FW: 3.63.9.20220521 ; Historian V3.0.2;

Benutzeravatar
funkleuchtturm
Beiträge: 2367
Registriert: 13.06.2011, 16:42
Hat sich bedankt: 23 Mal
Danksagung erhalten: 357 Mal
Kontaktdaten:

Re: Sonnenstandsberechnung 2.0 für Rolladen, Markisen, Lampe

Beitrag von funkleuchtturm » 14.03.2014, 10:00

Das aktuelle Skript (Stand 14.03.2014) wurde insbesondere im Bereich der Nulldurchgänge der Elevation (Dämmerung) weiter optimiert, um in diesem wichtigen Bereich eine möglichst stetige Funktion zu erreichen. Bitte Skript aktualisieren!
Darüberhinaus werden über 24h aufgezeichnete Elevation unf Azimut dargestellt.
Viele Gruesse
Eugen
________________________________________________
SmartHome-Eintopf mit feinem Homeduino-Gemüse
... und für Feinschmecker gibt´s den WIFFI, den WEATHERMAN-2, den PULSECOUNTER und den AIRSNIFFER
mit vielen Kochrezepten für den ambitionierten Homematiker

Benutzeravatar
funkleuchtturm
Beiträge: 2367
Registriert: 13.06.2011, 16:42
Hat sich bedankt: 23 Mal
Danksagung erhalten: 357 Mal
Kontaktdaten:

Re: Sonnenstandsberechnung 2.0 für Rolladen, Markisen, Lampe

Beitrag von funkleuchtturm » 14.03.2014, 10:10

drhwpot hat geschrieben:es liegt wohl nicht am Skript, das Problem ist auch ohne Skript aufgetreten. Ich bin leider sehr ratlos (vgl. http://homematic-forum.de/forum/viewtop ... 26&t=17550).
Hast Du eine Idee?
Das ist wie Fischen im Trüben :mrgreen:
Ich würde erst mal ein Backup machen und dann bei der CCU 2 ein Werksreset machen.
... und dann das Backup neu einspielen.
So eine Situation hat wohl fast jeder Homematiker durchgemacht! Da fast nix dokumentiert ist, kann man oft nur mit "try and error" weiterkommen. Aber vielleicht gibt es hier im Forum "Wissende"!?
Sorry!
Viele Gruesse
Eugen
________________________________________________
SmartHome-Eintopf mit feinem Homeduino-Gemüse
... und für Feinschmecker gibt´s den WIFFI, den WEATHERMAN-2, den PULSECOUNTER und den AIRSNIFFER
mit vielen Kochrezepten für den ambitionierten Homematiker

Antworten

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