From 7042ef1c0d0989ed1ee525b6c2f0ec0be42e8f23 Mon Sep 17 00:00:00 2001
From: ochlocracy <5885236+ochlocracy@users.noreply.github.com>
Date: Thu, 23 Jan 2020 11:35:50 -0500
Subject: [PATCH 01/18] Improve Alexa Smart Home Documentation.
---
sass/custom/_paulus.scss | 42 +
source/_integrations/alexa.markdown | 7 +-
.../_integrations/alexa.smart_home.markdown | 822 +++++++++++++++++-
.../alexa/alexa_app_cover_position.png | Bin 0 -> 42261 bytes
.../alexa/alexa_app_doorbell_announcement.png | Bin 0 -> 83976 bytes
.../alexa/alexa_app_garage_door_pin.png | Bin 0 -> 90559 bytes
.../alexa/alexa_app_person_detection.png | Bin 0 -> 76944 bytes
.../alexa/alexa_app_security_system_pin.png | Bin 0 -> 87298 bytes
8 files changed, 830 insertions(+), 41 deletions(-)
create mode 100644 source/images/integrations/alexa/alexa_app_cover_position.png
create mode 100644 source/images/integrations/alexa/alexa_app_doorbell_announcement.png
create mode 100644 source/images/integrations/alexa/alexa_app_garage_door_pin.png
create mode 100644 source/images/integrations/alexa/alexa_app_person_detection.png
create mode 100644 source/images/integrations/alexa/alexa_app_security_system_pin.png
diff --git a/sass/custom/_paulus.scss b/sass/custom/_paulus.scss
index 09d7e804da71..bd832d87ea08 100644
--- a/sass/custom/_paulus.scss
+++ b/sass/custom/_paulus.scss
@@ -556,4 +556,46 @@ code {
border: 1px solid #ddd;
border-radius: 0.4em;
padding: .1em .4em
+}
+
+kbd, samp {
+
+ & > p {
+ font-family: Georgia, "Times New Roman", Times, serif;
+ font-style: italic;
+
+ & kbd {
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ text-decoration: underline;
+ color: #1990b8;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+
+ }
+
+ }
+
+ & em, & q {
+ quotes: '\201C' '\201D';
+ font-family: Georgia, "Times New Roman", Times, serif;
+ font-style: italic;
+ }
+
+ & em:before {
+ content: '\201C';
+ }
+
+ & em:after {
+ content: '\201D';
+ }
+}
+
+kbd em > i {
+ color: #1990b8;
+
+}
+
+samp > p {
+ color: #4A993E;
}
\ No newline at end of file
diff --git a/source/_integrations/alexa.markdown b/source/_integrations/alexa.markdown
index a01cd306120c..054ef92f738d 100644
--- a/source/_integrations/alexa.markdown
+++ b/source/_integrations/alexa.markdown
@@ -21,9 +21,12 @@ For Home Assistant Cloud Users, documentation can be found [here](https://www.na
There are a few ways that you can use Amazon Alexa and Home Assistant together.
-- [Build custom commands](/integrations/alexa.intent/)
+- [Create an Alexa Smart Home Skill to control lights, etc.](/integrations/alexa.smart_home/)
+ - Supports utterances without requiring the skill name, such as "Alexa, turn off the light."
+ - Support for controlling devices through Alexa routines.
+ - Support for viewing and controlling devices with the Alexa mobile app.
+- [Create a Custom Alexa Skill to build custom commands](/integrations/alexa.intent/)
- [Create a new Flash Briefing source](/integrations/alexa.flash_briefings/)
-- [Use the Smart Home API to control lights, etc.](/integrations/alexa.smart_home/)
- Alternative: use the [Emulated Hue integration][emulated-hue-component] to trick Alexa into thinking Home Assistant is a Philips Hue hub.
### Requirements
diff --git a/source/_integrations/alexa.smart_home.markdown b/source/_integrations/alexa.smart_home.markdown
index 330ad3bd066c..d752f6ad16fd 100644
--- a/source/_integrations/alexa.smart_home.markdown
+++ b/source/_integrations/alexa.smart_home.markdown
@@ -6,23 +6,21 @@ ha_category:
- Voice
ha_release: "0.54"
---
+Amazon Alexa provides a Smart Home API for richer home automation control and supports the ability to use simple intuitive utterances without saying the skill name, such as:
-## Amazon Alexa Smart Home
+
+
+_Alexa, turn off the light._
+_Alexa, set the thermostat to cool._
+_Alexa, is the garage door open?_
-While the Skills API described above allows for arbitrary intents, all
-utterances must begin with "Alexa, tell $invocation_name ..."
+
+
-The [Emulated Hue integration][emulated-hue-component] provides a simpler
-interface such as, "Alexa, turn on the kitchen light". However, it has some
-limitations since everything looks like a light bulb.
-Amazon provides a Smart Home API for richer home automation control. It takes
-considerable effort to configure. The easy solution is to use
-[Home Assistant Cloud](/integrations/cloud/).
+It takes considerable effort to configure. Your Home Assistant instance must be accessible from Internet, and you need to create Amazon Developer account and an Amazon Web Services (AWS) account. An easier solution is to use [Home Assistant Cloud](/integrations/cloud/).
-However, config Amazon Alexa Smart Home Skill is not an easy job, you have to allow
-your Home Assistant accessible from Internet, and you need to create Amazon Developer
-account and an Amazon Web Service account.
+The [Emulated Hue integration][emulated-hue-component] provides a simpler alternative to use utterances such as, _Alexa, turn on the kitchen light._ However, it has some limitations since everything looks like a light bulb.
@@ -33,11 +31,28 @@ For Home Assistant Cloud Users, documentation can be found [here](https://www.na
+## Amazon Alexa Smart Home
+
+##### Steps to Integrate an Amazon Alexa Smart Home Skill with Home Assistant
+- [Requirements](#requirements)
+- [Create your Amazon Alexa Smart Home Skill](#create-your-amazon-alexa-smart-home-skill)
+- [Create your Lambda function](#create-your-lambda-function)
+ - [Create an IAM Role for Lambda](#create-an-iam-role-for-lambda)
+ - [Add the code for your Lambda function](#add-the-code-for-your-lambda-function)
+ - [Test the Lambda function](#test-the-lambda-function)
+- [Configure the smart home service endpoint](#configure-the-smart-home-service-endpoint)
+- [Account linking](#account-linking)
+- [Alexa Smart Home Component Configuration](#alexa-smart-home-component-configuration)
+- [Supported integrations](#supported-integrations)
+- [Alexa web-based app](#alexa-web-based-app)
+- [Troubleshooting](#troubleshooting)
+- [Debugging](#debugging)
+
### Requirements
-- Amazon Developer Account. You can sign on [here](https://developer.amazon.com).
-- An [AWS account](https://aws.amazon.com/free/) is need if you want to use Smart Home Skill API. Part of your Smart Home Skill will be hosted on [AWS Lambda](https://aws.amazon.com/lambda/pricing/). However you don't need worry the cost, AWS Lambda allow free to use up to 1 millions requests and 1GB outbound data transfer per month.
-- The Smart Home API also needs your Home Assistant instance to be accessible from the internet via HTTPS on port 443 using a certificate signed by [an Amazon approved certificate authority](https://ccadb-public.secure.force.com/mozilla/IncludedCACertificateReport), this is so account linking can take place. Read more on [our blog](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) about how to set up encryption for Home Assistant. When running Hass.io using the [Duck DNS](/addons/duckdns/) add-on is the easiest method.
+- The Alexa Smart Home API requires your Home Assistant instance to be accessible from the internet via HTTPS on port 443 using a SSL/TLS certificate. A self-signed certificate will work but a certificate signed by [an Amazon approved certificate authority](https://ccadb-public.secure.force.com/mozilla/IncludedCACertificateReport) is recommended. Read more on [our blog](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) about how to set up encryption for Home Assistant. When running Hass.io using the [Duck DNS](/addons/duckdns/) add-on is the easiest method.
+- Amazon Developer Account. Sign up [here](https://developer.amazon.com).
+- An [Amazon Web Services (AWS)](https://aws.amazon.com/free/) account is required to host the Lambda function for your Alexa Smart Home Skill. [AWS Lambda](https://aws.amazon.com/lambda/pricing/) is free to use for up to 1-million requests and 1GB outbound data transfer per month.
### Create Your Amazon Alexa Smart Home Skill
@@ -46,9 +61,7 @@ For Home Assistant Cloud Users, documentation can be found [here](https://www.na
- Input `Skill name` as you like, select your skill's `Default language`.
- Select `Smart Home` and `Provision your own`, then click `Create skill` button at top right corner.
-
-
-
+
- In next screen, make sure *v3* is selected in `Payload version`.
- Now, you have created a skeleton of Smart Home skill. Next step we will do some "real" developer work. You can keep Alex Developer Console opened, we need change the skill configuration later.
@@ -59,7 +72,7 @@ Alexa Smart Home skill will trigger a AWS Lambda function to process the request
-There already are some great tutorials and solutions in our community to achieve same goal "Create your Alexa Smart Home Skill to connect Home Assistant", for example: [Haaska](https://github.com/mike-grant/haaska/wiki).
+There already are some great tutorials and solutions in our community to achieve same goal "Create your Alexa Smart Home Skill to connect Home Assistant", for example: [haaska](https://github.com/mike-grant/haaska/wiki).
You can follow this document or others, but you cannot mixed-match different solutions since they may have different design.
@@ -84,7 +97,7 @@ First thing you need to do after sing in [AWS console](https://console.aws.amazo
- You can skip `Add tags` page, click `Next: Review`.
- Give your new role a name, such as `AWSLambdaBasicExecutionRole-SmartHome`, then click `Create role` button. You should be able to find your new role in the roles list now.
-#### Create a Lambda function and add code
+#### Add the Code for your Lambda function
Next you need create a Lambda function.
@@ -117,7 +130,7 @@ Next you need create a Lambda function.
#### Test the Lambda function
-Now, you have created the Lambda function, before you can test it, you have to set up your Home Assistant. Put following minimal configuration to your configuration.yaml, it will exposures all of your supported device and automation to Alexa. Check the [configuration section](#alexa-component-configuration) if you want more control of the exposure.
+Now, you have created the Lambda function, before you can test it, you have to set up your Home Assistant. Put following minimal configuration to your configuration.yaml, it will exposures all of your supported device and automation to Alexa. Check the [configuration section](#alexa-smart-home-component-configuration) if you want more control of the exposure.
```yaml
alexa:
@@ -154,7 +167,7 @@ Now, you can login to your Home Assistant and [generate a long-lived access toke
This time, you will get a list of your devices as the response. 🎉
-### Config the Smart Home Service Endpoint
+### Configure the Smart Home Service Endpoint
Now removed the long-lived access token if you want, copied the ARN of your Lambda function, then back to [Alexa Developer Console][alexa-dev-console]. You will finish the configuration of the Smart Home skill.
@@ -198,9 +211,9 @@ Alexa can link your Amazon account to your Home Assistant account. Therefore Hom
* A new window will open to direct you to your Home Assistant's login screen.
* After you success login, you will be redirected back to Alexa app.
* You can discovery your devices now.
-- Now, you can ask your Echo or in Alexa App, *turn on bedroom* 🎉
+- Now, you can ask your Echo or in Alexa App,
_Alexa, turn on bedroom_ 🎉
-### Alexa Component Configuration
+### Alexa Smart Home Component Configuration
Example configuration:
@@ -209,8 +222,8 @@ alexa:
smart_home:
locale: en-US
endpoint: https://api.amazonalexa.com/v3/events
- client_id: !secret alexa_client_id
- client_secret: !secret alexa_client_secret
+ client_id: YOUR_SKILL_CLIENT_ID
+ client_secret: YOUR_SKILL_CLIENT_SECRET
filter:
include_entities:
- light.kitchen
@@ -221,13 +234,96 @@ alexa:
- switch.outside
entity_config:
light.kitchen:
- name: Custom Name for Alexa
- description: The light in the kitchen
+ name: "Custom Name for Alexa"
+ description: "The light in the kitchen"
switch.stairs:
display_categories: LIGHT
```
-
-Set the `locale` to the locale of your Alexa devices. Supported locales are: `de-DE`, `en-AU`, `en-CA`, `en-GB`, `en-IN`, `en-US`, `es-ES`, `es-MX`, `fr-CA`, `fr-FR`, `it-IT`, `ja-JP`. Default is `en-US`.
+{% configuration %}
+alexa:
+ description: Alexa configuration
+ required: true
+ type: map
+ keys:
+ smart_home:
+ description: Alexa Smart Home configuration
+ required: true
+ type: map
+ keys:
+ locale:
+ description: The locale of your Alexa devices. Supported locales are `de-DE`, `en-AU`, `en-CA`, `en-GB`, `en-IN`, `en-US`, `es-ES`, `es-MX`, `fr-CA`, `fr-FR`, `it-IT`, `ja-JP`. See [Alexa Locale](#alexa-locale) for additional information.
+ required: false
+ type: string
+ endpoint:
+ description: >-
+ To enable proactive events you send a message to the Alexa event gateway, send it to the event endpoint that aligns with the geographic availability of your smart home skill. Following is the list of endpoints and the regions they cover. See [Proactive Events](#proactive-events) for more information.
+ * North America: `https://api.amazonalexa.com/v3/events`
+ * Europe: `https://api.eu.amazonalexa.com/v3/events`
+ * Far East: `https://api.fe.amazonalexa.com/v3/events`
+ required: false
+ type: string
+ client_id:
+ description: See [Proactive Events](#proactive-events) for more information.
+ required: false
+ type: string
+ client_secret:
+ description: See [Proactive Events](#proactive-events) for more information.
+ required: false
+ type: string
+ filter:
+ description: Filter domains and entities for Alexa.
+ required: true
+ type: map
+ keys:
+ include_domains:
+ description: List of domains to include (e.g., `light`).
+ required: false
+ type: list
+ exclude_domains:
+ description: List of domains to exclude (e.g., `light`).
+ required: false
+ type: list
+ include_entities:
+ description: List of entities to include (e.g., `light.attic`).
+ required: false
+ type: list
+ exclude_entities:
+ description: List of entities to include (e.g., `light.attic`).
+ required: false
+ type: list
+ entity_config:
+ description: Configuration for specific entities. All subordinate keys are the corresponding entity ids or the domains, e.g., `alarm_control_panel.woowoo`.
+ required: false
+ type: map
+ keys:
+ '`
`':
+ description: Additional options for specific entities.
+ required: false
+ type: map
+ keys:
+ name:
+ description: Name of the entity to show in Amazon Alexa App.
+ required: false
+ type: string
+ description:
+ description: Description of the entity to show in Amazon Alexa App.
+ required: false
+ type: string
+ display_categories:
+ description: >-
+ Display category and iconography each entity is shown in the Alexa app. Separate each category with a comma. First category is primary. e.g., `MUSIC_SYSTEM,STREAMING_DEVICE,SPEAKER`. See [Alexa Display Categories](#alexa-display-categories) for a list of available categories.
+ required: false
+ type: string
+{% endconfiguration %}
+
+
+#### Alexa Locale
+The `locale` should match the location and language used for your Amazon echo devices. Supported locales are `de-DE`, `en-AU`, `en-CA`, `en-GB`, `en-IN`, `en-US`, `es-ES`, `es-MX`, `fr-CA`, `fr-FR`, `it-IT`, `ja-JP`.
+
+See [List of Capability Interfaces and Supported Locales][alexa-supported-locales].
+
+
+#### Proactive Events
The `endpoint`, `client_id` and `client_secret` are optional, and are only required if you want to enable Alexa's proactive mode (i.e. "Send Alexa Events" enabled). Please note the following if you want to enable proactive mode:
@@ -235,19 +331,667 @@ The `endpoint`, `client_id` and `client_secret` are optional, and are only requi
- The `client_id` and `client_secret` are not the ones used by the skill that have been set up using "Login with Amazon" (in the [Alexa Developer Console][amazon-dev-console]: Build > Account Linking), but rather from the "Alexa Skill Messaging" (in the Alexa Developer Console: Build > Permissions > Alexa Skill Messaging). To get them, you need to enable the "Send Alexa Events" permission.
- If the "Send Alexa Events" permission was not enabled previously, you need to unlink and relink the skill using the Alexa App, or else Home Assistant will show the following error: "Token invalid and no refresh token available. Also, you need to restart your Home Assistant after each disabling/enabling the skill in Alexa."
-### Alexa web-based app
+#### Configure Filter
+
+By default, no entity will be excluded. To limit which entities are being exposed to Alexa, you can use the `filter` parameter. Keep in mind only [supported components](#supported-integrations) can be added.
+
+{% raw %}
+```yaml
+# Example filter to include specified domains and exclude specified entities
+alexa:
+ smart_home:
+ filter:
+ include_domains:
+ - alarm_control_panel
+ - light
+ exclude_entities:
+ - light.kitchen_light
+```
+{% endraw %}
+
+Filters are applied as follows:
+
+1. No includes or excludes - pass all entities
+2. Includes, no excludes - only include specified entities
+3. Excludes, no includes - only exclude specified entities
+4. Both includes and excludes:
+ * Include domain specified
+ - if domain is included, and entity not excluded, pass
+ - if domain is not included, and entity not included, fail
+ * Exclude domain specified
+ - if domain is excluded, and entity not included, fail
+ - if domain is not excluded, and entity not excluded, pass
+ - if both include and exclude domains specified, the exclude domains are ignored
+ * Neither include or exclude domain specified
+ - if entity is included, pass (as #2 above)
+ - if entity include and exclude, the entity exclude is ignored
+
+See the [troubleshooting](#troubleshooting) if for issues setting up the integration.
+
+
+#### Alexa Display Categories
+Configure a display category to override the display category and iconography each entity is shown in the Alexa app. This makes it easier to find and monitor devices.
+
+```yaml
+light.kitchen_light:
+ display_categories: LIGHT,SWITCH
+```
+
+
+Devices such as cameras, doorbells, garage doors, and alarm control panels require specific display categories to provide all available features from Amazon Alexa. Overriding the display category provided by Home Assistant will limit features provided by Amazon Alexa.
+
+
+See [Alexa Display Categories][alexa-display-categories] for a complete list
+
+### Supported Integrations
+
+Home Assistant supports the following integrations through Alexa using a Smart Home Skill. For Home Assistant Cloud Users, documentation can be found [here](https://www.nabucasa.com/config/amazon_alexa/).
+
+The following integrations are currently supported:
+- [Alarm Control Panel](#alarm-control-panel)
+- [Alert](#alert-automation-group-input-boolean)
+- [Automation](#alert-automation-group-input-boolean)
+- [Binary Sensor](#binary-sensor)
+ - [Doorbell Announcement](#doorbell-announcement)
+ - [Presence Detection](#presence-detection-with-binary-sensor)
+- [Climate](#climate)
+- [Cover](#cover)
+ - [Garage Doors](#garage-doors)
+- [Fan](#fan)
+ - [Fan Speed](#fan-speed)
+ - [Fan Direction](#fan-direction)
+ - [Fan Oscillation](#fan-oscillation)
+- [Group](#alert-automation-group-input-boolean)
+- [Input Boolean](#alert-automation-group-input-boolean)
+- [Input Number](#input-number)
+- [Image Processing](#image-processing)
+- [Light](#light)
+- [Lock](#lock)
+- [Media Player](#media-player)
+ - [Channels](#change-channel)
+ - [Speakers](#speaker-volume)
+ - [Sound Mode & Equalizers](#equalizer-mode)
+ - [Inputs](#inputs)
+ - [Payback Control](#seek)
+- [Scene](#scene)
+- [Script](#script)
+- [Sensor](#sensor)
+- [Switch](#switch)
+- [Timer](#timer)
+- [Vacuum](#vacuum)
+
+#### Alarm Control Panel
+Arm and disarm Alarm Control Panel entities. Ask Alexa for the state of the Alarm Control Panel entity.
+
+
+
+_Alexa, arm my home in away mode._
+_Alexa, arm my home._
+_Alexa, disarm my home._
+_Alexa, is my home armed?_
+
+
+
+##### Arming
+Alarm Control Panel state must be in the `disarmed` state before arming. Alexa does not support switching from an armed state without first disarming. e.g. switching from `armed_home` to `armed_night`.
+
+The Alarm Control Panel state `armed_custom_bypass` isn't supported by Alexa and is treated as `armed_home`.
+
+
+
+Alexa does not support arming with voice PIN at this time. Therefore if the Alarm Control Panel requires a `code` for arming or the `code_arm_required` attribute is `true` the entity will not be exposed during discovery.
+
+The Alarm Control Panel may default the `code_arm_required` attribute to `true` even if the platform does not support or require it. Use the [Entity Customization Tool](/docs/configuration/customizing-devices/#customization-using-the-ui) to override `code_arm_required` to `false` and expose the Alarm Control Panel during discovery.
+
+
+
+##### Disarming
+Users must opt in to the disarm by voice feature in the Alexa App. Alexa will require a 4 digit voice personal identification number (PIN) for disarming. Configure a 4 digit PIN in the Alexa app, or use an existing 4 digit PIN code configured for the Alarm Control Panel.
+
+
+
+
+
+
+To use the exiting code configured for the Alarm Control Panel the `code` must be 4 digits and the `code_format` attribute must be `FORMAT_NUMBER`. After discovery the Alexa app will offer the ability to use the existing `code`, or create an additional 4 digit PIN to use with Alexa.
+
+The existing code is never communicated to Alexa from Home Assistant. During disarming, Alexa will ask for a PIN. The PIN spoken to Alexa is relayed to Home Assistant and passed to the `alarm_control_panel.alarm_disarm` service. If the `alarm_control_panel.alarm_disarm` service fails for any reason, it is assumed the PIN was incorrect and reported to Alexa as an invalid PIN.
+
+#### Alert, Automation, Group, Input Boolean
+Turn on and off Alerts, Automations, Groups, and Input Boolean entities as switches.
+
+
+
+_Alexa, turn on the front door alert._
+_Alexa, turn off energy saving automations._
+_Alexa, Downstairs to on._
+
+
+
+
+#### Binary Sensor
+Requires [Proactive Events](#proactive-events) enabled.
+
+Binary Sensors with a [`device_class`](/integrations/binary_sensor/#device-class) attribute of `door` `garage_door` `opening` `window` `motion` `presense` are supported.
+
+|`device_class`|Alexa Sensor Type|
+| :---: | :---: |
+|`door`|Contact|
+|`garage_door`|Contact|
+|`opening`|Contact|
+|`window`|Contact|
+|`motion`|Motion|
+|`presense`|Motion|
+
+Ask Alexa for the state of a contact sensor.
+
+
+
+_Alexa, is the bedroom window open?_
+
+
+
+##### Routines
+Requires [Proactive Events](#proactive-events) enabled.
+
+Alexa Routines can be triggered with Binary Sensors exposed as contact or motion sensors.
+
+Use the [Entity Customization Tool](/docs/configuration/customizing-devices/#customization-using-the-ui) to override the `device_class` attribute to expose a `binary_sensor` to Alexa.
+
+##### Doorbell Announcement
+Requires [Proactive Events](#proactive-events) enabled.
+
+Configure a `binary_sensor` with `display_category` of `DOORBELL` in the [`entity_config`](#entity_config) to gain access to the doorbell notification settings in the Alexa App.
+
+```yaml
+alexa:
+ smart_home:
+ entity_config:
+ binary_sensor.alexa_doorbell:
+ name: "Front Door"
+ description: "Doorbell Binary Sensor"
+ display_categories: DOORBELL
+```
+
+Alexa will announce on all echo devices _Someone is at the [entity name]_. when a `binary_sensor` state changes from `off` to `on`.
+
+
+Each Amazon Echo device will need the communication and announcements setting enabled, and the Do Not Disturb feature turned off.
+
+
+
+
+
+
+
+
+
+##### Presence Detection with Binary Sensor
+Requires [Proactive Events](#proactive-events) enabled.
+Configure a `binary_sensor` that has a `device_class` attribute of `motion` or `presence` and configure `display_category` to `CAMERA` in the [`entity_config`](#entity_config) to gain access the presence detected notification settings in the Alexa App.
+
+```yaml
+alexa:
+ smart_home:
+ entity_config:
+ binary_sensor.driveway_presence:
+ name: "Driveway"
+ description: "Driveway Presence Sensor"
+ display_categories: CAMERA
+```
+
+Alexa will announce on all echo devices Person detected at [entity name]
.
+
+
+
+Each Echo device will need the communication and Announcements setting enabled, and the Do Not Disturb feature turned off.
+
+
+
+
+
+
+
+
+[Image Processing](#image-processing) entities also support this notification.
+
+#### Climate
+Single, double, and triple set-point thermostats are supported. The temperature value from the thermostat will also be exposed at a separate [temperature sensor](#sensor).
+
+##### Set Thermostat Temperature
+
+
+Alexa, set thermostat to 20.
+Alexa, set the AC to 75.
+Alexa, make it warmer in here.
+Alexa, make it cooler in here.
+
+
+
+##### Thermostat Mode
+
+
+_Alexa, set living room thermostat to automatic._
+
+
+
+- `DRY` is shown in Alexa app as `DEHUMIDIFY`
+- `ECO` is handled as a `preset` in Home Assistant, and will not display in the Alexa app.
+- `FAN_ONLY` is not supported by the Alexa voice model and is shown as `OFF` in the Alexa App.
+
+To change the thermostat mode the exact utterance must be used:
+
+
+
+_Alexa, set [entity name] to [mode utterance]._
+
+
+
+If the climate entity supports on/off, use _turn on_ and _turn off_ utterances with the entity name or the mode utterance.
+
+
+
+_Alexa, turn on the [mode utterance]._
+_Alexa, turn off the [entity name]._
+
+
+
+Alexa supports the following utterances value for climate thermostat mode:
+
+|HA Climate Mode | Alexa Mode Utterances |
+|--- |--- |
+|`AUTO` | _auto_, _automatic_|
+|`COOL` | _cool_, _cooling_|
+|`HEAT` | _heat_, _heating_|
+|`ECO` | _eco_, _economical_|
+|`DRY` | _dehumidify_|
+|`OFF` | _off_|
+
+#### Cover
+Covers should be configured with the appropriate `device_class`.
+
+Covers with a `device_class` of `blind`, `shade`, `curtin` are shown as an Interior Blind in the Alexa App and Covers with a `window`, `awning`, or `shutter` will show as an Exterior Blind.
+
+Covers with the `device_class` of `garage` are shown as a [Garage Door](#garage-doors) and support the Open by Voice PIN feature.
+
+Use the [Entity Customization Tool](/docs/configuration/customizing-devices/#customization-using-the-ui) to override the `device_class` attribute to correctly expose a `cover` to Alexa.
+
+##### Open/Close/Raise/Lower
+Home Assistant configures covers with semantics that provide _raise_, _lower_, _open_, _close_ utterances for covers. In addition to semantics _turn on_ / _turn off_ utterances will also work.
+
+
+
+_Alexa, open the garage door._
+_Alexa, close the curtain._
+_Alexa, lower the shades._
+_Alexa, raise the roof!_
+
+
+
+The _raise_, _lower_, _open_, _close_ semantics are assigned based on the features supported by the cover. If the cover supports tilt functionality, _open/close_ semantics are assigned to the tilt functionality, and _raise/lower_ semantics are assigned to the position functionality.
+
+If the cover does not support tilt, all semantics _raise_, _lower_, _open_, _close_ are assigned to the position functionality.
+
+
+
+##### Set Cover Position
+Covers that `SUPPORT_SET_POSITION` can be controlled using percentages.
+
+
+
+_Alexa, set the [entity name] position to thirty percent._
+_Alexa, increase [entity name] position by ten percent._
+_Alexa, decrease [entity name] position by twenty percent._
+
+
+
+|Locale|Friendly Name Synonyms|
+|---|---|
+|`en-US`|_position_, _opening_|
+
+Currently Alexa only supports friendly name synonyms for the `en-US` locale.
+
+##### Set Cover Tilt
+Covers that `SUPPORT_SET_POSITION_TILT` can be controlled using percentages.
+
+
+
+_Alexa, set the [entity name] tilt to thirty percent._
+_Alexa, increase [entity name] tilt by ten percent._
+_Alexa, decrease [entity name] tilt by twenty percent._
+
+
+
+
+|Locale|Friendly Name Synonyms|
+|---|---|
+|`en-US`|_tilt_, _angle_, _direction_|
+
+Currently Alexa only supports friendly name synonyms for the `en-US` locale.
+
+##### Garage Doors
+Covers with a `device_class` of `garage` support the Open by Voice PIN feature in the Alexa app. Configure a 4 digit PIN code to open the garage door in the Alexa app.
+
+
+
+
+
+
+#### Fan
+
+Control fan speed, direction, and oscillation.
+
+##### Fan Speed
+The fan device must support the `speed` attribute. `speed` can be set using a percentage or a range value determined from the `speed_list` attribute.
+
+
+
+_Alexa, set the fan speed to three._
+_Alexa, set the fan speed to fifty percent._
+_Alexa, set the fan power level to fifty percent._
+_Alexa, turn up the speed on the tower fan._
+_Alexa, set the air speed on the tower fan to maximum._
+
+
+
+The `speed_list` attribute is used to determine the range value. For example, using a `speed_list` consisting of `[off, low, medium, high]` the range values would be `0:off`, `1:low`, `2:medium`, `3:high`.
+
+The following table lists the possible friendly name synonyms available for a fan with `speed_list: [off, low, medium, high]`.
+
+|Fan Range|Friendly Name Synonyms|
+|---|---|
+|0|_zero_, _off_|
+|1|_one_, _thirty three percent_, _low_, _minimum_, _min_|
+|2|_two_, _sixty six percent_, _medium_|
+|3|_three_, _one hundred percent_, _high_, _maximum_, _max_|
+
+The following synonyms can be used for _fan speed_
+
+|Locale|Friendly Name Synonyms|
+|---|---|
+|`en-US`|_fan speed_, _airflow speed_, _wind speed_, _air speed_, _air velocity_, _power level_|
+
+Currently Alexa only supports friendly name synonyms for the `en-US` locale.
+
+##### Fan Direction
+The fan device must support the `direction` attribute.
+
+
+
+_Alexa, set the fan direction to forward._
+_Alexa, set the fan direction to reverse._
+
+
+
+
+
+##### Fan Oscillation
+The fan device must support the `oscillating` attribute.
+
+
+
+_Alexa, is oscillate on for the tower fan?_
+_Alexa, turn on swivel for the tower fan._
+_Alexa, turn on oscillation mode for the table fan._
+
+
+
+|Locale|Friendly Name Synonyms|
+|---|---|
+|`en-US`|_oscillate_, _swivel_, _oscillation_, _spin_, _back and forth_|
+
+Currently Alexa only supports friendly name synonyms for the `en-US` locale.
+
+#### Image Processing
+Requires [Proactive Events](#proactive-events) enabled.
+
+##### Presence Detection Notification
+All `image_processing` entities support the presence detected notification settings in the Alexa App. Any state change will trigger the notification.
+
+Alexa will announce on all echo devices Person detected at [entity name]
.
+
+
+
+
+
+
+
+
+Display category will default to `CAMERA` to enable presence detected notification settings in the Alexa App. Each Echo device will need the communication and Announcements setting enabled, and the Do Not Disturbed feature turned off.
+
+
+
+#### Input Number
+Control an `input_number` entity with Alexa. Configures Alexa with the `min`, `max`, `step`, and `unit_of_measurement` attributes for the entity.
+
+
+
+_Alexa, set [entity name] to forty five [unit of measurement]._
+_Alexa, increase the [entity name] by two._
+_Alexa, set the [entity name] to maximum._
+
+
+
+The following table lists the possible friendly name synonyms available for a Input Number with `min: -90, max: 90, step: 45, unit_of_measurement: degrees`.
+
+|Fan Range|Friendly Name Synonyms|
+|---|---|
+|-90|_negative ninety_, _minimum_, _min_|
+|-45|_negative forty five_|
+|0|_zero_|
+|45|_forty five_|
+|90|_ninety_, _maximum_, _max_|
+
+#### Light
+
+
+
+_Alexa, dim the bathroom light._
+_Alexa, set the bedroom light to fifty percent._
+
+
+
+#### Lock
+
+
+
+_Alexa, lock my front door._
+_Alexa, unlock the dungeon._
+
+
+
+##### Locking
+
+
+##### Unlocking
+To unlock, Alexa will require a 4 digit voice personal identification number (PIN) for unlocking. Configure a 4 digit PIN in the Alexa app to unlock locks.
+
+#### Media Player
+
+
+##### Change Channel
+
+
+
+_Alexa, change the channel to 200 on the Living Room TV._
+_Alexa, change the channel to PBS on the TV._
+_Alexa, next channel on the Living Room TV._
+_Alexa, channel up on the TV._
+_Alexa, channel down on the TV._
+
+
+
+##### Speaker Volume
+
+
+
+_Alexa, set the volume of the speakers to 50._
+_Alexa, turn the volume down on the stereo by 20._
+_Alexa, turn the volume down on Living Room TV._
+_Alexa, mute speakers._
+_Alexa, unmute speakers._
+_Alexa, lower the volume on the stereo._
+_Alexa, volume up 20 on the speakers._
+
+
+
+##### Equalizer Mode
+Supports changing the Media Player `sound_mode` from the preset `sound_mode_list`.
+
+
+
+_Alexa, set mode to movie on the TV._
+
+
+
+Alexa only supports the following modes: `movie`, `music`, `night`, `sport`, `tv`.
+
+##### Inputs
+Supports changing the Media Player `source` from the preset `source_list`.
+
+
+
+_Alexa, change the input to DVD on the Living Room TV._
+
+
+
+Home Assistant will attempt to translate the the `media_player` `source_list` into a valid `source` name for Alexa. Alexa only supports the following input names:
+
+`AUX 1`, `AUX 2`, `AUX 3`, `AUX 4`, `AUX 5`, `AUX 6`, `AUX 7`, `BLURAY`, `CABLE`, `CD`, `COAX 1`, `COAX 2`, `COMPOSITE 1`, `DVD`, `GAME`, `HD RADIO`, `HDMI 1`, `HDMI 2`, `HDMI 3`, `HDMI 4`, `HDMI 5`, `HDMI 6`, `HDMI 7`, `HDMI 8`, `HDMI 9`, `HDMI 10`, `HDMI ARC`, `INPUT 1`, `INPUT 2`, `INPUT 3`, `INPUT 4`, `INPUT 5`, `INPUT 6`, `INPUT 7`, `INPUT 8`, `INPUT 9`, `INPUT 10`, `IPOD`, `LINE 1`, `LINE 2`, `LINE 3`, `LINE 4`, `LINE 5`, `LINE 6`, `LINE 7`, `MEDIA PLAYER`, `OPTICAL 1`, `OPTICAL 2`, `PHONO`, `PLAYSTATION`, `PLAYSTATION 3`, `PLAYSTATION 4`, `SATELLITE`, `SMARTCAST`, `TUNER`, `TV`, `USB DAC`, `VIDEO 1`, `VIDEO 2`, `VIDEO 3`, `XBOX`
+
+
+
+
+##### Playback State
+Requires [Proactive Events](#proactive-events) enabled.
+
+##### Seek
+
+
+_Alexa, skip 30 seconds on device._
+_Alexa, go back 10 seconds on device._
+
+
+
+#### Scene
+Activate scenes with scene name, or turn on utterance. Home Assistant does not support deactivate or turn off for scenes at this time.
+
+
+
+_Alexa, Party Time._
+_Alexa, turn on Party Time._
+
+
+
+#### Script
+Run script with script name, or turn on utterance. Deactivate a running script with turn off utterance.
+
+
+
+_Alexa, Party Time._
+_Alexa, turn on Party Time._
+_Alexa, turn off Party Time._
+
+
+
+#### Sensor
+Requires [Proactive Events](#proactive-events) enabled.
+
+Only temperature sensors are configured at this time.
+
+
+
+_Alexa, what's the temperature in the kitchen?_
+_Alexa, what's the upstairs temperature?_
+_Alexa, what's the temperature of my ex-girlfriend's heart?_
+
+
+
+#### Switch
+Support turn on and turn off utterances.
+
+
+
+_Alexa, turn on the vacuum._
+_Alexa, turn off the lights._
+
+
+
+#### Timer
+Start, Pause, and Restart Timer entities in Home Assistant.
+
+
+
+_Alexa, pause the microwave._
+_Alexa, hold the sous vide._
+_Alexa, restart the microwave._
+
+
+
+
+To avoid issues with Alexa built in timer functionality. The timer entity can not include the word "timer" in the friendly name.
+
+
+#### Vacuum
+Support turn on and turn off utterances. Pause and Resume
+
+
+
+_Alexa, turn on the vacuum._
+_Alexa, pause the vacuum._
+_Alexa, restart the vacuum._
+
+
+
+### Alexa web-based app
The following is a list of regions and the corresponding URL for the web-based Alexa app:
+ * United States: `https://alexa.amazon.com`
+ * United Kingdom: `https://alexa.amazon.co.uk`
+ * Germany: `https://alexa.amazon.de`
+ * Japan: `https://alexa.amazon.co.jp`
+ * Canada: `https://alexa.amazon.ca`
+ * Australia: `https://alexa.amazon.com.au`
+ * India: `https://alexa.amazon.in`
+ * Spain: `https://alexa.amazon.es`
+
+### Troubleshooting
+
+#### Binary Sensor not available in Routine Trigger
+Binary Sensors with a [`device_class`](/integrations/binary_sensor/#device-class) attribute of `door` `garage_door` `opening` `window` `motion` `presense` are supported.
+
+Use the [Entity Customization Tool](/docs/configuration/customizing-devices/#customization-using-the-ui) to override the `device_class` attribute to expose a `binary_sensor` to Alexa.
+
+#### Token invalid and no refresh token available
+Disable and re-enable the skill using the Alexa App; then restart Home Assistant.
+
+### Debugging
+
+The Alexa integration will log additional information about state updates and other messages when the log level is set to `debug`. Add the the relevant line below to the `configuration.yaml`:
+
+If using an Alexa with a Alexa Smart Home Skill and Lambda Function such as haaska:
+
+```yaml
+logger:
+ default: info
+ logs:
+ homeassistant.components.alexa: debug
+```
+
+If using Home Assistant Cloud you also need to debug `hass_nubucasa.iot`:
+
+```yaml
+logger:
+ default: info
+ logs:
+ homeassistant.components.alexa: debug
+ hass_nabucasa.iot: debug
+```
-* United States:
-* United Kingdom:
-* Germany:
-* Japan:
-* Canada:
-* Australia:
-* India:
-* Spain:
+
[alexa-dev-console]: https://developer.amazon.com/alexa/console/ask
[emulated-hue-component]: /integrations/emulated_hue/
[generate-long-lived-access-token]: https://developers.home-assistant.io/docs/en/auth_api.html#long-lived-access-token
+[alexa-display-categories]: https://developer.amazon.com/docs/alexa/device-apis/alexa-discovery.html#display-categories
+[alexa-supported-locales]: https://developer.amazon.com/docs/alexa/device-apis/list-of-interfaces.html
\ No newline at end of file
diff --git a/source/images/integrations/alexa/alexa_app_cover_position.png b/source/images/integrations/alexa/alexa_app_cover_position.png
new file mode 100644
index 0000000000000000000000000000000000000000..4fde3a0d51d93846c8b20f6281f3b73b3b318dbf
GIT binary patch
literal 42261
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