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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    E3DC Hauskraftwerk steuern

    This topic has been deleted. Only users with topic management privileges can see it.
    • G
      goelectric @stef99 last edited by

      @stef99 Die Anfrage hatte ich ausgelöst!
      Ebenfalls sorry für den Beitrag.

      1 Reply Last reply Reply Quote 0
      • D
        DA_HOOD last edited by

        Bezüglich der angezeigten verbleibenden Speicherladung wollte ich noch kurz die Rückmeldung geben, dass es nun wieder nicht „richtig“ angezeigt wird. Mir wird ein Wert von 19,8 kWh bei vollem Akku angezeigt, bei 100% RSoC und 90% Systemeffizienz sowie 22344 Wh Kapazität.

        Ein Problem habe ich noch dazu:
        Der Kampf zwischen Charge Control und dem Heizstab.

        Da E3DC den Überschuss ja immer erst bei vollem Akku freigibt, habe ich für den Überschuss Heizstab ein Kostal Energy Meter direkt hinter dem Stromzähler der den AC-Thor steuert (4KW Heizstab).

        Wenn nun E3DC die Laderegelung übernimmt, funktioniert alles einwandfrei. (z.B. bei der Ladung von 0-60% oder bei deaktiviertem ChargeControl)
        Wenn Charge Control am Steuer ist, streiten sich der AC Thor und Charge Control plötzlich um den Strom. Wenn z.B. nur 3 KW Überschuss da ist, und der Strom nicht für beide gleichzeitig ausreicht, springt das im Sekundentakt hin und her zwischen Akku laden und Heizstab. Genau sowas wollen wir ja nicht. Wo liegt also der Unterschied ob e3dc selbst lädt oder Charge Control? Scheinbar ist die Priorität der Stromverteilung hier anders. Wie kriege ich das Problem hier gelöst?

        A 2 Replies Last reply Reply Quote 0
        • A
          ArnoD @DA_HOOD last edited by

          @da_hood sagte in E3DC Hauskraftwerk steuern:

          Wo liegt also der Unterschied ob e3dc selbst lädt oder Charge Control?

          Wie du ja selber bemerkt hast, wir bei der Regelung E3DC alles an Überschuss in die Batterie geladen, somit bleibt für deinen Heizstab nichts mehr übrig. Bei ChargeControl wird berechnet, wie viel für die Batterieladung benötigt wird und der Rest wird eingespeist oder eben für deinen Heizstab freigegeben. Wenn der Heizstab jetzt aber seine Leistung nicht anpasst, streiten sich zwei um den Überschuss.

          Es gibt auf Github deswegen ein eigenes Script "my_pv Heizstab" für den E3DC Heizstab, wo die Ladeleistung vom Heizstab an ChargeControl angepasst wird. Eventuell kannst du da was verwenden.

          Zu dem Thema Heizstab kann ich dir aber nicht helfen, da ich keinen habe.

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

            @da_hood sagte in E3DC Hauskraftwerk steuern:

            Bezüglich der angezeigten verbleibenden Speicherladung wollte ich noch kurz die Rückmeldung geben, dass es nun wieder nicht „richtig“ angezeigt wird. Mir wird ein Wert von 19,8 kWh bei vollem Akku angezeigt, bei 100% RSoC und 90% Systemeffizienz sowie 22344 Wh Kapazität.

            Um den Wert 0_userdata.0.Charge_Control.Allgemein.Batteriekapazität_kWh zu berechnen, werden folgende Objekt ID verwendet:
            ASOC_Bat_Pro = e3dc-rscp.0.BAT.BAT_0.ASOC
            Kapa_Bat_Wh = e3dc-rscp.0.BAT.BAT_0.SPECIFIED_CAPACITY (Wenn es Bat_1 gibt, dann wird hier noch e3dc-rscp.0.BAT.BAT_1.SPECIFIED_CAPACITY addiert.)
            Entladetiefe_Pro = 0_userdata.0.Charge_Control.USER_ANPASSUNGEN.10_maxEntladetiefeBatterie
            Systemwirkungsgrad_Pro = 0_userdata.0.Charge_Control.USER_ANPASSUNGEN.10_Systemwirkungsgrad

            Es werden folgende Formeln verwendet:
            Kapa_Bat_Wh = Kapa_Bat_Wh * (Entladetiefe_Pro/100);
            Speichergroesse_kWh = round(((Kapa_Bat_Wh/100)ASOC_Bat_Pro)/1000,0);
            Math.round((Speichergroesse_kWh
            (Systemwirkungsgrad_Pro/100) * BatSoc))/100

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

              @arnod

              Hast du einen Link zu dem Heizstab Script? Ich finde es leider nicht, nur die generelle Einbindung des AC- Thor in den Iobroker.

              Warum bei dir da ein anderer Wert herauskommt als bei mir weis ich nicht. Ich hab dir Variablen jetzt auch alle via Blockly berechnen lassen, und da kommt was anderes heraus 😅

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

                @da_hood sagte in E3DC Hauskraftwerk steuern:

                Hast du einen Link zu dem Heizstab Script?

                https://github.com/ArnoD15/iobroker_E3DC

                D 2 Replies Last reply Reply Quote 0
                • D
                  DA_HOOD @ArnoD last edited by

                  @arnod

                  Achsoo, das ist da mit drin bei dir …. Ja da kann ich lange wo anders suchen 😂…
                  Sorry und Danke!

                  1 Reply Last reply Reply Quote 0
                  • P
                    psrelax last edited by

                    @ArnoD
                    Das Script funktioniert bisher einwandfrei. 🙂

                    Ich würde gerne auch einmal manuell die Speicherladung anstoßen, schaffe es manchmal mit der Veränderung der Konfiguration aber nicht.

                    Ist es möglich einen Haken (Batterie manuell laden) einzubauen, der mir die Möglichkeit gibt, unabhängig vom Preis einfach zu laden?
                    Aktuell ist es ja so, dass der Haken "Batterie laden ein" automatisch wieder vom Script zurück gestellt wird, außer ich beende das Script komplett.
                    Danke dir schonmal.

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

                      @psrelax
                      Möglich ist alles 🙂
                      Ich schaue mir das mal an.

                      Nachtrag:
                      Ich kann dir eine neue Objekt ID anlegen "Tibber_manuell" oder so ähnlich und damit die Funktion tibberSteuerungHauskraftwerk() nicht mehr aufrufen.
                      Das würde aber bedeuten, dass vom Skript nichts mehr gesteuert wird und du verantwortlich bist die Ladefreigabe zu setzen und wieder zu entfernen, wenn nicht mehr geladen werden soll.
                      Wenn dir das reicht, kann ich es schnell umsetzen.

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

                        @arnod
                        Ich denke das müsste passen. 🙂

                        Nachtrag:
                        Ich will nochmal kurz auf den Grund meiner Anfrage eingehen.
                        Ich hatte es jetzt schon 2 mal, dass am Stromnetz in der nähe gearbeitet wurde und das Haus vom Strom getrennt wurde (angekündigt). Darum würde ich gerne vorher den Speicher voll laden, um die Zeit auch bei wenig PV-Ertrag überbrücken zu können.

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

                          @arnod

                          Ich bin jetzt immer noch verwirrt, das Script für den Heizstab hast aber schon du geschrieben oder?

                          Ich habe da leider viele Fehler:

                          javascript.0 18:43:45.243 error script.js.common.Heizstab: State Wallbox_Leistung is null or undefined
                          javascript.0 18:43:45.244 error script.js.common.Heizstab: State LeistungHeizstab is null or undefined
                          javascript.0 18:43:45.244 error script.js.common.Heizstab: State IstTempHeizstab is null or undefined
                          javascript.0 18:43:45.244 error script.js.common.Heizstab: State MaxTempHeizstab is null or undefined
                          javascript.0 18:43:45.244 error script.js.common.Heizstab: State SollLeistungHeizstab is null or undefined
                          javascript.0 18:43:45.244 error script.js.common.Heizstab: State LeistungWP is null or undefined
                          javascript.0 18:43:45.244 error script.js.common.Heizstab: Fehler bei der Aktualisierung der Heizstab-Leistung:
                          javascript.0 18:43:45.244 error script.js.common.Heizstab: Error: One or more states are null or undefined at fetchAndUpdateHeizstabLeistung (script.js.common.Heizstab:82:19) at runNextTicks (node:internal/process/task_queues:65:5) at processImmediate (node:internal/timers:479:9)
                          Modbus.jpg

                          Ich komme nicht drauf wo der Fehler liegt. Der Adapter ist modbus1 wie im Script ja hinterlegt, und die Werte sind eigentlich da ...

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

                            @da_hood

                            Das Script ist nicht von mir, ich habe es aber angepasst, wenn Fehler aufgezeigt wurden.

                            Deine Fehlermeldungen kommen einfach daher, dass du die ganzen Pfade im Script nicht an dein System angepasst hast.
                            In dem Script musst du die Anpassungen direkt im Script machen.
                            Also nicht nur "modbus.1" sondern auch den Rest vom Pfad prüfen.
                            const sID_LeistungHeizstab_W = ${instanzHeizstab_Modbus}.holdingRegisters.1000_Power; // Current power consumption of heating element in W

                            müsste bei dir so aussehen:
                            const sID_LeistungHeizstab_W = ${instanzHeizstab_Modbus}.holdingRegisters.1.1000_Power; // Current power consumption of heating element in W

                            Da fehlt z.B ".1" im Pfad.

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

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

                              • (Issues #17) Die Objekt ID 0_userdata.0.Charge_Control.Allgemein.Autonomiezeit wurde aufgeteilt in Autonomiezeit und AutonomiezeitDurchschnitt und dafür eine neue Objekt ID 0_userdata.0.Charge_Control.Allgemein.AutonomiezeitDurchschnitt angelegt.

                              Bitte erst nach dem Update vom e3dc-rscp Adapter auf Version 1.4.1 verwenden.

                              In VIS muss die View "E3DC_Uebersicht" angepasst werden, wenn man wie bis jetzt beide Werte angezeigt haben will. Auf Github gibt es dafür die Importdatei iobroker_VIS_View_E3DC_Uebersicht.js

                              P 1 Reply Last reply Reply Quote 1
                              • A
                                ArnoD last edited by

                                Tibber Skript,
                                Version: 1.3.16 auf Github hochgeladen.

                                Änderungen:

                                • Neue Objekt ID 0_userdata.0.TibberSkript.USER_ANPASSUNGEN.ScriptAktiv um das Script in VIS zu stoppen und wieder zu aktivieren. Damit ist es möglich manuell die Batterie zu laden, ohne dass vom Script die Anwahl "BatterieLaden" wieder geändert wird.
                                1 Reply Last reply Reply Quote 1
                                • D
                                  DA_HOOD @ArnoD last edited by DA_HOOD

                                  @arnod said in E3DC Hauskraftwerk steuern:

                                  @da_hood

                                  Das Script ist nicht von mir, ich habe es aber angepasst, wenn Fehler aufgezeigt wurden.

                                  Deine Fehlermeldungen kommen einfach daher, dass du die ganzen Pfade im Script nicht an dein System angepasst hast.
                                  In dem Script musst du die Anpassungen direkt im Script machen.
                                  Also nicht nur "modbus.1" sondern auch den Rest vom Pfad prüfen.
                                  const sID_LeistungHeizstab_W = ${instanzHeizstab_Modbus}.holdingRegisters.1000_Power; // Current power consumption of heating element in W

                                  müsste bei dir so aussehen:
                                  const sID_LeistungHeizstab_W = ${instanzHeizstab_Modbus}.holdingRegisters.1.1000_Power; // Current power consumption of heating element in W

                                  Da fehlt z.B ".1" im Pfad.

                                  Vielen Dank, das wusste ich nicht bin davon ausgegangen dass es passt weil ja weiter oben bereits modbus1 definiert wurde. Leider geht es aber immer noch nicht wegen der Wallbox. Ich habe keine Wallbox und er will da unbedingt einen Wert. Leer lassen geht nicht. Ein "Fake" Objekt mit Wert "0" funktioniert auch nicht. Und mir ist aufgefallen dass Charge Control bei aktuell berechneter Ladeleistung immer über 12000 Watt meldet obwohl der Akku bereits voll ist. Das wird auch zu Fehlberechnungen führen da dies ja mitgerechnet wird?

                                  Was kann ich da machen?

                                  const sID_Wallbox_Leistung = modbus.1.inputRegisters.120_Leistung_aktuell; // Wallbox power

                                  @arnod said in E3DC Hauskraftwerk steuern:

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

                                  • (Issues #17) Die Objekt ID 0_userdata.0.Charge_Control.Allgemein.Autonomiezeit wurde aufgeteilt in Autonomiezeit und AutonomiezeitDurchschnitt und dafür eine neue Objekt ID 0_userdata.0.Charge_Control.Allgemein.AutonomiezeitDurchschnitt angelegt.

                                  Bitte erst nach dem Update vom e3dc-rscp Adapter auf Version 1.4.1 verwenden.

                                  In VIS muss die View "E3DC_Uebersicht" angepasst werden, wenn man wie bis jetzt beide Werte angezeigt haben will. Auf Github gibt es dafür die Importdatei iobroker_VIS_View_E3DC_Uebersicht.js

                                  Mega, danke dir fürs umsetzen!! 🙂

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

                                    @arnod sagte in E3DC Hauskraftwerk steuern:

                                    Danke fürs schnelle umsetzen 🙂

                                    iobroker_VIS_View_E3DC_Uebersicht.js

                                    Ist aber nicht aktuell vorhanden.

                                    Noch eine Bitte habe ich.
                                    Kannst du bitte z.B. den Programmablauf als "Info" ausgeben, damit in den Logs nicht immer "Fehler" gekennzeichnet werden?

                                    Nachtrag:
                                    Ich habe das Script jetzt einmal getestet. Funktioniert soweit einwandfrei. 👍
                                    Kann es sein, dass die maximale Ladeleistung, die man einstellen kann mittlerweile generell ignoriert wird?
                                    Auch wenn ich die Script Steuerung an lasse und kurz die Ladung starte (hält ja ca. 1 Minute), startet die Ladung immer mit voller Leistung.

                                    A 3 Replies Last reply Reply Quote 0
                                    • A
                                      ArnoD @DA_HOOD last edited by

                                      @da_hood
                                      Da musst du das Script an deine Bedürfnisse anpassen 🙂

                                      Hier mal ohne Wallbox:

                                      // Script my-pv Heizstab Version 1.0.2 
                                      // defintion which instances has to be used 
                                      const instanzE3DC_RSCP       = 'e3dc-rscp.0' 
                                      const instanzHeizstab_Modbus = 'modbus.1'
                                      
                                      // E3DC Komponenten Definition 
                                      const sID_PV_Leistung       = `${instanzE3DC_RSCP}.EMS.POWER_PV`; // PV power
                                      const sID_Netz_Leistung     = `${instanzE3DC_RSCP}.EMS.POWER_GRID`; // Grid power
                                      const sID_Batterie_Leistung = `${instanzE3DC_RSCP}.EMS.POWER_BAT`; // Battery power
                                      const sID_Power_Mode        = `${instanzE3DC_RSCP}.EMS.MODE`; // Power mode state
                                      const sID_Batterie_Status   = `${instanzE3DC_RSCP}.EMS.BAT_SOC`; // Battery status state
                                      const sID_Bat_Charge_Limit  = `${instanzE3DC_RSCP}.EMS.SYS_SPECS.maxBatChargePower`;// Batterie Ladelimit
                                      
                                      // selbst definierte Variablen
                                      const sID_Eigenverbrauch    = '0_userdata.0.Charge_Control.Allgemein.Hausverbrauch'; 					// Household consumption power
                                      const sID_M_Power_W         = '0_userdata.0.Charge_Control.Allgemein.Akt_Berechnete_Ladeleistung_W'; 	// Calculated required charging power
                                      const sID_LeistungLW_Pumpe_W = 'modbus.2.holdingRegisters.40104_Leistung_aller_WP';                     // Pfad zu den Leistungswerte Wärmepumpe eintragen ansonsten leer lassen
                                      
                                      // Heistab Modbus Variablen 
                                      const sID_LeistungHeizstab_W        = `${instanzHeizstab_Modbus}.holdingRegisters.1000_Power`; // Current power consumption of heating element in W
                                      const sID_Soll_LeistungHeizstab_W   = `${instanzHeizstab_Modbus}.holdingRegisters.1000_Power`; // Target heating element power
                                      const sID_IstTempHeizstab           = `${instanzHeizstab_Modbus}.holdingRegisters.1001_Temp1`; // Current temperature at the heating element
                                      const sID_MaxTempHeizstab           = `${instanzHeizstab_Modbus}.holdingRegisters.1002_WW1_Temp_max`; // Maximum temperature
                                      
                                      // Heistab states manuell zu erstellen für Statistikwerte
                                      const sID_previousHeizstabLeistung_W    = '0_userdata.0.Heizung.E3DC.previousHeizstabLeistung'; // Previous heating element load power
                                      const sID_Heizstab_Gesamtenergie        = '0_userdata.0.Heizung.E3DC.Heizstab_Gesamtenergie'; // Cumulative energy
                                      const sID_Heizstab_LetzteAktualisierung = '0_userdata.0.Heizung.E3DC.Heizstab_LetzteAktualisierung'; // Last update
                                      
                                      // Defintion von Heizstabparametern und Sicherheitsmechanismen
                                      const debounceInterval          = 3000; // Minimum interval between updates in milliseconds
                                      const temperatureBuffer         = 3;    // Buffer in degrees Celsius to prevent frequent on/off cycling
                                      const minimumHeizstabLeistung   = 300;  // Minimum power for heating element
                                      const sicherheitspuffer         = 300;  // Safety buffer to avoid frequent switching
                                      const MaximalLeistungHeizstab_W = 3000; // Maximum power in watt of the heating element
                                      
                                      let debounceTimer;
                                      
                                      async function fetchAndUpdateHeizstabLeistung() {
                                          try {
                                              // Zustände abfragen
                                              const states = await Promise.all([
                                                  getStateAsync(sID_Netz_Leistung),
                                                  getStateAsync(sID_LeistungHeizstab_W),
                                                  getStateAsync(sID_Eigenverbrauch),
                                                  getStateAsync(sID_M_Power_W),
                                                  getStateAsync(sID_Batterie_Leistung),
                                                  getStateAsync(sID_IstTempHeizstab),
                                                  getStateAsync(sID_MaxTempHeizstab),
                                                  getStateAsync(sID_PV_Leistung),
                                                  getStateAsync(sID_Soll_LeistungHeizstab_W),
                                                  getStateAsync(sID_Power_Mode),
                                                  getStateAsync(sID_Batterie_Status),
                                                  getStateAsync(sID_Bat_Charge_Limit),
                                      			sID_LeistungLW_Pumpe_W ? getStateAsync(sID_LeistungLW_Pumpe_W) : Promise.resolve({ val: 0 })
                                              ]);
                                      
                                              const [
                                                  Netz_Leistung, LeistungHeizstab, Eigenverbrauch, M_Power, Batterie_Leistung,
                                                  IstTempHeizstab, MaxTempHeizstab, PV_Leistung, SollLeistungHeizstab, 
                                                  Power_Mode, Batterie_Status, Bat_Charge_Limit, LeistungWP
                                              ] = states;
                                      
                                              // Ensure all states are fetched correctly
                                              const stateNames = [
                                                  'Netz_Leistung', 'LeistungHeizstab', 'Eigenverbrauch', 'M_Power', 'Batterie_Leistung',
                                                  'IstTempHeizstab', 'MaxTempHeizstab', 'PV_Leistung', 'SollLeistungHeizstab',
                                                  'Power_Mode', 'Batterie_Status', 'Bat_Charge_Limit', 'LeistungWP'
                                              ];
                                      
                                              stateNames.forEach((name, index) => {
                                                  if (states[index] === null || states[index] === undefined) {
                                                      console.error(`State ${name} is null or undefined`);
                                                  }
                                              });
                                      
                                              if (states.some(state => state === null || state === undefined)) {
                                                  throw new Error('One or more states are null or undefined');
                                              }
                                      
                                              // Werte extrahieren
                                              let [
                                                  NetzLeistung_W, LeistungHeizstab_W, Hausverbrauch_W, M_Power_W, BatterieLeistung_W,
                                                  IstTemp, MaxTemp, PV_Leistung_W, SollLeistungHeizstab_W, 
                                                  PowerMode, BatterieStatus, Charge_Limit, LeistungWP_W
                                              ] = states.map(state => state.val);
                                      
                                              console.log(`Zustände abgefragt: Netz=${NetzLeistung_W}W, PV=${PV_Leistung_W}W, Hausverbrauch=${Hausverbrauch_W}W, LeistungHeizstab=${LeistungHeizstab_W}W, Batterie=${BatterieLeistung_W}W, IstTemp=${IstTemp}°C, MaxTemp=${MaxTemp}°C, SollLeistungHeizstab=${SollLeistungHeizstab_W}W, PowerMode=${PowerMode}, BatterieStatus=${BatterieStatus}, Charge_Limit=${Charge_Limit}, M_Power_W=${M_Power_W}W, LeistungWP = ${LeistungWP}W`);
                                      
                                              // Bedingungen prüfen
                                              if (PowerMode === 2) {
                                                  if (Charge_Limit === M_Power_W && NetzLeistung_W < -Math.abs(minimumHeizstabLeistung + 500)) {
                                                      M_Power_W = BatterieLeistung_W;
                                                  }
                                              } else {
                                                  M_Power_W = 0;
                                              }
                                      
                                              // Verfügbaren Überschuss berechnen
                                              let verfuegbarerUeberschuss_W = PV_Leistung_W - Hausverbrauch_W - M_Power_W- LeistungWP_W - sicherheitspuffer; // Verfügbarer Überschuss unter Berücksichtigung von PV-Leistung, Hausverbrauch, Wärmepumpe, Soll-Ladeleistung und Sicherheitspuffer
                                              verfuegbarerUeberschuss_W = Math.max(verfuegbarerUeberschuss_W, 0); // Stellen Sie sicher, dass der Wert nicht negativ wird
                                      
                                              if (M_Power_W !== 0) {
                                                  verfuegbarerUeberschuss_W -= sicherheitspuffer;
                                              }
                                      
                                              // Heizstab-Leistung bestimmen
                                              let HeizstabLadeleistung_W = 0;
                                              if (IstTemp < MaxTemp - temperatureBuffer && verfuegbarerUeberschuss_W >= minimumHeizstabLeistung) { // Stellen Sie sicher, dass die Temperaturbedingung mit Puffer erfüllt ist und die Mindestleistung verfügbar ist
                                                  HeizstabLadeleistung_W = Math.min(verfuegbarerUeberschuss_W, MaximalLeistungHeizstab_W); // Begrenzen Sie auf 3000W oder verfügbare Energie
                                              } else {
                                                  HeizstabLadeleistung_W = 0; // Heizstab ausschalten, wenn die Bedingungen nicht erfüllt sind
                                              }
                                              await setStateAsync(sID_Soll_LeistungHeizstab_W, HeizstabLadeleistung_W);
                                      
                                              // Aktualisiere den vorherigen Wert der Heizstabladeleistung
                                              await setStateAsync(sID_previousHeizstabLeistung_W, HeizstabLadeleistung_W);
                                      
                                              // Kumulierte Energieberechnung, Aktualisierung und Logging
                                              const jetzt = Date.now();
                                              const letzteAktualisierung = await getStateAsync(sID_Heizstab_LetzteAktualisierung);
                                              const vergangeneZeitInStunden = (jetzt - (letzteAktualisierung.val || 0)) / (1000 * 60 * 60);
                                              const verbrauchteEnergie = (LeistungHeizstab_W * vergangeneZeitInStunden) / 1000; // In kWh umrechnen
                                              const aktuelleGesamtenergie = (await getStateAsync(sID_Heizstab_Gesamtenergie)).val || 0;
                                              const neueGesamtenergie = aktuelleGesamtenergie + verbrauchteEnergie;
                                      
                                              await setStateAsync(sID_Heizstab_Gesamtenergie, neueGesamtenergie);
                                              await setStateAsync(sID_Heizstab_LetzteAktualisierung, jetzt);
                                      
                                              console.log(`Update: Netz=${NetzLeistung_W}W, PV=${PV_Leistung_W}W, Heizstab=${HeizstabLadeleistung_W}W, Überschuss=${verfuegbarerUeberschuss_W}W`);
                                          } catch (error) {
                                              // @ts-ignore
                                              console.error('Fehler bei der Aktualisierung der Heizstab-Leistung:', error.message);
                                              console.error(error.stack);
                                          }
                                      }
                                      
                                      function debounceUpdate() {
                                          if (debounceTimer) return;
                                          fetchAndUpdateHeizstabLeistung();
                                          debounceTimer = setTimeout(() => {
                                              debounceTimer = null;
                                          }, debounceInterval);
                                      }
                                      
                                      // Register listeners for relevant state changes
                                      const ids = [
                                          sID_PV_Leistung,
                                          sID_Netz_Leistung,
                                          sID_Eigenverbrauch,
                                          sID_Batterie_Leistung,
                                          sID_LeistungHeizstab_W,
                                          sID_M_Power_W,
                                          sID_Power_Mode,
                                          sID_Batterie_Status
                                      ];
                                      
                                      ids.forEach(id => {
                                          on({ id, change: "ne" }, debounceUpdate);
                                          console.log(`Listener registered for ${id}`);
                                      });
                                      
                                      // Initial call
                                      fetchAndUpdateHeizstabLeistung();
                                      
                                      D 1 Reply Last reply Reply Quote 0
                                      • A
                                        ArnoD last edited by

                                        @da_hood sagte in E3DC Hauskraftwerk steuern:

                                        Und mir ist aufgefallen dass Charge Control bei aktuell berechneter Ladeleistung immer über 12000 Watt meldet obwohl der Akku bereits voll ist. Das wird auch zu Fehlberechnungen führen da dies ja mitgerechnet wird?

                                        Das Spielt keine Rolle, da dieser Wert nur verwendet wird, wenn e3dc-rscp.0.EMS.MODE = 2 ist.

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

                                          @psrelax sagte in E3DC Hauskraftwerk steuern:

                                          Ist aber nicht aktuell vorhanden.

                                          Die ist bereits etwas älter, weil ich die View schon zum Testen mal geändert hatte.

                                          Kannst du bitte z.B. den Programmablauf als "Info" ausgeben, damit in den Logs nicht immer "Fehler" gekennzeichnet werden?

                                          Fehler wäre ja error und nicht warn. Aber das kann ich jetzt generell deaktivieren, war nur zum Fehlersuchen wichtig.

                                          Kann es sein, dass die maximale Ladeleistung, die man einstellen kann mittlerweile generell ignoriert wird?
                                          Auch wenn ich die Script Steuerung an lasse und kurz die Ladung starte (hält ja ca. 1 Minute), startet die Ladung immer mit voller Leistung.

                                          Sollte nicht sein. Ist es auch in der aktuellen Version von Charge-Control der Fall?
                                          Muss ich mir bei Gelegenheit mal ansehen.

                                          Nachtrag:
                                          Habe es bei mir getestet und konnte dein Problem nicht nachstellen. Bei mir wird die Eingestellte max. Ladeleistung berücksichtigt.

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


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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            615
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            70
                                            3333
                                            1364570
                                            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