2018-03-08 22:39:10 +00:00
|
|
|
"""Helper classes for Google Assistant integration."""
|
|
|
|
|
|
|
|
|
|
|
|
class SmartHomeError(Exception):
|
|
|
|
"""Google Assistant Smart Home errors.
|
|
|
|
|
|
|
|
https://developers.google.com/actions/smarthome/create-app#error_responses
|
|
|
|
"""
|
|
|
|
|
|
|
|
def __init__(self, code, msg):
|
|
|
|
"""Log error code."""
|
|
|
|
super().__init__(msg)
|
|
|
|
self.code = code
|
|
|
|
|
|
|
|
|
|
|
|
class Config:
|
|
|
|
"""Hold the configuration for Google Assistant."""
|
|
|
|
|
2018-12-02 10:14:46 +00:00
|
|
|
def __init__(self, should_expose, allow_unlock, agent_user_id,
|
|
|
|
entity_config=None):
|
2018-03-08 22:39:10 +00:00
|
|
|
"""Initialize the configuration."""
|
|
|
|
self.should_expose = should_expose
|
|
|
|
self.agent_user_id = agent_user_id
|
|
|
|
self.entity_config = entity_config or {}
|
Add support for locks in google assistant component (#18233)
* Add support for locks in google assistant component
This is supported by the smarthome API, but there is no documentation
for it. This work is based on an article I found with screenshots of
documentation that was erroneously uploaded:
https://www.androidpolice.com/2018/01/17/google-assistant-home-can-now-natively-control-smart-locks-august-vivint-first-supported/
Google Assistant now supports unlocking certain locks - Nest and August
come to mind - via this API, and this commit allows Home Assistant to
do so as well.
Notably, I've added a config option `allow_unlock` that controls
whether we actually honor requests to unlock a lock via the google
assistant. It defaults to false.
Additionally, we add the functionNotSupported error, which makes a
little more sense when we're unable to execute the desired state
transition.
https://developers.google.com/actions/reference/smarthome/errors-exceptions#exception_list
* Fix linter warnings
* Ensure that certain groups are never exposed to cloud entities
For example, the group.all_locks entity - we should probably never
expose this to third party cloud integrations. It's risky.
This is not configurable, but can be extended by adding to the
cloud.const.NEVER_EXPOSED_ENTITIES array.
It's implemented in a modestly hacky fashion, because we determine
whether or not a entity should be excluded/included in several ways.
Notably, we define this array in the top level const.py, to avoid
circular import problems between the cloud/alexa components.
2018-11-06 09:39:10 +00:00
|
|
|
self.allow_unlock = allow_unlock
|