diff --git a/homeassistant/components/conversation.py b/homeassistant/components/conversation.py new file mode 100644 index 00000000000..bf78e13a094 --- /dev/null +++ b/homeassistant/components/conversation.py @@ -0,0 +1,72 @@ +""" +homeassistant.components.conversation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Provides functionality to have conversations with Home Assistant. +This is more a proof of concept. +""" +import logging +import re + +import homeassistant +from homeassistant.const import ( + ATTR_FRIENDLY_NAME, ATTR_ENTITY_ID, SERVICE_TURN_ON, SERVICE_TURN_OFF) + +DOMAIN = "conversation" +DEPENDENCIES = [] + +SERVICE_PROCESS = "process" + +ATTR_TEXT = "text" + +REGEX_TURN_COMMAND = re.compile(r'turn (?P(?: |\w)+) (?P\w+)') + + +def setup(hass, config): + """ Registers the process service. """ + logger = logging.getLogger(__name__) + + def process(service): + """ Parses text into commands for Home Assistant. """ + if ATTR_TEXT not in service.data: + logger.error("Received process service call without a text") + return + + text = service.data[ATTR_TEXT].lower() + + match = REGEX_TURN_COMMAND.match(text) + + if not match: + logger.error("Unable to process: %s", text) + return + + name, command = match.groups() + + entity_ids = [ + state.entity_id for state in hass.states.all() + if state.attributes.get(ATTR_FRIENDLY_NAME, "").lower() == name] + + if not entity_ids: + logger.error( + "Could not find entity id %s from text %s", name, text) + return + + if command == 'on': + hass.services.call( + homeassistant.DOMAIN, SERVICE_TURN_ON, { + ATTR_ENTITY_ID: entity_ids, + }, blocking=True) + + elif command == 'off': + hass.services.call( + homeassistant.DOMAIN, SERVICE_TURN_OFF, { + ATTR_ENTITY_ID: entity_ids, + }, blocking=True) + + else: + logger.error( + 'Got unsupported command %s from text %s', command, text) + + hass.services.register(DOMAIN, SERVICE_PROCESS, process) + + return True diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py index 3886b2c2581..fc76773d501 100644 --- a/homeassistant/components/frontend/version.py +++ b/homeassistant/components/frontend/version.py @@ -1,2 +1,2 @@ """ DO NOT MODIFY. Auto-generated by build_frontend script """ -VERSION = "1c265f0f07e6038c2cbb9b277e58b994" +VERSION = "832b49fd1e3ff3bc33e55812743c3a7d" diff --git a/homeassistant/components/frontend/www_static/frontend.html b/homeassistant/components/frontend/www_static/frontend.html index d9a004de623..49e1e28f993 100644 --- a/homeassistant/components/frontend/www_static/frontend.html +++ b/homeassistant/components/frontend/www_static/frontend.html @@ -122,9 +122,9 @@ b.events&&Object.keys(a).length>0&&console.log("[%s] addHostListeners:",this.loc background-color: #039be5; } - + - +