diff --git a/homeassistant/components/hassio/const.py b/homeassistant/components/hassio/const.py index 487d0bf48f1..4a6422d0806 100644 --- a/homeassistant/components/hassio/const.py +++ b/homeassistant/components/hassio/const.py @@ -86,6 +86,7 @@ DATA_OS_INFO = "hassio_os_info" DATA_NETWORK_INFO = "hassio_network_info" DATA_SUPERVISOR_INFO = "hassio_supervisor_info" DATA_SUPERVISOR_STATS = "hassio_supervisor_stats" +DATA_ADDONS = "hassio_addons" DATA_ADDONS_INFO = "hassio_addons_info" DATA_ADDONS_STATS = "hassio_addons_stats" HASSIO_UPDATE_INTERVAL = timedelta(minutes=1) diff --git a/homeassistant/components/hassio/coordinator.py b/homeassistant/components/hassio/coordinator.py index 8698a36023f..2dc23929568 100644 --- a/homeassistant/components/hassio/coordinator.py +++ b/homeassistant/components/hassio/coordinator.py @@ -30,6 +30,7 @@ from .const import ( CONTAINER_INFO, CONTAINER_STATS, CORE_CONTAINER, + DATA_ADDONS, DATA_ADDONS_INFO, DATA_ADDONS_STATS, DATA_COMPONENT, @@ -113,6 +114,16 @@ def get_network_info(hass: HomeAssistant) -> dict[str, Any] | None: return hass.data.get(DATA_NETWORK_INFO) +@callback +@bind_hass +def get_addons(hass: HomeAssistant) -> dict[str, Any] | None: + """Return Addons info. + + Async friendly. + """ + return hass.data.get(DATA_ADDONS) + + @callback @bind_hass def get_addons_info(hass: HomeAssistant) -> dict[str, dict[str, Any]] | None: @@ -321,7 +332,7 @@ class HassioAddOnDataUpdateCoordinator(DataUpdateCoordinator): raise UpdateFailed(f"Error on Supervisor API: {err}") from err new_data: dict[str, Any] = {} - supervisor_info = get_supervisor_info(self.hass) or {} + addons = get_addons(self.hass) or {} addons_info = get_addons_info(self.hass) or {} addons_stats = get_addons_stats(self.hass) store_data = get_store(self.hass) @@ -345,7 +356,7 @@ class HassioAddOnDataUpdateCoordinator(DataUpdateCoordinator): addon.get(ATTR_REPOSITORY), addon.get(ATTR_REPOSITORY, "") ), } - for addon in supervisor_info.get("addons", []) + for addon in addons.get("addons", []) } # If this is the initial refresh, register all addons and return the dict @@ -390,9 +401,9 @@ class HassioAddOnDataUpdateCoordinator(DataUpdateCoordinator): container_updates = self._container_updates data = self.hass.data - data[DATA_SUPERVISOR_INFO] = await self.hassio.get_supervisor_info() + data[DATA_ADDONS] = await self.hassio.get_addons() - _addon_data = data[DATA_SUPERVISOR_INFO].get("addons", []) + _addon_data = data[DATA_ADDONS].get("addons", []) all_addons: list[str] = [] started_addons: list[str] = [] for addon in _addon_data: diff --git a/homeassistant/components/hassio/handler.py b/homeassistant/components/hassio/handler.py index 7aec0aa7a61..893defd0ebd 100644 --- a/homeassistant/components/hassio/handler.py +++ b/homeassistant/components/hassio/handler.py @@ -226,6 +226,14 @@ class HassIO: """ return self.send_command("/ingress/panels", method="get") + @api_data + def get_addons(self) -> Coroutine: + """Return data installed Add-ons. + + This method returns a coroutine. + """ + return self.send_command("/addons", method="get") + @_api_bool async def update_hass_api( self, http_config: dict[str, Any], refresh_token: RefreshToken