-
Notifications
You must be signed in to change notification settings - Fork 203
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
E3DC nun komplett auf openwb V2.0 Struktur umgestellt #2449
Conversation
E3DC nun komplett auf openwb V2.0 umgestellt. Abschluss von snaptec#1949 Getested wurde EVU, Speicher und externe PV Produktion (mit Solaredge). Farm (zwei IP ADerssen) konnte ich nicht testen, In dem Zusammenhang ist ein (wahrscheinlich) generelles Issue mit Simcount aufgetaucht, das ist bei yankee42 zu Abklärung.
Naja, das die Aussage in der 1.9 gehen nur zwei Pv Anlagen so nicht korrekt ist wenn du ein e3dc hast und ich suche gerade einen Weg , wie ich die bestehende Flexibilität beibehalten kann.Gruss OliverAm 16.10.2022 18:42 schrieb Yannik Hampe ***@***.***>:
@yankee42 commented on this pull request.
In packages/modules/e3dc/bat.py:
+ ip_address1: str,
+ ip_address2: str,
E3dc verkauft ein Teil welches E3DC Farm heisst
Ist die "Farm" denn nützlich für openWB? Wenn wäre das ja eher eine Vereinfachung... Man würde dann einfach die Farm einstellen und alles ist abgefrühstückt? Aber dafür müsste man die API kennen. Hat dann aber mit der Fragestellung hier nichts zu tun?
Nun kannst du mit dem Speicher e3dc heute schon mehr machen.
Mir ist nicht klar worauf du hinaus willst.
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: ***@***.***>
|
Ich sollte vielleicht besser das Wort "Modul" verwenden: Du kannst in der V1 nicht mehr zwei PV-Module konfigurieren. Wenn man mehr als 2 PV-Anlagen hat musste man in V1 in die Trickkiste greifen. Und dann hat man all die Dinge angewendet die du genannt hast. Zum Beispiel die Möglichkeit geschaffen, dass ein Modul sich wiederrum aus 2 Wechselrichtern zusammensetzt etc. Der Modulcode muss dann alles aufsummieren was sie hat. Aus Sicht der openWB ist es dann nur eine PV-Anlage. Dass sich das Modul die Daten geholt hat indem sie mehrere Anlagen aufsummiert hat sieht die openWB nicht und weiß sie nicht. Ich würde sagen, dass ist ein "Hack" um die Limitierung zu umgehen, dass du nur 2 Module konfigurieren kannst. Das funktioniert auch alles ganz wunderbar. Aber in V2 hat sich die Philosophie geändert. Es gibt keine Limitierung mehr wieviele Wechselrichter du konfigurieren kannst. Damit verlieren all diese Tricks, die in V1 nötig waren ihre Existenzberechtigung. Das vereinfacht den Code und macht alles in V2 übersichtlicher. Aber es ist eine Herausforderung den Code so zu schreiben, dass der alte V1-Kram immernoch funktioniert. |
Folgende Punkte wurde aufgrund Yanniks Feedback geändert: a) Auf configurable device umgestellt b) der in der V1.9 kombinierte Zugriff auf Speicher und PV wurde getrennt (neue Klasse E3dcBat und Klasse E3dcInverter) c) die E3dc Farm (zwei IP Adressen) läuft mit der bestehenden Parametrisierung nur noch in V1.9. In V2.0 müssen dann jeweils zwei oder mehrere E3dc bat / inverter definiert werden V1.9 und V2.0 werden in den gleichen Modulen abgehandelt. Fragen: Es wird im configurable Device die Modbus Verbindung geschlossen, dafür wird die client ID in der Klasse E3dc gespeichert, gibt es hier was eleganteres ?
Folgende Punkte wurde aufgrund Yanniks Feedback geändert: |
packages/modules/e3dc/config.py
Outdated
self.ip_address1 = ip_address1 | ||
self.ip_address2 = ip_address2 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hier sollte nur eine Adresse sein. Die ich auch wieder nur address
nennen würde, denn es könnte auch ein hostname sein.
packages/modules/e3dc/device.py
Outdated
pvwk, pv_externalwk = read_inverter(client, read_ext) | ||
pv += pvwk | ||
pv_external += pv_externalwk | ||
soc = soc / count |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
soc = soc / count | |
soc /= len(addresses) |
Spart dir die Variable count
ein.
Der Check der gefailt ist bezieht sich auf ein File welches gar nicht modifiziert wurde. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Der Check der gefailt ist bezieht sich auf ein File welches gar nicht modifiziert wurde.
Das wundert mich auch. Ich habe alles versucht um das zu reproduzieren, aber bei mir tritt das nicht auf. Ich habe sogar den PR in meinem Fork aufgemacht und der Check läuft ohne Fehler durch. Eventuell verschwindet der einfach nach dem nächsten Push. Es wäre ohnehin übersichtlicher die 9 commits zusammenzufassen.
self.__address = address | ||
self.__pvmodul = pvmodul | ||
self.__pvother = pvmodul != "none" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Außer in Logausgaben werden diese drei Variablen nie gelesen und haben in V2 auch keine Bedeutung. --> Ersatzlos streichen (siehe auch Kommentar in packages/modules/e3dc/config.py
)
log.debug("Beginning EVU update") | ||
power = client.read_holding_registers(40073, ModbusDataType.INT_32, wordorder=Endian.Little, unit=1) | ||
# 40130,40131, 40132 je Phasenleistung in Watt | ||
# max 6 Leistungsmesser verbaut ab 40105, typ 1 ist evu |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"max 6 Leistungsmesser verbaut": Das ist immernoch der alte Kommentar. Der Code liest bis zu 7 Leistungsmesser aus. Entweder der Kommentar lügt oder der Code weiter unten liest unnötigerweise 28 Register aus und die 28 sollte durch eine 24 getauscht werden.
def read_legacy_counter(address1: str, | ||
address2: str, | ||
read_ext: int, | ||
pvmodul: str, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ist zwar korrektes Deutsch, aber wo alle anderen Variablen Englisch sind... pv_module
? (Betrifft einige Vorkommnisse)
|
||
def main(argv: List[str]): | ||
run_using_positional_cli_args( | ||
{"batv19": read_legacy_batv19, "counter": read_legacy_counter}, argv |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ich wäre immernoch dafür das 19 zu entfernen...
{"batv19": read_legacy_batv19, "counter": read_legacy_counter}, argv | |
{"bat": read_legacy_bat, "counter": read_legacy_counter}, argv |
Denn legacy
sagt das bereits. Ist sonst doppelt.
self.__sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="bezug") | ||
self.__store = get_counter_value_store(self.component_config.id) | ||
self.component_info = ComponentInfo.from_component_config(self.component_config) | ||
self.__address = address |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Du hattest dich nicht zu meinem Einwand geäußert, dass _address
nur zwecks Logausgabe mitgeschleppt wird. Eine Mögliche Alternative wäre in der Funktion update_components
in der device.py
eine Logausgabe "reading %s" mit der Adresse rauszuhauen. Dann ist die IP auch geloggt, aber du musst die nicht überall durchschleppen.
self.__sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="bezug") | ||
self.__store = get_counter_value_store(self.component_config.id) | ||
self.component_info = ComponentInfo.from_component_config(self.component_config) | ||
self.__address = address |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Du hattest dich nicht zu meinem Einwand geäußert, dass _address
nur zwecks Logausgabe mitgeschleppt wird. Eine Mögliche Alternative wäre in der Funktion update_components
in der device.py
eine Logausgabe "reading %s" mit der Adresse rauszuhauen. Dann ist die IP auch geloggt, aber du musst die nicht überall durchschleppen.
# 40130,40131, 40132 je Phasenleistung in Watt | ||
# max 6 Leistungsmesser verbaut ab 40105, typ 1 ist evu | ||
# bei den meisten e3dc auf 40128 | ||
# for register in range (40104,40132,4): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
# for register in range (40104,40132,4): |
Diese Zeile vom Kommentar scheint mir keine Hilfe zu sein.
self.__sim_counterpv = SimCounter(self.__device_id, self.component_config.id, prefix="pv") | ||
self.__storepv = get_inverter_value_store(self.component_config.id) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
der Namenskonvention entsprechend __sim_counter_pv
und __store_pv
. Oder auch nur __sim_counter
und __store
. Da die Klasse nichts anderes als PV macht wäre das OK.
Neue PR gemacht siehe E3DC0020 |
E3DC nun komplett auf openwb V2.0 umgestellt. Abschluss von
#1949
Getested wurde EVU, Speicher und externe PV Produktion (mit Solaredge). Farm (zwei IP Adressen) konnte ich nicht testen,
In dem Zusammenhang ist ein (wahrscheinlich) generelles Issue mit Simcount aufgetaucht, das ist bei yankee42 zu Abklärung.