NEWS
Eigenverbrauchsoptimierung PV - Anlage - Anfänger
-
Hallo, bräuchte bitte wieder mal Eure Hilfe.
folgendes Script berechnet mir ob ich momentan Einspeise bzw. wieviel Energie ich gerade beziehe:
const Gesamt = [ '0_userdata.0.Verbräuche.Strom_1OG', '0_userdata.0.Verbräuche.Strom_EG', '0_userdata.0.Verbräuche.Photovoltaik', '0_userdata.0.Verbräuche.Strom_Heizung', '0_userdata.0.Verbräuche.Strom_Garage_Keller' ]; on(Gesamt, function (obj) { setState('0_userdata.0.Verbräuche.Gesamtverbrauch', ( getState('0_userdata.0.Verbräuche.Strom_1OG').val + getState('0_userdata.0.Verbräuche.Strom_EG').val + getState('0_userdata.0.Verbräuche.Strom_Heizung').val + getState('0_userdata.0.Verbräuche.Strom_Garage_Keller').val - getState('0_userdata.0.Verbräuche.Photovoltaik').val )); })
In meinem Puffer steckt ein Heizstab den ich mittels Schalter einschalten kann:
Jetzt soll ein Script die Phasen der Heizstäbe einschalten sobald jeweils 700W über sind.
Einspeisung >700W -> P1 ein -> Einspeisung fällt auf 100W (da Heizstab ca. 600W) verbraucht -> P1 würde ausschalten -> Einspeisung steigt wieder auf 700W -> Heizstab wieder ein -> .... wie kann ich das verhindern bzw. wie schalte ich dann P2. P2 müsste einschalten wenn P1 + Einspeisung >700W ist.
-
@johannes-bauerstatter sagte in Eigenverbrauchsoptimierung PV - Anlage - Anfänger:
wie kann ich das verhindern
indem du mit einer Variablen arbeitest und diese ja nach bereits laufenden Phasen neu berechnest:
@johannes-bauerstatter sagte in Eigenverbrauchsoptimierung PV - Anlage - Anfänger:
wenn P1 + Einspeisung >700W
-
@homoran
Würde das dann so funktionieren?:const Gesamt = [ '0_userdata.0.Verbräuche.Strom_1OG', '0_userdata.0.Verbräuche.Strom_EG', '0_userdata.0.Verbräuche.Photovoltaik', '0_userdata.0.Verbräuche.Strom_Heizung', '0_userdata.0.Verbräuche.Strom_Garage_Keller' ]; on(Gesamt, function (obj) { setState('0_userdata.0.Verbräuche.Gesamtverbrauch', ( getState('0_userdata.0.Verbräuche.Strom_1OG').val + getState('0_userdata.0.Verbräuche.Strom_EG').val + getState('0_userdata.0.Verbräuche.Strom_Heizung').val + getState('0_userdata.0.Verbräuche.Strom_Garage_Keller').val - getState('0_userdata.0.Verbräuche.Photovoltaik').val )); }) const Verbrauch = ['0_userdata.0.Verbräuche.Gesamtverbrauch']; var P1 = 0; var P2 = 0; on (Verbrauch, function (obj) { if (getState('0_userdata.0.Verbräuche.Gesamtverbrauch').val < -700 && P1 == 0) {var P1 = 1; setTimeout(function() {setState('esphome.0.246F287C8DA4.Switch.2875680690.heizstab_relais_1', true );}, 900000); } else setState('esphome.0.246F287C8DA4.Switch.2875680690.heizstab_relais_1', false ); var P1 = 0; if (getState('0_userdata.0.Verbräuche.Gesamtverbrauch').val < -700 && P1 == 1) {var P2 = 1; setTimeout(function() {setState('esphome.0.246F287C8DA4.Switch.2875680689.heizstab_relais_2', true ); }, 900000); } else setState('esphome.0.246F287C8DA4.Switch.2875680689.heizstab_relais_2', false ); var P2 = 0; if (getState('0_userdata.0.Verbräuche.Gesamtverbrauch').val < -700 && P2 == 1) { setTimeout(function() {setState('esphome.0.246F287C8DA4.Switch.2875680688.heizstab_relais_3', true );}, 900000); } else setState('esphome.0.246F287C8DA4.Switch.2875680688.heizstab_relais_3', false ); });
-
@johannes-bauerstatter sagte: Würde das dann so funktionieren?:
Ohne die Funktionalität zu beurteilen, sollten einige Korrekturen erfolgen:
const idVerbrauch = '0_userdata.0.Verbräuche.Gesamtverbrauch'; var P1 = 0; var P2 = 0; on (idVerbrauch, function (dp) { let verbrauch = dp.state.val; if (verbrauch < -700 && P1 == 0) { P1 = 1; setTimeout(function() { setState('esphome.0.246F287C8DA4.Switch.2875680690.heizstab_relais_1', true); }, 900000); } else { setState('esphome.0.246F287C8DA4.Switch.2875680690.heizstab_relais_1', false ); P1 = 0; } if (verbrauch < -700 && P1 == 1) { P2 = 1; setTimeout(function() { setState('esphome.0.246F287C8DA4.Switch.2875680689.heizstab_relais_2', true ); }, 900000); } else { setState('esphome.0.246F287C8DA4.Switch.2875680689.heizstab_relais_2', false ); P2 = 0; } if (verbrauch < -700 && P2 == 1) { setTimeout(function() { setState('esphome.0.246F287C8DA4.Switch.2875680688.heizstab_relais_3', true ); }, 900000); } else { setState('esphome.0.246F287C8DA4.Switch.2875680688.heizstab_relais_3', false ); } });
Was schalten relais1...3?
-
@paul53 Danke für die Korrekturen.
Ich habe einen 3phasigen Heizstab und die Relais schalten jeweils eine Phase.
-
@johannes-bauerstatter
Was sollen die Timeout von 15 Minuten bewirken? -
@paul53 Schwankungen von seitens der PV - Anlage abfangen, damit nicht zu viele Schaltvorgänge auf den Relais passieren.
-
@johannes-bauerstatter
Du möchtest nacheinander jeweils eine Phase zuschalten, wenn der resultierende Überschuss 15 Minuten lang über 700 W beträgt?
Dann versuche es mal so:const idVerbrauch = '0_userdata.0.Verbräuche.Gesamtverbrauch'; const idR1 = 'esphome.0.246F287C8DA4.Switch.2875680690.heizstab_relais_1'; const idR2 = 'esphome.0.246F287C8DA4.Switch.2875680690.heizstab_relais_2'; const idR3 = 'esphome.0.246F287C8DA4.Switch.2875680690.heizstab_relais_3'; var p1, p2, p3 = false; var delay = null; on(idVerbrauch, function(dp) { if(dp.state.val < -700) { if(!delay) { delay = setTimeout(function() { if(!p1) { setState(idR1, true); p1 = true; } else if(!p2) { setState(idR2, true); p2 = true; } else if(!p3) { setState(idR3, true); p3 = true; } delay = null; }, 900000); } } else { if(delay) clearTimeout(delay); delay = null; if(dp.state.val > -50) { if(p3) { setState(idR3, false); p3 = false; } else if(p2) { setState(idR2, false); p2 = false; } else if(p1) { setState(idR1, false); p1 = false; } } } });
-
@paul53 Danke für deinen Code.
Habe mich leider schlecht ausgedrückt:
Ziel:
wenn idVerbrauch <-700W dann Relais1 ein; sollte es kurzzeitig auf -680W und innerhalb von 15min wieder über <-700W steigen, dann soll das Relais 1 nicht ausschalten -> 15min in denen der idVerbrauch kurz unter -<700W fallen darf.Ablauf:
idVerbrauch >-700
-> Relais1 ein
-> durch Relais1 ein fällt der idVerbrauch auf ca. -100W
-> sobald wieder >-700W erreicht sind und Relais1 noch ein ist
-> soll Relais2 einschalten
-> durch Relais1 und Relais 2 ein fällt der idVerbrauch wieder auf ca. -100W
-> sobald wieder >-700W erreicht sind und Relais1 und Relais2 noch ein ist
-> soll Relais3 einschaltenAusschalten in umgekehrter Reihenfolge -> zuerst Relais3 dann Relais2 dann Relais1
Der erste von dir korrigierte Code sollte dies bereits leisten denk ich? Bin leider erst wieder am WE zu Hause zum testen.
-
Läuft noch nicht richtig. In Arbeit.