Skip to content
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

Closed
wants to merge 9 commits into from

Conversation

okaegi
Copy link
Contributor

@okaegi okaegi commented Oct 16, 2022

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.

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.
packages/modules/e3dc/bat.py Outdated Show resolved Hide resolved
packages/modules/e3dc/bat.py Outdated Show resolved Hide resolved
packages/modules/e3dc/counter.py Outdated Show resolved Hide resolved
packages/modules/e3dc/counter.py Outdated Show resolved Hide resolved
packages/modules/e3dc/counter.py Outdated Show resolved Hide resolved
packages/modules/e3dc/counter.py Outdated Show resolved Hide resolved
packages/modules/e3dc/counter.py Outdated Show resolved Hide resolved
packages/modules/e3dc/counter.py Outdated Show resolved Hide resolved
packages/modules/e3dc/counter.py Outdated Show resolved Hide resolved
packages/modules/e3dc/device.py Outdated Show resolved Hide resolved
yanniks vorschläge umgesetzt
@okaegi okaegi requested a review from yankee42 October 16, 2022 15:08
@okaegi
Copy link
Contributor Author

okaegi commented Oct 16, 2022 via email

@yankee42
Copy link
Contributor

Ohne jetzt E3DC genau zu kennen würde ich behaupten, dass wenn du zwei getrennte IP-Adressen hast, dann hast du auch zwei getrennte Geräte. Und ich vermute, dass man nur deswegen 2 IP-Adressen konfigurieren kann, weil man in V1 die Limitierung umgehen wollte, dass man in V1 nur maximal 2 PV-Anlagen konfigurieren kann.

Naja, das die Aussage in der 1.9 gehen nur zwei Pv Anlagen so nicht korrekt ist wenn du ein e3dc hast

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 ?
@okaegi
Copy link
Contributor Author

okaegi commented Oct 23, 2022

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 ?

packages/modules/e3dc/bat.py Show resolved Hide resolved
packages/modules/e3dc/bat.py Outdated Show resolved Hide resolved
packages/modules/e3dc/bat.py Outdated Show resolved Hide resolved
Comment on lines 11 to 12
self.ip_address1 = ip_address1
self.ip_address2 = ip_address2
Copy link
Contributor

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/counter.py Outdated Show resolved Hide resolved
pvwk, pv_externalwk = read_inverter(client, read_ext)
pv += pvwk
pv_external += pv_externalwk
soc = soc / count
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
soc = soc / count
soc /= len(addresses)

Spart dir die Variable count ein.

packages/modules/e3dc/device.py Outdated Show resolved Hide resolved
packages/modules/e3dc/device.py Show resolved Hide resolved
packages/modules/e3dc/device.py Outdated Show resolved Hide resolved
packages/modules/e3dc/inverter.py Show resolved Hide resolved
Yanniks feedback umgesetzt...
@okaegi
Copy link
Contributor Author

okaegi commented Oct 30, 2022

Der Check der gefailt ist bezieht sich auf ein File welches gar nicht modifiziert wurde.

@okaegi okaegi requested a review from yankee42 October 30, 2022 16:16
Copy link
Contributor

@yankee42 yankee42 left a 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.

packages/modules/e3dc/config.py Show resolved Hide resolved
Comment on lines +45 to +47
self.__address = address
self.__pvmodul = pvmodul
self.__pvother = pvmodul != "none"
Copy link
Contributor

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
Copy link
Contributor

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,
Copy link
Contributor

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
Copy link
Contributor

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...

Suggested change
{"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
Copy link
Contributor

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
Copy link
Contributor

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):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# for register in range (40104,40132,4):

Diese Zeile vom Kommentar scheint mir keine Hilfe zu sein.

packages/modules/e3dc/inverter.py Show resolved Hide resolved
Comment on lines +41 to +42
self.__sim_counterpv = SimCounter(self.__device_id, self.component_config.id, prefix="pv")
self.__storepv = get_inverter_value_store(self.component_config.id)
Copy link
Contributor

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.

@okaegi okaegi closed this Nov 6, 2022
@okaegi
Copy link
Contributor Author

okaegi commented Nov 6, 2022

Neue PR gemacht siehe E3DC0020

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants