From 045ca523a60ad295991cda0d037c49475e1361f7 Mon Sep 17 00:00:00 2001 From: Christian <76468662+Pendragon77@users.noreply.github.com> Date: Mon, 9 Feb 2026 20:25:38 +0100 Subject: [PATCH 1/5] Update inverter.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bei Shelly 3EM-63 Gen3 ist len(meters) nicht die Anzahl der Phasen sondern die Gesamtlänge der Mesergebnisse und somit viel zu groß --- .../modules/devices/shelly/shelly/inverter.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/modules/devices/shelly/shelly/inverter.py b/packages/modules/devices/shelly/shelly/inverter.py index dead37eb31..8fb8355285 100644 --- a/packages/modules/devices/shelly/shelly/inverter.py +++ b/packages/modules/devices/shelly/shelly/inverter.py @@ -64,11 +64,16 @@ def update(self) -> None: # shelly Pro3EM elif "em:0" in status: meters = status['em:0'] - for i in range(len(meters)): - if meters.get(f'{alphabetical_index[i]}_current') is None: - continue - currents[(i+self.phase-1) % 3] = (float(meters[f'{alphabetical_index[i]}_current']) * self.factor - if meters.get(f'{alphabetical_index[i]}_current') else 0) + phase_keys = sorted( + key[0] + for key, value in meters.items() + if key.endswith('_current') and value is not None + ) + for i, phase in enumerate(phase_keys): + currents[(i + self.phase - 1) % 3] = float( + meters[f"{phase}_current"] + ) * self.factor + power = float(meters['total_act_power']) * self.factor # Shelly MiniPM G3 elif "pm1:0" in status: From a2fb0c3961ab746a1bcef58c38a38158799735d2 Mon Sep 17 00:00:00 2001 From: Christian <76468662+Pendragon77@users.noreply.github.com> Date: Mon, 9 Feb 2026 20:34:05 +0100 Subject: [PATCH 2/5] Update inverter.py Begrenzung auf 3 Phasen --- packages/modules/devices/shelly/shelly/inverter.py | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/modules/devices/shelly/shelly/inverter.py b/packages/modules/devices/shelly/shelly/inverter.py index 8fb8355285..ac216a6482 100644 --- a/packages/modules/devices/shelly/shelly/inverter.py +++ b/packages/modules/devices/shelly/shelly/inverter.py @@ -69,6 +69,7 @@ def update(self) -> None: for key, value in meters.items() if key.endswith('_current') and value is not None ) + phase_keys = phase_keys[:3] for i, phase in enumerate(phase_keys): currents[(i + self.phase - 1) % 3] = float( meters[f"{phase}_current"] From 583feb24071cbf9e3c4f89a6dd927e1b21339d9c Mon Sep 17 00:00:00 2001 From: Christian <76468662+Pendragon77@users.noreply.github.com> Date: Mon, 9 Feb 2026 20:42:04 +0100 Subject: [PATCH 3/5] Update inverter.py Autobuild hat die verwaiste Variable gefunden. --- packages/modules/devices/shelly/shelly/inverter.py | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/modules/devices/shelly/shelly/inverter.py b/packages/modules/devices/shelly/shelly/inverter.py index ac216a6482..5ed11c007d 100644 --- a/packages/modules/devices/shelly/shelly/inverter.py +++ b/packages/modules/devices/shelly/shelly/inverter.py @@ -44,7 +44,6 @@ def update(self) -> None: status_url = "http://" + self.address + "/rpc/Shelly.GetStatus" status = req.get_http_session().get(status_url, timeout=3).json() try: - alphabetical_index = ['a', 'b', 'c'] currents = [0.0, 0.0, 0.0] # GEN 1 if "meters" in status: From 5a9872b4d1d77c23a54cb1cec62fb222c315cac7 Mon Sep 17 00:00:00 2001 From: Christian <76468662+Pendragon77@users.noreply.github.com> Date: Tue, 10 Feb 2026 15:24:54 +0100 Subject: [PATCH 4/5] Update inverter.py Anpassung an den Vorschlag von ndrsnhs. Ist einfacher... --- .../modules/devices/shelly/shelly/inverter.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/packages/modules/devices/shelly/shelly/inverter.py b/packages/modules/devices/shelly/shelly/inverter.py index 5ed11c007d..74104cec14 100644 --- a/packages/modules/devices/shelly/shelly/inverter.py +++ b/packages/modules/devices/shelly/shelly/inverter.py @@ -44,6 +44,7 @@ def update(self) -> None: status_url = "http://" + self.address + "/rpc/Shelly.GetStatus" status = req.get_http_session().get(status_url, timeout=3).json() try: + alphabetical_index = ['a', 'b', 'c'] currents = [0.0, 0.0, 0.0] # GEN 1 if "meters" in status: @@ -63,17 +64,12 @@ def update(self) -> None: # shelly Pro3EM elif "em:0" in status: meters = status['em:0'] - phase_keys = sorted( - key[0] - for key, value in meters.items() - if key.endswith('_current') and value is not None - ) - phase_keys = phase_keys[:3] - for i, phase in enumerate(phase_keys): - currents[(i + self.phase - 1) % 3] = float( - meters[f"{phase}_current"] - ) * self.factor - + for i in range(0, 3): + if (f'{alphabetical_index[i]}_current' not in meters or + meters.get(f'{alphabetical_index[i]}_current') is None): + continue + currents[(i+self.phase-1) % 3] = (float(meters[f'{alphabetical_index[i]}_current']) * self.factor + if meters.get(f'{alphabetical_index[i]}_current') else 0) power = float(meters['total_act_power']) * self.factor # Shelly MiniPM G3 elif "pm1:0" in status: From 42818ca712dc4daec2dafbb4a019058f42b3f5d1 Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Tue, 24 Feb 2026 08:39:35 +0100 Subject: [PATCH 5/5] Apply suggestion from @LKuemmel --- packages/modules/devices/shelly/shelly/inverter.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/modules/devices/shelly/shelly/inverter.py b/packages/modules/devices/shelly/shelly/inverter.py index 74104cec14..40c5bf3456 100644 --- a/packages/modules/devices/shelly/shelly/inverter.py +++ b/packages/modules/devices/shelly/shelly/inverter.py @@ -65,8 +65,7 @@ def update(self) -> None: elif "em:0" in status: meters = status['em:0'] for i in range(0, 3): - if (f'{alphabetical_index[i]}_current' not in meters or - meters.get(f'{alphabetical_index[i]}_current') is None): + if meters.get(f'{alphabetical_index[i]}_current') is None: continue currents[(i+self.phase-1) % 3] = (float(meters[f'{alphabetical_index[i]}_current']) * self.factor if meters.get(f'{alphabetical_index[i]}_current') else 0)