NEWS
E3DC Hauskraftwerk steuern
-
@ArnoD ja klar natürlich...Hab ich glatt übersehen.. Ja diesen Monat hat es echt gut gepasst...
-
@stevie77 nein hast es schon richtig.. Ich hatte den Wert nie angefasst, weil meine Anlage noch neu war und ich damals beim konfigurieren noch nicht wusste wie die Anlage faehrt...
-
@smartboart Ach so. Ich hab' gerade auch gemerkt, dass ich mich wieder verlesen und falsch interpretiert hatte. Ich hatte gelesen: "Unter dieseM Wert geht die autom. Prognoseberechnung nicht, auch wenn die Prognose Proplanta niedriger ist." Und für "diesen Wert" hatte ich 10 kWh (aufgrund irgendwelcher angenommenen Restriktionen im Vorhersagedienst) angenommen. Alles gut...
-
@ArnoD was hälst du davon wenn wir noch ein Script basteln welches die autonomiezeit anhand der Batterie Prozent und der entnommenen Leistung berechnet, sobald Leistung der Batterie entzogen wird waere die Anzeige und Berechnung aktiv...
haette da schon ne Idee wie ich das programmieren würde.... Gerade jetzt wo die Tage kürzer werden und ich zum 1. Mal meine notstrom reserve angekratzt habe hatte ich das mal ausgerechnet... Oder gibt es dazu schon was? Die Zeit würde natürlich mit Entnahme Leistung ständig angepasst.... -
So habs schon fertig...Wer es gerne möchte...
V0.0.1 Berechnung der E3DC Autonomiezeit der Batterie 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 kwhhier der Code
/* E3DC dynamische Autonomiezeitberechnung 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 */ //Konfiguration var logging = true; var debug = true; var Speicher = 13; // kw/h hier die Speichergröße in kwh eintragen var Reserve = 10; // % eingestellte Notstromreserve in Prozent bei E3dC oder bei E3DC Control als Ergebnis( HT Sockel / HT off HT On) in kw/h var cron1 = 10; // hier die Schedulezeit - Triggerhäufigkeit alle x Sekunde eintragen const fC = true; const Statepfad = 'javascript.' + instance + '.PVAnlage.Autonomie.'; //hier muss nichts geändert werden //Variable für Cronjob start stop var Timer = null; //Variable Hilfsmerker var Merker = true; //Variable zur Berechnung var Autonomiezeit = 0; //Berechnungsgrundlage const idBatEntnahme = 'modbus.1.holdingRegisters.40070_Batterie_Leistung'/*Batterie-Leistung in Watt*/; const idBatSoc = 'modbus.1.holdingRegisters.40083_Batterie_SOC'/*Batterie-SOC in Prozent*/; //states to create Ergebnisse const idAutonomiezeit = Statepfad + 'Autonomiezeit'; const idBatSockWh = Statepfad + 'Batteriekapazitaet'; //states create // Autonomiezeit in Vis auf Sichtbarkeit bei >0 einstellen damit nur Sichtbar bei Entnahme createState(idAutonomiezeit, 0, fC, { type: 'number', name: 'Autonomiezeit',role:'value', unit: ' h'}); createState(idBatSockWh, 0, fC, { type: 'number', name: 'Batteriekapazität',role:'value', unit: ' kWh'}); //Scriptstart Berechnung(); // Trigger Berechnung Aktueller Bat Soc in kwh on(idBatSoc, function(dp) { Berechnung(); }); //Berechnung Aktueller Bat Soc in kwh und Wert in State schreiben function Berechnung(){ var BatSoc = getState(idBatSoc).val; setState(idBatSockWh,Math.round(((Speicher/100) * BatSoc)*100)/100,true); if(logging)log(['Aktuelle Speicherkapazität ist: ', getState(idBatSockWh).val].join(' kWh')); } // Schedule Berechnung Autonomiezeit starten bei Entnahme on(idBatEntnahme, function(dp) { if(dp.state.val < 0 ){ if(Merker)schedulestart(); Merker = false; if(debug)log('Schedule starten. Aktuelle Entnahmeleistung: ' + dp.state.val +' Watt'); } }); //Berechnung Autonomiezeit function schedulestart(){ if(logging)log('Funktion Schedulestart aktiv'); var cronjob = "*/"+cron1+" * * * * *"; Timer = schedule(cronjob, function(){ if(debug)log('Schedule cronjob aktiv'); var Entnahme = getState (idBatEntnahme).val; var BatSockWh = getState (idBatSockWh).val; if(Entnahme<0){ BatSockWh = Math.round(( BatSockWh - (Speicher/100*Reserve))*100/100); if(debug)log('aktuelle Gesamtkapazität abzüglich der Notstromreserve ist: '+ BatSockWh + ' kWh.'); setTimeout(function(){ Autonomiezeit = Math.round((((BatSockWh*1000)/(Entnahme*-1)))*100/100); setState(idAutonomiezeit,Autonomiezeit,true); if(debug)log('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(logging)log('Schedule cronjob gestoppt weil keine Entnahme'); setState(idAutonomiezeit,0,true); } } }); }
-
@smartboart
Jetzt must du mich erst mal aufklären was die Autonomiezeit ist
Ist das die Zeit die ich mit der Batterie ohne Netz überbrücken kann ? -
@ArnoD Hi, ja genau.
Die Autonomiezeit ist eine bekannte Größe aus der Notstrom Branche bzw. aus dem Bereich der hoch verfügbaren Stromversorgung und ist mit der Leistung die wichtigste Größe einer USV Anlage... Usv = Unterbrechungsfreie Strom Versorgung..Es ist die Zeit bei welcher bei Stromausfall die Verbraucher weiter versorgt werden können.. .
Auf unsere Anwendung bezogen ist das die Zeit welche zur Verfügung steht um die Verbraucher aus der Batterie zu versorgen ohne das nachgeladen oder vom Netz Strom bezogen wird und eben auch bei Stromausfall.
-
@ArnoD Hab auch das Problem festgestellt, dass bei Prognoseanwahl Änderung ( Proplanta Forcast oder beide die json nicht gleich aktualisiert wird.
Konnte das Problem beheben indem ich unter function main() dem makeJson() etzwas Zeit gegeben habe..// Diagramm aktualisieren //makeJson(); setTimeout(function(){makeJson();},100);
-
@smartboart sagte in E3DC Hauskraftwerk steuern:
Konnte das Problem beheben indem ich unter function main() dem makeJson() etzwas Zeit gegeben habe..
Ja , funktioniert.
Habe ich so übernommen.Dein Script Autonomiezeit übrigens auch, allerdings habe ich für alle E3DC Modbus Themen ein eigenes Script was ich ja bereits hier schon mal eingestellt hatte.
-
@ArnoD sagte in E3DC Hauskraftwerk steuern:
Dein Script Autonomiezeit übrigens auch, allerdings habe ich für alle E3DC Modbus Themen ein eigenes Script was ich ja bereits hier schon mal eingestellt hatte.
Ja gute Idee... Da passt es besser rein... Läuft bei mir auch als eigenes Script... Werde es da aber auch rein packen..
-
@ArnoD sagte in E3DC Hauskraftwerk steuern:
Dein Script Autonomiezeit übrigens auch, allerdings habe ich für alle E3DC Modbus Themen ein eigenes Script was ich ja bereits hier schon mal eingestellt hatte.
Hallo Arno,
ich habe das Script Autonomiezeit weiter ausgebaut. Falls interesse besteht siehe unten..
Änderung:
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.V0.0.3- Autonomiezeit Anzeige in Minuten wenn < 1 Stunde . State Autonomiezeit geändert von type numnber zu string.
/* E3DC dynamische Autonomiezeitberechnung 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. */ //Konfiguration var logging = true; var debug = true; var Speicher = 13; // kw/h hier die Speichergröße in kwh eintragen var E3DCReserve = 0; // % eingestellte Notstromreserve in Prozent bei E3dC. Wenn diese nicht verwendet wird dan 0 eintragen. var cron1 = 10; // hier die Schedulezeit - Triggerhäufigkeit alle x Sekunden für Zeitberechnung eintragen var counter = 2; // Hier die Anzahl der Zeitberechnungen eintragen um einen Durchschnitswert zu ermitteln const fC = true; const Statepfad = 'javascript.' + instance + '.PVAnlage.Autonomie.'; //hier muss nichts geändert werden //Variable für Cronjob start stop var Timer = null; //Variable Hilfsmerker var Merker = true; //Variable zur Berechnung der Zeit var Autonomiezeit = 0; //Variable für Berechnung var Reserve = 0; // Variablen für Durchschnittsberechnung var count = 0; var Summe = 0; //Berechnungsgrundlage 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 idHTSockel = 'javascript.1.PVAnlage.E3DC-Control.Parameter.HTsockel'; const idHTon = 'javascript.1.PVAnlage.E3DC-Control.Parameter.HTon'; const idHToff = 'javascript.1.PVAnlage.E3DC-Control.Parameter.HToff'; //states to create Ergebnisse const idAutonomiezeit = Statepfad + 'Autonomiezeit'; const idBatSockWh = Statepfad + 'Batteriekapazitaet'; //states create // Autonomiezeit in Vis auf Sichtbarkeit bei >0 einstellen damit nur Sichtbar bei Entnahme createState(idAutonomiezeit, null, fC, { type: 'string', name: 'Autonomiezeit',role:'text'}); createState(idBatSockWh, 0, fC, { type: 'number', name: 'Batteriekapazität',role:'value', unit: ' kWh'}); if(fC && logging)log('force Creation Aktiv States angelegt oder überschrieben'); //Scriptstart Berechnung(); // Trigger Berechnung Aktueller Bat Soc in kwh on(idBatSoc, function(dp) { Berechnung(); }); //Berechnung Aktueller Bat Soc in kwh und Wert in State schreiben function Berechnung(){ var BatSoc = getState(idBatSoc).val; setState(idBatSockWh,Math.round(((Speicher/100) * BatSoc)*100)/100,true); if(logging)log('Aktuelle 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('Aktuelle Entnahmeleistung: ' + dp.state.val +' Watt'); } }); //Berechnung Autonomiezeit function schedulestart(){ if(debug)log('Funktion Schedulestart aktiv'); var cronjob = "*/"+cron1+" * * * * *"; Timer = schedule(cronjob, function(){ if(debug)log('Schedule cronjob aktiv'); var Entnahme = getState (idBatEntnahme).val; var BatSockWh = getState (idBatSockWh).val; var Sockel = getState (idHTSockel).val; var HToff = getState (idHToff).val; var HTon = getState (idHTon).val; if (HTon === HToff && E3DCReserve === 0){ Reserve=Sockel; if(debug)log('Die Notstrom Reserve entsprichte der Einstellung in E3DC Control und beträgt: ' + Reserve +' %'); } if (E3DCReserve >0){ Reserve = E3DCReserve; if(debug)log('Die Notstrom Reserve entspricht der User Konfig Einstellun und beträgt'+ Reserve + ' %'); } if (HTon != HToff && E3DCReserve === 0){ Reserve=0; if(debug)log('Es wird keine Notstrom Reserve bei der Berechnung berücksichtigt. Wert auf ' + Reserve +' % gesetzt.'); } setTimeout(function(){ if(Entnahme<0){ BatSockWh = ( BatSockWh - (Speicher/100*Reserve)); if(debug)log('aktuelle Gesamtkapazität abzüglich der Notstromreserve ist: '+ BatSockWh + ' kWh.'); setTimeout(function(){ Autonomiezeit = (((BatSockWh*1000)/(Entnahme*-1))); //setState(idAutonomiezeit,Autonomiezeit,true); Durchschnitt(); if(debug)log('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(logging)log('Schedule cronjob gestoppt weil keine Entnahme'); setState(idAutonomiezeit,'0',true); } } },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(Zeit>=1){ setState(idAutonomiezeit,+ Math.round(Zeit*100)/100 +' h',true); if(logging)log('Autonomiezeit in h beträgt: '+ Math.round(Zeit*100)/100 + ' h'); } if(Zeit<1){ setState(idAutonomiezeit, + Math.round((Zeit*60)*100/100)+' min',true); if(logging)log('Autonomiezeit in min beträgt: '+Math.round((Zeit*60)*100/100) +' min.'); } count=0; Summe=0; if(debug)log('Reset: Count = '+ count+ ' Summe = ' + Summe); },100); } }
-
Kann mir jemand erklaeren warum ich bei folgenden Einstellungen noch einspeise und nicht alles lade?
-
@smartboart
Gute Frage, eigentlich sollte alles geladen werden, bis der SoC 90% erreicht.
Ausser E3DC-Control läuft nicht mehr oder die e3dc-config.txt wurde nicht geändert oder eingelesen.
Hier wäre die LOG-Ausgabe von E3DC-Control interessant. -
@ArnoD Hi Arno,
ja evtl. lief E3DC Control nicht, ist sogar eher wahrscheinlich. ...keine Ahnung....ich war zu dem Zeitpunkt nicht zu Hause um das am Gerät zu kontrollieren....Schaue mal ob ich die logs zu dem zeitpunkt von deinem script finde...Aber die Textdatei wurde sauber beschrieben und eingelesen, da ich es es mehrmals manuell durchgeführt habe. Deshalb helfen die logs eher nicht weiter...Ich habe den Host mal neu gestartet und beobachte weiter..
evtl stelle ich mal auf debug... -
@ArnoD Hi Arno, heute das Selbe Verhalten...
Er3DC Control läuft aber, da die anlage reagiert, wenn ich das Programm wechsle.Muss also an den eingestellten Parametern liegen. Wird bei alles Laden auch mit einer Kurve geladen? Also als Ergebnis aus unterer und oberer Ladekorridor.. Das hatte nämlich nix geändert...
-
Seid ihr auch betroffen von der starken Kapazitätsreduktion der Batterien seit ein paar Tagen? Erst nach Sonnenuntergang der Sprung des SoC um mind. 5% nach oben und nun sind meine Batterien plötzlich viel kleiner geworden...
Ich hab's eben mal ausgerechnet. Bei momentanem Stand wären meine Batterien nach nur eineinhalb Jahren ein Fall für den Austausch auf Garantie, sie sind momentan deutlich unter der Degradation von 80 % nach 10 Jahren. 13 kWh abzüglich Entladetiefe = 11,7 kWh. 80 % laut Garantie zu akzeptierende Degradation = 9,36 kWh. Ich kann teilweise nur noch 7,7 kWh reinladen. Das schreit nach Austausch! So frech und offensichtlich können sie nicht vorgehen, das muss (hoffentlich) ein Fehler sein...
-
@stevie77 Bei der Batterie Kapazität würde ich eher auf die Entladung achten.
hast 8,24 kwh entnommen und bist bei 40 %.. 8,24 / 60 * 100 sind 13,73 kwh Gesamtkapazität.Ich gebe dir Recht, die Ladung von 7,69 kwh von 0 auf 100 sieht komisch aus. vlt ein Rechenfehler oder Darstellungsfehler...
Vlt. wird aber auch nur die Ladung von E3DC angezeigt und die restlichen kwh werden von extern geladen....Fakt ist, Entnehmen kannst offensichtlich die volle Kapazität von 13kw/h..
Rechne doch einfach mal alle deine Werte aus irgendwo müssen die fehlenden kw/h ja herkommen...
-
@smartboart sagte in E3DC Hauskraftwerk steuern:
Fakt ist, Entnehmen kannst offensichtlich die volle Kapazität von 13kw/h..
Ich versteh' die Rechnung nicht ganz, aber richtig kann sie nicht sein, da ich per se maximal 11,5 kWh aus der Batterie entnehmen kann, schon immer wegen 90 % Entladetiefe. Empirisch konnte ich vor wenigen Monaten noch deutlich mehr (11,4 kWh) in die Batterie laden, so wie man es erwarten konnte:
Zum Vergleich nochmal jetzt:
Und gefühlt kam ich da auch viel weiter durch die Nacht. Bei nur minimal niedrigerem Verbrauch im Haus ist auch der Abfall der Kurve viel flacher. Viele andere Nutzer in der Facebook-Gruppe haben dasselbe Problem. Ich glaube da stimmt was nicht...
-
@smartboart sagte in E3DC Hauskraftwerk steuern:
@ArnoD Hi Arno, heute das Selbe Verhalten...
Er3DC Control läuft aber, da die anlage reagiert, wenn ich das Programm wechsle.Muss also an den eingestellten Parametern liegen. Wird bei alles Laden auch mit einer Kurve geladen? Also als Ergebnis aus unterer und oberer Ladekorridor.. Das hatte nämlich nix geändert...
Nein, entscheident ist der Parameter "ladeschwelle", bis zu diesem Wert wird sofort mit der gesamten überschüssigen PV-Leistung geladen.Parameter „unload" hat Vorrang vor "ladeschwelle", d.h. "ladeschwelle" wird ignoriert, falls "ladeschwelle" größer sein sollte als „unload“.
Was bei dir ja auch nicht der Fall ist, da hier 100% eingestellt waren und ladeschwelle 90%. -
@stevie77 sagte in E3DC Hauskraftwerk steuern:
Ich versteh' die Rechnung nicht ganz, aber richtig kann sie nicht sein, da ich per se maximal 11,5 kWh aus der Batterie entnehmen kann
Nun ja die Rechnung stimmt schon...
in dem Rechenbeispiel hast du 8,24 kwh aus der Baterrie entnommen und bist bei 40 %..
Nach Adam Riese hast du 60 % Entnommen.
Also 8,24 = 60 %
40% hast du noch drinne.
40% Entsprechen 5,49kwh
Zusammen sind das 13,73kwh.Die Rechnung ist simpler 3 Satz.
Anders gefragt.
8,24 entspricht 60% Wieviel ist 100%?
Rechenweg:
8,24 / 60 * 100 sind 13,73 kwh Gesamtkapazität.