From e8acccce052f4f380089d0f94712288fd14a3190 Mon Sep 17 00:00:00 2001 From: Arie Catsman <120491684+catsmanac@users.noreply.github.com> Date: Mon, 8 Jan 2024 22:28:04 +0100 Subject: [PATCH] Catch missing inverter in Enphase Envoy (#106730) * bug: prevent invalid key when empty invereter arrays is returned. Some envoy fw versions return an empty inverter array every 4 hours when no production is taking place. Prevent collection failure due to this as other data seems fine. Inveretrs will show unknown during this cycle. * refactor: replace try/catch with test and make warning debug * Update homeassistant/components/enphase_envoy/sensor.py * Update homeassistant/components/enphase_envoy/sensor.py --------- Co-authored-by: Joost Lekkerkerker --- homeassistant/components/enphase_envoy/sensor.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/enphase_envoy/sensor.py b/homeassistant/components/enphase_envoy/sensor.py index 1dfd72dcaf3..2ae9dca63ba 100644 --- a/homeassistant/components/enphase_envoy/sensor.py +++ b/homeassistant/components/enphase_envoy/sensor.py @@ -479,10 +479,20 @@ class EnvoyInverterEntity(EnvoySensorBaseEntity): ) @property - def native_value(self) -> datetime.datetime | float: + def native_value(self) -> datetime.datetime | float | None: """Return the state of the sensor.""" inverters = self.data.inverters assert inverters is not None + # Some envoy fw versions return an empty inverter array every 4 hours when + # no production is taking place. Prevent collection failure due to this + # as other data seems fine. Inverters will show unknown during this cycle. + if self._serial_number not in inverters: + _LOGGER.debug( + "Inverter %s not in returned inverters array (size: %s)", + self._serial_number, + len(inverters), + ) + return None return self.entity_description.value_fn(inverters[self._serial_number])