NEWS
Vergleich Solarprognosen Solarwetter und brightsky
-
@martybr sagte in Vergleich Solarprognosen Solarwetter und brightsky:
Kannst du bitte den Algorithmus hinter deiner Berechnung kurz erklären?
da ist kein wirklicher Algorithmus hinter.
Bei drei Strings wäre das wahrscheinlich noch komplexer.Ich habe einfach ein paar Tage beobachtet wieviel ich produziert habe und wieviel vorhergesagt wurden.
Dann habe ich daraus den Quotienten gebildet.Am ersten Tag hatte ich 77% der Vorhersage, mittlerweile liege ich bei einem Faktor von 0.85 ganz gut.
Kommt dabei aber auch auf die Ausrichtung an.
bei 3 Strings dürfte sich die Ausbeute gleichmäßiger verteilen, wenn es stundenweise bewölkt ist.EDIT:
Die Nennleistung eines Panels wird in Wp für eine Bestrahlung von 1000W/m² angegeben.
Daher halte ich die Angaben beim DWD API für sinnvoller.Wenn du dann die Wp durch die Größe des Panels in m² teilst, bekommst du den (theoretischen) Wirkungsgrad.
Bei mir sind das die 15 Prozent in Zeile 1
in Zeile 2 ist dann der empirisch ermittelte Korrekturfaktor (0.861)
Zeile 3 enthält den Prognosewert des Adapters in kWp/m²
Zeile 4 dann die Gesamtfläche der PV Anlage -
@homoran
Danke für die Antwort. Ich werde mal den Test machen und die Werte mit den exakten Erträgen vergleichen. -
@homoran Lustig ist, dass meine Anlage 2600 W liefert und die Prognose 0 W angibt.
Ich monitore das mal einige Tage.Edit:
Ich hatte bei current geschaut. Der richtige Wert steht bei daily. -
Daily ist von mir zusammengerechnet aus den hourly werten.
-
@ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:
Daily ist von mir zusammengerechnet aus den hourly werten.
wie ich eingangs schrieb könnte eine Korrelation der hourly-Werte mit dem dazugehörigen Sonnenstand und dem daraus resultierenden Auftreffwinkel auf die Panels noch bessere Prognosewerte bringen.
Ich habe aber im Moment nicht die Zeit (und Lust) mich da tiefer reinzuknien, wenn das grobe Ergebnis auch so passt.man müsste dann für jede Stunde in etwa diese Formel rechnen
und dann entweder aufaddieren oder mit den stündlichen Werten weiterarbeiten
EDIT:
Wenn es dann so wie heute ziemlich windig ist, die PV-Anlage gut hinterlüftet ist, kommt doch noch mehr als "geplant" raus
Da kann mit bis zum Exzess dran feilen, u d es passt dann trotzdem nicht.
So eine Prognose soll doch nur einen groben Überblick geben.
-
@homoran
ich frage mal chatgpt - aber sind noch ne Woche oder so bis stable - bis dahin wird da nix passieren -
@ticaki siehe Edit!
-
brightsky wird wegen Schummelns disqualifiziert
Eigentlich wollte ich zeigen, was mir passiert, wenn ich die Gesamttagesvorhersage faktorisiere.
Beide Vorhersagen lagen wieder nah bei einander, ich kam mit meinem Ertrag bisher aber nur auf 50%.
Auch wenn jetzt seit gut 2h die Sonne gar nicht so schwach scheint, wird sich das nicht mehr erheblich ändern
Aufgrund der Ausrichtung meiner PV Anlage kommt da jetzt nicht mehr genug Sonne an.Das wollte ich zeigen, aber....
Brightsky hat den Wert angepasst!
Ich möchte ja die Qualität der Solarprognosen vergleichen, da muss ich natürlich auch bei brightsky mit dem morgendlichen Wert rechnen.
Ich muss jetzt mein Skript anpassen und mit dem morgendlichen Vorhersagewert arbeiten. Der war heute morgen bei 11,48kWh. -
@homoran
Der Adapter holt sich neue Daten um:
0:00 - wegen Tageswechsel
5:00 - wegen wie wird es heute
18:00 - wie wird es morgenund der Service liefert keine historischen Prognosen sondern Daten
-
historische Prognosen klingt irgendwie merkwürdig
Bright Sky liefert enorm coole Daten
Für mich ist gar nicht mal so relevant wieviel die Anlage produziert, sondern aus dem Kontext "Energiemanagement": was sollte wann passieren... agieren...
-
@ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:
18:00 - wie wird es morgen
aaah, dann sind die Daten von daily.00 in Wirklichkeit schon Daten für daily.01, oder wie ist das zu verstehen?
und um
@ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:
0:00 - wegen Tageswechsel
ist solar = 0, sieht dann eher aus wie current
@armilar sagte in Vergleich Solarprognosen Solarwetter und brightsky:
historische Prognosen klingt irgendwie merkwürdig
ja! das war dann wohl eine Fehlinterpretation meines Vorhabens.
ich möchte abends, wenn ich meinen realen Ertrag kennen, diesen mit der Prognose für diesen Tag, die ich morgens bekomme, vergleichen. Dazu hatte ich den Wert im Datenpunkt solar in daily.00 verwendet. Der war aber nicht derselbe wie morgens.
Umso besser, wenn diese bereits am Vorabend um 18:00 vorliegt
aber da steht heute morgen etwas anderes
PS
mit den hourly Daten habe ich mich mangels Zeit noch nicht auseinander gesetzt. damüsste ich wahrscheinlich jede Stunde die Datenpunkte neu zu den zugehörigen Uhrzeiten mappen. -
Berücksichtigen die Energiedaten in "solar" bereits die Wolkenbedeckung oder muß man die noch mit reinrechnen?
-
@klassisch da sollte alles drin sein.
Anscheinend sogar den Verlust bei den unterschiedlichen Winkeln bei Durchdringungder Atmosphäre. -
@homoran Vielen Dank, das wäre gut brauchbar. Dann muß man in erster Näherung nur noch die Orientierung der Module, Fläche, Wirkungsgrad mit rein rechnen
-
Nein ich rufe die Daten von 00:00-23:59 ab, jeweils zu den genannten zeiten. alles was vor der abrufzeit liegt, wird, denke ich, durch die tatsächlichen Werte ersetzt. Und um 00:00 ist heute nicht mehr gestern -daher Update das in heute nicht die Daten von gestern stehen.
Wenn du Wetter in was weiß ich dir ansiehst willst du doch nicht die Prognosen von 5:00 um 20:00 sehen
-
@ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:
alles was vor der abrufzeit liegt, wird, denke ich, durch die tatsächlichen Werte ersetzt.
so sieht's auch für mich aus.
Dann ist das um 18:00 der "corrected forecast" und daher dichter an der Realität. -
Für vorausplanendes Laden würde ich z.B. die nächsten 8 h betrachten ist das kleiner als die doppelte Batteriekapazität laden frei geben.
Für einen genauigkeitsvergleich ist das aber nix
-
@ticaki ja, darauf läuft's hinaus.
Bedeutet aber, dass ich mich mit den hourly-Werten beschäftigen muss.
Ich hoffte das vorerst vermeiden zu können, mit allen Einschränkungen die das bringt.aber
@ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:
Für einen genauigkeitsvergleich ist das aber nix
wenn ich etwas vergleichen will, muss ich auch gleiche Voraussetzungen vergleichen.
Der morgendliche Prognosewert wäre einheitlich. -
@homoran
Ich Bau dir was ein bekommst heute Abend nen GitHub Branche Link. -
@homoran
https://github.com/ticaki/ioBroker.brightsky/tree/solarDeine States sind für dich erkennbar und stur - die aktualisieren/erstellen sich um 5, wenn du aktuell ein Update oder einen State sehen willst - computer uhr umstellen
Guckmal im Admin und sag mir, ob das was ich noch eingebaut habe was taugt. ist gerade echt blödes wetter um sowas zu checken
EDIT:
Das scheint nicht so zu fuzen - ok ich brauche in meinem echten Leben nie winkelberechnung daher hab ich das jetzt 3 mal in meinem leben gelernt und wieder vergessen- kann mal einer der sich da auskennt auf die chatGPT funktion schauen:/** * Schätzt die erzeugte elektrische Energie (Wh) für die kommende Stunde. * * @param valueWhPerM2 GHI für die Stunde (Wh/m²) auf horizontaler Ebene * @param time Zeitstempel dieser Stunde (Date | number | string) * @param coords { lat, lon } * @param panels Array von Panels (azimuth, tilt, area, efficiency in %) * @returns Wh (elektrisch) für alle Panels zusammen */ export function estimatePVEnergyForHour( valueWhPerM2: number, time: Date | number | string, coords: Coords, panels: Panel[], ): number { // ===== Helpers (funktion-lokal) ===== const toRad = (d: number): number => (d * Math.PI) / 180; const clamp01 = (x: number): number => Math.min(1, Math.max(0, x)); const normEff = (pct: number): number => clamp01(pct / 100); // 0..100% → 0..1 // Konstanten (einfaches, robustes Modell) const ALBEDO = 0.2; // Bodenreflexionsfaktor // Sonnenstand holen const date = time instanceof Date ? time : new Date(time); const pos = suncalc.getPosition(date, coords.lat, coords.lon); const sunEl = pos.altitude; // Elevation in rad // SunCalc-Azimut: 0 = Süd, +West; auf 0=N, 90=E normieren: const sunAzDeg = ((pos.azimuth * 180) / Math.PI + 180 + 360) % 360; const sunAz = toRad(sunAzDeg); if (sunEl <= 0 || valueWhPerM2 <= 0 || panels.length === 0) { return 0; } // Grobe Aufteilung in Direkt/Diffus aus Elevation (ohne externe Daten): const beamFraction = clamp01(Math.sin(sunEl) * 1.1); const diffuseFraction = 1 - beamFraction; let totalWh = 0; for (const p of panels) { const eff = normEff(p.efficiency); if (eff <= 0 || p.area <= 0) { continue; } const tilt = toRad(p.tilt); const az = toRad(((p.azimuth % 360) + 360) % 360); // Modulnormalen-Vektor const nx = Math.sin(tilt) * Math.sin(az); const ny = Math.sin(tilt) * Math.cos(az); const nz = Math.cos(tilt); // Sonnenvektor const sx = Math.cos(sunEl) * Math.sin(sunAz); const sy = Math.cos(sunEl) * Math.cos(sunAz); const sz = Math.sin(sunEl); // Einfallswinkel const cosTheta = Math.max(0, nx * sx + ny * sy + nz * sz); // Direktanteil von horizontal → Modulfläche const dirGain = cosTheta / Math.max(1e-6, Math.sin(sunEl)); // Diffus isotrop + Bodenreflexion const skyDiffuseGain = (1 + Math.cos(tilt)) / 2; const groundRefGain = (ALBEDO * (1 - Math.cos(tilt))) / 2; // POA-Energie (Wh/m²) auf dem Modul für die Stunde const poaWhPerM2 = valueWhPerM2 * (beamFraction * dirGain + diffuseFraction * skyDiffuseGain + groundRefGain); // Elektrische Energie const elecWh = Math.max(0, poaWhPerM2) * p.area * eff; totalWh += elecWh; } return totalWh; }