Ron<p>Achtung: Viel Text</p><p>Kürzlich hatte ich mir einmal den Kopf zerbrochen, weil meine Solarbatterie (Utena) wiederholt unter 7% abgesunken ist. </p><p>Mein Batteriemanagement soll eigentlich die Batterieverbraucher bei Unterschreiten der Schwelle von 10% abschalten. Aber da die Wechselrichter gut 90 Sekunden benötigen, um nach Anlegen einer Spannung auch Strom zu liefern, testet das Management nur alle 120 Sekunden. Und das ist offensichtlich zu lang. Die Zeit verkürzen will ich aber auch nicht, um ggf. ein Prellen zu verhindern: Die Wechselrichter sollen sich einschalten, Strom liefern und erst dann ggf. wieder ausgeschaltet zu werden. Das ist insb. im Sommer bei schnell wechselnden Lichtverhältnissen sinnvoll.</p><p>z.B. <br>- bei Test war die Kapazität bei 10,1% -> alles OK. Batterie liefert Leistung (ca. 850 W)<br>- nach 2 Sekunden liegen wir dann bei 9,9%. System soll abschalten. Der nächste Test erfolgt aber erst in 118 Sekunden<br>- nach 120 Sekunden: Ups... nur noch 7%. ABSCHALTEN! ABSCHALTEN! ABSCHALTEN!</p><p>Mein zusätzliches Batteriesachutz-Programm wird nun alle 10 Sekunden ausgeführt. Im Idealfall macht das Programm, ausser in die Datenbank zu schreiben, dass es nichts macht, nichts. </p><p>Aber WENN entweder die Kapazität oder die Batteriespannung unter einen definierten Wert sinkt, soll JEDER Verbraucher, der an der Batterie hängt, sofort (!) abgeschaltet werden.</p><p>Von Victron gibt es ja ein Gerät, das entsprechend programmiert (und verschaltet), genau das tut. Aber zum einen kostet das Teil über 100,- Euro und zum anderen sind die dokumentierten Schaltpläne für mich mindestens zwei Klassen zu anspruchsvoll.</p><p>Also hab ich das Problem in Software gelöst. Bei mir ist FHEM und NodeRed (mit eigebundenen Victron- und FHEM-Komponenten) im Einsatz.</p><p>Das Programm ist eine AT-Routine, die alle 10 Sekunden geprüft wird.</p><p>Dabei werden die Werte der Victron-Komponenten aus NodeRed nach FHEM in einen Dummy übertragen)</p><p>KeroChan: Dummy mit diversen Readings mit Werten des gleichnamigen MPPT (Batteriekapazität, Batteriespannung), $Batteriemodus ist ein Reading aus dem Batteriemanagement-Programm, das widerspiegelt, ob die Batterie entladen werden kann oder gerade aufgeladen wird (und damit nicht entladen werden kann).</p><p>Das Programm ist simpel: Wenn die Kapazität die 10% erreicht oder unterschritten hat wird alles ausgeschaltet. Das sind die 4 Orions (über ein ZigBee 4-Kanal-Relais gesteuert) und ein Phoenix (Hinotori).</p><p>Und es wird alles ausgeschaltet, wenn die Spannung unter 48 Volt sinkt. </p><p>Wenn also der Batterieschutz zieht, wird ausserdem die Batterie in den Auflade-Modus durch Ändern des Batteriemodus gesetzt. Damit ist sichergestellt, dass das Batteriemanagement-Programm definitiv die batterie erst einmal auflädt.</p><p>```<br>+*00:00:10 <br>{<br> use strict;<br> use warnings;<br> <br> my $BatterieModus; #="entladen": es darf entladen werden<br> #="aufladen": es darf nicht mehr entladen werden<br> my $Batteriekapazitaet; <a href="https://social.amichan.de/tags/Der" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Der</span></a> Füllstand der Batterie<br> my $Batteriespannung; <br> <br> $BatterieModus=ReadingsVal("KeroChan","rcBatterieModus","aufladen");<br> $Batteriespannung=ReadingsVal("KeroChan","UtenaVoltage",0);<br> if ($BatterieModus eq "entladen") <br> # nur wenn die Batterie entladen wird <br> # ist etwas zu tun/zu prüfen<br> {<br> $Batteriekapazitaet=ReadingsVal('KeroChan','UtenaKapazitaet',0);<br> if (($Batteriekapazitaet<=10) || ($Batteriespannung<48))<br> {<br> fhem("set MQTT2_zigbee_SolarschrankRelais off1");<br> fhem("set MQTT2_zigbee_SolarschrankRelais off2");<br> fhem("set MQTT2_zigbee_SolarschrankRelais off3");<br> fhem("set MQTT2_zigbee_SolarschrankRelais off4");<br> fhem("set Hinotori off");<br> fhem("setreading atBatterieschutz rcBatterieschutz ausgelöst");<br> fhem("setreading atBatteriemanagement rcBatterieModus aufladen");<br> if ($Batteriespannung<48)<br> {<br> fhem("setreading atBatterieschutz rcBatteriespannung zu niedrig: $Batteriespannung V");<br> }<br> else<br> {<br> fhem("setreading atBatterieschutz rcBatteriespannung ok: $Batteriespannung V"); <br> }<br> }<br> else<br> {<br> fhem("setreading atBatterieschutz rcBatterieschutz nicht ausgelöst");<br> fhem("setreading atBatterieschutz rcBatteriespannung ok: $Batteriespannung V"); <br> }<br> }<br> else<br> {<br> fhem("setreading atBatterieschutz rcBatterieschutz nicht ausgelöst");<br> fhem("setreading atBatterieschutz rcBatteriespannung ok: $Batteriespannung V"); <br> }<br>}<br>```</p><p>Wenn alles gut läuft, wird noch eine Routine ergänzt, die mir im Alarmfall einmalig eine E-Mail schickt und mich entsprechend informiert.</p><p><a href="https://social.amichan.de/tags/fhem" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>fhem</span></a> <a href="https://social.amichan.de/tags/batterieschutz" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>batterieschutz</span></a> <a href="https://social.amichan.de/tags/victron" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>victron</span></a> <a href="https://social.amichan.de/tags/solar" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>solar</span></a> <a href="https://social.amichan.de/tags/nodered" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>nodered</span></a></p>