def request_config( self, name, callback, description, description_image, submit_caption, fields): """ Setup a request for configuration. """ entity_id = generate_entity_id(ENTITY_ID_FORMAT, name, hass=self.hass) if fields is None: fields = [] request_id = self._generate_unique_id() self._requests[request_id] = (entity_id, fields, callback) data = { ATTR_CONFIGURE_ID: request_id, ATTR_FIELDS: fields, } data.update({ key: value for key, value in [ (ATTR_DESCRIPTION, description), (ATTR_DESCRIPTION_IMAGE, description_image), (ATTR_SUBMIT_CAPTION, submit_caption), ] if value is not None }) self.hass.states.set(entity_id, STATE_CONFIGURE, data) return request_id
def add_entities(self, new_entities): """ Takes in a list of new entities. For each entity will see if it already exists. If not, will add it, set it up and push the first state. """ for entity in new_entities: if entity is not None and entity not in self.entities.values(): entity.hass = self.hass if getattr(entity, 'entity_id', None) is None: entity.entity_id = generate_entity_id( self.entity_id_format, entity.name, self.entities.keys()) self.entities[entity.entity_id] = entity entity.update_ha_state() if self.group is None and self.group_name is not None: self.group = group.Group(self.hass, self.group_name, user_defined=False) if self.group is not None: self.group.update_tracked_entity_ids(self.entities.keys()) self._start_polling()
def setup(hass, config): """ Setup zone. """ entities = set() for key in extract_domain_configs(config, DOMAIN): entries = config[key] if not isinstance(entries, list): entries = entries, for entry in entries: name = entry.get(CONF_NAME, DEFAULT_NAME) latitude = entry.get(ATTR_LATITUDE) longitude = entry.get(ATTR_LONGITUDE) radius = entry.get(ATTR_RADIUS, DEFAULT_RADIUS) icon = entry.get(ATTR_ICON) if None in (latitude, longitude): logging.getLogger(__name__).error( 'Each zone needs a latitude and longitude.') continue zone = Zone(hass, name, latitude, longitude, radius, icon) zone.entity_id = generate_entity_id(ENTITY_ID_FORMAT, name, entities) zone.update_ha_state() entities.add(zone.entity_id) if ENTITY_ID_HOME not in entities: zone = Zone(hass, hass.config.location_name, hass.config.latitude, hass.config.longitude, DEFAULT_RADIUS, ICON_HOME) zone.entity_id = ENTITY_ID_HOME zone.update_ha_state() return True
def request_config(self, name, callback, description, description_image, submit_caption, fields): """ Setup a request for configuration. """ entity_id = generate_entity_id(ENTITY_ID_FORMAT, name, hass=self.hass) if fields is None: fields = [] request_id = self._generate_unique_id() self._requests[request_id] = (entity_id, fields, callback) data = { ATTR_CONFIGURE_ID: request_id, ATTR_FIELDS: fields, } data.update({ key: value for key, value in [ (ATTR_DESCRIPTION, description), (ATTR_DESCRIPTION_IMAGE, description_image), (ATTR_SUBMIT_CAPTION, submit_caption), ] if value is not None }) self.hass.states.set(entity_id, STATE_CONFIGURE, data) return request_id
def add_lights(new_lights): """ Add lights to the component to track. """ for light in new_lights: if light is not None and light not in lights.values(): light.entity_id = generate_entity_id( ENTITY_ID_FORMAT, light.name, lights.keys()) lights[light.entity_id] = light light.update_ha_state(hass) light_group.update_tracked_entity_ids(lights.keys())
def add_lights(new_lights): """ Add lights to the component to track. """ for light in new_lights: if light is not None and light not in lights.values(): light.entity_id = generate_entity_id(ENTITY_ID_FORMAT, light.name, lights.keys()) lights[light.entity_id] = light light.update_ha_state(hass) light_group.update_tracked_entity_ids(lights.keys())
def __init__(self, hass, name, entity_ids=None, user_defined=True): self.hass = hass self.name = name self.user_defined = user_defined self.entity_id = generate_entity_id(ENTITY_ID_FORMAT, name, hass=hass) self.tracking = [] self.group_on, self.group_off = None, None if entity_ids is not None: self.update_tracked_entity_ids(entity_ids) else: self.force_update()
def __init__(self, hass, name, entity_ids=None, user_defined=True): self.hass = hass self._name = name self._state = STATE_UNKNOWN self.user_defined = user_defined self.entity_id = generate_entity_id(ENTITY_ID_FORMAT, name, hass=hass) self.tracking = [] self.group_on = None self.group_off = None if entity_ids is not None: self.update_tracked_entity_ids(entity_ids) else: self.update_ha_state(True)
def switch_discovered(service, info): """ Called when a switch is discovered. """ platform = get_component("{}.{}".format( DOMAIN, DISCOVERY_PLATFORMS[service])) discovered = platform.devices_discovered(hass, config, info) for switch in discovered: if switch is not None and switch not in switches.values(): switch.entity_id = generate_entity_id( ENTITY_ID_FORMAT, switch.name, switches.keys()) switches[switch.entity_id] = switch switch.update_ha_state(hass) switch_group.update_tracked_entity_ids(switches.keys())
def _add_devices(self, new_devices): """ Takes in a list of new devices. For each device will see if it already exists. If not, will add it, set it up and push the first state. """ for device in new_devices: if device is not None and device not in self.devices.values(): device.hass = self.hass device.entity_id = generate_entity_id( self.entity_id_format, device.name, self.devices.keys()) self.devices[device.entity_id] = device device.update_ha_state() if self.group is not None: self.group.update_tracked_entity_ids(self.devices.keys()) self._start_polling()
def add_entities(self, new_entities): """ Takes in a list of new entities. For each entity will see if it already exists. If not, will add it, set it up and push the first state. """ with self.lock: for entity in new_entities: if entity is None or entity in self.entities.values(): continue entity.hass = self.hass if getattr(entity, 'entity_id', None) is None: entity.entity_id = generate_entity_id( self.entity_id_format, entity.name, self.entities.keys()) self.entities[entity.entity_id] = entity entity.update_ha_state() if self.group is None and self.group_name is not None: self.group = group.Group(self.hass, self.group_name, user_defined=False) if self.group is not None: self.group.update_tracked_entity_ids(self.entities.keys()) if self.is_polling or \ not any(entity.should_poll for entity in self.entities.values()): return self.is_polling = True track_utc_time_change(self.hass, self._update_entity_states, second=range(0, 60, self.scan_interval))
def add_entities(self, new_entities): """ Takes in a list of new entities. For each entity will see if it already exists. If not, will add it, set it up and push the first state. """ with self.lock: for entity in new_entities: if entity is None or entity in self.entities.values(): continue entity.hass = self.hass if getattr(entity, 'entity_id', None) is None: entity.entity_id = generate_entity_id( self.entity_id_format, entity.name, self.entities.keys()) self.entities[entity.entity_id] = entity entity.update_ha_state() if self.group is None and self.group_name is not None: self.group = group.Group(self.hass, self.group_name, user_defined=False) if self.group is not None: self.group.update_tracked_entity_ids(self.entities.keys()) if self.is_polling or \ not any(entity.should_poll for entity in self.entities.values()): return self.is_polling = True track_utc_time_change( self.hass, self._update_entity_states, second=range(0, 60, self.scan_interval))