NEWS
E3DC Hauskraftwerk steuern
-
@smartboart sagte in E3DC Hauskraftwerk steuern:
Macht es nicht auch Sinn die Funktion main nach einer Aktualisierug nochmal durch zu führen?
Wird in der neuen Version so gemacht, hatte es bei der Umstellung der automatischen Abfrage Proplanta übersehen, das die Funktion main() nicht noch mal aufgerufen wird.
-
@smartboart sagte in E3DC Hauskraftwerk steuern:
und noch ne Idee.
Die function main würde ich gerne bei Umschaltung auf manuell nachdem ein zusätzlicher manueller programmwahl state aktiviert wurde erneut durchlaufen lassen um dann die Programmvorwahl manuell einzuleiten...
Beispiel am Programm 5on(idProgrammwahl, function(dp) { setState(idAutomatikVorwahl,false,true); main(); if(logging)log("Trigger manuelle Programmvorwahl"); }); // 5Prognose PV-Leistung höher als benötigter Eigenverbrauch,Batterie laden und Überschuss ins Netz einspeisen. // ab 15:00 - 18:00 Uhr Bewölkung > 90% var Programmwahl= getState(idProgrammwahl).val; if( (Ueberschuss > 0 && Bedeckungsgrad12<90 && Bedeckungsgrad15>=90 && AutomatikAnwahl )|| (AutomatikAnwahl === false && Programmwahl ===5)){ if (LogAusgabe){log('Einstellung 5 aktiv');} setState(instanz + PfadEbene1 + PfadEbene2[1] + 'Einstellung',5); StateRead(); e3dcConfigWrite(5); setTimeout(e3dcConfigRead, 1000);
Gute Idee, bin noch nicht dazu gekommen mir über die manuelle Anwahl gedanken zu machen. Kann ich ja jetzt so übernehmen, Danke.
Bin noch mit der Formel von eba zur berechnung der Uhrzeit von Start und Ende des Regelzeitraum beschäftigt.
Würde gerne diese Zeiten gleich in MEZ bzw. MESZ anzeigen, da mit UTC ständig überlegt werden muss, wann der Regelbeginn ist. -
Die Prognosen Proplanta im August, mit der regelmässigen Aktualisierung ist bis jetzt der Wahnsinn.
Wenn das so bleibt, brauche ich forecast nicht mehr
Bin schon auf heute gespannt wer wieder Recht hat, Proplanta oder Forecast.
-
@ArnoD Bei mir geht's drunter und drüber. Proplanta kriegt die Tendenz eher richtig hin, liegt aber wertemäßig schon etwas ungenau. Forecast ist die reinste Achterbahn, landet mal nen Treffer, versaut es aber auch öfter, weil halt der niedrigere Wert genommen wird. Aber mir ist lieber eine konservative Schätzung zu haben, die dann übertroffen wird als andersrum.
-
Würde gerne diese Zeiten gleich in MEZ bzw. MESZ anzeigen, da mit UTC ständig überlegt werden muss, wann der Regelbeginn ist.
Finde ich super das du das aufgenommen hast.. Das war ja auch der Grund warum ich es auch angemerkt hatte...
-
@ArnoD denke auch das proplanta genauer liegt... Hab nochmal genauer geschaut.. Die Kurve von proplanta passt generell zur prognose.. Ist halt bei mir zu hoch weil ich die nutzbare Energie messe.... Aber das geht ja mit dem korrekturfaktor klar...
Vlt.. Hilft aber zusaetzlich auch ein Kupfer Nagel... -
Neue Version 0.2.06 hochgeladen und neue View Stand 14.08.2020.
Änderungen:
Version: 0.2.06 Regelzeitraum Start, Ende und Ladezeitende werden jetzt nach der Formel von
Eberhard berechnet und je nach Einstellung in MEZ oder MESZ in VIS angezeigt. Es wird die Systemzeit vom IoBroker verwendet, da ich über Modbus keine Zeit vom E3DC bekomme.
Wenn diese beiden Zeiten nicht synchron sind, stimmen die Zeiten natürlich nicht. Die manuelle
Anwahl der 5 Einstellungen ist jetzt möglich, Danke an smartboart für seine Vorarbeit.Version: 0.2.05 Zeiten werden in MEZ umgerechnet und in eigenen States gespeichert:'Winterminimum_MEZ','Sommermaximum_MEZ','Sommerladeende_MEZ','HTon_MEZ','HToff_MEZ'. Fehler in der PrognoseBerechnung_kWh_heute korrigiert, durch die laufende Neuberechnung muss die bereits produzierte PV-Leistung von der Prognose Tag abgezogen werden und das Gleiche bei nEigenverbrauchTag in kWh. nKorrFaktor geändert, es wird jetzt der % Wert angegeben um den die Prognose reduziert werden soll.
Version: 0.2.04 Nach der Aktualisierung Proplanta wird die Function main() aufgerufen und neu berechnet
-
@ArnoD super... Komm heut nicht mehr dazu... Werds morgen gleich testen...
-
@ArnoD sagte in E3DC Hauskraftwerk steuern:
Version: 0.2.05 Zeiten werden in MEZ umgerechnet und in eigenen States
Hallo Arno...
Wenn ich das richtig deute, muss zwischen Sommerzeit und Winterzeit
über vis umgestellt werden...ich habe hierzu etwas um das zu automatisieren...siehe script unten..
https://forum.iobroker.net/topic/2730/sommerzeit-winterzeit-in-script-abfragen
es muss allerdings das npm modul is-it-bst im javascript adapter eingebunden werden.
const idSommerzeit ='javascript.1.PVAnlage.E3DC-Control.Allgemein.Anwahl_MEZ_MESZ'/*true = MESZ ,false = MEZ*/; // Sommerzeit ermitteln var dst = require('is-it-bst'); setState(idSommerzeit, dst()); // Script start if(LogAusgabe)log('MESZ Status '+dst); schedule("0 4 24-31 3,10 7", function() { setState("Sommerzeit", dst()); if(LogAusgabe)log('MESZ Status '+dst); });
das kommt dann zurück. siehe log..
-
@ArnoD
und noch ne kleine Änderung...
Hab hier noch ne Verzögerung eingebaut..
Besseres Handling und um Programmwahl nicht 2 mal ausführen zu müssen wenn die Automatik nicht schnell genug abgewählt wurde...on({id: instanz + PfadEbene1 + PfadEbene2[1] + 'EinstellungAnwahl'}, function(obj) { EinstellungAnwahl = getState(obj.id).val setState(instanz + PfadEbene1 + PfadEbene2[1]+'Automatik',false,true); if(LogAusgabe)log("Trigger manuelle Programmvorwahl"); setTimeout(function(){main();},200);//Automatik Abwahl Zeit geben bevor main ausgeführt wird });
-
@smartboart sagte in E3DC Hauskraftwerk steuern:
@ArnoD sagte in E3DC Hauskraftwerk steuern:
Version: 0.2.05 Zeiten werden in MEZ umgerechnet und in eigenen States
Hallo Arno...
Wenn ich das richtig deute, muss zwischen Sommerzeit und Winterzeit
über vis umgestellt werden...ich habe hierzu etwas um das zu automatisieren...siehe script unten..
https://forum.iobroker.net/topic/2730/sommerzeit-winterzeit-in-script-abfragen
es muss allerdings das npm modul is-it-bst im javascript adapter eingebunden werden.
const idSommerzeit ='javascript.1.PVAnlage.E3DC-Control.Allgemein.Anwahl_MEZ_MESZ'/*true = MESZ ,false = MEZ*/; // Sommerzeit ermitteln var dst = require('is-it-bst'); setState(idSommerzeit, dst()); // Script start if(LogAusgabe)log('MESZ Status '+dst); schedule("0 4 24-31 3,10 7", function() { setState("Sommerzeit", dst()); if(LogAusgabe)log('MESZ Status '+dst); });
das kommt dann zurück. siehe log..
Hatte die Umschaltung zuerst automatisch, doch dann war ich mir nicht sicher ob das international funktioniert.
Sollte aber zumindest in der Schweiz,Österreich und Italien funktionieren.
Werde es einbauen Danke. -
@smartboart sagte in E3DC Hauskraftwerk steuern:
@ArnoD
und noch ne kleine Änderung...
Hab hier noch ne Verzögerung eingebaut..
Besseres Handling und um Programmwahl nicht 2 mal ausführen zu müssen wenn die Automatik nicht schnell genug abgewählt wurde...on({id: instanz + PfadEbene1 + PfadEbene2[1] + 'EinstellungAnwahl'}, function(obj) { EinstellungAnwahl = getState(obj.id).val setState(instanz + PfadEbene1 + PfadEbene2[1]+'Automatik',false,true); if(LogAusgabe)log("Trigger manuelle Programmvorwahl"); setTimeout(function(){main();},200);//Automatik Abwahl Zeit geben bevor main ausgeführt wird });
Hatte es bei mir gestestet und keine Probleme festgestellt, musste die Verzögerung beim Aufruf der main() funktion nur bei der Abfrage der Proplanta Werte einbauen, da die Rückantwort zu langsam war. Aber es schadet generel nicht etwas zu warten und ich werde auch das übernehmen.
-
@ArnoD ich muss es nochmal los werden... Das ist wirklich wieder richtig Klasse Arbeit die du hier ablieferst..
-
Neue Version 0.2.07 hochgeladen
Änderungen:
Version: 0.2.07 Umschaltung MEZ oder MESZ wird automatisch ausgeführt. Man kann aber immer noch manuell umschalten.
Verzögerung beim Aufruf der main() function nach manueller Anwahl der Einstellungen 1-5.
Es muss das NPM-Module "is-it-bst" in der Javascript Instanz installiert werden. -
@ArnoD
Hallo Arno, ich habe ein script geschrieben, welches dein Script ohne source Analytics auskommen lässt.
Bei Sekunden Pollzeit des Modbusadapter, sollte das Script so genau sein wie source analytics.Je kleiner die Pollzeit vom modbus adapter desto genauer wird das Ergebnis sein...
Ich hoffe ich habe keinen Denkfehler, heute Abend weiß ich ob es ordentlich gezählt hat.
Habe vernommen, dass du ja auch auf den adapter verzichten möchtest?
Da es für die Prognose wohl doch besser ist mit dem Ertrag zu rechnen und nicht mit dem was entnommen wird, da der Verbrauch im Haus und Ladung bzw Batterieentnahme doch eher schwankt, habe ich das nun so gelöst.
Wenn du Interesse hast es zu übernehmen, kannst du mit testen wie genau es ist.. hier das Script...
createState('javascript.1.PVAnlage.PVArbeitE3DC.heute', 0, {name: 'PV Leistung Heute laufender Tag', type: 'number', unit: 'kWh' }); const idLeistung = 'modbus.1.holdingRegisters.40068_PV_Leistung'; const idPVErtrag = 'javascript.1.PVAnlage.PVArbeitE3DC.heute' var debug = false; var logging = true; var count = 0; var Summe = 0; // Zaehlem on(idLeistung, function(dp) { var Leistung = getState(idLeistung).val; if(Leistung >= 1){ count ++ Summe = Summe + Leistung; if(debug)log(['Summe: ' + Summe, ' Zaehler: '+count, ' Addition: + ' +Leistung ].join('')); } }); // jede minute in W/h umrechen W = P*t schedule ("* * * * *", function () { if(debug)log('minütlicher Schedule aktiv'); if(count >0 && Summe >0){ var PVErtrag = getState (idPVErtrag).val var Pmin = Summe/count; setState(idPVErtrag, PVErtrag + Pmin/60/1000,true);//kWh if(debug)log(['Schedule Umrechnen W = P*t. Minutenwert Leistung: '+ Pmin, ' Minutenwert Arbeit: ' + (Pmin/60/1000), ' Tageswert Ertrag: ' +PVErtrag ].join('')); setTimeout(function(){ count=0; Summe=0; if(debug)log(['verzögerter Reset: Count = '+ count, ' Summe = ' + Summe ].join('')); },100); } }); // jeden Tag um 23:59 Tageswert nullen. schedule({hour: 0, minute: 1}, function () { setState(idPVErtrag,0,true); if (logging)log('Tagesertragswert auf 0 gesetzt'); });
EDIT: hatte noch nen Fehler bei 0 Leistungswerten...
ist oben korrgiert.
Arbeite noch daran den minütlichen schedule zu stoppen wenn nicht mehr benötigt... -
und hier nochmal mit Aktivierung und Deaktivierung des minütlichen Schedule.
Somit werden der minütliche Schedule auch nur ausgeführt wenn es was zum Rechnen gibt...Hab es noch nicht testen können, also hier weiß ich erst morgen ob es klappt oder noch ne Kleinigkeit geändert werden muss...
createState('javascript.1.Test.E3DC.Ertrag_Heute', 0, {name: 'Ertrag Heute laufender Tag', type: 'number', unit: 'kWh' }); const idLeistung = 'modbus.1.holdingRegisters.40068_PV_Leistung'; const idPVErtrag = 'javascript.1.Test.E3DC.Ertrag_Heute' var debug = true; var logging = true; var count = 0; var Summe = 0; var Timer = null; var merker = false; // Zaehlem on(idLeistung, function(dp) { var Leistung = getState(idLeistung).val; if(Leistung >= 1){ if(merker)schedulestart(); merker = false; count ++ Summe = Summe + Leistung; if(debug)log(['Summe: ' + Summe, ' Zaehler: '+count, ' Addition: + ' +Leistung ].join('')); } }); //Skriptstart schedulestart() // jede minute in W/h umrechen W = P*t function schedulestart(){ if(debug)log('Funktion Schedulestart aktiv'); var AufDieMinute = '* * * * *'; Timer = schedule(AufDieMinute, function(){ if(debug)log('minuten Schedule aktiv'); var PVErtrag = getState (idPVErtrag).val; var Pmin = Summe/count; if(count>0 && Summe >0){ setState(idPVErtrag, PVErtrag + Pmin/60/1000,true);//kWh if(debug)log(['Schedule Umrechnen W = P*t. Minutenwert Leistung: '+ Pmin, ' Minutenwert Arbeit: ' + (Pmin/60/1000), ' Tageswert Ertrag: ' +PVErtrag ].join('')); setTimeout(function(){ count=0; Summe=0; if(debug)log(['Reset: Count = '+ count, ' Summe = ' + Summe ].join('')); },100); }else{ if(count===0 && Summe ===0){ clearSchedule(Timer); merker = true; if(logging)log('minuten Schedule gestoppt'); } } }); } // jeden Tag um 23:59 Tageswert nullen. schedule({hour: 0, minute: 1}, function () { setState(idPVErtrag,0,true); if (logging)log('Tagesertragswert auf 0 gesetzt'); });
-
Auch von meiner Seite nochmal ein großes DANKE!! für deine Arbeit.
So macht der E3DC gleich noch mehr Spaß.kurzer Hinweis zu der neuen Version 0.2.07, evtl sollte hier noch ein Hinweis ins Changelog, dass ein zusätzliches Javascript Modul "is-it-bst" notwendig ist.
-
@smartboart Das ist ja super.
Werde es heute integrieren und testen. -
@Abyss
Ja richtig, sollte auf alle Fälle drin stehen.
Danke. -
@Abyss habe es bei der Anleitung im ersten Post hier ergänzt und werde es auch ins Changelog eintragen.