def async_setup_platform(hass, config, async_add_devices, discovery_info=None): """Set up the Xiaomi vacuum cleaner robot platform.""" from mirobo import Vacuum if PLATFORM not in hass.data: hass.data[PLATFORM] = {} host = config.get(CONF_HOST) name = config.get(CONF_NAME) token = config.get(CONF_TOKEN) # Create handler _LOGGER.info("Initializing with host %s (token %s...)", host, token[:5]) vacuum = Vacuum(host, token) mirobo = MiroboVacuum(name, vacuum) hass.data[PLATFORM][host] = mirobo async_add_devices([mirobo], update_before_add=True) @asyncio.coroutine def async_service_handler(service): """Map services to methods on MiroboVacuum.""" method = SERVICE_TO_METHOD.get(service.service) params = { key: value for key, value in service.data.items() if key != ATTR_ENTITY_ID } entity_ids = service.data.get(ATTR_ENTITY_ID) if entity_ids: target_vacuums = [ vac for vac in hass.data[PLATFORM].values() if vac.entity_id in entity_ids ] else: target_vacuums = hass.data[PLATFORM].values() update_tasks = [] for vacuum in target_vacuums: yield from getattr(vacuum, method['method'])(**params) for vacuum in target_vacuums: update_coro = vacuum.async_update_ha_state(True) update_tasks.append(update_coro) if update_tasks: yield from asyncio.wait(update_tasks, loop=hass.loop) descriptions = yield from hass.async_add_job( load_yaml_config_file, os.path.join(os.path.dirname(__file__), 'services.yaml')) for vacuum_service in SERVICE_TO_METHOD: schema = SERVICE_TO_METHOD[vacuum_service].get('schema', VACUUM_SERVICE_SCHEMA) hass.services.async_register( DOMAIN, vacuum_service, async_service_handler, description=descriptions.get(vacuum_service), schema=schema)
def vacuum(self): if not self._vacuum: from mirobo import Vacuum _LOGGER.info("initializing with host %s token %s" % (self.host, self.token)) self._vacuum = Vacuum(self.host, self.token) return self._vacuum
def vacuum(self): """Property accessor for vacuum object.""" if not self._vacuum: from mirobo import Vacuum _LOGGER.info("initializing with host %s token %s", self.host, self.token) self._vacuum = Vacuum(self.host, self.token) return self._vacuum