Danke @stc für das Script, werde ich demnächst auch bei mir einsetzen.
Hattest du die Regelschleife von 3 Sek. noch weiter optimieren können? Bzw. was spräche dagegen, die Abfragezeit zu reduzieren (z.B. alle 0,5 Sek.)?
Hallo @elsol , es freut mich das du das script nutzen möchtest. Ich habe ich Zeit für die Regelschleife noch verändert und experimentiere da immer noch. Der Stromzähler liefert nur alle 2sec neue Werte und mit einer höheren Abfragefrequenz haben sich Regelschwingungen aufgebaut, die ich nur dadurch kleiner bekommen habe, indem ich die Regelung verlangsamt habe. Momentan pausiert die Schleife 3sec und braucht dann insgesamt ca. 6sec für einen Durchlauf.
Das kann aber bei Dir anders sein, wenn du z.B einen anderen Zähler hast, oder den Verbrauch direkt misst.
Ich hab mal einen Screenshot eines typischen Tages angehängt. Da sind die Schwingungen um die 0 zu sehen. Ich werte gerade aus ob und wenn ja wie viel der Akku aus dem Netz geladen wird, wenn die Regelung nicht ganz genau arbeitet. Sobald ich genaueres weiß berichte ich hier.
.Viele Grüße,
steve
Hallo zusammen,
hier noch mal ein Plot von heute, der ganz schön zeigt, wie ordentlich die Lade/Einspeise Regelung funktioniert. Der Akku lasse ich nie unter ca. 35Ah absinken und heute wurden 120Ah , ca. 3kWh, Solarüberschuss in den Akku geladen. Um 15:30 verringerte sich so langsam der Ladestrom, da die eingestellten 26,9V (3,36V/Zelle) erreicht wurden. Da könnte man sicher noch auf 27V (3,375V/Zelle) oder gar auf 27,2 (3,4V/Zelle) erhöhen, so ist es mir aber sicherer. Mit den Einstellungen habe ich heute 0,7kWh verschenkt. Entladeschluss ist bei 25,65V (3,2V/Zelle), könnte ich auch noch 50mV tiefer entladen um noch "Platz" im Akku zu generieren. Der Entladestrom war heute auf 15A begrenzt, ist mittlerweile wieder auf 25A (ca. 675W Einspeiseleistung).
Das example_charge_control.py im git ist genau die Version, das gerade läuft.
https://github.com/stcan/meanwell-can-control
Zusätzlich gibt es im git ein script, das alle 2 min prüft, ob die Regelung läuft und die Logs aktuell sind. Wenn nicht, wird das Regelscript neu gestartet. Das ist leider alle paar Tage der Fall und irgendwie sehr schwer zu debuggen.
Viele Grüße,
steve
Hallo @stc . Super vielen Dank für die ganzen Tipps, Hinweise, Links, speziell zum CAN und die Quelle für die Stecker !!!
Das hat total viel geholfen, bzw. erst ermöglich.
Seit gestern läuft bei uns auch unser Akku (16x EVE 280mAh) an einer BIC-2200-48CAN mit einer Nulleinspeisungsregelung.
(Wobei als Controller ein Arduino MKR 1010 Wifi + CAN - Board verwendet wird).
Kann Dir echt nicht genug "Danke" sagen
... was ich mich allerdings gerade Frage (ja, kommt etwas spät :O) ). Wie bekommt man eine BIC-2200 - basierende Anlage eigentlich beim Netzbetreiber angemeldet? Speziell der Punkt "Anti Islanding" macht mir sorgen. Das Anti-Islanding des BIC funktioniert zwar einwandfrei, aber ich finde keine Konformitätserklärung gemäß VDE-AR-N 4105. Ich vermute mal, dass ist eine Grundvoraussetzung. In der Hoffnung falsch zu liegen: Wäre super, wenn jemand mit Hinweisen/Tipps weiterhelfen könnte
Vielen Dank !
Es würde mich sehr interessieren mehr über deine Version mit dem Arduino zu erfahren.
Das mit dem selbst anmelden wird schwierig. Wie bei allem, was über ein Balkonkraftwerk hinaus geht. Das BIC-2200 benötigt meiner Meinung nach einen Festanschluss, ggf. zusätzlich einen externen NA Schutz für die VDE-AR-N 4105 , das beides nur ein Elektriker installieren darf. Die Anmeldung muss dann auch der Elektriker machen. Und ob dem Elektriker z.B. mein Aufbau mit Raspberry und selbst geschriebener Nulleinspeisung gefällt kann ja vielleicht noch sein, aber ob er dafür unterschreibt kann ich mir schwer vorstellen.
Ich hab ein Balkonkraftwerk angemeldet und der Akku läuft nebenbei mit ...
Gerade habe ich einen externen NA Schutz (enphase IQ Relais) zum testen da, der die Funktion nachrüstet. Das dient aber eher meiner "Beruhigung" , damit ist natürlich immer noch keine Anmeldung durch mich möglich, das ist jedenfalls mein momentaner Kenntnisstand.
Viele Grüße,
steve
PS. Ich hänge noch einen Plot von gestern an, wo der Akku endlich mal ordentlich Energie (ca. 3kWh) ab bekommen hat und seeehr wenig verschenkt wird;)
Hallo @stc,
ist eine sehr schöne Steuerung die ich gerne benutzen würde, habe aber keine wirkliche Ahnung von der Programmierung. Bisher kann ich den BIC über die Shell und ein IoBroker Skript steuern. Aber eben nicht wirklich Dynamisch sondern nur mit festen Werten.
Unklar ist mir auch noch die eigentliche Vorgehensweise.
Daten auf dem Pi speichern und die Datei example_charge_control.py kopieren und in charge_control.py umbenennen. Danach die Einstellungen der Grenzwerte und des
Danach die charge_control.py Starten.
Wenn ich Deine Daten nutze und die charge_control.py Starte bekomme ich folgende Fehlermeldung
pi@piaccu:~ $ /usr/bin/python Link entfernt
Traceback (most recent call last):
File " Link entfernt ", line 26, in <module>
ChargeVoltage = int(config.get('Settings', 'ChargeVoltage'))
File " Link entfernt ", line 781, in get
d = self._unify_values(section, vars)
File " Link entfernt ", line 1149, in _unify_values
raise NoSectionError(section) from None
configparser.NoSectionError: No section: 'Settings'
Wäre Nett wenn Du mir bei der Lösung helfen könntest.
Hallo @christ-reg
ich versuchs mal. Die Fehlermeldung sieht so aus, als ob du bei der charge_control.conf etwas an den Namen der Variablen/Sektionen geändert hast. Mit den Energy Meter Einstellungen hat die charge_control.conf nichts zu tun, sie sorgt nur für die Einstellung des Ladeparameter des BIC. Eigene Erweiterungen werde nicht ausgewertet.
Das Energy_Meter wird in dem Block ausgelesen und aus dem String die interessanten Werte herausgeholt. Wichtig ist eigentlich nur "Power":
#-------------------------------------------------------------- Read Power Meter # print ("Control Charge/Discharge") stromzaehler = requests.get("http://put.your.url.here/cm?cmnd=status%2010") stromz = stromzaehler.json() stromz1 = (stromz['StatusSNS']) # zeit = (stromz1['Time']) stromz2 = (stromz1['Haus']) Power = (stromz2['Power'])
Bei mir wird damit der Stromzähler ausgelesen und bei dir müsste an der Stelle der Shelly abgefragt werden. Ist der Shelly orginal oder mit Tasmota geflasht? Wenn Tasmota, könnte die Abfrage ziemlich ähnlich aussehen. Der json String wird geholt und der interessante Wert nach ein paar Zwischenschritten in eine Variable eingelesen (hier "Power".)
Oder ist der Shelly z.B. in ioBroker eingebunden? Dann kannst du den aktuellen Verbrauch vom MQTT Server bekommen.
Ich hab leider keinen Shelly, daher kann ich zum genauen Vorgehen keine Angaben machen.
Viele Grüße
steve
Ich denke der Shelly braucht eine andere Art der Abfrage
hallo@stc,
habe an der charge_control.conf nichts geändert und die gesamten Daten nochmals kopiert aber immer noch diese Fehlermeldung.
pi@piaccu:~ $ /usr/bin/python Link entfernt
Traceback (most recent call last):
File " Link entfernt ", line 26, in <module>
ChargeVoltage = int(config.get('Settings', 'ChargeVoltage'))
File " Link entfernt ", line 781, in get
d = self._unify_values(section, vars)
File " Link entfernt ", line 1149, in _unify_values
raise NoSectionError(section) from None
configparser.NoSectionError: No section: 'Settings'
Vielleicht liegt es ja an der Python Version, welche verwendest Du?
Für das Auslesen des Shelly Pro 3EM habe ich eine Lösung gefunden. Daher die Frage welchen Teil ich im Stript ersetzen muss da meine Power Angabe "total_act_power" ist.
Grüße
mchrist
Sieht aus, als ob die Configparser nicht klappt
No section: 'Settings'
Hast du da eine ?
Kannst du deine Shelly 3EM Abfrage teilen ?
Hallo@rage76,
auf der Shelly Seite ist dieses recht gut dokumentiert shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/EM/#emgetstatus-example
Eingabe: Shelly IP/rpc/EM/GetStatus?id=0
Ausgabe:
{"id":0,"a_current":0.576,"a_voltage":228.8,"a_act_power":98.9,"a_aprt_power":131.7,"a_pf":0.80,"a_freq":50.0,"b_current":1.150,"b_voltage":228.2,"b_act_power":-217.6,"b_aprt_power":262.5,"b_pf":0.86,"b_freq":50.0,"c_current":1.327,"c_voltage":228.4,"c_act_power":135.7,"c_aprt_power":302.9,"c_pf":0.64,"c_freq":50.0,"n_current":null,"total_current":3.053,"total_act_power":16.957,"total_aprt_power":697.078, "user_calibrated_phase":[]}
Die Fehlermeldung verweist auf die lib python3.9 configparser Datei.
Ist die Änderung der Python Version eine mögliche Lösung?
Gruß
mchrist
Ich nutze python3
Bei mir 3.9.2
Welchen Wert vom 3EM nutzt du ?
Kannst du deinen python code mal reinstellen
Die Werte sehen wir etwas hoch aus.
Passt das so ?
powermeter = requests.get("http://" + cfg.http_ip_address + "/rpc/EM/GetStatus?id=0")
powerz = powermeter.json()
power = (powerz['total_aprt_power'])
"total_act_power":16.957,"total_aprt_power":697.078,