sensor.py 1.9 KB

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