import logging from homeassistant.util import dt as dt_util from homeassistant.components.switch import SwitchEntity from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.update_coordinator import ( CoordinatorEntity ) from .const import ( DOMAIN, RELOAD_ICON, POWER_ICON ) _LOGGER = logging.getLogger(__name__) async def async_setup_entry(hass, config, add_entities, discovery_info=None): ecu = hass.data[DOMAIN].get("ecu") coordinator = hass.data[DOMAIN].get("coordinator") switches = [ APSystemsECUQuerySwitch(coordinator, ecu, "query_device", label="Query Device", icon=RELOAD_ICON), APSystemsECUInvertersSwitch(coordinator, ecu, "inverters_online", label="Inverters Online", icon=POWER_ICON), ] add_entities(switches) class APSystemsECUQuerySwitch(CoordinatorEntity, SwitchEntity): def __init__(self, coordinator, ecu, field, label=None, icon=None): super().__init__(coordinator) self.coordinator = coordinator self._ecu = ecu self._field = field self._label = label if not label: self._label = field self._icon = icon self._name = f"ECU {self._label}" self._state = True @property def unique_id(self): return f"{self._ecu.ecu.ecu_id}_{self._field}" @property def name(self): return self._name @property def icon(self): return self._icon @property def device_info(self): parent = f"ecu_{self._ecu.ecu.ecu_id}" return { "identifiers": { (DOMAIN, parent), } } @property def entity_category(self): return EntityCategory.CONFIG @property def is_on(self): return self._ecu.querying def turn_off(self, **kwargs): self._ecu.stop_query() self._state = False self.schedule_update_ha_state() def turn_on(self, **kwargs): self._ecu.start_query() self._state = True self.schedule_update_ha_state() class APSystemsECUInvertersSwitch(CoordinatorEntity, SwitchEntity): def __init__(self, coordinator, ecu, field, label=None, icon=None): super().__init__(coordinator) self.coordinator = coordinator self._ecu = ecu self._field = field self._label = label if not label: self._label = field self._icon = icon self._name = f"ECU {self._label}" self._state = True @property def unique_id(self): return f"{self._ecu.ecu.ecu_id}_{self._field}" @property def name(self): return self._name @property def icon(self): return self._icon @property def device_info(self): parent = f"ecu_{self._ecu.ecu.ecu_id}" return { "identifiers": { (DOMAIN, parent), } } @property def entity_category(self): return EntityCategory.CONFIG @property def is_on(self): return self._ecu.inverters_online def turn_off(self, **kwargs): self._ecu.inverters_off() self._state = False self.schedule_update_ha_state() def turn_on(self, **kwargs): self._ecu.inverters_on() self._state = True self.schedule_update_ha_state()