async def _async_get_device( hass: HomeAssistant, host: str, entry: ConfigEntry ) -> YeelightDevice: # Get model from config and capabilities model = entry.options.get(CONF_MODEL) # Set up device bulb = AsyncBulb(host, model=model or None) device = YeelightDevice(hass, host, entry.options, bulb) # start listening for local pushes await device.bulb.async_listen(device.async_update_callback) # register stop callback to shutdown listening for local pushes async def async_stop_listen_task(event): """Stop listen task.""" _LOGGER.debug("Shutting down Yeelight Listener (stop event)") await device.bulb.async_stop_listening() @callback def _async_stop_listen_on_unload(): """Stop listen task.""" _LOGGER.debug("Shutting down Yeelight Listener (unload)") hass.async_create_task(device.bulb.async_stop_listening()) entry.async_on_unload( hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, async_stop_listen_task) ) entry.async_on_unload(_async_stop_listen_on_unload) return device
async def _async_get_device(hass: HomeAssistant, host: str, entry: ConfigEntry) -> YeelightDevice: # Get model from config and capabilities model = entry.options.get(CONF_MODEL) # Set up device bulb = AsyncBulb(host, model=model or None) capabilities = await hass.async_add_executor_job(bulb.get_capabilities) return YeelightDevice(hass, host, entry.options, bulb, capabilities)
async def _async_get_device( hass: HomeAssistant, host: str, entry: ConfigEntry ) -> YeelightDevice: # Get model from config and capabilities model = entry.options.get(CONF_MODEL) or entry.data.get(CONF_DETECTED_MODEL) # Set up device bulb = AsyncBulb(host, model=model or None) device = YeelightDevice(hass, host, {**entry.options, **entry.data}, bulb) # start listening for local pushes await device.bulb.async_listen(device.async_update_callback) # register stop callback to shutdown listening for local pushes async def async_stop_listen_task(event): """Stop listen task.""" _LOGGER.debug("Shutting down Yeelight Listener (stop event)") await device.bulb.async_stop_listening() @callback def _async_stop_listen_on_unload(): """Stop listen task.""" _LOGGER.debug("Shutting down Yeelight Listener (unload)") hass.async_create_task(device.bulb.async_stop_listening()) entry.async_on_unload( hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, async_stop_listen_task) ) entry.async_on_unload(_async_stop_listen_on_unload) # fetch initial state await device.async_update() if ( # Must have last_properties not device.bulb.last_properties # Must have at least a power property or ( "main_power" not in device.bulb.last_properties and "power" not in device.bulb.last_properties ) ): raise ConfigEntryNotReady( "Could not fetch initial state; try power cycling the device" ) return device
async def _async_try_connect(self, host, raise_on_progress=True): """Set up with options.""" self._async_abort_entries_match({CONF_HOST: host}) scanner = YeelightScanner.async_get(self.hass) capabilities = await scanner.async_get_capabilities(host) if capabilities is None: # timeout _LOGGER.debug("Failed to get capabilities from %s: timeout", host) else: _LOGGER.debug("Get capabilities: %s", capabilities) await self.async_set_unique_id(capabilities["id"], raise_on_progress=raise_on_progress) return capabilities["model"] # Fallback to get properties bulb = AsyncBulb(host) try: await bulb.async_listen(lambda _: True) await bulb.async_get_properties() await bulb.async_stop_listening() except yeelight.BulbException as err: _LOGGER.error("Failed to get properties from %s: %s", host, err) raise CannotConnect from err _LOGGER.debug("Get properties: %s", bulb.last_properties) return MODEL_UNKNOWN