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.
-
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
-
@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 ); }); -
@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?
-
@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.
-
@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? -
@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.
-
@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; } } } }); -
@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.
-
@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.