class ScriptEntity(ToggleEntity): """Representation of a script entity.""" def __init__(self, hass, object_id, name, sequence): """Initialize the script.""" self.object_id = object_id self.entity_id = ENTITY_ID_FORMAT.format(object_id) self.script = Script(hass, sequence, name, self.async_update_ha_state) @property def should_poll(self): """No polling needed.""" return False @property def name(self): """Return the name of the entity.""" return self.script.name @property def state_attributes(self): """Return the state attributes.""" attrs = {} attrs[ATTR_LAST_TRIGGERED] = self.script.last_triggered if self.script.can_cancel: attrs[ATTR_CAN_CANCEL] = self.script.can_cancel if self.script.last_action: attrs[ATTR_LAST_ACTION] = self.script.last_action return attrs @property def is_on(self): """Return true if script is on.""" return self.script.is_running @asyncio.coroutine def async_turn_on(self, **kwargs): """Turn the script on.""" yield from self.script.async_run(kwargs.get(ATTR_VARIABLES)) @asyncio.coroutine def async_turn_off(self, **kwargs): """Turn script off.""" self.script.async_stop() def async_remove(self): """Remove script from HASS. This method must be run in the event loop and returns a coroutine. """ if self.script.is_running: self.script.async_stop() # remove service self.hass.services.async_remove(DOMAIN, self.object_id) return super().async_remove()
class ScriptEntity(ToggleEntity): """Representation of a script entity.""" def __init__(self, hass, object_id, name, sequence): """Initialize the script.""" self.object_id = object_id self.entity_id = ENTITY_ID_FORMAT.format(object_id) self.script = Script(hass, sequence, name, self.async_update_ha_state) @property def should_poll(self): """No polling needed.""" return False @property def name(self): """Return the name of the entity.""" return self.script.name @property def state_attributes(self): """Return the state attributes.""" attrs = {} attrs[ATTR_LAST_TRIGGERED] = self.script.last_triggered if self.script.can_cancel: attrs[ATTR_CAN_CANCEL] = self.script.can_cancel if self.script.last_action: attrs[ATTR_LAST_ACTION] = self.script.last_action return attrs @property def is_on(self): """Return true if script is on.""" return self.script.is_running async def async_turn_on(self, **kwargs): """Turn the script on.""" context = kwargs.get('context') self.async_set_context(context) self.hass.bus.async_fire(EVENT_SCRIPT_STARTED, { ATTR_NAME: self.script.name, ATTR_ENTITY_ID: self.entity_id, }, context=context) await self.script.async_run( kwargs.get(ATTR_VARIABLES), context) async def async_turn_off(self, **kwargs): """Turn script off.""" self.script.async_stop() async def async_will_remove_from_hass(self): """Stop script and remove service when it will be removed from HASS.""" if self.script.is_running: self.script.async_stop() # remove service self.hass.services.async_remove(DOMAIN, self.object_id)
class ScriptEntity(ToggleEntity): """Representation of a script entity.""" def __init__(self, hass, object_id, name, sequence): """Initialize the script.""" self.object_id = object_id self.entity_id = ENTITY_ID_FORMAT.format(object_id) self.script = Script(hass, sequence, name, self.async_update_ha_state) @property def should_poll(self): """No polling needed.""" return False @property def name(self): """Return the name of the entity.""" return self.script.name @property def state_attributes(self): """Return the state attributes.""" attrs = {} if self.script.can_cancel: attrs[ATTR_CAN_CANCEL] = self.script.can_cancel if self.script.last_action: attrs[ATTR_LAST_ACTION] = self.script.last_action return attrs @property def is_on(self): """Return true if script is on.""" return self.script.is_running @asyncio.coroutine def async_turn_on(self, **kwargs): """Turn the script on.""" yield from self.script.async_run(kwargs.get(ATTR_VARIABLES)) @asyncio.coroutine def async_turn_off(self, **kwargs): """Turn script off.""" self.script.async_stop()