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

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    E3DC Hauskraftwerk steuern

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

      @ArnoD
      Danke nochmal für deine Unterstützung mit dem Heizstabscript.

      Ich pack hier mal das aktuelle Heizstabscript mit rein.
      Evtl. kannst du das ja auch in deiner Github Sammlung gebrauchen.

      Bis jetzt läuft das sehr gut.
      Ich bin noch am testen ob die lineare Abregelung notwendig ist, oder ob man das einfach dem Heizstab überlässt.
      Der Heizstab schaltet sich bei erreichen der MaxTemp automatisch ab, bei mir 60° und kühlt dann ab bis 57°, danach aktiviert er sich wieder.
      Hab noch zu wenig sonnige Tage um zu sagen was effektiver ist.

      //MyPV Version v.0.06
      					 
      const sID_LeistungHeizstab_W = 'modbus.1.holdingRegisters.41001_Power'       	// Aktueller Verbrauch Heizstab in W
      const sID_PV_Leistung = 'e3dc-rscp.0.EMS.POWER_PV';                         	// PV_Leistung
      const sID_Eigenverbrauch = 'e3dc-rscp.0.EMS.POWER_HOME';                    	// Hausverbrauch_Leistung
      const sID_Netz_Leistung = 'e3dc-rscp.0.EMS.POWER_GRID';                     	// Einspeiseleistung            
      const sID_Batterie_Leistung = 'e3dc-rscp.0.EMS.POWER_BAT';                      // Batterie_Leistung
      const sID_Batterie_SOC = 'e3dc-rscp.0.EMS.BAT_SOC';                         	// Batterie_Ladezustand
      const sID_Soll_LeistungHeizstab_W = 'modbus.1.holdingRegisters.41001_Power'; 	// Soll Leistung Heizstab an Schnittstelle
      const sID_IstTempHeizstab = 'modbus.1.holdingRegisters.41002_Temp1';        	// Aktuelle Temperatur am Heizstab
      const sID_IstTempExtFuehler = 'modbus.1.holdingRegisters.41031_Temp2'           // Temp_2 externer Fühler																										  
      const sID_MaxTempHeizstab = 'modbus.1.holdingRegisters.41003_WW1_Temp_max'; 	// Maximal-Temperatur lt. Drehregler am Heizstab
      const sID_MaxHeizstableistung_W = 'modbus.1.holdingRegisters.41015_max_Power'   // Maximale Heizstableistung
      const sID_HeizstabStatus = 'modbus.1.holdingRegisters.41004_Status'             // Heizstab Status (R)
      const Haltezeit = 10;                                                       	// Haltezeit in min.
      
       
      let HaltezeitHeizstab = null;
      clearTimeout(HaltezeitHeizstab); 
       
      // schedule('{"time":{"start":"10:00","end":"16:00","mode":"minutes","interval":1},"period":{"days":1}}', async function (obj) {
      schedule('*/20 * * * * *', async function () {
      // on({id: sID_PV_Leistung, change: "ne"}, async function (obj) {
      
          
          let BatterieLeistung_W = (await getStateAsync(sID_Batterie_Leistung)).val; 
          let PV_Leistung_W = (await getStateAsync(sID_PV_Leistung)).val;
          let LeistungHeizstab_W = (await getStateAsync(sID_LeistungHeizstab_W)).val;
          let Hausverbrauch_W = (await getStateAsync(sID_Eigenverbrauch)).val 
          let NetzLeistung_W = (await getStateAsync(sID_Netz_Leistung)).val;
          let MaxTempHeizstab = (await getStateAsync(sID_MaxTempHeizstab)).val;
          let IstTempHeizstab = (await getStateAsync(sID_IstTempHeizstab)).val;
      	let IstTempExtFuehler = (await getStateAsync(sID_IstTempExtFuehler)).val;																		 
          let Batterie_SOC = (await getStateAsync(sID_Batterie_SOC)).val;
          let MaxHeizstableistung_W = (await getStateAsync(sID_MaxHeizstableistung_W)).val;
          let HeizstabStatus = (await getStateAsync(sID_HeizstabStatus)).val;
          let HeizstabLadeleistung_W = 0;
       
          Hausverbrauch_W =Hausverbrauch_W - LeistungHeizstab_W; //Hausverbrauch ohne Leistung Heizstab
          NetzLeistung_W = 0 - PV_Leistung_W + Hausverbrauch_W + BatterieLeistung_W; //Netzleistung ohne Heizstab
          
          // PV_Leistung_W = 8000
          // NetzLeistung_W = -1000
      
          // Prüfen ob Werte Netz oder Batterie negativ sind um Überschuss richtig zu berechnen
          if (NetzLeistung_W <= -1000 && BatterieLeistung_W <= 0){
              HeizstabLadeleistung_W = (PV_Leistung_W-Hausverbrauch_W+BatterieLeistung_W);
          }else if (NetzLeistung_W <= -1000 && BatterieLeistung_W > 0){
              HeizstabLadeleistung_W = (PV_Leistung_W-Hausverbrauch_W-BatterieLeistung_W);																				
          }                  
       
          // Lineare Interpolation abhängig der mind.Temperatur am Heizstab
          // lineare Interpolation Leistung Heizstab 
      
          let LinIntp_HeizstabLadeleistung_W = MaxHeizstableistung_W+(0-MaxHeizstableistung_W)*((IstTempHeizstab-57)/(MaxTempHeizstab-57))
          log(`NetzLeistung_W = ${NetzLeistung_W} Hausverbrauch_W = ${Hausverbrauch_W} LeistungHeizstab_W = ${LeistungHeizstab_W} PV_Leistung_W =${PV_Leistung_W} BatterieLeistung_W = ${BatterieLeistung_W} IstTempHeizstab = ${IstTempHeizstab} MaxTempHeizstab = ${MaxTempHeizstab} HeizstabLadeleistung_W = ${HeizstabLadeleistung_W} Interpolation Leistung = ${LinIntp_HeizstabLadeleistung_W}`);
       
          if (HeizstabLadeleistung_W > LinIntp_HeizstabLadeleistung_W){
              HeizstabLadeleistung_W = LinIntp_HeizstabLadeleistung_W;
              if (HaltezeitHeizstab){clearTimeout(HaltezeitHeizstab)}
              HaltezeitHeizstab = setTimeout(function () {HaltezeitHeizstab = null;}, Haltezeit*60000);
          }else if (HeizstabLadeleistung_W <= 0 && HaltezeitHeizstab){
             HeizstabLadeleistung_W = LinIntp_HeizstabLadeleistung_W;
          }
      
      
          // Prüfen ob HeizstabLadeleistung_W > 3500W ist
          if (HeizstabLadeleistung_W > MaxHeizstableistung_W){HeizstabLadeleistung_W = MaxHeizstableistung_W}   
          // Prüfen ob HeizstabLadeleistung_W < 0W ist
          if (HeizstabLadeleistung_W < 0){HeizstabLadeleistung_W = 0}  
          // Prüfen ob Batterie SOC < 20% ist
          if (Batterie_SOC < 20){HeizstabLadeleistung_W = 0}
          // Prüfen ob Heizstab auf Status "Heizen Beendet" steht
          if (HeizstabStatus == 5){HeizstabLadeleistung_W = 0}  
          // Prüfen ob max.Temp 60° oben erreicht
          if (IstTempExtFuehler >= 61 && IstTempHeizstab > 50){HeizstabLadeleistung_W = 0}
       
          if( (await getStateAsync(sID_LeistungHeizstab_W)).val != HeizstabLadeleistung_W) {
                  await setStateAsync(sID_LeistungHeizstab_W,HeizstabLadeleistung_W);
              };
          // await setStateAsync(sID_Soll_LeistungHeizstab_W,HeizstabLadeleistung_W);
      							 
      });
       
      
      

      Grüße

      J 1 Reply Last reply Reply Quote 0
      • J
        jans_ios @Abyss last edited by

        @abyss
        Sehr cool, was da draus geworden ist!

        @ArnoD und @OliverR-0
        Vielleicht sollte es eine generelle Schnittstelle geben. Ich stelle mir vor, dass Charge-Control einen Wert "freigegebene W" in ein Objekt bspw. unter "0_userdata\0\Charge_Control" schreibt und diese immer wieder aktualisiert. Ein Skript bspw. für eine Wärmepumpe oder einen Heizstab könnte diesen Wert nutzen und einen Verbraucher mit einer Wattzahl ansteuern - die genutzte Wattzahl hat dieses Skript dann in einen Wert "genutzte W" zu schreiben, damit Charge-Control diesen bei seiner nächsten Berechnung nutzen kann.

        Für so ein externes Skript könnte man dann eine Vorlage bauen. Einen Bereich, der die zur Verfügung stehende Wattzahl abgreift, einen zu befüllenden Teil für die Nutzung und einen Teil, der die genutzten W zurückschreibt.

        Was meint Ihr?

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

          @jans_ios
          Das müsste @OliverR-0 testen, da ich keinen Heizstab habe und mich da echt schwertue was zu programmieren, dass ich dann nicht testen kann.
          Das eigentliche Problem ist, dass die Leistungswerte vom Heizstab anscheinend verzögert kommen und somit dann nicht verwendet werden können. Bedeutet, wenn der Heizstab sich einschaltet, bekommt das Script verzögert die Verbrauchswerte vom Heizstab und würde davon ausgehen das kein Überschuss mehr vorhanden ist. Das würde zum Ein- und Ausschalten vom Heizstab führen.

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

            @ArnoD

            Hallo Arno,

            ich stell mich vermutlich mal wieder zu doof....aber ich bin grad drübergestolpert das in der "Prognose-View" komplett die Daten aus dem Vorjahr schon drinstehen.
            Muss man hier den History-Daten-Ordner löschen und das Script legt den neu an?
            Oder hätte das automatisch passieren müssen und bei mir is da was schiefgelaufen?
            Steh grad auf dem Schlauch. 😉

            Danke und Grüße

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

              @abyss
              Die Daten werden automatisch am 1 eines jeden Monats nur für den aktuellen Monat gelöscht.
              Ab dem 01.01 solltest du somit keine Werte mehr vom Vorjahr in der Ansicht Januar haben.
              Wenn du am 01.01. auf Februar umschaltest, siehst du noch die Werte Februar vom Vorjahr.

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

                @arnod
                Danke für dein Feedback.
                So etwas hatte ich gehofft/befürchtet.
                Musste diese Woche ein Backup meiner iobroker-VM restoren und seitdem ist mir das Problem aufgefallen.
                Sprich zum Monatswechsel zum 1.2. wird sich das wieder bereinigen und normal weiterlaufen?

                Danke dir 😉

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

                  @abyss sagte in E3DC Hauskraftwerk steuern:

                  Sprich zum Monatswechsel zum 1.2. wird sich das wieder bereinigen und normal weiterlaufen?

                  Ja

                  1 Reply Last reply Reply Quote 0
                  • M
                    MaLei last edited by

                    Hallo zusammen,

                    habe gerade das Charge-Control Script eingebunden. Nach Anleitung die Einstellungen vorgenommen und trotzdem kommt die Fehlermeldung:
                    Notstromreserve wurde beim Hauskraftwerk eingestellt und wird nicht von Charge-Control gesteuert
                    Was muss ich wo noch ändern?

                    Schönen Abend!

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

                      @malei
                      Das ist nur ein Hinweis, dass du beim E3DC Hauskraftwerk eine Notstromreserve eingestellt hast und somit diese nicht vom Script geregelt wird. Wenn du willst, dass Charge-Control den Notstrom regelt, musst du beim E3DC bei den Notstromeinstellungen 0 Wh eintragen.
                      Mit Notstrom min. und Notstrom Sockel kann man dann eine dynamische Notstromreserve vorhalten, Vorteil ist, dass der Speicher nicht alle 3 Wochen entladen wird wie bei der Notstromreserve von E3DC.

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

                        @ArnoD
                        Guten Morgen,
                        danke für die Info. Nachdem ich die Notstrommenge am E3DC auf 0 gesetzt habe, entlädt der Speicher.
                        Als Notstrom min. und Notstrom Sockel habe ich noch die Standardwerte 30% / 20% gesetzt. Der Speicher ist jetzt deutlich drunter. Wie erkenne ich, ob die Regelung über Charge-Control korrekt funktioniert?

                        Ergänzung: Im Parameter 0_userdata.0.Charge_Control.Allgemein.Batteriekapazität_kWh stehen nur 0,7 kWh bei 15,7 kWh Kapazität!?

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

                          @malei
                          0_userdata.0.Charge_Control.Allgemein.Batteriekapazität_kWh zeigt dir den aktuellen SOC der Batterie in kWh an und nicht die max. Kapazität der Batterie.
                          Prüfe mal bitte die Werte von folgende Objekt ID's:
                          e3dc-rscp.0.BAT.BAT_0.SPECIFIED_CAPACITY
                          bei zwei Batteriekreise auch
                          e3dc-rscp.0.BAT.BAT_1.SPECIFIED_CAPACITY
                          und
                          0_userdata.0.Charge_Control.USER_ANPASSUNGEN.10_Systemwirkungsgrad
                          Die Summe der ersten beiden Werte sollten deine max. Kapazität der Batterie ergeben.
                          0_userdata.0.Charge_Control.Allgemein.Automatik_Regelungsollte auf true stehen und
                          0_userdata.0.Charge_Control.Allgemein.Notstrom_aktsollte deine aktuell berechnete Notstromreserve in % anzeigen.

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

                            @arnod sagte in E3DC Hauskraftwerk steuern:

                            e3dc-rscp.0.BAT.BAT_0.SPECIFIED_CAPACITY
                            6526 Wh

                            e3dc-rscp.0.BAT.BAT_1.SPECIFIED_CAPACITY
                            13053 Wh

                            0_userdata.0.Charge_Control.USER_ANPASSUNGEN.10_Systemwirkungsgrad
                            88%

                            Die Summe der ersten beiden Werte sollten deine max. Kapazität der Batterie ergeben.
                            ich habe nur 15700 Wh

                            0_userdata.0.Charge_Control.Allgemein.Automatik_Regelungsollte auf true stehen
                            habe ich jetzt auf true gesetzt

                            0_userdata.0.Charge_Control.Allgemein.Notstrom_aktsollte deine aktuell berechnete Notstromreserve in % anzeigen.
                            steht bei 27 %

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

                              @malei sagte in E3DC Hauskraftwerk steuern:

                              Die Summe der ersten beiden Werte sollten deine max. Kapazität der Batterie ergeben.
                              ich habe nur 15700 Wh

                              Dann werden die Werte vom E3DC falsch übertragen. Es gibt bei einigen Typen Probleme beim Auslesen der Werte über RSCP, dein Hauskraftwerk gehört wohl dazu.
                              Wie viele Batteriemodule sind bei dir eingebaut 3 ?

                              Was hast du für ein Typ ? S10 E Pro ? dann wären 19,5 richtig.

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

                                @ArnoD

                                Ja, S10 E Pro. Hat Platz für vier Module, es sind aber nur drei verbaut.

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

                                  @malei
                                  Stimmen dann die 15,7 kWh ?
                                  Dachte die PRO Version hat nur 13, 19.5, 26, 32.5 und 39 kWh.

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

                                    @arnod
                                    Du hast Recht. Da habe ich wohl was falsch in Erinnerung gehabt. Es sind 3 x 6,5 kWh Module, also 19,5 kWh.

                                    Im Übrigen hat das HKW irgendwann zwischen 2 und 3 in der Nacht begonnen, die 27% Notstromreserve aus dem Netz zu laden.

                                    Möglicherweise funktioniert die Steuerung ja dann doch ...

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

                                      @malei sagte in E3DC Hauskraftwerk steuern:

                                      Möglicherweise funktioniert die Steuerung ja dann doch ...

                                      Nachdem du sie eingeschaltet hast, sollte es auch so sein 😉

                                      Das Nachladen der Notstromreserve kannst du auch ein und ausschalten, je nachdem wie du es haben willst.
                                      einfach 0_userdata.0.Charge_Control.Allgemein.NotstromAusNetz auf true oder false setzen.

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

                                        @arnod

                                        Danke für deine Unterstützung! Ich werde das Ganze die nächsten Tage mal intensiver beobachten 😇

                                        1 Reply Last reply Reply Quote 0
                                        • M
                                          MaLei last edited by

                                          Hallo nochmal,

                                          nach ein paar Tagen Beobachtung, habe ich zwei Fragen:

                                          1. Warum wird Morgens nicht in den Speicher geladen?
                                          2. Warum wird der Speicher nicht voll geladen?

                                          Kann ich das auch irgendwo einstellen?

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

                                            @malei

                                            Hast du die Anleitung Charge-Control von Github gelesen?
                                            Dort ist eigentlich alles beschrieben, was man einstellen kann.
                                            Anleitung Charge-Control

                                            Je nach Einstellung wird mit „Start Regelzeitraum“ geladen.

                                            M 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            550
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            70
                                            3274
                                            1108173
                                            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