async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): """Set up Sense from a config entry.""" entry_data = entry.data email = entry_data[CONF_EMAIL] password = entry_data[CONF_PASSWORD] timeout = entry_data[CONF_TIMEOUT] gateway = ASyncSenseable(api_timeout=timeout, wss_timeout=timeout) gateway.rate_limit = ACTIVE_UPDATE_RATE try: await gateway.authenticate(email, password) except SenseAuthenticationException: _LOGGER.error("Could not authenticate with sense server") return False except SENSE_TIMEOUT_EXCEPTIONS: raise ConfigEntryNotReady sense_devices_data = SenseDevicesData() try: sense_discovered_devices = await gateway.get_discovered_device_data() except SENSE_TIMEOUT_EXCEPTIONS: raise ConfigEntryNotReady hass.data[DOMAIN][entry.entry_id] = { SENSE_DATA: gateway, SENSE_DEVICES_DATA: sense_devices_data, SENSE_DISCOVERED_DEVICES_DATA: sense_discovered_devices, } for component in PLATFORMS: hass.async_create_task( hass.config_entries.async_forward_entry_setup(entry, component) ) async def async_sense_update(now): """Retrieve latest state.""" try: await gateway.update_realtime() except SenseAPITimeoutException: _LOGGER.error("Timeout retrieving data") data = gateway.get_realtime() if "devices" in data: sense_devices_data.set_devices_data(data["devices"]) async_dispatcher_send(hass, f"{SENSE_DEVICE_UPDATE}-{gateway.sense_monitor_id}") hass.data[DOMAIN][entry.entry_id][ "track_time_remove_callback" ] = async_track_time_interval( hass, async_sense_update, timedelta(seconds=ACTIVE_UPDATE_RATE) ) return True
async def validate_input(hass: core.HomeAssistant, data): """Validate the user input allows us to connect. Data has the keys from DATA_SCHEMA with values provided by the user. """ timeout = data[CONF_TIMEOUT] gateway = ASyncSenseable(api_timeout=timeout, wss_timeout=timeout) gateway.rate_limit = ACTIVE_UPDATE_RATE await gateway.authenticate(data[CONF_EMAIL], data[CONF_PASSWORD]) # Return info that you want to store in the config entry. return {"title": data[CONF_EMAIL]}
async def async_setup(hass, config): """Set up the Sense sensor.""" from sense_energy import (ASyncSenseable, SenseAuthenticationException, SenseAPITimeoutException) username = config[DOMAIN][CONF_EMAIL] password = config[DOMAIN][CONF_PASSWORD] timeout = config[DOMAIN][CONF_TIMEOUT] try: hass.data[SENSE_DATA] = ASyncSenseable(api_timeout=timeout, wss_timeout=timeout) hass.data[SENSE_DATA].rate_limit = ACTIVE_UPDATE_RATE await hass.data[SENSE_DATA].authenticate(username, password) except SenseAuthenticationException: _LOGGER.error("Could not authenticate with sense server") return False hass.async_create_task( async_load_platform(hass, 'sensor', DOMAIN, {}, config)) hass.async_create_task( async_load_platform(hass, 'binary_sensor', DOMAIN, {}, config)) async def async_sense_update(now): """Retrieve latest state.""" try: await hass.data[SENSE_DATA].update_realtime() async_dispatcher_send(hass, SENSE_DEVICE_UPDATE) except SenseAPITimeoutException: _LOGGER.error("Timeout retrieving data") async_track_time_interval(hass, async_sense_update, timedelta(seconds=ACTIVE_UPDATE_RATE)) return True
async def validate_input(opp: core.OpenPeerPower, data): """Validate the user input allows us to connect. Data has the keys from DATA_SCHEMA with values provided by the user. """ timeout = data[CONF_TIMEOUT] client_session = async_get_clientsession(opp) gateway = ASyncSenseable(api_timeout=timeout, wss_timeout=timeout, client_session=client_session) gateway.rate_limit = ACTIVE_UPDATE_RATE await gateway.authenticate(data[CONF_EMAIL], data[CONF_PASSWORD]) # Return info that you want to store in the config entry. return {"title": data[CONF_EMAIL]}
async def validate_input(self, data): """Validate the user input allows us to connect. Data has the keys from DATA_SCHEMA with values provided by the user. """ self._auth_data.update(dict(data)) timeout = self._auth_data[CONF_TIMEOUT] client_session = async_get_clientsession(self.hass) self._gateway = ASyncSenseable(api_timeout=timeout, wss_timeout=timeout, client_session=client_session) self._gateway.rate_limit = ACTIVE_UPDATE_RATE await self._gateway.authenticate(self._auth_data[CONF_EMAIL], self._auth_data[CONF_PASSWORD])
async def async_setup(hass, config): """Set up the Sense sensor.""" from sense_energy import ASyncSenseable, SenseAuthenticationException username = config[DOMAIN][CONF_EMAIL] password = config[DOMAIN][CONF_PASSWORD] timeout = config[DOMAIN][CONF_TIMEOUT] try: hass.data[SENSE_DATA] = ASyncSenseable(api_timeout=timeout, wss_timeout=timeout) hass.data[SENSE_DATA].rate_limit = ACTIVE_UPDATE_RATE await hass.data[SENSE_DATA].authenticate(username, password) except SenseAuthenticationException: _LOGGER.error("Could not authenticate with sense server") return False hass.async_create_task( async_load_platform(hass, 'sensor', DOMAIN, None, config)) hass.async_create_task( async_load_platform(hass, 'binary_sensor', DOMAIN, None, config)) return True
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up Sense from a config entry.""" entry_data = entry.data email = entry_data[CONF_EMAIL] password = entry_data[CONF_PASSWORD] timeout = entry_data[CONF_TIMEOUT] client_session = async_get_clientsession(hass) gateway = ASyncSenseable(api_timeout=timeout, wss_timeout=timeout, client_session=client_session) gateway.rate_limit = ACTIVE_UPDATE_RATE try: await gateway.authenticate(email, password) except SenseAuthenticationException: _LOGGER.error("Could not authenticate with sense server") return False except SENSE_TIMEOUT_EXCEPTIONS as err: raise ConfigEntryNotReady( str(err) or "Timed out during authentication") from err except SENSE_EXCEPTIONS as err: raise ConfigEntryNotReady(str(err) or "Error during authentication") from err sense_devices_data = SenseDevicesData() try: sense_discovered_devices = await gateway.get_discovered_device_data() await gateway.update_realtime() except SENSE_TIMEOUT_EXCEPTIONS as err: raise ConfigEntryNotReady( str(err) or "Timed out during realtime update") from err except SENSE_EXCEPTIONS as err: raise ConfigEntryNotReady(str(err) or "Error during realtime update") from err trends_coordinator: DataUpdateCoordinator[None] = DataUpdateCoordinator( hass, _LOGGER, name=f"Sense Trends {email}", update_method=gateway.update_trend_data, update_interval=timedelta(seconds=300), ) # Start out as unavailable so we do not report 0 data # until the update happens trends_coordinator.last_update_success = False # This can take longer than 60s and we already know # sense is online since get_discovered_device_data was # successful so we do it later. asyncio.create_task(trends_coordinator.async_request_refresh()) hass.data.setdefault(DOMAIN, {})[entry.entry_id] = { SENSE_DATA: gateway, SENSE_DEVICES_DATA: sense_devices_data, SENSE_TRENDS_COORDINATOR: trends_coordinator, SENSE_DISCOVERED_DEVICES_DATA: sense_discovered_devices, } hass.config_entries.async_setup_platforms(entry, PLATFORMS) async def async_sense_update(_): """Retrieve latest state.""" try: await gateway.update_realtime() except SENSE_TIMEOUT_EXCEPTIONS as ex: _LOGGER.error("Timeout retrieving data: %s", ex) except SENSE_EXCEPTIONS as ex: _LOGGER.error("Failed to update data: %s", ex) data = gateway.get_realtime() if "devices" in data: sense_devices_data.set_devices_data(data["devices"]) async_dispatcher_send( hass, f"{SENSE_DEVICE_UPDATE}-{gateway.sense_monitor_id}") remove_update_callback = async_track_time_interval( hass, async_sense_update, timedelta(seconds=ACTIVE_UPDATE_RATE)) @callback def _remove_update_callback_at_stop(event): remove_update_callback() entry.async_on_unload(remove_update_callback) entry.async_on_unload( hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, _remove_update_callback_at_stop)) return True
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): """Set up Sense from a config entry.""" entry_data = entry.data email = entry_data[CONF_EMAIL] password = entry_data[CONF_PASSWORD] timeout = entry_data[CONF_TIMEOUT] client_session = async_get_clientsession(hass) gateway = ASyncSenseable( api_timeout=timeout, wss_timeout=timeout, client_session=client_session ) gateway.rate_limit = ACTIVE_UPDATE_RATE try: await gateway.authenticate(email, password) except SenseAuthenticationException: _LOGGER.error("Could not authenticate with sense server") return False except SENSE_TIMEOUT_EXCEPTIONS as err: raise ConfigEntryNotReady from err sense_devices_data = SenseDevicesData() try: sense_discovered_devices = await gateway.get_discovered_device_data() await gateway.update_realtime() except SENSE_TIMEOUT_EXCEPTIONS as err: raise ConfigEntryNotReady from err trends_coordinator = DataUpdateCoordinator( hass, _LOGGER, name=f"Sense Trends {email}", update_method=gateway.update_trend_data, update_interval=timedelta(seconds=300), ) # This can take longer than 60s and we already know # sense is online since get_discovered_device_data was # successful so we do it later. hass.loop.create_task(trends_coordinator.async_request_refresh()) hass.data[DOMAIN][entry.entry_id] = { SENSE_DATA: gateway, SENSE_DEVICES_DATA: sense_devices_data, SENSE_TRENDS_COORDINATOR: trends_coordinator, SENSE_DISCOVERED_DEVICES_DATA: sense_discovered_devices, } for platform in PLATFORMS: hass.async_create_task( hass.config_entries.async_forward_entry_setup(entry, platform) ) async def async_sense_update(_): """Retrieve latest state.""" try: await gateway.update_realtime() except SenseAPITimeoutException: _LOGGER.error("Timeout retrieving data") data = gateway.get_realtime() if "devices" in data: sense_devices_data.set_devices_data(data["devices"]) async_dispatcher_send(hass, f"{SENSE_DEVICE_UPDATE}-{gateway.sense_monitor_id}") hass.data[DOMAIN][entry.entry_id][ "track_time_remove_callback" ] = async_track_time_interval( hass, async_sense_update, timedelta(seconds=ACTIVE_UPDATE_RATE) ) return True
async def async_setup_entry(opp: OpenPeerPower, entry: ConfigEntry): """Set up Sense from a config entry.""" entry_data = entry.data email = entry_data[CONF_EMAIL] password = entry_data[CONF_PASSWORD] timeout = entry_data[CONF_TIMEOUT] client_session = async_get_clientsession(opp) gateway = ASyncSenseable( api_timeout=timeout, wss_timeout=timeout, client_session=client_session ) gateway.rate_limit = ACTIVE_UPDATE_RATE try: await gateway.authenticate(email, password) except SenseAuthenticationException: _LOGGER.error("Could not authenticate with sense server") return False except SENSE_TIMEOUT_EXCEPTIONS as err: raise ConfigEntryNotReady from err sense_devices_data = SenseDevicesData() try: sense_discovered_devices = await gateway.get_discovered_device_data() await gateway.update_realtime() except SENSE_TIMEOUT_EXCEPTIONS as err: raise ConfigEntryNotReady from err trends_coordinator = DataUpdateCoordinator( opp, _LOGGER, name=f"Sense Trends {email}", update_method=gateway.update_trend_data, update_interval=timedelta(seconds=300), ) # This can take longer than 60s and we already know # sense is online since get_discovered_device_data was # successful so we do it later. asyncio.create_task(trends_coordinator.async_request_refresh()) opp.data.setdefault(DOMAIN, {})[entry.entry_id] = { SENSE_DATA: gateway, SENSE_DEVICES_DATA: sense_devices_data, SENSE_TRENDS_COORDINATOR: trends_coordinator, SENSE_DISCOVERED_DEVICES_DATA: sense_discovered_devices, } opp.config_entries.async_setup_platforms(entry, PLATFORMS) async def async_sense_update(_): """Retrieve latest state.""" try: await gateway.update_realtime() except SenseAPITimeoutException: _LOGGER.error("Timeout retrieving data") data = gateway.get_realtime() if "devices" in data: sense_devices_data.set_devices_data(data["devices"]) async_dispatcher_send(opp, f"{SENSE_DEVICE_UPDATE}-{gateway.sense_monitor_id}") remove_update_callback = async_track_time_interval( opp, async_sense_update, timedelta(seconds=ACTIVE_UPDATE_RATE) ) @callback def _remove_update_callback_at_stop(event): remove_update_callback() entry.async_on_unload(remove_update_callback) entry.async_on_unload( opp.bus.async_listen_once( EVENT_OPENPEERPOWER_STOP, _remove_update_callback_at_stop ) ) return True