NEWS
Eigenverbrauchsoptimierung
-
Hallo Community,
vor einiger Zeit hatte ich schon einmal einen Versuch mit Blockly gestartet, werde aber mit dem Tool nicht warm. Daher habe ich mich an Java versucht, um meinen Eigenverbrauch entsprechend der zur Verfügung stehenden Energie aus der PV zu optimieren.
Platt ausgedrückt: In leistungsarmen Phasen sollen Kühl- und Gefrierschrank (und später auch andere Geräte) nacheinander laufen.
Ich habe jetzt mal damit angefangen, Kühl- und Gefrierschrank gegeneinander so zu verriegeln, dass sie, falls das nötig ist, nacheinander laufen. Grundsätzlich klappt das auch. Allerdings gibt es beim Umschalten noch ein Phänomen, das ich bisher noch nicht in den Griff bekommen habe.
Wenn der Kühlschrank aus- und der Gefrierschrank eingeschaltet wird, geschieht das nicht „sauber“, sondern in dieser Reihenfolge: Kühlschrank aus -> Gefrierschrank ein -> Kühlschrank aus -> Kühlschrank ein. Dann läuft es wieder stabil. Anders herum klappt das Umschalten problemlos.
Da Problem ist, dass der Gefrierschrank bis zum Anlaufen eine „Gedenkminute“ braucht, bis „gefrierschrank_aktiv“ auf „true“ wechselt. Da muss noch eine Verzögerung rein, die ich einfach nicht hinbekomme.Kann mir da jemand einen Tipp geben?
Gruß
/* * * Das Umschalten klappt noch nicht optimal * * Script zur optimierung des Verbrauchs durch Anpassen der Einschaltzeit von Verbrauchern * an den aktuellen PV Überschuss. Große Verbraucher mit geringer Einschaltzeit (Waschmaschine / Heizung) * haben Priorität gegenüber kleineren Verbrauchern, die dafür länger laufen (Kühlgeräte). * * * * Skript Name: Verbrauchsoptimierung * Skript Version: 0.7 | 15. Mai 2024 * Erstell-Datum: 25. April 2024 */ // Erfasste / gesteuerte Geräte: // Küchensteckdosen // Spülmaschine // Waschmaschine // Kühlschrank // Gefrierschrank var pverzeugung =0; // aktuelle PV Leistung var leistung =0; // aktuelle Gesamtleistung am Zähler var einspeisung =0; // aktuell eingespeiste Leistung (Wenn Leistung negativ ist) var verbrauch_kueche =0; // aktuelle Leistung Küchensteckdosen var verbrauch_kuehlschrank =0; // aktuelle Leistung Kühlschrank var verbrauch_kuehlschrank_alt =0; var verbrauch_gefrierschrank =0; // aktuelle Leistung Gefrierschrank var verbrauch_gefrierschrank_alt =0; var verbrauch_waschmaschine =0; // aktuelle Leistung Waschmaschine var verbrauch_spuelmaschine =0; // aktuelle Leistung Spülmaschine // Boolsche Variablen var status_kueche =true; // Küchensteckdosen eingeschaltet var status_waschmaschine =true; // Waschmaschine eineschaltet var status_spuelmaschine =true; // Spuelmaschine eingeschaltet var status_kuehlschrank; // Kühlschrank eingeschaltet var kuehlschrank_aktiv; // Kühlschrank ist aktiv 0/1 var status_gefrierschrank; // Gefrierschrank eingeschaltet var gefrierschrank_aktiv; // Gefrierschrank aktiv 0/1 var warten = true; // 1 Minute warten // Counter für (K)ühlschrank und (G)efrierschrank, damit die Geräte nach max. 60 Minuten eingeschaltet werden. var cnt_k = 0; var cnt_g = 0; var debug =true; // Debug schaltet die Ausgabe der Werte im Log ein. Default = "0" function Optimierung () { getAll () if (debug) { console.log('Debug aktiv'); Showall () } // Hauptprogramm //console.log ('Hauptprogramm'); if (kuehlschrank_aktiv) { // Kühlschrank läuft jetzt (wurde aktiv) console.error('Kühlschrank ist AKTIV'); if (status_gefrierschrank) { // Wenn der Gefrierschrank eingeschaltet ist Gefrierschrank_off () // Dann Gefrierschrank ausschalten console.log('Gefrierschrank war noch eingeschaltet und wurde ausgeschaltet '); } } else { // Kühlschrank ist nicht (mehr) aktiv, also warten bis der Gefrierschrank aktiv wird if (status_kuehlschrank) { Kuehlschrank_off () console.log('Kühlschrank war noch eingeschaltet und wurde ausgeschaltet '); } if (!status_gefrierschrank) { // Wenn der Gefrierschrank ausgeschaltet ist Gefrierschrank_on () // Dann Gefrierschrank einschalten console.log('Gefrierschrank war noch ausgeschaltet und wurde eingeschaltet '); } } if (gefrierschrank_aktiv) { // Gefrierschrank läuft jetzt (wurde aktiv) console.error('Gefrierschrank ist AKTIV'); if (status_kuehlschrank) { // Wenn der Kühlschrank eingeschaltet ist Kuehlschrank_off () // Dann Kuehlschrank ausschalten warten = true; // Warten nur bei Statusänderung console.log('Kuehlschrank war noch eingeschaltet und wurde ausgeschaltet '); } } else { if (status_gefrierschrank) { Gefrierschrank_off () //warten = true; // Warten nur bei Statusänderung console.log('Gefrierschrank war noch eingeschaltet und wurde ausgeschaltet '); } if (!status_kuehlschrank) { // Wenn der Gefrierschrank ausgeschaltet ist Kuehlschrank_on () // Dann Gefrierschrank einschalten warten = true; // Warten nur bei Statusänderung console.log('Kuehlschrank war noch ausgeschaltet und wurde eingeschaltet '); } } } function getAll() { pverzeugung = getState('sonoff.0.PV-Anlage.SENSOR.ENERGY.Power').val; leistung = getState('sonoff.0.Stromzaehler.SENSOR.Stromz.Power').val; if (leistung < 0) { einspeisung = Math.abs(leistung); // Einspeisung ist der Betrag der negativen Gesamtleistung } else { // Netzbezug } verbrauch_kuehlschrank_alt = verbrauch_kuehlschrank; // alten Wert merken status_kuehlschrank = getState('shelly.0.shellyplusplugs#Kuehlschrank#1.Relay0.Switch').val; if (status_kuehlschrank) { verbrauch_kuehlschrank = getState('shelly.0.shellyplusplugs#Kuehlschrank#1.Relay0.Power').val; } else { verbrauch_kuehlschrank = 0; } verbrauch_gefrierschrank_alt = verbrauch_gefrierschrank; // alten Wert merken status_gefrierschrank = getState('shelly.0.shellyplusplugs#Gefrierschrank#1.Relay0.Switch').val; if (status_gefrierschrank) { verbrauch_gefrierschrank = getState('shelly.0.shellyplusplugs#Gefrierschrank#1.Relay0.Power').val; } else { verbrauch_gefrierschrank = 0; } // "Aktiv" / "Inaktiv" signalisiert den Statuswechsel!!!! if (verbrauch_gefrierschrank > (verbrauch_gefrierschrank_alt + 20)) { console.error('Gefrierschrank ist jetzt AKTIV... Verbrauch neu: ' + verbrauch_gefrierschrank + ' Verbrauch alt: ' + verbrauch_gefrierschrank_alt); gefrierschrank_aktiv = true; } if (verbrauch_gefrierschrank < (verbrauch_gefrierschrank_alt - 20)) { console.error('Gefrierschrank ist jetzt INAKTIV... Verbrauch neu: ' + verbrauch_gefrierschrank + ' Verbrauch alt: ' + verbrauch_gefrierschrank_alt); gefrierschrank_aktiv = false; } if (verbrauch_kuehlschrank > (verbrauch_kuehlschrank_alt + 20)) { console.error('Kühlschrank ist jetzt AKTIV... Verbrauch neu: ' + verbrauch_kuehlschrank + ' Verbrauch alt: ' + verbrauch_kuehlschrank_alt); kuehlschrank_aktiv = true; } if (verbrauch_kuehlschrank < (verbrauch_kuehlschrank_alt - 20)) { console.error('Kühlschrank ist jetzt INAKTIV... Verbrauch neu: ' + verbrauch_kuehlschrank + ' Verbrauch alt: ' + verbrauch_kuehlschrank_alt); kuehlschrank_aktiv = false; } } function Kuehlschrank_off() { // Kühlschrank ausschalten if (status_kuehlschrank){ setState('shelly.0.shellyplusplugs#Kuehlschrank#1.Relay0.Switch',false); //kuehlschrank_aktiv = false; status_kuehlschrank = false; console.log('Kühlschrank_off hat Status auf false gesetzt'); } console.log('Kühlschrank ist ausgeschaltet'); } function Kuehlschrank_on() { // Kühlschrank einschalten falls ausgeschaltet if (!status_kuehlschrank) { setState('shelly.0.shellyplusplugs#Kuehlschrank#1.Relay0.Switch',true); console.log('Kühlschrank_on hat Status auf true gesetzt'); } console.log('Kühlschrank ist eingeschaltet'); } function Gefrierschrank_off() { // Gefrierschrank ausschalten if (status_gefrierschrank){ setState('shelly.0.shellyplusplugs#Gefrierschrank#1.Relay0.Switch',false); gefrierschrank_aktiv = false; //status_gefrierschrank = false; console.log('Gefrierschrank_off hat Status auf false gesetzt'); } console.log('Gefrierschrank ist ausgeschaltet'); } function Gefrierschrank_on() { // Gefrierschrank eingeschalten falls ausgeschaltet if (!status_gefrierschrank) { setState('shelly.0.shellyplusplugs#Gefrierschrank#1.Relay0.Switch',true); console.log('Gefrierschrank_on hat Status auf true gesetzt'); } console.log('Gefrierschrank ist eingeschaltet'); } function Showall () { console.error('Aktuelle Messungen: ') if (status_kuehlschrank) { console.error('Kühlschrank ist eingeschaltet'); } else { console.error('Kühlschrank ist ausgeschaltet'); } if (kuehlschrank_aktiv) { console.error('Kühlschrank ist Aktiv. Verbr. neu: ' + verbrauch_kuehlschrank + ' Verbr. alt: ' + verbrauch_kuehlschrank_alt); } else{ console.error('Kühlschrank ist Inaktiv. Verbr. neu: ' + verbrauch_kuehlschrank + ' Verbr. alt: ' + verbrauch_kuehlschrank_alt); } if (status_gefrierschrank) { console.error('Gefrierschrank ist eingeschaltet'); } else { console.error('Gefrierschrank ist ausgeschaltet'); } if (gefrierschrank_aktiv) { console.error('Gefrierschrank ist Aktiv. Verbr. neu: ' + verbrauch_gefrierschrank + ' Verbr. alt: ' + verbrauch_gefrierschrank_alt); } else{ console.error('Gefrierschrank ist Inaktiv. Verbr. neu: ' + verbrauch_gefrierschrank + ' Verbr. alt: ' + verbrauch_gefrierschrank_alt); } } // Jede Minute ausführen schedule('0 * * * * *', Optimierung); // Zur Sicherheit alle Kühlgeräte abends aktiv einschalten // schedule('0 21 * * * *', Kuehlung_on);
-
bin auch so ein Optimierer
Aber Kühl und Gefrierschrank hab ich nur in der Überwachung, denn der Läuft doch von selbst an.
Bei mir geht der jede Stunde 1x an, für 20 min, dann ist er wieder 40 Minuten aus.Den manuell zu schalten ? Ich denke nicht das dies eine gute Idee ist.
Oder ist deine Steuerung kaputt ? -
Naja, mir sind die Bedenken bekannt.
Aber erstens werden die Geräte ja leistungslos geschaltet, also ausgeschaltet, wenn sie inaktiv sind. Beim Einschalten sind sie eh immer inaktiv. Das Aktivieren und Inaktivieren bleibt ja bei der internen Logik.
Dann soll das ja nicht dauernd, sondern nur bei nicht ausreichender PV Leistung stattfinden. Und letztlich habe ich natürlich gemessen, dass das Kühlergebnis nicht leidet.
Ich konstruiere mal einen Fall um klar zu machen, was ich erreichen möchte:Angenommen ich habe einen PV Überschuss von 50 W in den Morgenstunden. Ist halt nur eine Balkon PV
Dann möchte ich zuerst meinen Kaffee kochen und die Kühlgeräte sollen aus sein, Danach sollen sie nacheinander aktiv sein, um diese 50 W zu nutzen (Kühlschrank hat 50W, Gefrierschrank hat 60W Leistungsaufnahme). Damit habe ich den zur Verfügung stehenden Überschuss durchgehend genutzt.
Die alternative ist, alle drei Geräte laufen zufallsgesteuert gleichzeitig und ich kaufe den Strom und danach speise ich die 50W ein, weil alles aus ist. Das hört sich zwar nach Erbsenzählerei an, aber hochgerechnet auf wieviele Haushalte macht das wieviel?
Und dann kommt noch der Spieltrieb dazu.Über einen Tipp, wie ich die Hysterese beim Umschalten in den Griff kriege, würde ich mich freuen.
Gruß -
Du könntest es auch eleganter lösen.
Du schaust wann der Gefrierschrank aus gegangen ist.
Bei mir würde es 40 Minuten dauern, bis er wieder anspringt.In dem Zeitfenster hättest du zeit zum Kaffee kochen
Noch besser du automatisierst es, und die Maschine schalter IOBroker an
-
@berndsolar13
Sorry, ich verfolge eigentlich den Ansatz, iobroker die Optimierung zu übertragen.
Unbestritten ist, dass es auch andere Lösungen gibt.Gruß
-
hätte da was für dich
https://www.youtube.com/watch?v=ozHthXD9cN0Die Idee ist klasse, das werde ich mal ausprobieren
-
vielen Dank. Das kannte ich noch nicht.
Bis auf das noch nicht vorhandene E- Auto und die größere PV Fläche verfolgen wir exakt den gleichen Ansatz. Das bestärkt mich doch glatt darin, dass meine Idee so blöd nicht ist.Auf die Idee, den Gefrierschrank als Puffer zu benutzen bin ich allerdings noch nicht gekommen.
Da mache ich mich mal schlau, wie das im Detail geregelt wurde.Wäre übrigens trotzdem schön, wenn mir jemand bei der ursprünglichen Frage helfen könnte.
Gruß
-
hab mal einen meiner Tuya Wlan Sensoren in den Gefrierschrank gesteckt.
Bei -13 ist scheinbar Ende, tiefer geht er wohl nicht.Bis -30° ob es dafür einen "drahtlosen" Sensor gibt ?
-
@berndsolar13
Der Copilot meint, der TAPO T315 Temperatur- und Feuchtigkeitsmonitor Sensor wäre geeignet. Geht bis -20 Grad.Sonst wohl so etwas: DS18B20 Temperatursensor Adapter ESP8266 ESP-01 ESP-01S WIFI Wireless Modul https://encr.pw/ILooN
Muss man halt ein eigenes Gehäuse drum bauen und mal schauen, wie weit man mit einer Batterie so kommt. Ich denke, das mache ich mal nach meinem Urlaub. Die 2 Taler habe ich übrig.Gruß