From b125bf686aaa90cab2183403f4ad366b80ec25e9 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Fri, 5 Dec 2025 13:23:44 +0100 Subject: [PATCH 1/3] shelly: 2 channel shelly --- packages/modules/devices/shelly/shelly/inverter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/modules/devices/shelly/shelly/inverter.py b/packages/modules/devices/shelly/shelly/inverter.py index 6139fd1d3a..82f383ef77 100644 --- a/packages/modules/devices/shelly/shelly/inverter.py +++ b/packages/modules/devices/shelly/shelly/inverter.py @@ -56,7 +56,7 @@ def update(self) -> None: elif "emeters" in status: meters = status['emeters'] # shellyEM & shelly3EM # shellyEM has one meter, shelly3EM has three meters - for i in range(0, 3): + for i in range(len(meters)): currents[(i+self.phase-1) % 3] = (float(meters[i]['current']) * self.factor if meters[i].get('current') else 0) power = power + (float(meters[i]['power'] * self.factor)) From 4f7956456b6fe73f2c3d44e035069e30fd98d8d2 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Fri, 5 Dec 2025 13:35:07 +0100 Subject: [PATCH 2/3] fix --- packages/modules/devices/shelly/shelly/bat.py | 2 +- packages/modules/devices/shelly/shelly/counter.py | 2 +- packages/modules/devices/shelly/shelly/inverter.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/modules/devices/shelly/shelly/bat.py b/packages/modules/devices/shelly/shelly/bat.py index caf4a9760c..69ea64e5bf 100644 --- a/packages/modules/devices/shelly/shelly/bat.py +++ b/packages/modules/devices/shelly/shelly/bat.py @@ -65,7 +65,7 @@ def update(self) -> None: # shelly Pro3EM elif "em:0" in status: meters = status['em:0'] - for i in range(0, 3): + for i in range(len(meters)): 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 diff --git a/packages/modules/devices/shelly/shelly/counter.py b/packages/modules/devices/shelly/shelly/counter.py index 558d2249ec..c82258d933 100644 --- a/packages/modules/devices/shelly/shelly/counter.py +++ b/packages/modules/devices/shelly/shelly/counter.py @@ -81,7 +81,7 @@ def update(self) -> None: voltages = [0.0, 0.0, 0.0] power_factors = [0.0, 0.0, 0.0] meters = status['em:0'] - for i in range(0, 3): + for i in range(len(meters)): powers[(i+self.phase-1) % 3] = (float(meters[f'{alphabetical_index[i]}_act_power']) * self.factor if meters.get(f'{alphabetical_index[i]}_act_power') else 0) voltages[(i+self.phase-1) % 3] = (float(meters[f'{alphabetical_index[i]}_voltage']) diff --git a/packages/modules/devices/shelly/shelly/inverter.py b/packages/modules/devices/shelly/shelly/inverter.py index 82f383ef77..ab1ac1bb20 100644 --- a/packages/modules/devices/shelly/shelly/inverter.py +++ b/packages/modules/devices/shelly/shelly/inverter.py @@ -64,7 +64,7 @@ def update(self) -> None: # shelly Pro3EM elif "em:0" in status: meters = status['em:0'] - for i in range(0, 3): + for i in range(len(meters)): 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 From 7bf7a2c8fc2076102ab61d19b3f3fe7fc28de9ef Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Fri, 5 Dec 2025 13:46:59 +0100 Subject: [PATCH 3/3] fix alphabetical index --- packages/modules/devices/shelly/shelly/bat.py | 4 +++- packages/modules/devices/shelly/shelly/counter.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/modules/devices/shelly/shelly/bat.py b/packages/modules/devices/shelly/shelly/bat.py index 69ea64e5bf..510c88b641 100644 --- a/packages/modules/devices/shelly/shelly/bat.py +++ b/packages/modules/devices/shelly/shelly/bat.py @@ -65,7 +65,9 @@ def update(self) -> None: # shelly Pro3EM elif "em:0" in status: meters = status['em:0'] - for i in range(len(meters)): + for i in range(0, 3): + 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) power = float(meters['total_act_power']) * self.factor diff --git a/packages/modules/devices/shelly/shelly/counter.py b/packages/modules/devices/shelly/shelly/counter.py index c82258d933..a9f10fcfce 100644 --- a/packages/modules/devices/shelly/shelly/counter.py +++ b/packages/modules/devices/shelly/shelly/counter.py @@ -81,7 +81,9 @@ def update(self) -> None: voltages = [0.0, 0.0, 0.0] power_factors = [0.0, 0.0, 0.0] meters = status['em:0'] - for i in range(len(meters)): + for i in range(0, 3): + if meters.get(f'{alphabetical_index[i]}_act_power') is None: + continue powers[(i+self.phase-1) % 3] = (float(meters[f'{alphabetical_index[i]}_act_power']) * self.factor if meters.get(f'{alphabetical_index[i]}_act_power') else 0) voltages[(i+self.phase-1) % 3] = (float(meters[f'{alphabetical_index[i]}_voltage'])