Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. E3DC Hauskraftwerk steuern

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    E3DC Hauskraftwerk steuern

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      ChrisChros last edited by

      Hallo @ArnoD ist dir bekannt ob Solcast an der Datenabfrage geändert hat. Ich bekomme seit einigen Tagen folgende Meldung im Log-File:

      2022-12-07 04:00:00.005 - info: javascript.0 (632) script.js.common.E3_DC.E3DC_Control_Prognose: ****************************** Es wird Solcast Dach 2 abgerufen ******************************
      2022-12-07 04:00:00.030 - warn: javascript.0 (632) script.js.common.E3_DC.E3DC_Control_Prognose: Error in der function InterrogateSolcast. Fehler = Error, status code = 0
      2022-12-07 04:00:00.030 - info: javascript.0 (632) script.js.common.E3_DC.E3DC_Control_Prognose: ****************************** Es wird Solcast Dach 1 abgerufen ******************************
      2022-12-07 04:00:00.034 - warn: javascript.0 (632) script.js.common.E3_DC.E3DC_Control_Prognose: Error in der function InterrogateSolcast. Fehler = Error, status code = 0
      

      Gruß Chris

      A 1 Reply Last reply Reply Quote 0
      • A
        ArnoD @bluebean last edited by

        @bluebean
        Kann ich machen, das dauert jetzt aber etwas, da ich aktuell wenig Zeit für mein Hobby habe.
        Nach Weihnachten sieht es wieder besser aus.

        bluebean 1 Reply Last reply Reply Quote 0
        • A
          ArnoD @ChrisChros last edited by ArnoD

          @chrischros
          Komisch, ist bei mir auch so, nur dass ich überhaupt keine Rückmeldung von der Seite erhalte.
          Wenn ich aber das Script manuell starte, werden die Daten normal abgerufen.
          Muss mal testen, ob das nur ein Problem um 4:00 Uhr ist oder generell.

          Nachtrag: Um 5:10 Uhr hat es heute funktioniert. Vermute das Solcast um 4:00 Uhr ein Problem hat.
          Kannst es ja mal bei dir testen und die Zeile 303 im Script so ändern:

          schedule('{"time":{"exactTime":true,"start":"05:10"},"period":{"days":1}}', function() {
          
          C 1 Reply Last reply Reply Quote 0
          • bluebean
            bluebean @ArnoD last edited by

            @arnod said in E3DC Hauskraftwerk steuern:

            @bluebean
            Kann ich machen, das dauert jetzt aber etwas, da ich aktuell wenig Zeit für mein Hobby habe.
            Nach Weihnachten sieht es wieder besser aus.

            Cool, danke dir bereits jetzt 🙂

            C 1 Reply Last reply Reply Quote 0
            • bluebean
              bluebean last edited by

              Bei mir war heute früh die Abfrage wieder normal:

              Screenshot_20221209-065147~01.png

              A 1 Reply Last reply Reply Quote 0
              • A
                ArnoD @bluebean last edited by

                @bluebean
                ok, dann ist anscheinend das Problem bei Solcast behoben.

                1 Reply Last reply Reply Quote 0
                • C
                  ChrisChros @ArnoD last edited by

                  @arnod said in E3DC Hauskraftwerk steuern:

                  Nachtrag: Um 5:10 Uhr hat es heute funktioniert. Vermute das Solcast um 4:00 Uhr ein Problem hat.
                  Kannst es ja mal bei dir testen und die Zeile 303 im Script so ändern:
                  schedule('{"time":{"exactTime":true,"start":"05:10"},"period":{"days":1}}', function() {

                  Danke, habe es nun eingepflegt und werde es die Tage beobachten.

                  Heute Morgen war keine Fehlermeldung im Log gewesen, eventuell hatten die auch Server Probleme bei Solcast die Tage.

                  1 Reply Last reply Reply Quote 0
                  • C
                    cacum @bluebean last edited by

                    @bluebean said in E3DC Hauskraftwerk steuern:

                    @arnod said in E3DC Hauskraftwerk steuern:

                    @bluebean
                    Kann ich machen, das dauert jetzt aber etwas, da ich aktuell wenig Zeit für mein Hobby habe.
                    Nach Weihnachten sieht es wieder besser aus.

                    Cool, danke dir bereits jetzt 🙂

                    Ich würde mich dafür auch sehr bedanken, wenn ich zu einer bestimmten Zeit eine bestimmte Menge in den Speicher laden könnte (wegen flexibler tarife und so)

                    Habt ihr auch die neue Nachicht im E3DC-System wegen dynamischer Direktvermarktung? Dass wird ja noch mal neuen Schwung in die Programmierung bringen. Ob es sich bei mir lohnt ist fraglich, weil ich mit meiner Anlage von 2011 noch mit üppiger Vergütung gesegnet bin.

                    A 1 Reply Last reply Reply Quote 0
                    • A
                      ArnoD @cacum last edited by

                      @cacum sagte in E3DC Hauskraftwerk steuern:

                      Habt ihr auch die neue Nachicht im E3DC-System wegen dynamischer Direktvermarktung?

                      Wo genau soll diese Nachricht sein?

                      bluebean Z 3 Replies Last reply Reply Quote 0
                      • bluebean
                        bluebean @ArnoD last edited by bluebean

                        @arnod
                        Die kommt, wenn man sich im S10 Portal oder über die E3DC App anmeldet.
                        Es wird zunächst abgefragt, ob Nutzer prinzipiell Interesse haben - auf der Basis soll dann im nächsten Schritt ein konkretes Angebot geschnitten werden gemeinsam mit dem Partner, den E3DC dafür gewonnen hat.

                        1 Reply Last reply Reply Quote 0
                        • Z
                          Zelkin @ArnoD last edited by Zelkin

                          @arnod
                          Mann, Mann, da hat man mal ein paar Wochen was um die Ohren .... dann verdoppelt sich gefühlt der umfang des Thread .... wow
                          Danke dir @ArnoD, dass du meine Idee aufgenommen hast 🙂
                          Die Arbeit die du hier leistest ist einfach unglaublich

                          eben alles aktualisiert und läuft

                          Danke für die Mühe

                          1 Reply Last reply Reply Quote 0
                          • Z
                            Zelkin @ArnoD last edited by

                            @arnod
                            Mal ne Frage zum Eigenverbrauch (ist in der Vis Info noch "alt" beschrieben)
                            Soll Ich hier nun wirklich den MIN Eigenverbrach zwischen 06:00 und 19:00 Uhr angeben??
                            Also sozusagen 13 x meine Grundlast?

                            Bisher war meine Angabe ja der Durchschnittsverbrauch vom ganzen Tag

                            Sorry wenn die frage schon aufkam ... habs nicht gefunden

                            A 1 Reply Last reply Reply Quote 0
                            • A
                              ArnoD @Zelkin last edited by

                              @zelkin
                              Nein, beim Eigenverbrauch ist alles beim alten geblieben.
                              Der Durchschnittsverbrauch für die Berechnung der Entladezeit Notstromreserve wird automatisch berechnet und eingetragen, da musst du nichts machen.
                              Die einzigen Variablen wo du was eintragen musst, sind 10_minWertPrognose_kWh ab welcher Prognose für den nächsten Tag in kWh die Notstromreserve verwendet werden darf und 10_Offset_sunriseEnd wie viele Minuten nach Sonnenaufgang soll die Notstromreserve noch abdecken bevor die Batterie leer ist.
                              Wenn du bei 10_Offset_sunriseEnd z. B. 0 eintragen würdest, dann wird anhand vom berechnetet Durchschnittsverbrauch vom Vortag mit dem Entladen der Notstromreserve gestartet, sodass die Batterie bis zum Sonnenaufgang ausreicht. Wenn du da z. B. 60 einträgst, wird später mit dem Entladen gestartet, sodass die Batterie erst 60 Min. nach Sonnenaufgang leer ist.

                              smartboart 1 Reply Last reply Reply Quote 0
                              • smartboart
                                smartboart @ArnoD last edited by

                                @arnod
                                Hi Arno ich habe das Script Autonomiezeitberchnung aktualisiert und an die neuen Bedingungen / RSCP Adapter und deinem aktuellen Sript angepasst. Falls du oder andere es noch benutzten kann es hier kopiert werden.

                                /*
                                E3DC dynamische Autonomiezeitberechnung bis zur eingestellten Reserve
                                von Smartboard 
                                28.09.2020
                                V0.0.1  -Dynamische Berechnung der Batterie  Autonomiezeit bei Entladung anhand der Modbusinformationen 
                                        BatSoc und Batterie_Leistung unter Berücksichtigung der Notstromreserve.   
                                        Für anzeige in Vis..
                                        Autonomiezeit in Vis auf Sichtbarkeit bei != 0 einstellen damit Diese nur bei Entnahme angezeigt wird.
                                        BatSoc in kwh   
                                29.09.2020
                                V0.0.2 -Berechnung auf Durchschnittswert der Autonomiezeit erweitert,  dadurch wird die Zeitanzeige ruhiger und gibt einen gemittelten 
                                       Wert wieder, welcher auch aussagekräftiger ist.
                                       - Notstromreserve wird nun aus Sript E3DC Control von ArnoD eingelesen. Sowie unterscheidung zur manuellen Eingabe  falls in E3DC eine 
                                       Notstromreserve hinterlegt wurde. Somit bleibt die Autonomie Berechnung automatisch aktuell sollte in E3DC Control etwas angepasst werden.        
                                30.09.2020
                                V0.0.3- Autonomiezeit Anzeige in Minuten wenn < 1 Stunde . State Autonomiezeit geändert von type numnber zu string.
                                03.10.2020
                                V0.0.4- debug überarbeitet für Anzeige im Log Adapter
                                07.10.2020
                                V0.0.6 - Berechnungsfehler, welche -Werte erzeugten wurden behoben.
                                         Ausgabe der 1. Autonomiezeitberechnung sofort anzeigen dann wird auf Durchschnittswert umgeschalte
                                20.10.2020
                                V0.0.7 - Hinweis stevie77 Wirkungsgrad in Berechnung einbeziehen. laut Datenblatt: max. Systemwirkungsgrad inkl. Batterie (%) > 88
                                Bei 13 KW 13 / 100 * 88 = 11.44 Bemerkung .Vermutlich kann hier 1 eingetragen werden, da im Verbrauchswert Watt schon die die Verluste inkludiert sind.
                                21.10.2020
                                V0.0.7 - Hinweis stevie77 Tiefenentladeschutz bei 10 % mit  in Berechnung einbeziehen. 
                                V0.0.8 - Berücksichtung Notstrombetrieb: Im Normalbetrieb erfolgt die Autonomierzeitberechnung
                                         bis zur Notstromreserve . Im Notstrombetrieb wird die Autonomiezeit nun weiter berechnet 
                                         und die Berechnung erfolgt dann bis zur Nettokapazitätsgrenze (Entladeschutz).
                                         Die Anzeige in kWh zeigt immer die Nettokapazität bis zum Entladeschutz.
                                13.11.2022
                                V0.0.9 - Notstromreserve nun aus E3DC-Charge-Control importiert. Lastabwurf ist entfallen
                                13.11.2022
                                v0.1.0 - Wirkungsgrad und Entladetiefe bei Autonomieberechnung entfernt, da dies zu Fehlberechnungen führt. Die Entnommene Leistung beinhaltet 
                                        ja schon die Verluste, somit kann mit dem Brutto gerechnet werden. SOH einbezogen. 
                                11.01.2023
                                v0.1.1 - Berechnungsformel Autonomiteit geändert. Anderer Rechenweg. 
                                */        
                                
                                //Konfiguration
                                var debug = false;
                                var SpeicherNetto = 18.525; // kw/h hier die Speichergröße in kwh abzügl der Sicherheitsreserve 5 %
                                var cron1 = 6; // hier die Schedulezeit - Triggerhäufigkeit alle x Sekunden für Zeitberechnung eintragen
                                var Counter = 10; // Hier die Anzahl der Zeitberechnungen eintragen um einen Durchschnitswert zu ermitteln
                                
                                const fC = false;
                                const Statepfad = 'javascript.' + instance + '.PVAnlage.Autonomie.';
                                
                                //Variable für Cronjob start stop
                                var Timer = null;
                                //Variable Hilfsmerker
                                var Merker = true;
                                //Variablen zur Berechnung der Zeiten
                                var Autonomiezeit = 0;// bis Notstromreserve
                                // Variablen für Durchschnittsberechnung
                                var Count = 0;
                                var Summe = 0;
                                // Wert gleich anzeigen
                                var Anzeige = false;
                                // Variable für Bat Soc in kwh abzüglich Notstromreserve
                                var BatSockWh = 0;
                                var Entnahme = 0;
                                var BatSoc = 0;
                                var Speicher = 0;
                                var Asoc1 = 0;
                                var Asoc2 = 0;
                                var Asoc = 0;
                                
                                
                                //states to create Ergebnisse
                                const idAutonomiezeit = Statepfad + 'Autonomiezeit';   
                                const idBatSockWh = Statepfad + 'Batteriekapazitaet';  
                                
                                //Berechnungsgrundlagen
                                
                                const idAsoc1 = 'e3dc-rscp.0.BAT.BAT_0.ASOC'/*Alterungszustand*/
                                const idAsoc2 = 'e3dc-rscp.0.BAT.BAT_1.ASOC'/*Alterungszustand*/
                                
                                const idBatEntnahme = 'modbus.1.holdingRegisters.40070_Batterie_Leistung'/*Batterie-Leistung in Watt*/;
                                const idBatSoc = 'modbus.1.holdingRegisters.40083_Batterie_SOC'/*Batterie-SOC in Prozent*/;
                                const idNotstrombetrieb = 'modbus.1.holdingRegisters.40084_Emergency_Power_Status'/*Emergency-Power Status*/;
                                const idE3DCReserve = 'javascript.1.PVAnlage.E3DC-Control.Allgemein.Notstrom_akt'/*aktuell berechnete Notstromreserve*/;
                                
                                
                                //states create
                                // Autonomiezeit in Vis auf Sichtbarkeit bei != 0 einstellen damit nur Sichtbar bei Entnahme
                                createState(idAutonomiezeit, 0, fC, { type: 'string', name: 'Autonomiezeit',role:'text'});
                                createState(idBatSockWh, 0, fC, { type: 'number', name: 'Batteriekapazität',role:'value', unit: ' kWh'});
                                if(fC && debug)log('force Creation Aktiv States angelegt oder überschrieben');
                                
                                //Scriptstart
                                setState(idAutonomiezeit, '0' ,true);  
                                setTimeout( function(){
                                Berechnung();
                                },500);
                                
                                // Trigger Berechnung Aktueller Bat Soc in kwh
                                on(idBatSoc, function(dp) { 
                                if(debug)log('Batterie E3DC: Trigger BatSoc aktiv. BatSoc beträgt: '+ dp.state.val +' %'); 
                                Berechnung();
                                });
                                
                                
                                
                                //Berechnung Aktueller Bat Soc in kwh und Wert in State schreiben
                                function Berechnung(){    
                                BatSoc = getState(idBatSoc).val;
                                Asoc1 = getState(idAsoc1).val;
                                Asoc2 = getState(idAsoc2).val;
                                Asoc = (Asoc1+Asoc2)/2;
                                Speicher = SpeicherNetto/100*Asoc;
                                setState(idBatSockWh,Math.round(((Speicher/100) * BatSoc)*100)/100,true);  
                                if(debug)log('Batterie E3DC: Die Aktuell verfügbare Speicherkapazität ist: '+ getState(idBatSockWh).val+' kWh'); 
                                }
                                
                                // Schedule Berechnung Autonomiezeit starten bei Entnahme
                                on(idBatEntnahme, function(dp) {
                                    if(dp.state.val < 0 ){
                                    if(Merker)schedulestart();
                                    Merker = false;
                                    if(debug)log('Batterie E3DC: Aktuelle Entnahmeleistung: ' + dp.state.val +' Watt');
                                    }
                                });
                                
                                //Berechnung Autonomiezeit
                                function schedulestart(){
                                if(debug)log('Batterie E3DC: Funktion Schedulestart aktiv');  
                                var cronjob = "*/"+cron1+" * * * * *";  
                                Timer = schedule(cronjob, function(){   
                                if(debug)log('Batterie E3DC: Schedule cronjob aktiv');       
                                Entnahme = getState (idBatEntnahme).val;
                                BatSockWh = getState (idBatSockWh).val;
                                BatSoc = getState(idBatSoc).val;
                                var Reserve = getState(idE3DCReserve).val;
                                var Notstrombetrieb = getState(idNotstrombetrieb).val;
                                if  (Notstrombetrieb !=2){
                                Reserve = 0;
                                }
                                setTimeout(function(){
                                if(Entnahme<0){
                                //BatSockWh = Math.round(BatSockWh - (Speicher/100*Reserve*100)/100);
                                BatSockWh = BatSockWh/BatSoc*(BatSoc-Reserve);
                                if(debug)log('Batterie E3DC: aktuelle Netto Gesamtkapazität abzüglich der Notstromreserve ist:  '+ BatSockWh + ' kWh.');
                                setTimeout(function(){
                                Autonomiezeit = Math.round(BatSockWh*1000/Entnahme*-1*100)/100;    
                                Durchschnitt();
                                if(Anzeige === false && Autonomiezeit >0){
                                setState(idAutonomiezeit, Autonomiezeit +' h',true);
                                Anzeige = true;
                                }
                                if(debug)log('Batterie E3DC: Autonomiezeit neu berechnet auf:  '+ Autonomiezeit + ' h.');
                                },100);
                                }else{
                                //Berechnung stoppen bei Entnahme 0 und Autonomiezeit auf 0 setzen
                                        if(Entnahme >=0){
                                        clearSchedule(Timer);
                                        Merker = true;
                                        if(debug)log('Batterie E3DC: Schedule cronjob gestoppt weil keine Entnahme');
                                        setState(idAutonomiezeit,'0',true);
                                        Anzeige = false;
                                                }
                                            }
                                        },100);   
                                    });
                                }
                                
                                // Zaehlem für Durchschnittsberechnung
                                
                                function Durchschnitt(){
                                Count ++
                                Summe = Summe + Autonomiezeit;
                                if(debug)log ('Summe: ' + Summe + ' Zaehler: '+Count+ ' Addition: + ' + Autonomiezeit);
                                if(Count===Counter){
                                var Zeit= Summe/Count;
                                setTimeout(function(){
                                if(debug)log('Batterie E3DC: Aktuelle Netto Speicherkapazität beträgt: '+ getState(idBatSockWh).val+' kWh, abzüglich der Notstromreserve '+BatSockWh+ ' kWh' );     
                                if(Zeit>=1){    
                                setState(idAutonomiezeit,+ Math.round(Zeit*100)/100 +' h',true);  
                                if(debug)log('Batterie E3DC: Autonomiezeit beträgt: '+ Math.round(Zeit*10)/10 + ' h');
                                    }
                                if(Zeit<1 && Zeit >0){       
                                setState(idAutonomiezeit, + Math.round((Zeit*60)*100/100)+' min',true);
                                if(debug)log('Batterie E3DC: Autonomiezeit bis Notstromreserve beträgt: '+Math.round((Zeit*60)*100/100) +' min.');
                                    }
                                if(Zeit < 0){
                                setState(idAutonomiezeit, '0' ,true);
                                if(debug)log('Batterie E3DC: Autonomiezeit beträgt: 0 min.');
                                    }
                                Count=0;
                                Summe=0;
                                if(debug)log('Batterie E3DC: Reset: Count =  '+ Count+ ' Summe = ' + Summe);
                                        },100);  
                                    }
                                }
                                
                                
                                
                                A A 2 Replies Last reply Reply Quote 2
                                • A
                                  ArnoD @smartboart last edited by

                                  @smartboart
                                  Super, danke 👍

                                  1 Reply Last reply Reply Quote 0
                                  • A
                                    Abyss @smartboart last edited by

                                    @smartboart
                                    Danke für das Update des neuen Scriptes.
                                    @ArnoD
                                    Danke für das neue Charge-Control und die neue Art der Regelung.
                                    Klasse Sache!!
                                    Freue mich schon auf die Möglichkeit der manuellen Speicherladung. 😉

                                    Nach langer Pause hab ich mich mal wieder drangesetzt um meine Systeme auf den aktuellen Stand zu bringen.
                                    Bei deinem Autonomie-Script scheitere ich grad an folgender Zeile:
                                    const idE3DCReserve = 'javascript.0.PVAnlage.E3DC-Control.Allgemein.Notstrom_akt'/aktuell berechnete Notstromreserve/;

                                    Wo kommt das Objekt her? das gibt es bei mir nicht und wird weder durch Charge-Control noch die Autonomiezeit erstellt?
                                    Hab ich hier was verpasst?
                                    Ohne das bekomme ich nur Fehlermeldungen und die Berechnung läuft nicht.

                                    Danke und Grüße

                                    H smartboart 2 Replies Last reply Reply Quote 0
                                    • H
                                      HDAndy @Abyss last edited by

                                      @abyss
                                      Das Objekt legt Charge-Control an und befindet sich bei mir unter: '0_userdata.0.Charge_Control.Allgemein.Notstrom_akt'.

                                      Pfad ändern und geht 🙂

                                      A 1 Reply Last reply Reply Quote 1
                                      • smartboart
                                        smartboart @Abyss last edited by

                                        @abyss Ja sorry..eben erst gelesen...arnos Script legt alles unter userdata an..ich habe das bei mir geändert weil ich nie auf userdata umgestellt habe und vergessen darauf hinzuweisen...

                                        1 Reply Last reply Reply Quote 0
                                        • A
                                          Abyss @HDAndy last edited by

                                          @hdandy

                                          Danke euch für den Hinweis.
                                          Hab alles durchgeklickt aber an der Stelle wohl aktiv überlesen. 😉
                                          Jetzt sieht es deutlich besser aus.

                                          Danke nochmal!!

                                          1 Reply Last reply Reply Quote 0
                                          • A
                                            ArnoD @ArnoD last edited by

                                            Neue Version Charge-Control auf GitHub hochgeladen.
                                            Version: 1.1.6
                                            Änderungen:

                                            • Bei der Abfragezeit der Daten von Solcast, werden die Minuten zufällig berechnet. Solcast Daten werden jetzt zwischen 4:01 Uhr und 4:59 Uhr abgerufen.
                                            • Fehler in Funktion CheckPrognose() behoben. Die Variable Notstrom_SOC_Proz wurde hier auf Einstellwert zurückgesetzt.
                                            A 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            607
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            70
                                            3331
                                            1363325
                                            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