NEWS
PV Überschuss Steckdose
-
Moin, ich habe mir da mal ein Script gebastelt und wollte mal fragen ob da mal einer drüber schauen könnte der sich "richtig" auskennt und natürlich euch auch zur verfügung stellen.
Neueste Version
Alte Version
Es soll wenn ich Überschuss habe eine Steckdose einschalten oder wenn ich zu wenig habe diese wieder ausschalten.
Paar Timeouts und den Durchschnittswert sollen verhindern das sich das Gerät andauernd an und aus schaltet. Nicht jede Wolke soll das können sondern nur langanhaltendes schlechtes WetterWas haltet Ihr davon und habt ihr anregungen?
Gruß Alex
-
@kmxak Hallo Alex, was hast du mit der Steckdose vor? Strom verbraten?
Ich hab es noch nicht komplett durchgesehen aber schau mal nach
'sonoff.0.Hichi_Stromzähler. _16_7_0'
. Da ist ein Blank drin - scheint mir nicht richtig. -
@rene55 moin, doch das ist richtig. Muss mal in Tasmota schauen ob da was falsch ist.
Ich schalte damit einen Entfeuchter der im Keller steht. Es ist nicht unbedingt nötig diesen zu Entfeuchten aber dort ist ein Gästezimmer mit Bett und bevor da etwas am stocken ist schalte ich den ab und zu an. Und nun halt immer mit Stromüberschuss.
-
@kmxak Leerstellen in DPs sind selten gut...
-
@kmxak sagte: Was haltet Ihr davon und habt ihr anregungen?
Da der Entfeuchter durch Ein-/Ausschalten auf den PV-Überschuss zurück wirkt, muss man eine Hysterese vorsehen, die etwas größer ist als die Leistungsaufnahme des Entfeuchters.
Prinzip in Blockly:
-
soetwas?
// Konfiguration var threshold = -1500; // Schwellenwert für den Stromüberschuss var averageTimeMinutes = 45; // Zeitraum für den Durchschnitt in Minuten var powerOnTimeoutMinutes = 30; // Timeout für das Einschalten in Minuten, X Minuten bleibt das Gerät definitiv an. var powerOffTimeoutMinutes = 5; // Timeout für das Ausschalten in Minuten, X Minuten bleibt das Gerät definitiv aus. var devicePowerConsumption = 400; // Leistungsaufnahme des Gerätes in Watt var debugMode = false; // Debug-Modus ein-/ausschalten var entpreller = 0; var istAn = false; var averagePower = []; on({ id: [].concat(['sonoff.0.Hichi_Stromzähler. _16_7_0']), change: 'ne' }, async (obj) => { var value = obj.state.val; var oldValue = obj.oldState.val; // Debug-Protokollierung für den aktuellen Wert des Stromzählers if (debugMode) { console.log("Aktueller Wert des Stromzählers: " + value); } // Hinzufügen des aktuellen Werts zum Durchschnittsarray averagePower.push(value); if (averagePower.length > averageTimeMinutes) { averagePower.shift(); // Entfernen des ältesten Werts, wenn die Länge überschritten ist } // Berechnung des Durchschnitts und Rundung auf ganze Zahl var average = Math.round(averagePower.reduce((acc, curr) => acc + curr, 0) / averagePower.length); // Debug-Protokollierung für den Durchschnitt if (debugMode) { console.log("Durchschnitt über " + averageTimeMinutes + " Minuten: " + average); } if (entpreller == 0 && istAn == false && average < (threshold + devicePowerConsumption) && compareTime('10:00', '19:00', 'between', null)) { entpreller = 1; setState('sonoff.0.Gosund_16A_3.POWER', true); istAn = true; console.log('PV Steckdose ein! Stromüberschuss vorhanden.'); sendTo("telegram.0", "send", { text: 'PV Steckdose ein! Stromüberschuss vorhanden.' }); setTimeout(() => { entpreller = 0; }, powerOnTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden } if (entpreller == 0 && istAn == true && average > (threshold - devicePowerConsumption)) { entpreller = 1; setState('sonoff.0.Gosund_16A_3.POWER', false); istAn = false; console.log('PV Steckdose aus! Kein Stromüberschuss vorhanden.'); sendTo("telegram.0", "send", { text: 'PV Steckdose aus! Kein Stromüberschuss vorhanden.' }); setTimeout(() => { entpreller = 0; }, powerOffTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden } });
-
nochmal eine neue Version mit einem gleitenden Durchschnitt
// Konfiguration var threshold = -1100; // Schwellenwert für den Stromüberschuss var averageTimeMinutes = 30; // Zeitraum für den Durchschnitt in Minuten var powerOnTimeoutMinutes = 30; // Timeout für das Einschalten in Minuten, X Minuten bleibt das Gerät definitiv an. var powerOffTimeoutMinutes = 5; // Timeout für das Ausschalten in Minuten, X Minuten bleibt das Gerät definitiv aus. var devicePowerConsumption = 400; // Leistungsaufnahme des Gerätes in Watt var debugMode = false; // Debug-Modus ein-/ausschalten var entpreller = 0; var istAn = false; var averagePower = []; on({ id: [].concat(['sonoff.0.Hichi_Stromzähler. _16_7_0']), change: 'ne' }, async (obj) => { var value = obj.state.val; var timestamp = obj.state.ts; var deltaTime = 0; if (averagePower.length > 0) { var lastTimestamp = averagePower[averagePower.length - 1].timestamp; deltaTime = (timestamp - lastTimestamp) / (1000 * 60); } var powerChange = 0; if (averagePower.length > 0) { var lastValue = averagePower[averagePower.length - 1].value; powerChange = value - lastValue; } var powerChangeRate = deltaTime > 0 ? powerChange / deltaTime : 0; averagePower.push({ value: value, timestamp: timestamp }); if (averagePower.length > averageTimeMinutes) { averagePower.shift(); } var sumPowerChange = averagePower.reduce((acc, curr, index, array) => { if (index < array.length - 1) { return acc + (curr.value - array[index + 1].value); } else { return acc; } }, 0); var average = Math.round(sumPowerChange / averagePower.length); // Debug-Protokollierung für den aktuellen Wert des Stromzählers if (debugMode) { console.log("Aktueller Wert des Stromzählers: " + value); } // Debug-Protokollierung für den Durchschnitt if (debugMode) { console.log("Durchschnitt über " + averageTimeMinutes + " Minuten: " + average); } if (entpreller == 0 && istAn == false && average < (threshold + devicePowerConsumption) && compareTime('10:00', '19:00', 'between', null)) { entpreller = 1; setState('sonoff.0.Gosund_16A_3.POWER', true); istAn = true; console.log('PV Steckdose ein! Stromüberschuss vorhanden.'); sendTo("telegram.0", "send", { text: 'PV Steckdose ein! Stromüberschuss vorhanden.' }); setTimeout(() => { entpreller = 0; }, powerOnTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden } if (entpreller == 0 && istAn == true && average > (threshold - devicePowerConsumption)) { entpreller = 1; setState('sonoff.0.Gosund_16A_3.POWER', false); istAn = false; console.log('PV Steckdose aus! Kein Stromüberschuss vorhanden.'); sendTo("telegram.0", "send", { text: 'PV Steckdose aus! Kein Stromüberschuss vorhanden.' }); setTimeout(() => { entpreller = 0; }, powerOffTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden } });