sensor.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. """Sensor platform for HACS."""
  2. from __future__ import annotations
  3. from homeassistant.components.sensor import SensorEntity
  4. from homeassistant.core import callback
  5. from .const import DOMAIN
  6. from .entity import HacsSystemEntity
  7. from .enums import ConfigurationType
  8. async def async_setup_platform(hass, _config, async_add_entities, _discovery_info=None):
  9. """Setup sensor platform."""
  10. async_add_entities([HACSSensor(hacs=hass.data.get(DOMAIN))])
  11. async def async_setup_entry(hass, _config_entry, async_add_devices):
  12. """Setup sensor platform."""
  13. async_add_devices([HACSSensor(hacs=hass.data.get(DOMAIN))])
  14. class HACSSensor(HacsSystemEntity, SensorEntity):
  15. """HACS Sensor class."""
  16. _attr_name = "hacs"
  17. _attr_native_unit_of_measurement = "pending update(s)"
  18. _attr_native_value = None
  19. @callback
  20. def _update(self) -> None:
  21. """Update the sensor."""
  22. repositories = [
  23. repository
  24. for repository in self.hacs.repositories.list_all
  25. if repository.pending_update
  26. ]
  27. self._attr_native_value = len(repositories)
  28. if (
  29. self.hacs.configuration.config_type == ConfigurationType.YAML
  30. or not self.hacs.configuration.experimental
  31. ):
  32. self._attr_extra_state_attributes = {
  33. "repositories": [
  34. {
  35. "name": repository.data.full_name,
  36. "display_name": repository.display_name,
  37. "installed_version": repository.display_installed_version,
  38. "available_version": repository.display_available_version,
  39. }
  40. for repository in repositories
  41. ]
  42. }