""" A sensor entity that holds the result of the recuit simule algorithm """ import logging from homeassistant.const import UnitOfPower from homeassistant.core import callback, HomeAssistant from homeassistant.helpers.update_coordinator import CoordinatorEntity from homeassistant.components.sensor import ( SensorEntity, SensorDeviceClass, SensorStateClass, ) from homeassistant.config_entries import ConfigEntry from homeassistant.helpers.entity_platform import ( AddEntitiesCallback, ) from .const import DOMAIN from .coordinator import SolarOptimizerCoordinator _LOGGER = logging.getLogger(__name__) async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback ) -> None: """Setup the entries of type Sensor""" # Sets the config entries values to SolarOptimizer coordinator coordinator: SolarOptimizerCoordinator = hass.data[DOMAIN]["coordinator"] entity1 = SolarOptimizerSensorEntity(coordinator, hass, "best_objective") entity2 = SolarOptimizerSensorEntity(coordinator, hass, "total_power") entity3 = SolarOptimizerSensorEntity(coordinator, hass, "power_production") entity4 = SolarOptimizerSensorEntity(coordinator, hass, "power_production_brut") entity5 = SolarOptimizerSensorEntity(coordinator, hass, "battery_soc") async_add_entities([entity1, entity2, entity3, entity4, entity5], False) await coordinator.configure(entry) class SolarOptimizerSensorEntity(CoordinatorEntity, SensorEntity): """The entity holding the algorithm calculation""" def __init__(self, coordinator, hass, idx): super().__init__(coordinator, context=idx) self._hass = hass self.idx = idx self._attr_name = idx self._attr_unique_id = "solar_optimizer_" + idx self._attr_native_value = None @callback def _handle_coordinator_update(self) -> None: """Handle updated data from the coordinator.""" if ( not self.coordinator or not self.coordinator.data or (value := self.coordinator.data.get(self.idx)) == None ): _LOGGER.debug("No coordinator found or no data...") return self._attr_native_value = value self.async_write_ha_state() @property def device_info(self): # Retournez des informations sur le périphérique associé à votre entité return { "identifiers": {(DOMAIN, "solar_optimizer_device")}, "name": "Solar Optimizer", # Autres attributs du périphérique ici } @property def icon(self) -> str | None: if self.idx == "best_objective": return "mdi:bullseye-arrow" elif self.idx == "total_power": return "mdi:flash" elif self.idx == "battery_soc": return "mdi:battery" else: return "mdi:solar-power-variant" @property def device_class(self) -> SensorDeviceClass | None: if self.idx == "best_objective": return SensorDeviceClass.MONETARY elif self.idx == "battery_soc": return SensorDeviceClass.BATTERY else: return SensorDeviceClass.POWER @property def state_class(self) -> SensorStateClass | None: if self.idx == "best_objective": return SensorStateClass.TOTAL else: return SensorStateClass.MEASUREMENT @property def native_unit_of_measurement(self) -> str | None: if self.idx == "best_objective": return "€" elif self.idx == "battery_soc": return "%" else: return UnitOfPower.WATT