Use /addons to get list of add-ons

This commit is contained in:
Stefan Agner 2025-06-23 22:56:58 +02:00
parent ccc7eec253
commit e921373833
No known key found for this signature in database
GPG Key ID: AE01353D1E44747D
3 changed files with 24 additions and 4 deletions

View File

@ -86,6 +86,7 @@ DATA_OS_INFO = "hassio_os_info"
DATA_NETWORK_INFO = "hassio_network_info" DATA_NETWORK_INFO = "hassio_network_info"
DATA_SUPERVISOR_INFO = "hassio_supervisor_info" DATA_SUPERVISOR_INFO = "hassio_supervisor_info"
DATA_SUPERVISOR_STATS = "hassio_supervisor_stats" DATA_SUPERVISOR_STATS = "hassio_supervisor_stats"
DATA_ADDONS = "hassio_addons"
DATA_ADDONS_INFO = "hassio_addons_info" DATA_ADDONS_INFO = "hassio_addons_info"
DATA_ADDONS_STATS = "hassio_addons_stats" DATA_ADDONS_STATS = "hassio_addons_stats"
HASSIO_UPDATE_INTERVAL = timedelta(minutes=1) HASSIO_UPDATE_INTERVAL = timedelta(minutes=1)

View File

@ -30,6 +30,7 @@ from .const import (
CONTAINER_INFO, CONTAINER_INFO,
CONTAINER_STATS, CONTAINER_STATS,
CORE_CONTAINER, CORE_CONTAINER,
DATA_ADDONS,
DATA_ADDONS_INFO, DATA_ADDONS_INFO,
DATA_ADDONS_STATS, DATA_ADDONS_STATS,
DATA_COMPONENT, DATA_COMPONENT,
@ -113,6 +114,16 @@ def get_network_info(hass: HomeAssistant) -> dict[str, Any] | None:
return hass.data.get(DATA_NETWORK_INFO) 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 @callback
@bind_hass @bind_hass
def get_addons_info(hass: HomeAssistant) -> dict[str, dict[str, Any]] | None: 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 raise UpdateFailed(f"Error on Supervisor API: {err}") from err
new_data: dict[str, Any] = {} 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_info = get_addons_info(self.hass) or {}
addons_stats = get_addons_stats(self.hass) addons_stats = get_addons_stats(self.hass)
store_data = get_store(self.hass) store_data = get_store(self.hass)
@ -345,7 +356,7 @@ class HassioAddOnDataUpdateCoordinator(DataUpdateCoordinator):
addon.get(ATTR_REPOSITORY), addon.get(ATTR_REPOSITORY, "") 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 # 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 container_updates = self._container_updates
data = self.hass.data 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] = [] all_addons: list[str] = []
started_addons: list[str] = [] started_addons: list[str] = []
for addon in _addon_data: for addon in _addon_data:

View File

@ -226,6 +226,14 @@ class HassIO:
""" """
return self.send_command("/ingress/panels", method="get") 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 @_api_bool
async def update_hass_api( async def update_hass_api(
self, http_config: dict[str, Any], refresh_token: RefreshToken self, http_config: dict[str, Any], refresh_token: RefreshToken