Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Vergleich Solarprognosen Solarwetter und brightsky

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.5k

Vergleich Solarprognosen Solarwetter und brightsky

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
234 Beiträge 7 Kommentatoren 10.8k Aufrufe 10 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • HomoranH Homoran

    brightsky wird wegen Schummelns disqualifiziert :joy:

    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
    Screenshot_20250908-181856_Firefox.jpg
    Aufgrund der Ausrichtung meiner PV Anlage kommt da jetzt nicht mehr genug Sonne an.

    Das wollte ich zeigen, aber....

    Screenshot_20250908-181229_Firefox.jpg

    Brightsky hat den Wert angepasst!

    Screenshot_20250908-181417_Firefox.jpg

    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.

    T Nicht stören
    T Nicht stören
    ticaki
    schrieb am zuletzt editiert von
    #11

    @homoran
    Der Adapter holt sich neue Daten um:
    0:00 - wegen Tageswechsel
    5:00 - wegen wie wird es heute
    18:00 - wie wird es morgen

    und der Service liefert keine historischen Prognosen sondern Daten :)

    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

    Spenden

    ArmilarA HomoranH 2 Antworten Letzte Antwort
    0
    • T ticaki

      @homoran
      Der Adapter holt sich neue Daten um:
      0:00 - wegen Tageswechsel
      5:00 - wegen wie wird es heute
      18:00 - wie wird es morgen

      und der Service liefert keine historischen Prognosen sondern Daten :)

      ArmilarA Offline
      ArmilarA Offline
      Armilar
      Most Active Forum Testing
      schrieb am zuletzt editiert von
      #12

      @ticaki

      historische Prognosen klingt irgendwie merkwürdig :blush:

      Bright Sky liefert enorm coole Daten

      1114d001-5daf-4f68-b65a-e4e99a3c49ad-image.png

      Für mich ist gar nicht mal so relevant wieviel die Anlage produziert, sondern aus dem Kontext "Energiemanagement": was sollte wann passieren... agieren...

      Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
      https://github.com/joBr99/nspanel-lovelace-ui/wiki

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      1 Antwort Letzte Antwort
      0
      • T ticaki

        @homoran
        Der Adapter holt sich neue Daten um:
        0:00 - wegen Tageswechsel
        5:00 - wegen wie wird es heute
        18:00 - wie wird es morgen

        und der Service liefert keine historischen Prognosen sondern Daten :)

        HomoranH Nicht stören
        HomoranH Nicht stören
        Homoran
        Global Moderator Administrators
        schrieb am zuletzt editiert von Homoran
        #13

        @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 :thinking_face:

        @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 😞
        Screenshot_20250909-083657_Firefox.jpg

        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.

        kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

        T 1 Antwort Letzte Antwort
        0
        • K Offline
          K Offline
          klassisch
          Most Active
          schrieb am zuletzt editiert von
          #14

          Berücksichtigen die Energiedaten in "solar" bereits die Wolkenbedeckung oder muß man die noch mit reinrechnen?

          HomoranH 1 Antwort Letzte Antwort
          0
          • K klassisch

            Berücksichtigen die Energiedaten in "solar" bereits die Wolkenbedeckung oder muß man die noch mit reinrechnen?

            HomoranH Nicht stören
            HomoranH Nicht stören
            Homoran
            Global Moderator Administrators
            schrieb am zuletzt editiert von
            #15

            @klassisch da sollte alles drin sein.
            Anscheinend sogar den Verlust bei den unterschiedlichen Winkeln bei Durchdringungder Atmosphäre.

            Screenshot_20240306-130143_Firefox.jpg

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            K 1 Antwort Letzte Antwort
            1
            • HomoranH Homoran

              @klassisch da sollte alles drin sein.
              Anscheinend sogar den Verlust bei den unterschiedlichen Winkeln bei Durchdringungder Atmosphäre.

              Screenshot_20240306-130143_Firefox.jpg

              K Offline
              K Offline
              klassisch
              Most Active
              schrieb am zuletzt editiert von
              #16

              @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

              1 Antwort Letzte Antwort
              1
              • HomoranH Homoran

                @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 :thinking_face:

                @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 😞
                Screenshot_20250909-083657_Firefox.jpg

                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.

                T Nicht stören
                T Nicht stören
                ticaki
                schrieb am zuletzt editiert von ticaki
                #17

                @homoran

                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

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

                HomoranH 1 Antwort Letzte Antwort
                0
                • T ticaki

                  @homoran

                  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

                  HomoranH Nicht stören
                  HomoranH Nicht stören
                  Homoran
                  Global Moderator Administrators
                  schrieb am zuletzt editiert von
                  #18

                  @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.

                  kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                  T 1 Antwort Letzte Antwort
                  0
                  • HomoranH Homoran

                    @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.

                    T Nicht stören
                    T Nicht stören
                    ticaki
                    schrieb am zuletzt editiert von
                    #19

                    @homoran

                    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😊

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    HomoranH 1 Antwort Letzte Antwort
                    0
                    • T ticaki

                      @homoran

                      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😊

                      HomoranH Nicht stören
                      HomoranH Nicht stören
                      Homoran
                      Global Moderator Administrators
                      schrieb am zuletzt editiert von
                      #20

                      @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.

                      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                      T 2 Antworten Letzte Antwort
                      0
                      • HomoranH Homoran

                        @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.

                        T Nicht stören
                        T Nicht stören
                        ticaki
                        schrieb am zuletzt editiert von
                        #21

                        @homoran
                        Ich Bau dir was ein bekommst heute Abend nen GitHub Branche Link.

                        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                        Spenden

                        1 Antwort Letzte Antwort
                        1
                        • HomoranH Homoran

                          @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.

                          T Nicht stören
                          T Nicht stören
                          ticaki
                          schrieb am zuletzt editiert von ticaki
                          #22

                          @homoran
                          https://github.com/ticaki/ioBroker.brightsky/tree/solar

                          Deine 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 :P

                          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;
                          }
                          

                          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                          Spenden

                          HomoranH K 4 Antworten Letzte Antwort
                          1
                          • T ticaki

                            @homoran
                            https://github.com/ticaki/ioBroker.brightsky/tree/solar

                            Deine 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 :P

                            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;
                            }
                            
                            HomoranH Nicht stören
                            HomoranH Nicht stören
                            Homoran
                            Global Moderator Administrators
                            schrieb am zuletzt editiert von Homoran
                            #23

                            @ticaki Danke!
                            seh ich mir später genauer an.

                            @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                            stur - die aktualisieren/erstellen sich um 5,

                            das mache ich im Moment, indem ich um 15 5 * * * den Wert in einen eigenen Datenpunkt schreibe und mit dem weiterarbeite ;-)

                            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                            1 Antwort Letzte Antwort
                            0
                            • T ticaki

                              @homoran
                              https://github.com/ticaki/ioBroker.brightsky/tree/solar

                              Deine 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 :P

                              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;
                              }
                              
                              HomoranH Nicht stören
                              HomoranH Nicht stören
                              Homoran
                              Global Moderator Administrators
                              schrieb am zuletzt editiert von
                              #24

                              @ticaki ist das ok so?
                              brightsky.0 2025-09-09 18:00:34.585 error Error fetching daily weather data: {}

                              folge der sturen 5 Uhr Regel :joy: ?

                              zu deinem EDIT

                              @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                              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:

                              ich kann das auch nicht!
                              Ich muss auch jedesmal irgrndwo abschreiben, sorry!

                              Vielleicht kann @klassisch aushelfen

                              kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                              der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                              1 Antwort Letzte Antwort
                              0
                              • T ticaki

                                @homoran
                                https://github.com/ticaki/ioBroker.brightsky/tree/solar

                                Deine 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 :P

                                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;
                                }
                                
                                K Offline
                                K Offline
                                klassisch
                                Most Active
                                schrieb am zuletzt editiert von klassisch
                                #25

                                @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                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:

                                Ich habe auch CHatGPT gefragt und habe ein Skript am Laufen.
                                Das nimmt die 13 Stundenwerte für die Enerie, errechnet jeweils den Sonnenstand dazu und die Projektion auf die Modulfläche. Dann werden die 13 Werte addiert.

                                Es kommt ein Wert raus, der in einem plausiblen Rahmen liegt. Aber heute hat es lange geregnet und es war wolkig und da war die Schätzung zu hoch.

                                Ich weiss nicht, ob man ChatGPT Programme veröffentlichen darf. Kann es Dir per Chat zukommen lassen bei Bedarf.

                                Den diffusen Anteil habe ich mal weggelassen. Erst mal die Grundfunktion hinbekommen.
                                Für den hier behandelten Zweck ist der diffuse Anteil zumindest bei meiner Anlagengröße und -Anordnung nicht wichtig. Wenn der direkte Strahlungsanteil so klein wird, daß der Diffusanteil relevant wird, dann riskiere ich kein netzdienliches Verhalten, sondern fahre mit Priorität auf Selbstversorgung. An solchen Tagen ist Einspeisung - falls es die denn überhaupt gibt - meist eh willkommen.

                                HomoranH 1 Antwort Letzte Antwort
                                1
                                • K klassisch

                                  @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                  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:

                                  Ich habe auch CHatGPT gefragt und habe ein Skript am Laufen.
                                  Das nimmt die 13 Stundenwerte für die Enerie, errechnet jeweils den Sonnenstand dazu und die Projektion auf die Modulfläche. Dann werden die 13 Werte addiert.

                                  Es kommt ein Wert raus, der in einem plausiblen Rahmen liegt. Aber heute hat es lange geregnet und es war wolkig und da war die Schätzung zu hoch.

                                  Ich weiss nicht, ob man ChatGPT Programme veröffentlichen darf. Kann es Dir per Chat zukommen lassen bei Bedarf.

                                  Den diffusen Anteil habe ich mal weggelassen. Erst mal die Grundfunktion hinbekommen.
                                  Für den hier behandelten Zweck ist der diffuse Anteil zumindest bei meiner Anlagengröße und -Anordnung nicht wichtig. Wenn der direkte Strahlungsanteil so klein wird, daß der Diffusanteil relevant wird, dann riskiere ich kein netzdienliches Verhalten, sondern fahre mit Priorität auf Selbstversorgung. An solchen Tagen ist Einspeisung - falls es die denn überhaupt gibt - meist eh willkommen.

                                  HomoranH Nicht stören
                                  HomoranH Nicht stören
                                  Homoran
                                  Global Moderator Administrators
                                  schrieb am zuletzt editiert von Homoran
                                  #26

                                  @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                  Ich weiss nicht, ob man ChatGPT Programme veröffentlichen darf

                                  ich würde mich sehr wundern, wenn hier kein chatGPT Bot im Forum unterwegs wäre um sein Wissen zu vermehren.
                                  Dementsprechend sollte das ein Nehmen und Geben sein, und wir unsere humanIntelligence mit seinem Wissen schärfen können.

                                  kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                  K 1 Antwort Letzte Antwort
                                  0
                                  • T ticaki

                                    @homoran
                                    https://github.com/ticaki/ioBroker.brightsky/tree/solar

                                    Deine 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 :P

                                    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;
                                    }
                                    
                                    HomoranH Nicht stören
                                    HomoranH Nicht stören
                                    Homoran
                                    Global Moderator Administrators
                                    schrieb am zuletzt editiert von Homoran
                                    #27

                                    @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                    Guckmal im Admin und sag mir, ob das was ich noch eingebaut habe was taugt

                                    Meinst du advanced und diesen DP?
                                    Screenshot_20250909-204555_Firefox.jpg

                                    auch wenn du deine trigonometrischen Kenntnisse bezweifelst, so ist es doch
                                    Screenshot_20250909-204633_Firefox.jpg
                                    verdammt dicht dran

                                    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                    T 1 Antwort Letzte Antwort
                                    0
                                    • HomoranH Homoran

                                      @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                      Guckmal im Admin und sag mir, ob das was ich noch eingebaut habe was taugt

                                      Meinst du advanced und diesen DP?
                                      Screenshot_20250909-204555_Firefox.jpg

                                      auch wenn du deine trigonometrischen Kenntnisse bezweifelst, so ist es doch
                                      Screenshot_20250909-204633_Firefox.jpg
                                      verdammt dicht dran

                                      T Nicht stören
                                      T Nicht stören
                                      ticaki
                                      schrieb am zuletzt editiert von
                                      #28

                                      @homoran
                                      Bei mir war es auch recht dicht dran. Hier ist aber ein L Dach und ich habe Abschattungen in der Formel ignoriert

                                      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                      Spenden

                                      HomoranH 2 Antworten Letzte Antwort
                                      2
                                      • HomoranH Homoran

                                        @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                        Ich weiss nicht, ob man ChatGPT Programme veröffentlichen darf

                                        ich würde mich sehr wundern, wenn hier kein chatGPT Bot im Forum unterwegs wäre um sein Wissen zu vermehren.
                                        Dementsprechend sollte das ein Nehmen und Geben sein, und wir unsere humanIntelligence mit seinem Wissen schärfen können.

                                        K Offline
                                        K Offline
                                        klassisch
                                        Most Active
                                        schrieb am zuletzt editiert von
                                        #29

                                        @homoran Ich hoffe doch schwer, daß ChatGPT hier mal vorbei schaut. Irgendwoher muss ja das Wissen kommen.
                                        Hier mal das Skript auf Basis von ChatGPT.
                                        Es hat noch einige spezifische Datenpunkte aus meinem userdata Bestand.
                                        Dann wird npm "suncalc" benötigt. War bei mir schon im Bestand. Mit dem Handling der dependencies kenne ich mich nicht aus.

                                        Ich lasse das Skript um 05:00 und 08:00 rennen.
                                        Falls es untertägig gestartet wird, verwende ich noch den bis dahin angefallenen PV Ertrag mit, weil das Skript ja nur in die Zukunft schaut, wenn ich die Datenstruktur richtig verstanden habe.

                                        
                                        /*********************************************
                                        *
                                        *  calculates expected sun energy on base of DWD stations
                                        *  provided by bright sky adapter
                                        *
                                        * suncalc is mandatory
                                        * if not already installed
                                        * cd /opt/iobroker
                                        * npm install suncalc
                                        *    on my Win computer
                                        *    C:\ioBroker>npm install suncalc
                                        *    and was already existent
                                        *
                                        *  Some common terms used in this script according https://www.intechopen.com/chapters/82468
                                        *  Global horizontal irradiance (GHI) is the solar irradiance from the hemisphere above on a horizontal surface
                                        *  plane of array (POA) or global tilted irradiance (GTI) is solar irradiance incident on a tilted plane (PV panel
                                        *  
                                        *
                                        *
                                        *
                                        *
                                        ***/
                                        
                                        
                                        // ==========================
                                        // Konfiguration
                                        // ==========================
                                        const AREA_M2      = 20 * 1.755 * 1.038;    // Fläche A in m²
                                        const EFFICIENCY   = 0.20;  // Wirkungsgrad (z. B. 20% -> 0.20)
                                        const ALPHA_DEG    = -10;     // Azimut der Fläche (0 = Süd, negativ Ost, positiv West)
                                        const BETA_DEG     = 30;    // Neigung in Grad gegen Horizontal
                                        
                                        const pVEnergyUpToNowId= '0_userdata.0.power.pvFrDCEnergy.pvFrDCEnergyToday';
                                        var pVEnergyUpToNow = getState(pVEnergyUpToNowId).val;
                                        
                                        // ==========================
                                        const SunCalc = require("suncalc");
                                        
                                        function deg2rad(d){ return d * Math.PI / 180; }
                                        function rad2deg(r){ return r * 180 / Math.PI; }
                                        
                                        // Hauptfunktion
                                        function calcPOA() {
                                            // 1) Koordinaten holen
                                            const lat = getState("brightsky.0.current.sources.00.lat").val;
                                            const lon = getState("brightsky.0.current.sources.00.lon").val;
                                        
                                            const alpha = deg2rad(ALPHA_DEG);
                                            const beta  = deg2rad(BETA_DEG);
                                        
                                            let results = [];
                                            let totalEnergy = 0;
                                        
                                            for (let i=0; i<=12; i++) {
                                                const base = "brightsky.0.hourly." + ("0"+i).slice(-2);
                                        
                                                const tsStr = getState(base + ".timestamp").val; // z. B. 2025-09-09T03:00:00+00:00
                                                const ghi   = getState(base + ".solar").val;     // in kWh/m²
                                        
                                                if (!tsStr || ghi == null) continue;
                                        
                                                const time = new Date(tsStr); // iobroker zeigt automatisch in Lokaltime
                                                const pos = SunCalc.getPosition(time, lat, lon);
                                        
                                                const h = pos.altitude;  // Sonnenhöhe (rad)
                                                //console.log('Sonnenhoehe: ' + h);
                                                const gamma_s = pos.azimuth; // Sonnenazimut (rad, von Süden gegen Westen)
                                        
                                                if (h <= 0) {
                                                    results.push({hour:i, time:time.toString(), ghi, poa:0, energy:0});
                                                    continue;
                                                }
                                        
                                                const cosTheta = Math.sin(h) * Math.cos(beta) +
                                                                 Math.cos(h) * Math.sin(beta) * Math.cos(gamma_s - alpha);
                                        
                                                const Rb = Math.max(0, cosTheta) / Math.max(1e-6, Math.sin(h));
                                                const RbClamped = Math.min(Rb, 5);
                                        
                                                const poa_kwh_m2 = ghi * RbClamped;
                                                const energy_kWh = poa_kwh_m2 * AREA_M2 * EFFICIENCY;
                                        
                                                totalEnergy += energy_kWh;
                                        
                                                results.push({
                                                    hour: i,
                                                    time: time.toString(),
                                                    ghi,
                                                    poa_kwh_m2,
                                                    energy_kWh
                                                });
                                            }
                                        
                                            log("Gesamte erwartete Energie (next 12h): " + totalEnergy.toFixed(2) + " kWh");
                                            log("Gesamte erwartete Energie heute: " + Math.round(totalEnergy + getState(pVEnergyUpToNowId).val/1000) + " kWh"); 
                                            log("Detail: " + JSON.stringify(results, null, 2));
                                        
                                            // Optional: Ergebnis in einen Datenpunkt schreiben
                                            //on my ioBroker: 0_userdata.0.power.pvFrDCEnergy
                                            const solarforecastUserdataId = "0_userdata.0.power.pvFrDCEnergy.SolarForecast-total12h";
                                            createState(solarforecastUserdataId, 0, {type: "number", unit: "kWh"});
                                            setState(solarforecastUserdataId, Math.round(totalEnergy + getState(pVEnergyUpToNowId).val/1000), true); // if run after 05:00, the energy which was already harvested has to be added
                                        }
                                        
                                        // Skript beim Start und jeden Morgen um 05:10 Uhr ausführen
                                        schedule("10 5 * * *", calcPOA); 
                                        schedule("10 8 * * *", calcPOA); 
                                        
                                        calcPOA(); // sofort beim Start einmalig
                                        
                                        
                                        
                                        
                                        1 Antwort Letzte Antwort
                                        0
                                        • T ticaki

                                          @homoran
                                          Bei mir war es auch recht dicht dran. Hier ist aber ein L Dach und ich habe Abschattungen in der Formel ignoriert

                                          HomoranH Nicht stören
                                          HomoranH Nicht stören
                                          Homoran
                                          Global Moderator Administrators
                                          schrieb am zuletzt editiert von Homoran
                                          #30

                                          @ticaki wenn man die heutige Sonnenscheinverteilung bei mir sieht
                                          Screenshot_20250909-210217_Firefox.jpg
                                          hat heute wahrscheinlich die diffuse Strahlung das meiste gebracht :joy:

                                          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                          K 2 Antworten Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          547

                                          Online

                                          32.5k

                                          Benutzer

                                          81.6k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe