Kann man das auch andersrum anwenden? Ich würde gerne zu einem gegebenen Azimut/Elevationswinkel die Uhrzeit berechnen.
Sonnenstandsberechnung von der Raspberrymatic
Moderatoren: jmaus, Co-Administratoren
-
- Beiträge: 9681
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 700 Mal
- Danksagung erhalten: 1626 Mal
Re: Sonnenstandsberechnung von der Raspberrymatic
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
- jmaus
- Beiträge: 9865
- Registriert: 17.02.2015, 14:45
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Dresden
- Hat sich bedankt: 464 Mal
- Danksagung erhalten: 1883 Mal
- Kontaktdaten:
Re: Sonnenstandsberechnung von der Raspberrymatic
Nein.
RaspberryMatic 3.75.7.20240420 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal /
-
- Beiträge: 9681
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 700 Mal
- Danksagung erhalten: 1626 Mal
Re: Sonnenstandsberechnung von der Raspberrymatic
Schade, ich würde nämlich lieber einmal am Tag die neue Uhrzeit für die zu überwachenden Winkel berechnen und entsprechende Timer setzen, statt alle 5 Minuten die Winkel zu ermitteln.
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Re: Sonnenstandsberechnung relativ zu einem Solarkollektor/Solarzellen
Hallo, ich habe jetzt mal ein Skript geschrieben, das den Winkel zwischen der Sonnen und der Senkrechten auf einen Solarkollektor (oder Solarzellen) berechnet. Die Berechnung folgt den Informationen vom 29.07.2020, 12:18 von rumar aus https://www.matheboard.de/archive/596587/thread.html und ist umgesetzt umgesetzt in die Skriptsprache der HomeMatic/RaspberryMatic-CCU:
Beim berechneten "Wirk-Faktor" sind winkelabhängige Lichtreflektionen am Kollektor nicht berücksichtigt. Ebensowenig ist die Dämpfung des Sonnenlichts durch die Erdatmosphäre berücksichtigt, die sich ja mit dem Sonnenwinkel ändert. Die Leistung an einem wolkenlosen Tag wird daher einen anderen Verlauf als dieses cos(e) haben.
Code: Alles auswählen
! Einfallswinkel der Sonne für Solarkollektor
! https://www.schmidhorst.de
! Skript z.B. via Zeitsteuerung tagsüber alle 10 min ausführen lassen
! Bitte hier die Kollektorausrichtung eintragen:
var g = 40; ! ° Neigungswinkel/Dachwinkel des Kollektors
var d = 180; ! Südausrichtung, 180°=volle Südausrichtung, 90° = Osten, 270° = Westen
var sysVarName="solSonnenEinfallsWinkel"; ! Systemvariable fürs Ergebnis
time t = system.Date().ToTime();
! t= @2021-03-25 13:00@; ! nach Bedarf zum Debuggen ändern und aktivieren
! t = @12:00@; ! Uhrzeit am aktuelles Tag
var h = system.SunAltitude(t);
var alpha = system.SunAzimuth(t);
WriteLine(t.Format("%F %X") #": Höhenwinkel Sonne h=" # h # "°, Azimut alpha=" # alpha # "°");
! https://www.matheboard.de/archive/596587/thread.html
! Der gegen die Sonne zeigende Einheitsvektor s kann dann im kartesischen Azimutalsystem so dargestellt werden:
! ( cos(h) cos(a) )
! s = ( cos(h) sin(a) )
! ( sin(h) )
! x-Achse nach Norden, y-Achse nach Osten, z in Zenitrichtung
!
! Himmel zeigender Normalenvektor n der Kollektorfläche:
! Dachneigung g, Ausrichtung des Daches (Süd wäre 180°) d
! ( sin(g) cos(d) )
! n = ( sin(g) sin(d) )
! ( cos(g) )
! Winkel e zwischen den Vektoren s und n:
! e = arccos[ cos(h)*cos(a)*sin(g)*cos(d) + cos(h)*sin(a)*sin(g)*sin(d) + sin(h)*cos(g)]
var gB = M_PI * g.ToFloat() / 180; ! Umrechnung ins Bogenmaß
var dB = M_PI * d.ToFloat() / 180;
var gBsin = gB.Sin();
var hB = M_PI * h / 180;
var alphaB = M_PI * alpha/180;
var hBcos = hB.Cos();
var sx = hBcos* alphaB.Cos();
var sy = hBcos * alphaB.Sin();
var sz = hB.Sin();
WriteLine("Normalenvektor Sonne:" # sx # ", " # sy # ", " # sz);
! Hinweis: Lichtbrechung der Sonne beim Eintritt in Erdatmosphäre vernachlässigt
var nx = gBsin * dB.Cos();
var ny = gBsin * dB.Sin();
var nz = gB.Cos();
WriteLine("Normalenvektor Kollektor:" # nx # ", " # ny # ", " # nz);
var eB = ((sx * nx) + (sy * ny) + (sz * nz)).Acos(); ! Winkel zw. beiden Vektoren im Bogenmaß
var e = eB * 180 /M_PI; ! Umrechnung auf Grad
! e: 0° = genau Senkrecht, 90° = voll tangential
WriteLine("Einfallswinkel e = " # eB # " = " # e # "° (Abweichung der Sonnenrichtung von der Normalen des Kollektors)");
if (e>90) { ! >90: Kollektor würde von hinten bestrahlt
e=90; ! z.B. für Diagramm besser begrenzen
eB=M_PI*0.5;
}
! option 90° gedreht:
! var e2=90-e; ! e2: 90=Sonne genau senkrecht zum Kollektor, 0 = volltangential
var oSv = dom.GetObject(sysVarName);
if (oSv) {
oSv.State(e); ! wenn diese Systemvariable existiert, Ergebnis ablegen
}
else {
WriteLine("Systemvariable '" # sysVarName # "' fürs Ergebnis nicht gefunden");
}
var w=0; !Wirkungsgrad 0.0 (nicht von Sonne beschienen) ... 1.0 (genau zur Sonne ausgerichtet)
if ((h>=0) && (e<=90)) {
w = eB.Cos();
}
WriteLine("Wirk-Faktor cos(e)=" # w);
-
- Beiträge: 1343
- Registriert: 27.06.2015, 22:17
- Hat sich bedankt: 43 Mal
- Danksagung erhalten: 32 Mal
Re: Sonnenstandsberechnung von der Raspberrymatic
Cool, danke für das Script. Ich habe zwar (noch) keinen praktischen Nutzen dafür, aber es ist sicher interessant das mal übers Jahr zu loggen...