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 <joostlek@outlook.com>
This commit is contained in:
Arie Catsman 2024-01-08 22:28:04 +01:00 committed by GitHub
parent ca886de3ca
commit e8acccce05
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -479,10 +479,20 @@ class EnvoyInverterEntity(EnvoySensorBaseEntity):
) )
@property @property
def native_value(self) -> datetime.datetime | float: def native_value(self) -> datetime.datetime | float | None:
"""Return the state of the sensor.""" """Return the state of the sensor."""
inverters = self.data.inverters inverters = self.data.inverters
assert inverters is not None 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]) return self.entity_description.value_fn(inverters[self._serial_number])