* Explicitly include Alexa Interface to discovery response.
* Updated cloud component test to reflect additional Alexa interface.
* Updated test for recently added SeekController.
* Added Alexa.ModeController to cover entities.
* Added synonyms for directives.
* Updated tests for additional synonyms for directives.
* Added Alexa.ModeController to cover entities.
* Sacrifice unused variable in split() to please the Pylint gods.
* Removed duplicate instance check.
* Corrected variable name, clarified definition and consistency.
* Changed list to tuple.
* Update ThermostatController to map directives to supported modes and add support for CUSTOM mode.
* Removed erroneous config value from test.
* Removed unnecessary use of a comprehension by dumbing down comment so pylint could comprehend.
* Removed erroneous import variable caused by removing erroneous config value from test.
* Removed unnecessary use of a comprehension.
* Reverted Removal or erroneous import variable and erroneous config value from test.
Apparently need for additional tests outside this component. Whoops.
* Added missing Alexa.ChannelController functions. Specifically ChangeChannel
and SkipChannel commands. These functions will call the play_media function
in a media_player app if it has the capability published and pass on the
channel# or channel name. The selected media player can then use this to
select the channel on the device it is associated to.
Modified the existing Alexa.StepSpeaker Setvolume function to actually do
a stepped volume change using the steps sent by Alexa. The Alexa default
step of 10 for a simple volume up/down can be changed via an exposed
media_player attribute called volume_step_default.
The default is set to 1. Any other value then default will be sent
as sequential volume up /down to the media_player.
* The test code has some weird behaviour with passed boolean values. Had to surround them in quotes for the tests to pass properly.
* Reverted test_smart_home.py change. Issue was not the boolean value but the behavior in the handler. The test suite does not like multiple await calls in a loop. Will investigate further. The handler code works though.
* Added ChannelController/SkipChannels test in test_smart_home.py
Added test for callSign payload attribute.
* Modified smart home test to allow more than one call to services
* Added more tests for ChannelChange functions for various payload options.
Removed name options from metadata payload section. not needed.
* Reverted assert call change in alexa test __init__.py back to ==1. Not sure if it was the cause of the pytest's failing on github
* Corrected a comment. First commit after a rebase.
* Comment line change. Also wanted to force a code check on github.
* Added a loop delay in StepSpeaker and SkipChannel functions for safety
* Removed uneeded sleep from for loops. Let remote handle delays
Moved service type decision out of for loops in ChannelController and StepSpeaker
Used constants instead of numeric values for support options in test module
* Change media_player const import to be more specific in source
* Modifed test_smart_home to use media_play constants instead of hardcode valu
* Removed unecessary test volume_step_default attribute from test_smart_home
* Removed uneeded comment in StepSpeaker function.
Re-ordered constants in test_smart_home.py
* Modified call to media_player play_media service to use media_player constant instead of hard coded value.
* Changed constant use to be consistant with rest of function.
* Correct merge conflicts in handlers.py and capablities.py
* Implement AlexaToggleController, AlexaRangeController, and AlexaModeController interfaces.
* Implement AlexaToggleController, AlexaRangeController, and AlexaModeController interfaces.
* Unkerfuffled comments to please the pydocstyle gods.
* Unkerfuffled comments in Tests to please the pydocstyle gods.
* Added additional test for more coverage.
* Removed OSCILLATING property check from from ModeController.
* Added capability report tests for ModeController, ToggleController, RangeController, PowerLevelController.
* Update homeassistant/components/alexa/capabilities.py
Co-Authored-By: Paulus Schoutsen <paulus@home-assistant.io>
* Update homeassistant/components/alexa/capabilities.py
Co-Authored-By: Paulus Schoutsen <paulus@home-assistant.io>
* Corrected mis-spelling of AlexaCapability class.
* Changed instance from method to property in AlexaCapability class.
* Refactored to add {entity.domain}.{entity.attribute} to the instance name.
* Improved type handling for configuration object.
Added additional test for configuration object.
* Added Tests for unsupported domains for ModeController and RangeController
* Made changes to improve future scaling for other domains.
* Split fan range to speed maps into multiple constants.
* Update the Alexa.LockController Unlock directive to include the lockState property in the context of the response.
* Added Test for Alexa.LockController Unlock directive to include the lockState property in the context of the response.
* Fixes#26405 Return None if light state is off since attribute is unavailable, prevents property from being reported with invalid value of 0.
* Update Test to check property is not reported when light state is off.
* Added Fan to display categories.
* Added Doorbell to display categories.
* Added Microwave to display categories.
* Added Security Panel to display categories.
* Updated FanCapabilities to use FAN display category.
* Updated Tests for FanCapabilities to use FAN display category.
* Return None for AlexaThermostatController and AlexaTemperatureSensor properties if climate state is unavailable. Preserves raising an error for UnsupportedProperty, and allows Alexa.EndpointHealth to handle the unavailable state.
* Added additional tests for climate state reporting.
* Alexa: implement auth and proactive ChangeReport messages
* refactor after rebase from dev to use the new AlexaDirective and Response classes
* move to aiohttp; cleanup
* better function name
* move endpoint to config
* allow passing token function
* remove uneeded state get
* use iterable directly
Co-Authored-By: abmantis <abmantis@users.noreply.github.com>
* missing delete from previous commit
* checks for when user has no auth config
* update cloud component
* PR suggestions
* string lint
* Revert "string lint"
This reverts commit a05a1f134c9ebc7a6e67c093009744f142256365.
* linters are now happier
* more happy linters
* use internal date parser; improve json response handling
* remove unused import
* use await instead of async_add_job
* protect access token update method
* add test_report_state
* line too long
* add docstring
* Update test_smart_home.py
* test accept grant api
* init prefs if None
* add tests for auth and token requests
* replace global with hass.data
* doc lint
* 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.
We were erroneously reporting the _previous_ mode. So if the thermostat was off
and the user asks, "Alexa, set the thermostat to heat", the thermostat would be
set to heat but Alexa would respond, "The thermostat is off."
Bug caught by @Thunderbird2086 at
https://github.com/home-assistant/home-assistant/pull/17969#issuecomment-434654345
* Refactor Alexa API to use objects for requests
This introduces _AlexaDirective to stand in for the previous model of passing
basic dict and list data structures to and from handlers. This gives a more
expressive platform for functionality common to most or all handlers.
I had two use cases in mind:
1) Most responses should include current properties. In the case of locks and
thermostats, the response must include the properties or Alexa will give the
user a vague error like "Hmm, $device is not responding." Locks currently work,
but thermostats do not. I wanted a way to automatically include properties in
all responses. This is implemented in a subsequent commit.
2) The previous model had a 1:1 mapping between Alexa endpoints and Home
Assistant entities. This works most of the time, but sometimes it's not so
great. For example, my Z-wave thermostat shows as three devices in Alexa: one
for the temperature sensor, one for the heat, and one for the AC. I'd like to
merge these into one device from Alexa's perspective. I believe this will be
facilitated with the `endpoint` attribute on `_AlexaDirective`.
* Include properties in all Alexa responses
The added _AlexaResponse class provides a richer vocabulary for handlers.
Among that vocabulary is .merge_context_properties(), which is invoked
automatically for any request directed at an endpoint. This adds all supported
properties to the response as recommended by the Alexa API docs, and in some
cases (locks, thermostats at least) the user will get an error "Hmm, $device is
not responding" if properties are not provided in the response.
* Fix setting temperature with Alexa thermostats
Fixes https://github.com/home-assistant/home-assistant/issues/16577
* Remove unit_of_measurement from climate base class.
* Updated google_assistant component and tests to use core temp units.
* Fixes
* Convert Alexa component to use core temp units for climate entities.
* Fix tests.
* Converted prometheus component.
* Remove unit_of_measurement from homekit thermostat tests.
* Small fix.