"""Sensor platform for HACS.""" from __future__ import annotations from typing import TYPE_CHECKING from homeassistant.components.sensor import SensorEntity from homeassistant.core import callback if TYPE_CHECKING: from .base import HacsBase from .const import DOMAIN from .entity import HacsSystemEntity from .enums import ConfigurationType async def async_setup_platform(hass, _config, async_add_entities, _discovery_info=None): """Setup sensor platform.""" async_add_entities([HACSSensor(hacs=hass.data.get(DOMAIN))]) async def async_setup_entry(hass, _config_entry, async_add_devices): """Setup sensor platform.""" hacs: HacsBase = hass.data.get(DOMAIN) if hacs.configuration.experimental: return async_add_devices([HACSSensor(hacs=hass.data.get(DOMAIN))]) class HACSSensor(HacsSystemEntity, SensorEntity): """HACS Sensor class.""" _attr_name = "hacs" _attr_native_unit_of_measurement = "pending update(s)" _attr_native_value = None @callback def _update(self) -> None: """Update the sensor.""" repositories = [ repository for repository in self.hacs.repositories.list_all if repository.pending_update ] self._attr_native_value = len(repositories) if ( self.hacs.configuration.config_type == ConfigurationType.YAML or not self.hacs.configuration.experimental ): self._attr_extra_state_attributes = { "repositories": [ { "name": repository.data.full_name, "display_name": repository.display_name, "installed_version": repository.display_installed_version, "available_version": repository.display_available_version, } for repository in repositories ] }