NEWS
E3DC Hauskraftwerk steuern
-
Hier das Script was ich verwende:
// Hausstromverbrauch aktuell berechnen ************************************************************************** createState('Stromzaehler.Zaehlerstaende.Netzbezug.alt', 0, {name: 'lezter Zählerstand Monatsbeginn', type: 'number', unit: 'kWh' }); createState('Stromzaehler.Zaehlerstaende.Netzeinspeisung.alt', 0, {name: 'lezter Zählerstand Monatsbeginn', type: 'number', unit: 'kWh' }); createState('Stromzaehler.Zaehlerstaende.Solarproduktion.alt', 0, {name: 'lezter Zählerstand Monatsbeginn', type: 'number', unit: 'kWh' }); for(var i = 1; i<= 12; i++) { createState('Stromzaehler.Zaehlerstaende.Netzbezug.Monat'+ i, 0, {name: 'Zählerstand Netzbezug Monat'+ i, type: 'number', unit: 'kWh' }); createState('Stromzaehler.Zaehlerstaende.Netzeinspeisung.Monat'+ i, 0, {name: 'Zählerstand Netzeinspeisung Monat'+ i, type: 'number', unit: 'kWh' }); createState('Stromzaehler.Zaehlerstaende.Solarproduktion.Monat'+ i, 0, {name: 'Zählerstand PV-Anlage Monat'+ i, type: 'number', unit: 'kWh' }); createState('Stromzaehler.Berechnung.Netzeinspeisung.Monat'+ i, 0, {name: 'Ins Netz eingespeiste kWh im Monat'+ i, type: 'number', unit: 'kWh' }); createState('Stromzaehler.Berechnung.Netzbezug.Monat'+ i, 0, {name: 'Aus Netz bezogene kWh im Monat'+ i, type: 'number', unit: 'kWh' }); createState('Stromzaehler.Berechnung.Solarproduktion.Monat'+ i, 0, {name: 'Erzeugter Strom PV-Anlage im Monat'+ i, type: 'number', unit: 'kWh' }); createState('Stromzaehler.Berechnung.Eigenverbrauch.Monat'+ i, 0, {name: 'Selbst verbrauchter PV-Strom im Monat'+ i, type: 'number', unit: 'kWh' }); createState('Stromzaehler.Berechnung.Autarkie.Monat'+ i, 0, {name: 'Autarkie Grad im Monat'+ i, type: 'number', unit: '%' }); createState('Stromzaehler.Berechnung.Datum'+ i); createState('Stromzaehler.Berechnung.Datum'+ i, '', {name: 'Ablesedatum im Monat'+ i}); } // Zählerstände Monatlich um 23:55 speichern für Finanzamt schedule("0 0 1 * *", function() { //schedule({hour: 11, minute: 7}, function () { var nBezugZaehlerAktuell = Math.floor(getState('hm-rpc.0.QEQ0337064.1.IEC_ENERGY_COUNTER').val); var nEinspeiseZaehlerAktuell = Math.floor(getState('hm-rpc.0.QEQ0337064.2.IEC_ENERGY_COUNTER').val); var PvZaehlerAktuell=Math.floor(getState('hm-rpc.0.QEQ0337042.1.IEC_ENERGY_COUNTER').val); var nBezugZaehlerAlt = getState('Stromzaehler.Zaehlerstaende.Netzbezug.alt').val; var nEinspeiseZaehlerAlt = getState('Stromzaehler.Zaehlerstaende.Netzeinspeisung.alt').val; var PvZaehlerAlt=getState('javascript.0.Stromzaehler.Zaehlerstaende.Solarproduktion.alt').val; var nBezugZaehlerNeu = nBezugZaehlerAktuell - nBezugZaehlerAlt; var nEinspeiseZaehlerNeu = nEinspeiseZaehlerAktuell - nEinspeiseZaehlerAlt; var PvZaehlerNeu = PvZaehlerAktuell - PvZaehlerAlt; var EigenverbrauchNeu = PvZaehlerNeu - nEinspeiseZaehlerNeu; var AutarkieNeu = EigenverbrauchNeu / ((nBezugZaehlerNeu+EigenverbrauchNeu)/100); // Datum vom Vortag berechnen var jetzt = new Date(); var Theute = jetzt.getDate(); var Tgestern = new Date(); Tgestern.setDate(Theute-1); var DatumAkt=((Tgestern.getDate())+'.'+ (Tgestern.getMonth()+1) +'.'+ Tgestern.getFullYear()); var MonatAkt=(Tgestern.getMonth()+1); setState('Stromzaehler.Zaehlerstaende.Netzbezug.Monat'+ MonatAkt,nBezugZaehlerAktuell); setState('Stromzaehler.Zaehlerstaende.Netzeinspeisung.Monat'+ MonatAkt,nEinspeiseZaehlerAktuell); setState('Stromzaehler.Zaehlerstaende.Solarproduktion.Monat'+ MonatAkt,PvZaehlerAktuell); setState('Stromzaehler.Berechnung.Netzeinspeisung.Monat'+ MonatAkt,nEinspeiseZaehlerNeu); setState('Stromzaehler.Berechnung.Netzbezug.Monat'+ MonatAkt,nBezugZaehlerNeu); setState('Stromzaehler.Berechnung.Solarproduktion.Monat'+ MonatAkt,PvZaehlerNeu); setState('Stromzaehler.Berechnung.Eigenverbrauch.Monat'+ MonatAkt,EigenverbrauchNeu); setState('Stromzaehler.Berechnung.Autarkie.Monat'+ MonatAkt,AutarkieNeu); setState('Stromzaehler.Berechnung.Datum'+ MonatAkt,DatumAkt); setState('Stromzaehler.Zaehlerstaende.Netzeinspeisung.alt',nEinspeiseZaehlerAktuell); setState('Stromzaehler.Zaehlerstaende.Netzbezug.alt',nBezugZaehlerAktuell); setState('Stromzaehler.Zaehlerstaende.Solarproduktion.alt',PvZaehlerAktuell); });
-
@ArnoD sagte in E3DC Hauskraftwerk steuern:
// Hausstromverbrauch aktuell berechnen **************************************************************************
Danke sehr
-
@smartboart sagte in E3DC Hauskraftwerk steuern:
ok...gut zu wissen...hast da ein issue bei github aufgemacht? Weil ich würde das gerne aktuellhalten...
Der Fehler und auch weiter sind im Forum diskutiert worden, habe aber nicht nachgeschaut ob ein issue bei github aufgemacht worden ist.
-
@stevie77
Ja immer wieder mal bei einem anderen Wert, habe aber noch nicht rausgefunden an was das liegt. Vermute, dass wenn ein Wert von Proplanta nicht abgerufen werden kann, dass dann undefined zurückgegeben wird und das im TypeScript nicht abgefangen wird.
Hatte aber noch keine Zeit mich genauer damit zu beschäftigen, und da ich ja nur die Globalstrahlung benötige hatte es auch nicht die Priorität bei mir. -
Ok die Version 0.1.14 habe ich gerade in meinem ersten Beitrag eingestellt.
Habe die Fehler korrigiert, die ihr so fleißig gefunden habt
Danke dafür.Das mit dem einlesen einer bereits bestehnden e3dc.config.txt muss ich mir Morgen erst mal genauer ansehen.
Der erste Versuch ist hier erst mal gescheitert, aber ist ja auch schon spät. -
Ach, das ist der Fehler, den du relativ weit unten in den Kommentaren schon mal erwähnt hast. Und wenn alle benötigten Daten gelesen werden, dann ist es ja okay. Wollte nur wissen, ob ich mir Sorgen machen muss.
In Java kann man so ne Properties-Datei komplett selbstständig schreiben und lesen lassen, der Mechanismus findet die Parameter immer anhand des Namens. Vielleicht gibt's sowas auch für Javascript? Ist aber auch nicht so wichtig, finde ich, wenn man es weiß, stellt man es halt einmal an der Oberfläche ein und speichert es dann weg. -
@ArnoD sagte in E3DC Hauskraftwerk steuern:
Habe die Fehler korrigiert, die ihr so fleißig gefunden habt
Zur Abwechslung hätte ich einen Feature Request.
Ich vermute mal ins Blaue, dass du an deinem Hauskraftwerk keine externe Quelle angeschlossen hast? Ich hab' da nämlich eine zweite PV-Anlage angeschlossen und die wird momentan nicht berücksichtigt.const sPvLeistung_kWh = 'sourceanalytix.0.modbus__0__holdingRegisters__40068_PV_Leistung.delivery.01_current_day' // Pfad State Modul Sourceanalytix PV-Leistung Tag'
Dieses Register liefert leider nur die aktuelle Leistung der direkt an das HKW angeschlossenen PV-Anlage. Man bräuchte noch die Summe aus modbus.0.holdingRegisters.40110_Leistungsmesser_1_L1, modbus.0.holdingRegisters.40111_Leistungsmesser_1_L2 und modbus.0.holdingRegisters.40112_Leistungsmesser_1_L3. Also die drei Phasen des 1. Leistungsmessers (nach dem Wurzelmesser 0).
Und diese Summe müsste mit deinem jetzt schon verwendeten Register kombiniert werden für die Statistik (separate View) und auch die Anzeige sourceanalytix.0.modbus__0__holdingRegisters__40068_PV_Leistung.delivery.01_current_day in der View mit den ganzen Parametereinstellungen.Möglicherweise könnte ich die Additionen selbst mit einem Javascript lösen und als State speichern ("PV-Leistung heute" würde ich sicher hinbekommen, bei der Grafik weiß ich nicht), aber vielleicht hast du ja ne Idee und den Elan das allgemeingültig für alle zu machen, die mehr als eine PV-Anlage haben?
-
@stevie77
Es ist schwirig was zu Programmieren wenn man es selber nicht testen kann.
Entspricht die Summe L1,L2,L3 beim Leistungsmesser 1 der PV-Leistung ? Beim Leistungsmesser 0 ist das ja nicht der Fall.
Da die Summe L1,L2,L3 = Leistung am Netzübergabepunkt = PVLeistung - HausverbrauchsLeistung - oder + BatterieLeistung entspricht.
Was ist mit dem Modbus Register 40076 Leistung aller zusätzlichen Einspeiser in Watt wird dort nicht eventuell die Summe ausgegeben ?
Wie gesagt ich kann das alles nicht testen. -
@ArnoD Also bei mir stimmen die Summen auch von Leistungsmesser 0. Könnte aber sein, dass das nur ne Momentaufnahme ist, da ich gerade fast bei den 70% bin? Wenn es bei schwächerer Leistung einphasig wird, dann stimmt's vielleicht nicht mehr mit der Summe? Der Hausverbrauch scheint da aber nicht reinzuspielen, da die Summe exakt aufgeht?!
Ich kann dir leider nicht sagen, ob das beim Leistungsmesser 1 funktioniert, da ich nur einphasig einspeise, also nur auf L1 und da stimmt es immer.
Aber du hast natürlich Recht, den modbus.0.holdingRegisters.40076_Zusaetzliche_Einspeiser_Leistung habe ich übersehen, der ist natürlich viel besser geeignet. Den verwende ich auch selbst für die Anzeige in meiner View. Und würde wahrscheinlich auch noch bei jemandem funktionieren, der zwei externe Anlagen hat.
Beachten muss man hierbei (weil du das nicht testen kannst), dass dieser Wert (im Gegensatz zu modbus.0.holdingRegisters.40068_PV_Leistung) immer negativ ist:Für meine Anzeige habe ich den Wert mit -1 multipliziert, das müsstest du natürlich auch machen, sonst kommt da immer ne kleinere Summe raus.
Ich würde mich gerne zur Verfügung stellen für Vorabtests, falls dir das hilft -
Ich mal wieder..
Ich glaub ich hab den neuen Parameter WirkungsgradWr noch nicht so ganz verstanden. Wie setzt sich der zusammen?
Ich hatte gestern das neueste Script eingespielt und heut morgen eine Prognose von 4kW erhalten was ja komplett daneben war. Kann das an dem neuen Parameter hängen und dass ich da einfach was falsches eingetragen habe was die Berechnung zerstört? -
@Abyss sagte in E3DC Hauskraftwerk steuern:
Ich mal wieder..
Ich glaub ich hab den neuen Parameter WirkungsgradWr noch nicht so ganz verstanden. Wie setzt sich der zusammen?
Ich hatte gestern das neueste Script eingespielt und heut morgen eine Prognose von 4kW erhalten was ja komplett daneben war. Kann das an dem neuen Parameter hängen und dass ich da einfach was falsches eingetragen habe was die Berechnung zerstört?Der Parameter WirkungsgradWr ist der Wirkungsgrad des E3DC mit Batterie (ist bei mir 88%). Du kannst hier einfach 100 eintragen dann wirkt dieser Parameter nicht mehr. Ist ein Versuch ob ich so näher an die Prognosewerte komme ohne Korrekturfaktor.
-
@stevie77 sagte in E3DC Hauskraftwerk steuern:
modbus.0.holdingRegisters.40076_Zusaetzliche_Einspeiser_Leistung
Wird bei dir hier was angezeigt über Modbus ? Bei mir ist der Wert immer 0
Ok habe gerade dein Bild gesehen, es wird was angezeigt.
-
@stevie77 sagte in E3DC Hauskraftwerk steuern:
Also bei mir stimmen die Summen auch von Leistungsmesser 0.
Heißt das die Summe der drei Phasen ist gleich deiner PV-Leistung ??
Bei mir ist es die PV Leistung - Hausverbrauch und wenn die Batterie geladen oder entladen wird wirkt sich das auch noch aus.
Summe der drei Phasen 2124 W
PV Leistung 3813 W -
@stevie77 sagte in E3DC Hauskraftwerk steuern:
@ArnoD Also bei mir stimmen die Summen auch von Leistungsmesser 0. Könnte aber sein, dass das nur ne Momentaufnahme ist, da ich gerade fast bei den 70% bin? Wenn es bei schwächerer Leistung einphasig wird, dann stimmt's vielleicht nicht mehr mit der Summe? Der Hausverbrauch scheint da aber nicht reinzuspielen, da die Summe exakt aufgeht?!
Bin etwas verwirrt.
Die Summe der drei Phasen ergibt bei dir 10640 W.
Von der PV-Anlage 1 kommen 7782 W und PV-Anlage 2 kommen 4224 W das wären dann 12006 W somit ist die Summe der drei Phasen nicht gleich der PV-Leistung beim Leistungsmesser 0. Wenn ich jetzt den Hausverbrauch von 760W abziehe und auch die 606 W was in den Speicher geladen wird, dann ergibt das auch bei dir die Summe der drei Phasen beim Leistungsmesser 0. -
@ArnoD Ich bin auch verwirrt. Wenn ich die Phase 1-3 des Leistungsmessers 0 in meinem Screenshot addiere, kommen ja die 10640 raus. Das ist genau die Einspeiseleistung in meinem Screenshot. Das rechts oben rot umrandete ist modbus.0.holdingRegisters.40074_Netz_Leistung. Das ist genau dieselbe Leistung, wie beide PVs zusammen - Akku und Hausverbrauch. Da komme ich zum selben Ergebnis wie du und verstehe auch nicht wirklich, wie das zusammenhängt. Die Summe beim Leistungsmesser 1 scheint der Netzleistung zu entsprechen. Leistungsmesser 0 ist also wohl das Ergebnis aus allen Erzeugern und Verbrauchern vom Hausanschluss aus gesehen.
Ist aber auch egal, richtig wäre es für die Vorhersage bzw. Statistik die Register modbus.0.holdingRegisters.40068_PV_Leistung und modbus.0.holdingRegisters.40076_Zusaetzliche_Einspeiser_Leistung zu addieren und zu verwenden. Die beiden sind wirklich reine Erzeugungsleistung.
-
@stevie77
Ok ich schau mir das mal an.
Das einzige Problem ist, dass es nicht für alle passen wird.
E3DC fast hier alle zusätzliche Einspeiser zusammen, also auch ein Blockheizkraftwerk oder sonstige Energieerzeuger.
Aber ich denke, die sind in der Minderheit -
Habe gerade Version 0.1.15 hochgeladen.
Habe jetzt die Funktion e3dcConfigRead() geändert.
Jetzt kann die e3dc.config.txt auch gelesen werden, wenn diese nicht mit dem Script erstellt wurde.
Es werden nur die Parameter übernommen für die auch ein State unter Parameter existiert. Alle anderen müssen im Script unter "Einstellungen E3DC-Control" eingetragen werden.Vielleicht kann das ja jemand mit seiner alten e3dc.config.txt testen.
-
@ArnoD Okay, danke. Dann macht sicher ein Flag Sinn, wo man die Berechnung für externe Erzeuger ein- und ausschalten kann.
Wobei man vermutlich auch darüber diskutieren kann, ob nicht auch ein BHKW da mit rein gehört (oder anderes), schließlich sind es doch Erzeuger und sie stellen Strom zur Verfügung. Damit die Steuerung korrekt arbeitet, macht es doch vermutlich Sinn alle Erzeuger mit einzubeziehen in die Prognose, denn sie bilden die Menge an Strom, die man abends verbraucht oder im Speicher hat (oder nicht)?! Aber ist ne theoretische Diskussion... -
Irgendwie liefert forcast bei mir keine Werte. Hat mir jemand einen Tipp, wo ich anfangen kann mit der Suche was fehlt oder falsch eingestellt ist? Zu welcher Uhrzeit gleich müsste ich was im Log sehen?
Proplanta funktioniert... -
@stevie77
In deinem LOG sollte es um 5:10 Uhr und 5:15 Uhr eine Eintrag geben, der so aussehen sollte:
Rueckmeldung :{"result":{"2020-07-16":22690,"2020-07-17":27526}Natürlich nur wenn LogAusgabe = true ist.