From e3ab30a2a53aa9033c1d5121a6367e58130ef1b2 Mon Sep 17 00:00:00 2001 From: Marlon Date: Mon, 19 Aug 2024 16:57:43 +0200 Subject: [PATCH] Add support for whole apsystems ez1 series (#123356) * Add support for whole apsystems ez1 series by configuring the max_output at setup to match the value by the inverter * Check Max output for apsystems on startup, not setup * Move max output check into coordinator * Raise UpdateFailed on error in apsystems --- homeassistant/components/apsystems/coordinator.py | 9 ++++++++- homeassistant/components/apsystems/number.py | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/apsystems/coordinator.py b/homeassistant/components/apsystems/coordinator.py index 96956bafc3e..6ba4f01dbc8 100644 --- a/homeassistant/components/apsystems/coordinator.py +++ b/homeassistant/components/apsystems/coordinator.py @@ -8,7 +8,7 @@ from datetime import timedelta from APsystemsEZ1 import APsystemsEZ1M, ReturnAlarmInfo, ReturnOutputData from homeassistant.core import HomeAssistant -from homeassistant.helpers.update_coordinator import DataUpdateCoordinator +from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed from .const import LOGGER @@ -34,6 +34,13 @@ class ApSystemsDataCoordinator(DataUpdateCoordinator[ApSystemsSensorData]): ) self.api = api + async def _async_setup(self) -> None: + try: + max_power = (await self.api.get_device_info()).maxPower + except (ConnectionError, TimeoutError): + raise UpdateFailed from None + self.api.max_power = max_power + async def _async_update_data(self) -> ApSystemsSensorData: output_data = await self.api.get_output_data() alarm_info = await self.api.get_alarm_info() diff --git a/homeassistant/components/apsystems/number.py b/homeassistant/components/apsystems/number.py index f9b535d7d6a..51e7130587f 100644 --- a/homeassistant/components/apsystems/number.py +++ b/homeassistant/components/apsystems/number.py @@ -26,7 +26,6 @@ async def async_setup_entry( class ApSystemsMaxOutputNumber(ApSystemsEntity, NumberEntity): """Base sensor to be used with description.""" - _attr_native_max_value = 800 _attr_native_min_value = 30 _attr_native_step = 1 _attr_device_class = NumberDeviceClass.POWER @@ -42,6 +41,7 @@ class ApSystemsMaxOutputNumber(ApSystemsEntity, NumberEntity): super().__init__(data) self._api = data.coordinator.api self._attr_unique_id = f"{data.device_id}_output_limit" + self._attr_native_max_value = data.coordinator.api.max_power async def async_update(self) -> None: """Set the state with the value fetched from the inverter."""