Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Vergleich Solarprognosen Solarwetter und brightsky

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    Vergleich Solarprognosen Solarwetter und brightsky

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      ticaki Developer @klassisch last edited by

      @klassisch
      noch immer der gleiche Fehler? Ok der Link geht gleich nicht mehr - ich mache ne Verison

      K 1 Reply Last reply Reply Quote 0
      • K
        klassisch Most Active @ticaki last edited by klassisch

        @ticaki Ich habe jetzt den iob Befehl direkt in CMD eingegeben. Dann hat er was installiert
        Version im Admin immer noch
        0.3.1 (1~)

        Diese Version zeigt momentan mit den schwachen 19:00 Werten
        ghi (solar) 0.117
        und solar_estimate 0.088
        bei meinem 0°, 1, 1 Testvektor - also Modul horizontal 1m², 100% Wirkungsgrad.

        T 1 Reply Last reply Reply Quote 0
        • T
          ticaki Developer @klassisch last edited by ticaki

          @klassisch

          ok dass sollte ... hm ich weiß nicht ob das ne gute idee war - kenne mich mit windows nicht aus - die Version ändert sich nur wenn ich eine Version mache - die Entwicklungsversion hat i.d.R. keine geänderte Versionsnummer.

          Aber in 10 Minuten sollte es per npm gehen - also das Fenster mit der benutzerdefinierten Installation aber da npm auswählen und dann ticaki/ioBroker.brightsky glaube ich.

          EDIT:
          so sieht das aus - aber ist noch nicht da 🙂
          Bildschirmfoto 2025-09-17 um 19.44.18.png

          EDIT2
          Jetzt ist es angekommen - obs schon installierbar ist oder er noch die alte nimmt weiß ich aber net 🙂

          EDIT3 - er nimmt die 0.3.2

          K 1 Reply Last reply Reply Quote 1
          • K
            klassisch Most Active @ticaki last edited by klassisch

            @ticaki Vielen Dank! 0.3.2 auch hier. Und verhält sich anders
            solar (ghi) 0.133
            solar_estimate 1
            könnte grundete 0.133 sein, was ein plausibles Ergebnis wäre.
            Mehr sehe ich erst später. morgen um 07:00 ist ghi immer noch 0

            Edit: Achso, ich habe über github benutzerdefiniert und nicht über npm installiert. lief aber durch und Version passt ja.

            Edit2: Habe jetzt nach @Armilar s Hinwei mal 24h eingestellt. Und morgen Thu Sep 18 2025 14:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)
            haben solar und solar_estimate gleiche Zahlenwerte - wie es sein soll.

            1 Reply Last reply Reply Quote 0
            • K
              klassisch Most Active @Homoran last edited by

              @homoran sagte in Vergleich Solarprognosen Solarwetter und brightsky:

              Der Rest ist bei mir 😂
              Screenshot_20250917-190348_Firefox.jpg
              gestern gut 20% über Forecast und heute wird's noch mehr.

              Es sei Dir gegönnt! War gestern eh den ganzen Tag mit Auto weg. Und heute ist es wieder voll geladen 🙂

              Octo(pus)Cat

              Ah, ja. vielen Dank!

              Homoran 1 Reply Last reply Reply Quote 0
              • K
                klassisch Most Active @Armilar last edited by

                @armilar sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                ja - der Adapter lässt 48 Stunden zu

                84afea38-cc02-461d-982b-f81babe3766f-image.png

                Vielen Dank! Hatte den Post glatt überlesen - sorry! Dann werde ich mal 24h einstellen.

                1 Reply Last reply Reply Quote 0
                • T
                  ticaki Developer last edited by

                  @klassisch
                  In der rechnung ist noch folgendes mit drin - kann man wohl aus den Variablen ableiten was es ist:

                  const poaWhPerM2 = valueWhPerM2 * (beamFraction * dirGain + diffuseFraction * skyDiffuseGain + groundRefGain);

                  K 1 Reply Last reply Reply Quote 1
                  • K
                    klassisch Most Active @ticaki last edited by

                    @ticaki Ja, habe jetzt die 24 Forcast Stunden (+ die aktuelle Stunde = 25 h) eingestellt und den "Streiflichttest" gemacht.
                    Mein Skript bricht auf 0 ein, weil es nur direkte Strahlung berechnet.
                    Adapter geht von 0,692 auf ca. 0,2 zurück.
                    Die Python Lib verhält sich ähnlich.

                    Sieht also auf den ersten Blick gut aus.

                    1 Reply Last reply Reply Quote 0
                    • K
                      klassisch Most Active last edited by klassisch

                      Auf den zweiten Blick sieht das auch noch gut aus. Die Werte der sonnenstarken Phasen passen zu meinem Skript.

                      Und da könnte ich gleich einen Feature Request antizipieren:

                      • Modulüberbelegung bzw. Begrenzung durch Wechselrichter.

                      Das ist bei mir der Fall. Für die Entscheidung netzdienliches Laden wohl ohne große Bedeutung. Aber wenn man schon Albedo, Diffuslicht etc berücksichtigt .. (icon für Duck und weg)
                      Bei mir wurde einfach aus

                      const energy_kWh = poa_kwh_m2 * AREA_M2 * EFFICIENCY
                      
                      const energy_kWh = Math.min(poa_kwh_m2 * AREA_M2 * EFFICIENCY, inverterLimit);
                      
                      Homoran T 2 Replies Last reply Reply Quote 1
                      • Homoran
                        Homoran Global Moderator Administrators @klassisch last edited by

                        @klassisch und du schreibst was von homoran'schem Perfektionismus! 😀

                        K 1 Reply Last reply Reply Quote 0
                        • K
                          klassisch Most Active @Homoran last edited by klassisch

                          @homoran Nunja, ich schrieb ja, daß es für meinen einfachen Anwendungsfall nicht sooo wichtig ist.
                          Irgendwann später wird aber jemand danach fragen.
                          Und wenn wir schon mal dabei sind und es doch soo einfach zu implementieren ist .....

                          Edit: Ja und wenn wir gerade darüber sprechen: Man könnte die geklippten Daten und die ungeklippten Daten parallel halten. Dann kann man berechnen, was man durch das Clipping verliert. Bei mir war es letztes Jahr < 20 EUR Einspeisevergütung.

                          1 Reply Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators @klassisch last edited by Homoran

                            @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                            den ganzen Tag mit Auto weg. Und heute ist es wieder voll geladen

                            du fährst jetzt auch elektrisch?
                            Da sieht man mal, wie die Zeit vergeht und wie lange ich dich nicht mehr gesehen hab!

                            @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                            für meinen einfachen Anwendungsfall nicht sooo wichtig

                            ach ja!

                            Screenshot_20250917-213934_Firefox.jpg
                            mein Schlechtwetterprogramm hat heute sein bestes getan!
                            nicht gerade wirklich netzdienlich, zwar nur 1.5 kWh eingespeist, allerdings nicht früh morgens*.
                            aber die Batterie war planmäßig voll.

                            EDIT:

                            • doch, tatsächlich einiges früh morgens
                              Screenshot_20250917-214947_Firefox.jpg
                              aber eher zufällig.
                            K 1 Reply Last reply Reply Quote 1
                            • T
                              ticaki Developer @klassisch last edited by

                              @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                              Bei mir wurde einfach aus

                              const energy_kWh = poa_kwh_m2 * AREA_M2 * EFFICIENCY
                              
                              const energy_kWh = Math.min(poa_kwh_m2 * AREA_M2 * EFFICIENCY, inverterLimit);
                              

                              Ich hab 2 Gruppen an einem Wechselrichter - das ist dann schon etwas komplexer 🙂

                              K 1 Reply Last reply Reply Quote 0
                              • K
                                klassisch Most Active @Homoran last edited by

                                @homoran sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                du fährst jetzt auch elektrisch?

                                Ja schon ein paar Jahre. Passt gut zur PV-Anlage und fährt angenehm. Davor Plug-In Hybrid. Ging auch gut 100km elektrisch.

                                Da sieht man mal, wie die Zeit vergeht und wie lange ich dich nicht mehr gesehen hab!

                                Da hast Du recht! Corona hat leider die Kasseler HM-Tradition gebrochen und das ioBroker Meeting war mir zu weit weg und ich hatte anderes zu tun.

                                Screenshot_20250917-213934_Firefox.jpg
                                mein Schlechtwetterprogramm hat heute sein bestes getan!
                                nicht gerade wirklich netzdienlich, zwar nur 1.5 kWh eingespeist, allerdings nicht früh morgens.
                                aber die Batterie war planmäßig voll.

                                Respekt!
                                Ich mache das noch manuell. Und nicht so perfektionistisch 😉

                                Homoran 2 Replies Last reply Reply Quote 1
                                • K
                                  klassisch Most Active @ticaki last edited by klassisch

                                  @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                  Ich hab 2 Gruppen an einem Wechselrichter - das ist dann schon etwas komplexer 🙂

                                  Die Komplexität hast Du ja schon bei der Definition der Strings und deren Orientierung. Solange es nur einen WR gibt, kann man dessen summarische PV Leistung entsprechend mit Math.max clippen. Kompliziert wird es wenn es mehrere Strings an mehreren WR gibt. Beispielsweise zwei Strings an einem und drei Strings am anderen. Das würde die Konfiguration aufwendiger gestalten. Könnte man aber umgehen, indem man für jeden WR eine eigene Instanz anlegt. Jetzt nicht so hyperelegant. Aber ich würde es als user so machen. Einfach und robust. Und wer mit den Ergebnissen mehr rechnen oder regeln will, kann es ja mittels Skript selber rechnen.

                                  T 1 Reply Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators @klassisch last edited by Homoran

                                    @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                    Und nicht so perfektionistisch

                                    Das Schönwetterprogramm rechnet auch nur den Energiebedarf zum laden und verteilt das auf die Stunden bis der max Est unter die 60% PV Leistung fällt. ab da dann laden mit voller Leistung
                                    Das war bei wechselnder Bewölkung viel zu wenig, da die Leistungsspitzen während Wolkenlücken nicht genutzt wurden.
                                    Jetzt rechne ich zusätzlich noch einen Faktor aus, der sich aus der fehlenden Energie der letzten Stunden ergibt, die wegen Wolken nicht produziert wurde.

                                    so was ganz einfaches 😉
                                    Screenshot_20250917-222217_Firefox.jpg

                                    EDIT:
                                    Für dich in js

                                    var Faktor, chargingPower_akt, endeRegeln, T_akt, sonnig, T_diff, working, chargingPower, Ladeliste, my_60Prozent, T_End, chargingPowerFakt, startLaden, Intervall, timeout;
                                    
                                    // Beschreibe diese Funktion …
                                    async function Ladesteuerung() {
                                     chargingPower_akt = getState('modbus.1.holdingRegisters.100.2705_maxCharge').val;
                                     chargingPower = Math.floor((((98 - getState('modbus.1.inputRegisters.100.843_SOC').val) * 300) / 54) / T_diff);
                                     if (Ladeliste.length > 0) {
                                       Faktor = Math.round((Math.min(Math.max(1 / (getState('sourceanalytix.0.Messwerte__0__Batterie__Ladung.currentYear.consumed.01_currentDay').val / Ladeliste.reduce(function(x, y) {return x + y;}, 0)), 0.5), 4)) * 100) / 100;
                                       setState('Messwerte.0.Solarspitzen.chargingFaktor' /* chargingFaktor */, Faktor, true);
                                     }
                                     chargingPowerFakt = Math.min(Math.max(1, Math.round(chargingPower * Faktor)), 96);
                                     Ladeliste.push(chargingPower * 0.054);
                                     setState('Messwerte.0.Solarspitzen.Ladeliste' /* Ladeliste */, Ladeliste, true);
                                     setStateDelayed('Messwerte.0.Solarspitzen.Logdaten2' /* Logdaten2 */, ([working == false ? '<br><strong><font size=3><font color=yellow>Laden gestartet</font></font></strong> <br><br>' : '<br>','Restzeit ',T_diff,'h, SoC ',getState('modbus.1.inputRegisters.100.843_SOC').val,'%, <br>Ladestrom ',chargingPower,'A, Faktor ',Faktor,'<br>',(T_diff > 1) && (Math.abs(chargingPowerFakt - chargingPower_akt) > 5) && (getState('modbus.1.inputRegisters.100.843_SOC').val < 90) ? ['<strong><font size=3><font color=gold>Max. Ladestrom wird geändert</font></font></strong> von ',chargingPower_akt,'A auf ',chargingPowerFakt,'A<br>'].join('') : ['Max. Ladestrom von ',chargingPower_akt,'A wird nicht auf ',chargingPowerFakt,'A geändert<br>'].join('')].join('')), true, 300, false);
                                     if (!getState('Messwerte.0.Solarspitzen.manual_override').val) {
                                       if ((T_diff > 1) && (Math.abs(chargingPowerFakt - chargingPower_akt) > 5) && (getState('modbus.1.inputRegisters.100.843_SOC').val < 90)) {
                                         if (!sonnig) {
                                           setState('modbus.1.holdingRegisters.100.2705_maxCharge', (getState('modbus.1.inputRegisters.100.843_SOC').val < 90 ? Math.min(Math.max(1, chargingPowerFakt), 100) : Math.min(Math.max(1, chargingPower), 100)));
                                         }
                                       }
                                     }
                                    }
                                    
                                    // Beschreibe diese Funktion …
                                    async function Sonnenzeit() {
                                     T_akt = Math.round((((new Date().getTime()) - getDateObject(getAstroDate('sunrise', undefined, 0)).getTime()) / 3600000) * 100) / 100;
                                     T_diff = Math.round((T_End - T_akt) * 100) / 100;
                                    }
                                    
                                    
                                    Faktor = getState('Messwerte.0.Solarspitzen.chargingFaktor').val;
                                    endeRegeln = getState('Messwerte.0.Solarspitzen.regelnOff').val;
                                    working = getState('Messwerte.0.Solarspitzen.regelnLaeuft').val;
                                    Ladeliste = getState('Messwerte.0.Solarspitzen.Ladeliste').val;
                                    T_End = getState('Messwerte.0.Solarspitzen.Time3').val;
                                    T_diff = Math.round((T_End - T_akt) * 100) / 100;
                                    on({ id: [].concat(['Messwerte.0.Solaranlage.Momentanwerte.Leistung_AC_aktuell']), change: 'ne' }, async (obj) => {
                                     let value = obj.state.val;
                                     let oldValue = obj.oldState.val;
                                     if (((obj.state ? obj.state.val : '') > 300) && (getState('Messwerte.0.Batterie.Ladung').val > 100) && working && (!endeRegeln)) {
                                       await Sonnenzeit();
                                       if (!Intervall) {
                                         startLaden = true;
                                         Intervall = setInterval(async () => {
                                           startLaden = false;
                                           await Ladesteuerung();
                                         }, 3600000);
                                       }
                                     } else if (((obj.state ? obj.state.val : '') > 300) && (getState('Messwerte.0.Batterie.Ladung').val > 100) && (!working) && (!endeRegeln)) {
                                       await Sonnenzeit();
                                       if (T_akt > 0.7) {
                                         Faktor = Math.round((Math.min(Math.max(T_akt / 0.8, 1), 4)) * 100) / 100;
                                       } else {
                                         Faktor = 1;
                                       }
                                       setState('Messwerte.0.Solarspitzen.chargingFaktor' /* chargingFaktor */, Faktor, true);
                                       (() => { if (Intervall) { clearInterval(Intervall); Intervall = null; }})();
                                       await Ladesteuerung();
                                       working = true;
                                       setState('Messwerte.0.Solarspitzen.regelnLaeuft' /* regelnLaeuft */, true, true);
                                       (() => { if (timeout) { clearTimeout(timeout); timeout = null; }})();
                                       timeout = setTimeout(async () => {
                                         timeout = null;
                                         my_60Prozent = true;
                                       }, 300000);
                                     }
                                    });
                                    
                                    on({ id: [].concat(['Messwerte.0.Solaranlage.Momentanwerte.Solarestimate2']), change: 'lt' }, async (obj) => {
                                     let value = obj.state.val;
                                     let oldValue = obj.oldState.val;
                                     if (((obj.state ? obj.state.val : '') < 3400) && ((obj.oldState ? obj.oldState.val : '') >= 3400) && (!endeRegeln) && working && my_60Prozent) {
                                       (() => { if (Intervall) { clearInterval(Intervall); Intervall = null; }})();
                                       endeRegeln = true;
                                       setState('Messwerte.0.Solarspitzen.regelnOff' /* regelnOff */, true, true);
                                       working = false;
                                       setState('Messwerte.0.Solarspitzen.regelnLaeuft' /* regelnLaeuft */, false, true);
                                       setState('Messwerte.0.Solarspitzen.Logdaten2' /* Logdaten2 */, (['<br><strong><font size=3><font color=lightgreen>Regelung beendet</font></font><br>','Ladeleistung wird fix geändert auf ',92,'A</strong><br>'].join('')), true);
                                       if (!sonnig) {
                                         setState('modbus.1.holdingRegisters.100.2705_maxCharge', 92);
                                       }
                                       setState('Messwerte.0.Solarspitzen.Time3' /* Time3 */, (((new Date().getTime()) - getAstroDate('sunrise', undefined, 0)) / 3600000), true);
                                     }
                                    });
                                    
                                    on({ id: [].concat(['modbus.1.holdingRegisters.100.2705_maxCharge']), change: 'ne' }, async (obj) => {
                                     let value = obj.state.val;
                                     let oldValue = obj.oldState.val;
                                     if ((obj.state ? obj.state.from : '') != 'system.adapter.javascript.1') {
                                       setState('Messwerte.0.Solarspitzen.manual_override' /* manual_override */, true, true);
                                     } else {
                                       setState('Messwerte.0.Solarspitzen.manual_override' /* manual_override */, false, true);
                                     }
                                    });
                                    
                                    on({ id: [].concat(['shuttercontrol.0.info.Elevation']), change: 'ne' }, async (obj) => {
                                     let value = obj.state.val;
                                     let oldValue = obj.oldState.val;
                                     if (((obj.state ? obj.state.val : '') < -3) && endeRegeln) {
                                       endeRegeln = false;
                                       setState('Messwerte.0.Solarspitzen.regelnOff' /* regelnOff */, false, true);
                                       T_End = getState('Messwerte.0.Solarspitzen.Time3').val;
                                       Ladeliste = [];
                                       setState('Messwerte.0.Solarspitzen.Ladeliste' /* Ladeliste */, Ladeliste, true);
                                       my_60Prozent = false;
                                     }
                                    });
                                    
                                    on({ id: [].concat(['Messwerte.0.Solarspitzen.forecastSonnig']), change: 'ne' }, async (obj) => {
                                     let value = obj.state.val;
                                     let oldValue = obj.oldState.val;
                                     sonnig = (obj.state ? obj.state.val : '');
                                    });
                                    

                                    und nicht lachen!
                                    ich kann besser frickeln als wie du!

                                    1 Reply Last reply Reply Quote 1
                                    • T
                                      ticaki Developer @klassisch last edited by

                                      @klassisch
                                      Wenn man sowas einbaut dann richtig oder garnicht 🙂

                                      K 1 Reply Last reply Reply Quote 0
                                      • K
                                        klassisch Most Active @ticaki last edited by

                                        @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                        @klassisch
                                        Wenn man sowas einbaut dann richtig oder garnicht 🙂

                                        Ja genau, für einen WR richtig einbauen. Wer sich mehrere WR leistet kann sich auch mehrere Instanzen leisten. Keep it simple duckundweg 😉

                                        T 1 Reply Last reply Reply Quote 0
                                        • T
                                          ticaki Developer @klassisch last edited by

                                          @klassisch

                                          Sind 4 möglich und unendliche anzahl an Panels - bedenke die Leute die sich 8 Balkonkraftwerke halten - offiziell haben sie natürlich nur 1 😄

                                          1 Reply Last reply Reply Quote 1
                                          • T
                                            ticaki Developer last edited by ticaki

                                            Da zum Probieren

                                            https://github.com/ticaki/ioBroker.brightsky/tree/fix/limit-inverter-max-power

                                            Übersetzungen hab ich nicht überprüft

                                            EDIT: LOL: Wechselrichter 1 max. Macht (KW)

                                            EDIT2: wie man sieht hab ichs dann doch überprüft.

                                            K 1 Reply Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            Support us

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

                                            1.0k
                                            Online

                                            32.1k
                                            Users

                                            80.7k
                                            Topics

                                            1.3m
                                            Posts

                                            7
                                            218
                                            5146
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo