NEWS
E3DC Hauskraftwerk steuern
-
@stevie77 sagte in E3DC Hauskraftwerk steuern:
Netzeinspeisung sehr exakt ist, wie bei der Erzeugung, aber der Hausverbrauch sehr daneben liegt (11,4 kWh im Portal zu jetzt schon 14,8 kWh an diesem Tag).
Was sagt der Wert bzw. Unterschied am naechsten Tag... Musst dein Wert mal wegschschreiben um 0 Uhr bevor auf 0 zurueck gesetzt wird und dann am nächsten Tag vergleichen..
Nach ein paar Tagen lässt sich ein aussagekräftiger Faktor ermitteln.Ich könnte mir vorstellen, dass e3dc hier einen Faktor verwendet, welcher die Verlustleistung herausrechnet ( Wirkungsgrad der Anlage ). Nicht alle Werte werden tatsächlich gemessen, es gibt ja nur das eine modbus Messgeraet am Eingang.. . Der Haus Verbrauch wird nicht gemessen..sondern aus Erzeugungsdaten des Wechselrichter und den Messungen des integrierten Modbus Messgeraet errechnet.. Die Erzeugungsdaten in Watt werden von e3dc mit Wechselrichterverlusten angegeben... Das kann ich sagen, weil ich ein messgeraet / Erzeugung hinter dem wechselrichter nachgerüstet habe.
Ich habe schon früher mein Hausverbrauch geloggt und kenne meine Watt und Ampere Werte... Was e3dc für den Hausverbrauch in Watt anzeigt ist zu hoch...demnach wird auch ein erhöhter Verbrauch mit meiner script Rechnung berechnet..
Genau aus dem Grund messe ich mit nem eigenen modbus Messgeraet am Wechselrichterausgang und logge und protokolliere damit, um meinen Hausverbrauch zu ermitteln.
Dieser Leistungswert / Watt Wert des Hausverbrauch von e3dc ist aus dem Grund meiner Meinung nach fuer meine Berechnung so nicht geignet.
Musst mal beobachten ob sich ein Faktor ermitteln lässt... Schätze mal der errechnete wert x 0.8....
Wenn du mal ein paar tage die Werte vergleichst lässt sich bestimmt ein genauer Faktor ermitteln.
E3DC Wert / errechneter Script Wert = 0,77 in deinem oben beschrieben Fall...
Wenn sich die 0,77 immer einstellt, erweiterst du das script bzw. die Berchnung einfach um das Ergebnis*0.77...
Der Wirkungsgrad deiner Anlage wäre dann 0.77 oder 77% -
Version 0.2.15 hochgeladen.
Änderungen:
Version: 0.2.15 Es können jetzt für 5 verschiedene Dachflächen die Prognosewerte von Forecast abgerufen werden.Da ich leider keine 5 Dachflächen mit Solarmodulen habe (neid), müssen die testen, die so was haben
Mit zwei Dachflächen funktioniert es -
@ArnoD
Nicht dass der Verdacht aufkommt, da stellt jemand eine Frage und taucht ab! Ich hatte zwischenzeitlich keine Zeit und Gelegenheit das Internet zu beglücken, auch das kann entspannend sein!!
Für eure Aktivitäten und schnelle Reaktion auf meine Frage möchte ich mich bedanken und hoffe es mit eigenen Beträgen wieder gutzumachen.
Die 4 Dachflächen haben alle die gleiche Neigung sind nach Süden, Westen und Osten ausgerichtet. Die Südseite besteht aus zwei unterschiedlichen Bauabschnitten mit verschiedenen Abschattungen und somit mit jeweils einem String.
Die Anlage wird hoffentlich nächste Woche geliefert und in der Folgewoche installiert. Sie besteht aus einem S10 PRO 19,5 kW Speicher, einem Zusatzwechselrichter und der Wallbox Easy-Connect, also etliche Hardware und Software die hoffentlich ewig Zicken macht. -
@ArnoD
Hallo Arno,habe als Prognose nur Proplanta angegeben und hatte heute das 1. mal , das die Prognose Auto von Proplanta abgewichen ist.. Hast dazu ne Idee?
-
Ich vermute, das du bei deinen Einstellungen im Script unter "nMinPvLeistungTag_kWh" 10 kWh eingetragen hast bzw. nicht geändert hast.
Unter diesen Wert geht die autom. Prognoseberechnung nicht, auch wenn die Prognose Proplanta niedriger ist.
Was mir auffällt ist, dass die Prognose Proplanta bei dir recht gut funktioniert, bei mir sieht es diesen Monat da etwas Schlechter aus.
-
@ArnoD sagte in E3DC Hauskraftwerk steuern:
Ich vermute, das du bei deinen Einstellungen im Script unter "nMinPvLeistungTag_kWh" 10 kWh eingetragen hast bzw. nicht geändert hast.
Unter diesen Wert geht die autom. Prognoseberechnung nicht, auch wenn die Prognose Proplanta niedriger ist.Ähmm, was heißt das denn genau? Ich muss da also 10 eintragen? Bei steht da seit Anbeginn "const nMinPvLeistungTag_kWh = 3"; das ist der niedrigste Wert, den meine PV jemals an einem Tag produziert hat. Die Berechnungen scheinen aber zu funktionieren!? Oder woran merke ich, dass irgendwas nicht funktioniert, wie es sollte? Oder noch anders gefragt: Ist soll da also 10 kWh als kleinsten Wert einstellen oder wie?
-
@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...