diff --git a/packages/modules/devices/shelly/shelly/bat.py b/packages/modules/devices/shelly/shelly/bat.py index caf4a9760c..510c88b641 100644 --- a/packages/modules/devices/shelly/shelly/bat.py +++ b/packages/modules/devices/shelly/shelly/bat.py @@ -66,6 +66,8 @@ def update(self) -> None: elif "em:0" in status: meters = status['em:0'] 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 558d2249ec..a9f10fcfce 100644 --- a/packages/modules/devices/shelly/shelly/counter.py +++ b/packages/modules/devices/shelly/shelly/counter.py @@ -82,6 +82,8 @@ def update(self) -> None: power_factors = [0.0, 0.0, 0.0] meters = status['em:0'] 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']) diff --git a/packages/modules/devices/shelly/shelly/inverter.py b/packages/modules/devices/shelly/shelly/inverter.py index 6139fd1d3a..ab1ac1bb20 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)) @@ -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