Closed Rayn0r closed 3 months ago
..ja, macht irgendwie mehr Sinn, bin aber leider in Python nur Anfänger....bin schon froh, wenn ich ein Script zum laufen bekomme... Ich hab mal mein Script angehängt mit deiner Änderung, scheint besser zu laufen. Vorher hat sich das Limit bis max_WR hochgeschaukelt wenn Bezug > power war und dann kam wieder Setpoint=0, Werte unter 10 Watt werden von der DTU nicht akzeptiert.
Wenn die DTU keine Werte unter 10W akzeptiert, dann sollte das Ganze besser so aussehen:
aktuellerverbauch = grid_sum + power
if aktuellerverbauch >= maximum_wr:
setpoint = maximum_wr
print(f"setpoint auf Maximum ({maximum_wr}W) gesetzt.")
else:
if aktuellerverbauch < 10:
aktuellerverbauch = 10
setpoint = aktuellerverbauch
print(f"setpoint auf {aktuellerverbauch}W gesetzt.")
Hallo, läuft tagsüber gut, aber Abends/Nachts (wenn der WR aus ist) hängt sich mein Skript nach kurzer Zeit irgendwie auf und bleibt "stehen", reagiert nicht mehr, auch kein "strg-c" zum abbrechen, den Skript musste ich heute morgen neu starten ....
Kannst Du mir sagen, welche Zeilen das Script als Letztes ausgegeben hat, bevor es sich aufgehängt hat?
musste warten bis es dunkel wird, hatte den Script noch etwas abgeändert, bleibt nicht hängen, aber: sollte ab Zeile 79 bei:
if setpoint == 0: setpoint = grid_sum
if not reachable: setpoint = maximum_wr , print("_ WR1 not reachable ______ ",setpoint)
nicht maximum_wr ausgegeben werden? Code im Anhang...
hab´s jetzt irgendwie hin bekommen, warum weiss ich aber auch nicht so genau, Python iss irgendwie "empfindlich" ... Läuft auch die Nacht durch... Jetzt muss es nur noch mit 3 WR arbeiten....
Danke für die Hinweise. Die Funktionsweise wurde vollständig übernommen von https://gitlab.com/p3605/hoymiles-tarnkappe
Wenn du das Limit vom aktuellen Verbrauch, statt dem letzten Limit abhängig machen möchtest, kannst du in #L43 altes_limit
durch power
ersetzen. Dann werden Einspeisungen eher vermieden, als dass sie nur "abgefedert" werden. Auch kann man die 5 W als Toleranz justieren.
Das Skript wurde mal ein wenig aufgeräumt und übersichtlicher gestaltet. Ein paar potentielle Gründe für Instabilität wurden auch eliminiert. Versuch es gerne mal mit der neuesten Version. Vielleicht ist es auch vorteilhaft, es wie im Wiki beschrieben als Systemd-Service zu installieren: https://selbstbau-pv.de/wissensbasis/nulleinspeisung-hoymiles-hm-1500-mit-opendtu-python-steuerung/
LG, SBPV
@Selbstbau-PV
Zeile 41 macht mir noch Sorgen. Die beiden Werte dort könnten nicht definiert sein, wenn zum Start des Scripts einer oder beide Geräte nicht erreichbar sind. Das Verschieben hinter if reachable:
würde es sicher machen.
Dann ist if reachable:
keine ausreichende Bedingung mehr um weiterzumachen, weil die beiden Abfragen jetzt in getrennten try/except
Blöcken stehen. Im except
beider könnte aber ein reachable = false
weiterhelfen.
Was denkst Du?
Sollte man noch den Fall betrachten, bei dem der Shelly nicht erreichbar ist, die OpenDTU aber dennoch? Ist es dann sinnvoll die Leistungsabgabe auf ein vorher festgelegtes Maximum zu begrenzen?
Ich hab mir den Code mal angesehen und habe ein paar Verständnisfragen und nen Vorschlag wie man das Ganze vereinfachen könnte. Bitte lasst mich wissen, was ihr dazu meint.
Was in Zeile 52 passieren soll ist mir nicht ganz klar.
maximum_wr
setzen wennaltes_limit >= maximum_wr
ist?grid_sum
ist die erzeugte Energie (power
) der Anlage bereits abgezogen. Um den tatsächlichen Verbrauch zu bestimmen, muss man beide Werte wieder addieren. Die Bedingunggrid_sum >= maximum_wr
ist also grundsätzlich verkehrt und würde anders als gewünscht unter Umständen doch etwas einspeisen.0
ist, ist die Bedingungsetpoint >= maximum_wr
nie erfüllt. (siehe Zeile 32)Ich denke, dass man alles zwischen Zeile 51 und 64 durch Folgendes ersetzen kann.