diff --git a/.github/workflows/markdown.yml b/.github/workflows/markdown.yml index 1f74dac813e..3cb32f42203 100644 --- a/.github/workflows/markdown.yml +++ b/.github/workflows/markdown.yml @@ -4,7 +4,8 @@ on: [push, pull_request] jobs: remark: - runs-on: ubuntu-latest + #runs-on: ubuntu-latest + runs-on: self-hosted steps: - name: Checking out files from GitHub uses: actions/checkout@v1 diff --git a/_config.yml b/_config.yml index ed5e2351b61..7f9811dbf78 100644 --- a/_config.yml +++ b/_config.yml @@ -100,9 +100,9 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 102 -current_patch_version: 3 -date_released: 2019-11-29 +current_minor_version: 103 +current_patch_version: 0 +date_released: 2019-12-11 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/sass/base/_typography.scss b/sass/base/_typography.scss index 9a6bbacd2a2..ded090889b7 100644 --- a/sass/base/_typography.scss +++ b/sass/base/_typography.scss @@ -10,9 +10,15 @@ $header-subtitle-font-family: $heading-font-family !default; .heading { font-family: $heading-font-family; } -.sans { font-family: $sans; } -.serif { font-family: $serif; } -.mono { font-family: $mono; } +.sans { + font-family: $sans; +} +.serif { + font-family: $serif; +} +.mono { + font-family: $mono; +} body > header h1 { font-size: 2.2em; @@ -37,75 +43,172 @@ h1 { } @media only screen and (min-width: 992px) { - body { font-size: 1.15em; } - h1 { font-size: 2.6em; line-height: 1.2em; } + body { + font-size: 1.15em; + } + h1 { + font-size: 2.6em; + line-height: 1.2em; + } } -#{headings()}{ +#{headings()} { @extend .heading; text-rendering: optimizelegibility; margin-bottom: 1em; font-weight: bold; } -h2, section h1 { +h2, +section h1 { font-size: 1.5em; } -h3, section h2, section section h1 { +h3, +section h2, +section section h1 { font-size: 1.3em; } -h4, section h3, section section h2, section section section h1 { +h4, +section h3, +section section h2, +section section section h1 { font-size: 1em; } -h5, section h4, section section h3 { - font-size: .9em; +h5, +section h4, +section section h3 { + font-size: 0.9em; } -h6, section h5, section section h4, section section section h3 { - font-size: .8em; +h6, +section h5, +section section h4, +section section section h3 { + font-size: 0.8em; } -p, article blockquote, ul, ol { margin-bottom: 1.5em; } - -ul { list-style-type: disc; - ul { list-style-type: circle; margin-bottom: 0px; - ul { list-style-type: square; margin-bottom: 0px; }}} - -ol { list-style-type: decimal; - ol { list-style-type: lower-alpha; margin-bottom: 0px; - ol { list-style-type: lower-roman; margin-bottom: 0px; }}} - -ul, ol { &, ul, ol { margin-left: 1.3em; }} -ul, ol { ul, ol { margin-bottom: 0em; }} - -strong { font-weight: bold; } - -em { font-style: italic; } - -sup, sub { font-size: 0.75em; position: relative; display: inline-block; padding: 0 .2em; line-height: .8em;} -sup { top: -.5em; } -sub { bottom: -.5em; } - -a[rev='footnote']{ font-size: .75em; padding: 0 .3em; line-height: 1; } - -q { font-style: italic; - &:before { content: "\201C"; } - &:after { content: "\201D"; } +p, +article blockquote, +ul, +ol { + margin-bottom: 1.5em; } -em, dfn { font-style: italic; } +ul { + list-style-type: disc; + ul { + list-style-type: circle; + margin-bottom: 0px; + ul { + list-style-type: square; + margin-bottom: 0px; + } + } +} -strong, dfn { font-weight: bold; } +ol { + list-style-type: decimal; + ol { + list-style-type: lower-alpha; + margin-bottom: 0px; + ol { + list-style-type: lower-roman; + margin-bottom: 0px; + } + } +} -del, s { text-decoration: line-through; } +ul, +ol { + &, + ul, + ol { + margin-left: 1.3em; + } +} +ul, +ol { + ul, + ol { + margin-bottom: 0em; + } +} -abbr, acronym { border-bottom: 1px dotted; cursor: help; } +strong { + font-weight: bold; +} -pre, code, tt { @extend .mono; } +em { + font-style: italic; +} -hr { margin-bottom: 0.2em; } +sup, +sub { + font-size: 0.75em; + position: relative; + display: inline-block; + padding: 0 0.2em; + line-height: 0.8em; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.5em; +} -small { font-size: .8em; } +a[rev="footnote"] { + font-size: 0.75em; + padding: 0 0.3em; + line-height: 1; +} -big { font-size: 1.2em; } +q { + font-style: italic; + &:before { + content: '"'; + } + &:after { + content: '"'; + } +} + +em, +dfn { + font-style: italic; +} + +strong, +dfn { + font-weight: bold; +} + +del, +s { + text-decoration: line-through; +} + +abbr, +acronym { + border-bottom: 1px dotted; + cursor: help; +} + +pre, +code, +tt { + @extend .mono; +} + +hr { + margin-bottom: 0.2em; +} + +small { + font-size: 0.8em; +} + +big { + font-size: 1.2em; +} article blockquote { $bq-margin: 1.2em; @@ -114,11 +217,21 @@ article blockquote { font-size: 1.2em; line-height: 1.5em; padding-left: 1em; - border-left: 4px solid rgba($text-color-light, .5); + border-left: 4px solid rgba($text-color-light, 0.5); cite { font-style: italic; - a { color: $text-color-light !important; word-wrap: break-word; } - &:before { content: '\2014'; padding:{right: .3em; left: .3em;} color: $text-color-light; } + a { + color: $text-color-light !important; + word-wrap: break-word; + } + &:before { + content: "\2014"; + padding: { + right: 0.3em; + left: 0.3em; + } + color: $text-color-light; + } } @media only screen and (min-width: 992px) { padding-left: 1.5em; @@ -138,7 +251,7 @@ article blockquote { /* Pull out to the right, modular scale based margins. */ float: right; width: 45%; - margin: .5em 0 1em 1.5em; + margin: 0.5em 0 1em 1.5em; /* Baseline correction */ position: relative; @@ -150,7 +263,7 @@ article blockquote { .pullquote-left:before { /* Make left pullquotes align properly. */ float: left; - margin: .5em 1.5em 1em 0; + margin: 0.5em 1.5em 1em 0; } /* @extend this to force long lines of continuous text to wrap */ @@ -161,4 +274,3 @@ article blockquote { white-space: pre-wrap; word-wrap: break-word; } - diff --git a/sass/inuitcss/base/_quotes.scss b/sass/inuitcss/base/_quotes.scss index 490948ec44e..0a9dd2cc8e2 100644 --- a/sass/inuitcss/base/_quotes.scss +++ b/sass/inuitcss/base/_quotes.scss @@ -5,12 +5,11 @@ /** * If English quotes are set in `_vars.scss`, define them here. */ -@if $english-quotes == true{ - $open-quote: \201C; - $close-quote: \201D; +@if $english-quotes == true { + $open-quote: '"'; + $close-quote: '"'; } - /** * Big up @boblet: html5doctor.com/blockquote-q-cite */ @@ -18,55 +17,52 @@ /** * Inline quotes. */ -q{ - quotes:"\2018" "\2019" "#{$open-quote}" "#{$close-quote}"; +q { + quotes: "\2018""\2019""#{$open-quote}""#{$close-quote}"; - &:before{ - content:"\2018"; - content:open-quote; - } - &:after{ - content:"\2019"; - content:close-quote; - } + &:before { + content: "\2018"; + content: open-quote; + } + &:after { + content: "\2019"; + content: close-quote; + } - q:before{ - content:"\201C"; - content:open-quote; - } - q:after{ - content:"\201D"; - content:close-quote; - } + q:before { + content: '"'; + } + q:after { + content: '"'; + } } -blockquote{ - quotes:"#{$open-quote}" "#{$close-quote}"; +blockquote { + quotes: "#{$open-quote}""#{$close-quote}"; - p:before{ - content:"#{$open-quote}"; - content:open-quote; - } - p:after{ - content:""; - content:no-close-quote; - } - p:last-of-type:after{ - content:"#{$close-quote}"; - content:close-quote; - } + p:before { + content: "#{$open-quote}"; + content: open-quote; + } + p:after { + content: ""; + content: no-close-quote; + } + p:last-of-type:after { + content: "#{$close-quote}"; + content: close-quote; + } - q:before{ - content:"\2018"; - content:open-quote; - } - q:after{ - content:"\2019"; - content:close-quote; - } + q:before { + content: "\2018"; + content: open-quote; + } + q:after { + content: "\2019"; + content: close-quote; + } } - /** *
@@ -76,22 +72,22 @@ blockquote{
* */ -blockquote{ - /** +blockquote { + /** * .4em is roughly equal to the width of the opening “ that we wish to hang. */ - text-indent:-0.41em; + text-indent: -0.41em; - p:last-of-type{ - margin-bottom:0; - } + p:last-of-type { + margin-bottom: 0; + } } -.source{ - display:block; - text-indent:0; +.source { + display: block; + text-indent: 0; - &:before{ - content:"\2014"; - } + &:before { + content: "\2014"; + } } diff --git a/sass/oscailte/base/_post.scss b/sass/oscailte/base/_post.scss index 15e3aed12f8..a93338fe6da 100644 --- a/sass/oscailte/base/_post.scss +++ b/sass/oscailte/base/_post.scss @@ -1,7 +1,6 @@ $meta-color: lighten($text-color, 20%); article { - blockquote { @extend .clearfix; border-left: 2px solid $primary-color; @@ -24,16 +23,17 @@ article { } } - .pullquote-left::before, .pullquote-right::before { - @media only screen and (max-width: $palm-end){ - border-top: 1px dotted $primary-color; + .pullquote-left::before, + .pullquote-right::before { + @media only screen and (max-width: $palm-end) { + border-top: 1px dotted $primary-color; border-bottom: 1px dotted $primary-color; padding: 0 10px; width: 100%; } border: medium none; color: $primary-color; - content: "\201C" attr(data-pullquote) "\201D"; + content: "\201C"attr(data-pullquote) "\201D"; float: right; font-family: $serif; font-size: 1.4em; @@ -42,7 +42,7 @@ article { margin: 0.3em 0 1em 1.5em; padding: 0; position: relative; - top: 7px; + top: 7px; width: 45%; } @@ -60,7 +60,9 @@ article { a { color: $meta-color; text-decoration: none; - &:hover {text-decoration: underline;} + &:hover { + text-decoration: underline; + } } } } @@ -105,7 +107,7 @@ article { } &.post { - @media only screen and (max-width: $palm-end){ + @media only screen and (max-width: $palm-end) { .tags { clear: both; margin-top: 7px; diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 30582f817db..dde02bf7380 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -325,7 +325,10 @@ Some of these functions can also be used in a [filter](https://jinja.palletsproj - `e` mathematical constant, approximately 2.71828. - `pi` mathematical constant, approximately 3.14159. - `tau` mathematical constant, approximately 6.28318. -- Filter `round(x)` will convert the input to a number and round it to `x` decimals. +- Filter `round(x)` will convert the input to a number and round it to `x` decimals. Round has four modes and the default mode (with no mode specified) will [round-to-even](https://en.wikipedia.org/wiki/Rounding#Roundhalfto_even). + - `round(x, "floor")` will always round down to `x` decimals + - `round(x, "ceil")` will always round up to `x` decimals + - `round(1, "half")` will always round to the nearest .5 value. `x` should be 1 for this mode - Filter `max` will obtain the largest item in a sequence. - Filter `min` will obtain the smallest item in a sequence. - Filter `value_one|bitwise_and(value_two)` perform a bitwise and(&) operation with two values. diff --git a/source/_integrations/alarm_control_panel.ifttt.markdown b/source/_integrations/alarm_control_panel.ifttt.markdown index 68961ca8abb..5d326be2936 100644 --- a/source/_integrations/alarm_control_panel.ifttt.markdown +++ b/source/_integrations/alarm_control_panel.ifttt.markdown @@ -64,7 +64,7 @@ event_disarm: type: string default: alarm_disarm optimistic: - description: Specify if the state will be updated by an ifttt_push_alarm_state call (false) or can be set immediately (true). + description: Specify if the state will be updated by an ifttt.push_alarm_state call (false) or can be set immediately (true). required: false type: boolean default: false @@ -87,7 +87,7 @@ For this system to operate correctly, the following IFTTT applets have to be set * **IF** Webhook event `YOUR_ARM_HOME_EVENT` is called, **THEN** set the alarm system to armed home. * **IF** Webhook event `YOUR_ARM_NIGHT_EVENT` is called, **THEN** set the alarm system to armed away. * **IF** Webhook event `YOUR_DISARM_EVENT` is called, **THEN** set the alarm system to armed night. -* **IF** the alarm system was disarmed, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "disarmed"}`. -* **IF** the alarm system state changed to armed home, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_home"}`. -* **IF** the alarm system state changed to armed away, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_away"}`. -* **IF** the alarm system state changed to armed night, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_night"}`. +* **IF** the alarm system was disarmed, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/ifttt/push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "disarmed"}`. +* **IF** the alarm system state changed to armed home, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/ifttt/push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_home"}`. +* **IF** the alarm system state changed to armed away, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/ifttt/push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_away"}`. +* **IF** the alarm system state changed to armed night, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/ifttt/push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_night"}`. diff --git a/source/_integrations/alarmdecoder.markdown b/source/_integrations/alarmdecoder.markdown index a83c15eb878..7bf65735817 100644 --- a/source/_integrations/alarmdecoder.markdown +++ b/source/_integrations/alarmdecoder.markdown @@ -135,7 +135,7 @@ The Alarm Decoder integration gives you access to several services for you to co - `alarm_arm_night`: Arms the alarm in instant mode; all faults will trigger the alarm. Additionally, the entry delay is turned off on the doors. - `alarm_disarm`: Disarms the alarm from any state. Also clears a `check_zone` flag after an alarm was triggered. - `alarmdecoder.alarm_keypress`: Sends a string of characters to the alarm, as if you had touched those keys on a keypad. -- `alarmdecoder_alarm_toggle_chime`: Toggles the alarm's chime state. +- `alarmdecoder.alarm_toggle_chime`: Toggles the alarm's chime state.
@@ -157,11 +157,11 @@ Using a combination of the available services and attributes, you can create swi friendly_name: Chime value_template: "{{ is_state_attr('alarm_control_panel.alarm_panel', 'chime', true) }}" turn_on: - service: alarm_control_panel.alarmdecoder_alarm_toggle_chime + service: alarmdecoder.alarm_toggle_chime data: code: !secret alarm_code turn_off: - service: alarm_control_panel.alarmdecoder_alarm_toggle_chime + service: alarmdecoder.alarm_toggle_chime data: code: !secret alarm_code icon_template: >- diff --git a/source/_integrations/apns.markdown b/source/_integrations/apns.markdown index 973bbb17f00..250e035e9c6 100644 --- a/source/_integrations/apns.markdown +++ b/source/_integrations/apns.markdown @@ -46,7 +46,7 @@ sandbox: type: boolean {% endconfiguration %} -The APNS platform will register two services, `notify.NOTIFIER_NAME` and `notify.apns_NOTIFIER_NAME`. +The APNS platform will register two services, `notify.NOTIFIER_NAME` and `apns.apns_NOTIFIER_NAME`. ### notify.apns_NOTIFIER_NAME diff --git a/source/_integrations/aten_pe.markdown b/source/_integrations/aten_pe.markdown new file mode 100644 index 00000000000..0ec6941905c --- /dev/null +++ b/source/_integrations/aten_pe.markdown @@ -0,0 +1,53 @@ +--- +title: "ATEN Rack PDU" +description: "Instructions on how to integrate ATEN Rack PDUs into Home Assistant." +logo: aten.png +ha_category: + - Switch +ha_release: 0.103 +--- + +The `aten_pe` integration lets you control [ATEN Rack PDUs](https://www.aten.com/eu/en/products/energy-intelligence-pduupsracks/rack-pdu/) from Home Assistant. + +In order to use it, SNMP must be enabled on your PDU. It is recommended to use SNMPv3 to protect your credentials from eavesdropping. + +Tested devices: + * [PE8324G](https://www.aten.com/eu/en/products/energy-intelligence-pduupsracks/rack-pdu/pe8324/) + +To set it up, add the following information to your `configuration.yaml` file: + +```yaml +switch: + - platform: aten_pe + host: 192.168.0.60 +``` + +{% configuration %} +host: + description: The IP/host which to control. + required: true + type: string +port: + description: The port on which to communicate. + required: false + type: string + default: 161 +community: + description: community string to use for authentication (SNMP v1 and v2c). + required: false + type: string + default: private +username: + description: Username to use for authentication. + required: false + type: string + default: administrator +auth_key: + description: Authentication key to use for SNMP v3. + required: false + type: string +priv_key: + description: Privacy key to use for SNMP v3. + required: false + type: string +{% endconfiguration %} diff --git a/source/_integrations/bbox.markdown b/source/_integrations/bbox.markdown index 715b80a2ba6..c9083780d65 100644 --- a/source/_integrations/bbox.markdown +++ b/source/_integrations/bbox.markdown @@ -66,6 +66,8 @@ sensor: - up_max_bandwidth - current_down_bandwidth - current_up_bandwidth + - uptime + - number_of_reboots ``` {% configuration %} @@ -87,4 +89,8 @@ monitored_variables: description: Instant measure of the current used bandwidth for download. current_up_bandwidth: description: Instant measure of the current used bandwidth for upload. + uptime: + description: Uptime since the last boot. + number_of_reboots: + description: Number of reboot since the initial configuration of the router. {% endconfiguration %} diff --git a/source/_integrations/blackbird.markdown b/source/_integrations/blackbird.markdown index 6d206fd3cde..834f9f2a4af 100644 --- a/source/_integrations/blackbird.markdown +++ b/source/_integrations/blackbird.markdown @@ -52,7 +52,7 @@ sources: type: string {% endconfiguration %} -### Service `media_player.blackbird_set_all_zones` +### Service `blackbird.set_all_zones` Set all zones to the same input source. This service allows you to immediately synchronize all the TVs in your home. Regardless of `entity_id` provided, all zones will be updated. diff --git a/source/_integrations/bluesound.markdown b/source/_integrations/bluesound.markdown index 3deaec8ce09..4422ba265a3 100644 --- a/source/_integrations/bluesound.markdown +++ b/source/_integrations/bluesound.markdown @@ -55,7 +55,7 @@ media_player: - host: 192.168.1.131 ``` -### Service `bluesound_join` +### Service `bluesound.join` Group players together under a single master speaker. That will make a new group or join an existing group. @@ -64,7 +64,7 @@ Group players together under a single master speaker. That will make a new group | `master` | no | A single `entity_id` that will become/hold the master speaker. | `entity_id` | no | String or list of a single `entity_id` that will group to master speaker. -### Service `bluesound_unjoin` +### Service `bluesound.unjoin` Remove one or more speakers from a group of speakers. If no `entity_id` is provided, all speakers are unjoined. @@ -72,7 +72,7 @@ Remove one or more speakers from a group of speakers. If no `entity_id` is provi | ---------------------- | -------- | ----------- | | `entity_id` | yes | String or list of `entity_id`s that will be separated from their master speaker. -### Service `bluesound_set_sleep_timer` +### Service `bluesound.set_sleep_timer` Sets a timer that will turn off the speaker. For each time you call this it will increase the time by one step. The steps are (in minutes): 15, 30, 45, 60, 90, 0. If you increase an ongoing timer of for example 13 minutes, it will increase it to 15. If the timer is set to 90, it will remove the time (hence the 0). @@ -81,7 +81,7 @@ If you increase an ongoing timer of for example 13 minutes, it will increase it | ---------------------- | -------- | ----------- | | `entity_id` | no | String or list of `entity_id`s that will have their timers set. -### Service `bluesound_clear_sleep_timer` +### Service `bluesound.clear_sleep_timer` Clear the sleep timer on a speaker, if one is set. diff --git a/source/_integrations/broadlink.markdown b/source/_integrations/broadlink.markdown index 6f7a47c04f9..5ff2381de7a 100644 --- a/source/_integrations/broadlink.markdown +++ b/source/_integrations/broadlink.markdown @@ -3,6 +3,7 @@ title: "Broadlink" description: "Instructions on how to integrate Broadlink within Home Assistant." logo: broadlink.png ha_category: + - Remote - Switch - Sensor ha_release: 0.35 @@ -11,9 +12,161 @@ ha_iot_class: Local Polling There is currently support for the following device types within Home Assistant: +- [Remote](#remote) - [Sensor](#sensor) - [Switch](#switch) +## Remote + +The `broadlink` remote platform allows you to interact with Broadlink remote control devices. + +### Configuration + +To enable it, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +remote: + - platform: broadlink + host: IP_ADDRESS + mac: MAC_ADDRESS +``` + +{% configuration %} +host: + description: The hostname/IP address to connect to. + required: true + type: string +mac: + description: Device MAC address. + required: true + type: string +timeout: + description: Timeout in seconds for the connection to the device. + required: false + default: 5 + type: integer +name: + description: Name of the device. + required: false + default: Broadlink + type: string +{% endconfiguration %} + +### Learn command + +Use the `remote.learn_command` service to learn new commands. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------------------------------------- | +| `entity_id` | no | ID of the remote. | +| `device` | no | Name of the device to control. | +| `command` | no | Names of the commands to learn. | +| `alternative` | yes | Toggle commands? | +| `timeout` | yes | Timeout in seconds to learn each command. | + +Example 1: Learn a single command + +```yaml +script: + learn_mute_tv: + sequence: + - service: remote.learn_command + data: + entity_id: remote.bedroom + device: television + command: mute +``` + +Example 2: Learn a sequence of commands + +```yaml +script: + learn_tv_commands: + sequence: + - service: remote.learn_command + data: + entity_id: remote.bedroom + device: television + command: + - turn on + - turn off + - volume up + - volume down +``` + +Example 3: Learn a toggle command + +The `alternative` flag is useful for capturing commands where the same button is used for more than one purpose, such as the power button, which can turn the television on and off. + +```yaml +script: + learn_tv_power_button: + sequence: + - service: remote.learn_command + data: + entity_id: remote.bedroom + device: television + command: power + alternative: True +``` + +In the above example, two codes will be captured for the power command, and will be sent alternately each time the command is called. + +### Send command + +Use the `remote.send_command` service to send commands. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ---------------------------------------------------- | +| `entity_id` | no | ID of the remote. | +| `device` | no | Name of the device to control. | +| `command` | no | Names of the commands to send. | +| `num_repeats` | yes | Number of times to repeat the commands. | +| `delay_secs` | yes | Interval in seconds between one command and another. | + +Example 1: Send a single command + +```yaml +script: + mute_tv: + sequence: + - service: remote.send_command + data: + entity_id: remote.bedroom + device: television + command: mute +``` + +Example 2: Send a command repeatedly + +```yaml +script: + turn_up_tv_volume_20: + sequence: + - service: remote.send_command + data: + entity_id: remote.bedroom + device: television + command: volume up + num_repeats: 20 +``` + +Example 3: Send a sequence of commands + +```yaml +script: + turn_on_ac: + sequence: + - service: remote.send_command + data: + entity_id: remote.bedroom + device: air conditioner + command: + - turn on + - turn off display +``` + ## Sensor The `broadlink` sensor platform let you monitor data from an RM2 and A1 E-air. There is currently no support for the cloud API. @@ -292,10 +445,10 @@ switch: You can use the service `broadlink.send` to directly send IR packets without the need to assign a switch entity for each command. -| Service data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `host` | no | IP address to send command to. -| `packet` | no | String or list of strings that contain the packet data. +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ------------------------------------------------------- | +| `host` | no | IP address to send command to. | +| `packet` | no | String or list of strings that contain the packet data. | Example: diff --git a/source/_integrations/channels.markdown b/source/_integrations/channels.markdown index 449471874e4..4bc28d76cdb 100644 --- a/source/_integrations/channels.markdown +++ b/source/_integrations/channels.markdown @@ -40,7 +40,7 @@ name: type: string {% endconfiguration %} -### Service `channels_seek_forward` +### Service `seek_forward` Seek forward by the number of seconds currently set in settings on the instance of Channels. @@ -49,7 +49,7 @@ Seek forward by the number of seconds currently set in settings on the instance | `entity_id` | no | String that points at `entity_id` of Channels app. -### Service `channels_seek_backward` +### Service `seek_backward` Seek backward by the number of seconds currently set in settings on the instance of Channels. @@ -57,7 +57,7 @@ Seek backward by the number of seconds currently set in settings on the instance | ---------------------- | -------- | ----------- | | `entity_id` | no | String that points at `entity_id` of Channels app. -### Service `channels_seek_by` +### Service `seek_by` Seek forward or backward by a provided number of seconds. diff --git a/source/_integrations/climate.modbus.markdown b/source/_integrations/climate.modbus.markdown index 204683b578c..5a9bb057368 100644 --- a/source/_integrations/climate.modbus.markdown +++ b/source/_integrations/climate.modbus.markdown @@ -22,6 +22,14 @@ climate: name: Watlow F4T hub: hub1 slave: 1 + data_type: uint + count: 1 + scale: 0.1 + offset: 0 + precision: 1 + max_temp: 30 + min_temp: 15 + temp_step: 1 target_temp_register: 2782 current_temp_register: 27586 ``` @@ -62,6 +70,36 @@ precision: required: false type: integer default: 0 +scale: + description: Scale factor (output = scale * value + offset). + required: false + type: float + default: 1 +offset: + description: Final offset (output = scale * value + offset). + required: false + type: float + default: 0 +max_temp: + description: Maximum setpoint temperature. + required: false + type: integer + default: 35 +min_temp: + description: Maximum setpoint temperature. + required: false + type: integer + default: 5 +temp_step: + description: The supported step size a target temperature can be increased/decreased. + required: false + type: float + default: 0.5 +temperature_unit: + description: Temperature unit reported by the current_temp_register. C or F + required: false + type: string + default: C {% endconfiguration %} diff --git a/source/_integrations/comfoconnect.markdown b/source/_integrations/comfoconnect.markdown index 08d3b768fd8..5f5a3eb7dae 100644 --- a/source/_integrations/comfoconnect.markdown +++ b/source/_integrations/comfoconnect.markdown @@ -58,14 +58,27 @@ To register the sensors, add the following to your `configuration.yaml` file: sensor: - platform: comfoconnect resources: - - current_temperature - - current_humidity - - outside_temperature - - outside_humidity - - air_flow_supply - air_flow_exhaust + - air_flow_supply + - bypass_state + - current_humidity + - current_temperature + - days_to_replace_filter + - exhaust_fan_duty + - exhaust_fan_speed + - exhaust_humidity + - exhaust_temperature + - outside_humidity + - outside_temperature + - power_usage + - supply_fan_duty + - supply_fan_speed + - supply_humidity + - supply_temperature ``` +The list above indicates all supported sensors. It is recommended to only include the ones you need. +
Note that it's not possible to have multiple connection to the bridge at the same time. This integration will keep the connection open, and if you open the app, it will ask you to disconnect Home Assistant. If you close the app again, Home Assistant will reconnect automatically.
diff --git a/source/_integrations/dsmr_reader.markdown b/source/_integrations/dsmr_reader.markdown new file mode 100644 index 00000000000..7aae6a9329d --- /dev/null +++ b/source/_integrations/dsmr_reader.markdown @@ -0,0 +1,24 @@ +--- +title: "DSMR Reader" +description: "Instructions on how to integrate DSMR Reader." +ha_category: + - Energy +ha_iot_class: Cloud Polling +ha_release: 0.103 +--- + +The `dsmr_reader` sensor platform allows you to easily add all sensors that [DSMR Reader](https://dsmr-reader.readthedocs.io/en/latest/) exposes to MQTT. It adds a separate sensor for every field in the MQTT topics. + +## Setup + +To use this component, you will need DSMR Reader to be set up to publish to the MQTT server, that Home Assistant also uses. It is important that you setup DSMR Reader to publish to MQTT using "Split Topic" and that you use the default mappings. + +## Configuration + +To use this sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: dsmr_reader +``` diff --git a/source/_integrations/envisalink.markdown b/source/_integrations/envisalink.markdown index 3bd9ad0f9a4..6c55413add0 100644 --- a/source/_integrations/envisalink.markdown +++ b/source/_integrations/envisalink.markdown @@ -137,5 +137,5 @@ The following services are supported by Envisalink and can be used to script or - **alarm_arm_away**: Arms the alarm in standard away mode. - **alarm_arm_night**: Arms the alarm in night mode. - **alarm_trigger**: Trigger an alarm on the Envisalink connected alarm system. For example, a newer zwave/zigbee sensor can now be integrated into a legacy alarm system using a Home Assistant automation. -- **envisalink_alarm_keypress**: Sends a string of up to 6 characters to the alarm. *Works with DSC panels, and confirmed to work with Honeywell Vista-20P (aka First Alert FA-168)* +- **alarm_keypress**: Sends a string of up to 6 characters to the alarm. *Works with DSC panels, and confirmed to work with Honeywell Vista-20P (aka First Alert FA-168)* - **invoke_custom_function**: Invokes a custom PGM function. *DSC alarms only* diff --git a/source/_integrations/facebox.markdown b/source/_integrations/facebox.markdown index 4674ac2fa37..86007927153 100644 --- a/source/_integrations/facebox.markdown +++ b/source/_integrations/facebox.markdown @@ -111,9 +111,9 @@ Use the `image_processing.detect_face` events to trigger automations, and breako ``` {% endraw %} -## Service `facebox_teach_face` +## Service `facebox.teach_face` -The service `facebox_teach_face` can be used to teach Facebox faces. +The service `facebox.teach_face` can be used to teach Facebox faces. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -141,7 +141,7 @@ You can use an automation to receive a notification when you train a face: alias: Face taught trigger: - event_data: - service: facebox_teach_face + service: facebox.teach_face event_type: call_service platform: event condition: [] diff --git a/source/_integrations/fan.xiaomi_miio.markdown b/source/_integrations/fan.xiaomi_miio.markdown index d744b544cab..17bb3e5fd10 100644 --- a/source/_integrations/fan.xiaomi_miio.markdown +++ b/source/_integrations/fan.xiaomi_miio.markdown @@ -342,7 +342,7 @@ Set the fan speed/operation mode. | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | | `speed` | no | Fan speed. Valid values are 'Auto', 'Silent', 'Favorite' and 'Idle' | -### Service `fan.xiaomi_miio_set_buzzer_on` (Air Purifier Pro excluded) +### Service `xiaomi_miio.fan_set_buzzer_on` (Air Purifier Pro excluded) Turn the buzzer on. @@ -350,7 +350,7 @@ Turn the buzzer on. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | -### Service `fan.xiaomi_miio_set_buzzer_off` (Air Purifier Pro excluded) +### Service `xiaomi_miio.fan_set_buzzer_off` (Air Purifier Pro excluded) Turn the buzzer off. @@ -358,7 +358,7 @@ Turn the buzzer off. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | -### Service `fan.xiaomi_miio_set_led_on` (Air Purifiers only) +### Service `xiaomi_miio.fan_set_led_on` (Air Purifiers only) Turn the led on. @@ -366,7 +366,7 @@ Turn the led on. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | -### Service `fan.xiaomi_miio_set_led_off` (Air Purifiers only) +### Service `xiaomi_miio.fan_set_led_off` (Air Purifiers only) Turn the led off. @@ -374,7 +374,7 @@ Turn the led off. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | -### Service `fan.xiaomi_miio_set_child_lock_on` +### Service `xiaomi_miio.fan_set_child_lock_on` Turn the child lock on. @@ -382,7 +382,7 @@ Turn the child lock on. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | -### Service `fan.xiaomi_miio_set_child_lock_off` +### Service `xiaomi_miio.fan_set_child_lock_off` Turn the child lock off. @@ -390,7 +390,7 @@ Turn the child lock off. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | -### Service `fan.xiaomi_miio_set_led_brightness` (Air Purifier 2S and Air Purifier Pro excluded) +### Service `xiaomi_miio.fan_set_led_brightness` (Air Purifier 2S and Air Purifier Pro excluded) Set the led brightness. Supported values are 0 (Bright), 1 (Dim), 2 (Off). @@ -399,7 +399,7 @@ Set the led brightness. Supported values are 0 (Bright), 1 (Dim), 2 (Off). | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | | `brightness` | no | Brightness, between 0 and 2. | -### Service `fan.xiaomi_miio_set_favorite_level` (Air Purifiers only) +### Service `xiaomi_miio.fan_set_favorite_level` (Air Purifiers only) Set the favorite level of the operation mode "favorite". @@ -408,7 +408,7 @@ Set the favorite level of the operation mode "favorite". | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | | `level` | no | Level, between 0 and 16. | -### Service `fan.xiaomi_miio_set_auto_detect_on` (Air Purifier 2S and Air Purifier Pro only) +### Service `xiaomi_miio.fan_set_auto_detect_on` (Air Purifier 2S and Air Purifier Pro only) Turn the auto detect on. @@ -416,7 +416,7 @@ Turn the auto detect on. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | -### Service `fan.xiaomi_miio_set_auto_detect_off` (Air Purifier 2S and Air Purifier Pro only) +### Service `xiaomi_miio.fan_set_auto_detect_off` (Air Purifier 2S and Air Purifier Pro only) Turn the auto detect off. @@ -424,7 +424,7 @@ Turn the auto detect off. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | -### Service `fan.xiaomi_miio_set_learn_mode_on` (Air Purifier 2 only) +### Service `xiaomi_miio.fan_set_learn_mode_on` (Air Purifier 2 only) Turn the learn mode on. @@ -432,7 +432,7 @@ Turn the learn mode on. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | -### Service `fan.xiaomi_miio_set_learn_mode_off` (Air Purifier 2 only) +### Service `xiaomi_miio.fan_set_learn_mode_off` (Air Purifier 2 only) Turn the learn mode off. @@ -440,7 +440,7 @@ Turn the learn mode off. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | -### Service `fan.xiaomi_miio_set_volume` (Air Purifier Pro only) +### Service `xiaomi_miio.fan_set_volume` (Air Purifier Pro only) Set the sound volume. @@ -449,7 +449,7 @@ Set the sound volume. | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | | `volume` | no | Volume, between 0 and 100. | -### Service `fan.xiaomi_miio_reset_filter` (Air Purifier 2 only) +### Service `xiaomi_miio.fan_reset_filter` (Air Purifier 2 only) Reset the filter lifetime and usage. @@ -457,7 +457,7 @@ Reset the filter lifetime and usage. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | -### Service `fan.xiaomi_miio_set_extra_features` (Air Purifier only) +### Service `xiaomi_miio.fan_set_extra_features` (Air Purifier only) Set the extra features. @@ -466,7 +466,7 @@ Set the extra features. | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | | `features` | no | Integer, known values are 0 and 1. | -### Service `fan.xiaomi_miio_set_target_humidity` (Air Humidifier only) +### Service `xiaomi_miio.fan_set_target_humidity` (Air Humidifier only) Set the target humidity. diff --git a/source/_integrations/flume.markdown b/source/_integrations/flume.markdown new file mode 100644 index 00000000000..5fe1f561eb7 --- /dev/null +++ b/source/_integrations/flume.markdown @@ -0,0 +1,73 @@ +--- +title: "flume" +description: "Documentation about the flume sensor." +logo: flume.jpg +ha_category: + - Sensor +ha_iot_class: Cloud Polling +ha_release: 0.103 +--- + +The `flume` sensor will show you the current [flume](https://portal.flumetech.com/) status for the given Device ID. + +Flume monitors the real-time status of your home water meter. Allowing the end-user to detect small leaks, gain real-time information on household water consumption, set water goals and budgets, and receive push notifications when suspicious water activities occur. + +## Configuration + +You can find your Client ID and Client Secret under "API Access" on the [settings page](https://https://portal.flumetech.com/#settings). + +To enable the flume sensor, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + # Flume + - platform: flume + username: YOUR_FLUME_USERNAME + password: YOUR_FLUME_PASSWORD + client_id: YOUR_FLUME_CLIENT_ID + client_secret: YOUR_FLUME_CLIENT_SECRET +``` + +{% configuration %} +username: + description: Your flume user id. + required: true + type: string +password: + description: Your flume password. + required: true + type: string +client_id: + description: Your flume Client ID. + required: true + type: string +client_secret: + description: Your flume Client Secret. + required: true + type: string +name: + description: A name to display on the sensor. + required: false + default: Flume Sensor + type: string +{% endconfiguration %} + +# Configuration for Binary Sensor + +The following YAML creates a binary sensor. This requires the default sensor to be configured successfully. + +{% raw %} + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: template + sensors: + flume_status: + friendly_name: "Flume Flow Status" + value_template: >- + {{ states.sensor.flume_sensor.state != "0" }} +``` + +{% endraw %} diff --git a/source/_integrations/fritzbox_callmonitor.markdown b/source/_integrations/fritzbox_callmonitor.markdown index f8476c7f49a..c0ddef3c2cf 100644 --- a/source/_integrations/fritzbox_callmonitor.markdown +++ b/source/_integrations/fritzbox_callmonitor.markdown @@ -23,6 +23,7 @@ $ sudo apt-get install libxml2-dev libxslt-dev \ If you installed Home Assistant in a virtualenv, also run the following command inside it. Be patient this will take a while. + ```bash pip3 install lxml ``` @@ -48,7 +49,7 @@ name: default: Phone type: string host: - description: The IP address of your router, e.g., 192.168.1.1. It is optional since every fritzbox is also reachable by using the IP address 169.254.1.1. + description: The IP address of your router, e.g., 192.168.1.1. It is optional since every FRITZ!Box is also reachable by using the IP address 169.254.1.1. If you have a local DNS server and have assigned a hostname to your FRITZ!Box, you can also use that here instead of the IP address. required: false default: 169.254.1.1 type: string diff --git a/source/_integrations/geonetnz_volcano.markdown b/source/_integrations/geonetnz_volcano.markdown new file mode 100644 index 00000000000..0f0631298d6 --- /dev/null +++ b/source/_integrations/geonetnz_volcano.markdown @@ -0,0 +1,96 @@ +--- +title: "GeoNet NZ Volcanic Alert Level" +description: "Instructions on how to integrate the GeoNet New Zealand Volcanic Alert Level feed into Home Assistant." +logo: geonet-nz.png +ha_category: + - Sensor +ha_iot_class: Cloud Polling +ha_release: 0.103 +ha_config_flow: true +--- + +The `geonetnz_volcano` integration lets you use a GeoJSON feed provided by +New Zealand's [GeoNet](https://www.geonet.org.nz/) with information +about volcanoes in the New Zealand region. +It shows information of those volcanoes filtered by distance to Home Assistant's +location. + +Entities are generated and updated automatically with each update +from the feed. Each entity defines the [volcanic alert level](https://www.geonet.org.nz/about/volcano/val) +as its state. Latitude and longitude of the volcano are included as attributes +to show on the default map automatically. + +The data is updated every 5 minutes. + +

+ +

+ +

+ +

+ +
+ +The material used by this integration is provided under the [Creative Commons Attribution 3.0 New Zealand (CC BY 3.0 NZ) license](http://creativecommons.org/licenses/by/3.0/nz/). +It has only been modified for the purpose of presenting the material in Home Assistant. +Please refer to the [creator's disclaimer notice](https://www.geonet.org.nz/disclaimer) and [data policy](https://www.geonet.org.nz/policy) for more information. + +We acknowledge the New Zealand GeoNet project and its sponsors EQC, GNS Science and LINZ, for providing data/images used in this integration. + +
+ +## Configuration + +To integrate the GeoNet New Zealand Volcanic Alert Level feed use the **Integrations** feature +in the GUI, you find it under **Configurations** -> **Integrations**, or add the +following line to your `configuration.yaml`. + +```yaml +# Example configuration.yaml entry +geonetnz_volcano: +``` + +{% configuration %} +radius: + description: The radius around your location to monitor; defaults to 50 km or mi (depending on the unit system defined in your configuration). + required: false + type: float + default: 50.0 +latitude: + description: Latitude of the coordinates around which volcanoes are considered. + required: false + type: float + default: Latitude defined in your configuration. +longitude: + description: Longitude of the coordinates around which volcanoes are considered. + required: false + type: float + default: Longitude defined in your configuration. +{% endconfiguration %} + +## State Attributes + +The following state attributes are available for each entity in addition to +the standard ones: + +| Attribute | Description | +|------------------------|-------------| +| latitude | Latitude of the volcano. | +| longitude | Longitude of the volcano. | +| external_id | The external ID used in the feed to identify the volcano. | +| activity | Volcanic activity. | +| hazards | Most likely hazards. | +| distance | The distance in km or mi to Home Assistant's location. | +| last update | Timestamp of the last update from the feed. | +| last update successful | Timestamp of the last successful update from the feed. | + +## Full Configuration + +```yaml +# Example configuration.yaml entry +geonetnz_quakes: + radius: 100 + latitude: -41.2 + longitude: 174.7 +``` diff --git a/source/_integrations/google_assistant.markdown b/source/_integrations/google_assistant.markdown index a96ea5a33f6..19f4c3fc610 100644 --- a/source/_integrations/google_assistant.markdown +++ b/source/_integrations/google_assistant.markdown @@ -193,7 +193,7 @@ Currently, the following domains are available to be used with Google Assistant, - media_player (on/off/set volume (via set volume)/source (via set input source)) - climate (temperature setting, hvac_mode) - vacuum (dock/start/stop/pause) -- sensor (temperature setting, only for temperature sensor) +- sensor (temperature setting for temperature sensors and humidity setting for humidity sensors) - Alarm Control Panel (Arm/Disarm)
diff --git a/source/_integrations/harmony.markdown b/source/_integrations/harmony.markdown index 3c9f71aadc8..afac8b40fbd 100644 --- a/source/_integrations/harmony.markdown +++ b/source/_integrations/harmony.markdown @@ -182,7 +182,7 @@ data: delay_secs: 0.6 ``` -### Service `remote.harmony_change_channel` +### Service `harmony.change_channel` Sends the change channel command to the Harmony HUB @@ -194,13 +194,13 @@ Sends the change channel command to the Harmony HUB A typical service call for changing the channel would be:: ```yaml -service: remote.change_channel +service: harmony.change_channel data: entity_id: remote.tv_room channel: 200 ``` -### Service `remote.harmony_sync` +### Service `harmony.sync` Force synchronization between the Harmony device and the Harmony cloud. diff --git a/source/_integrations/heatmiser.markdown b/source/_integrations/heatmiser.markdown index 26059c0b501..c1ec07107c3 100644 --- a/source/_integrations/heatmiser.markdown +++ b/source/_integrations/heatmiser.markdown @@ -17,25 +17,24 @@ To set it up, add the following information to your `configuration.yaml` file: ```yaml climate: - platform: heatmiser - ipaddress: YOUR_IP_ADDRESS + host: YOUR_IP_ADDRESS port: YOUR_PORT tstats: - - 1: - id: THERMOSTAT_ID + - id: THERMOSTAT_ID name: THERMOSTAT_NAME ``` A single interface can handle up to 32 connected devices. {% configuration %} -ipaddress: +host: description: The IP address of your interface. required: true type: string port: description: The port that the interface is listening on. required: true - type: integer + type: string tstats: description: A list of thermostats activated on the gateway. required: true diff --git a/source/_integrations/hisense_aehw4a1.markdown b/source/_integrations/hisense_aehw4a1.markdown new file mode 100644 index 00000000000..e070012f786 --- /dev/null +++ b/source/_integrations/hisense_aehw4a1.markdown @@ -0,0 +1,44 @@ +--- +title: "Hisense AEH-W4A1" +description: "Instructions to setup the Hisense AEH W4A1 WiFi module for ACs." +logo: hisense.png +ha_release: 0.103 +ha_category: + - Climate +ha_iot_class: Local Poll +--- + +The Hisense AEH-W4A1 is a WiFi module used to give WiFi connectivity to some Hisense ACs and rebranded models (Smart Cool, Beko and others). + +Later AC models use other WiFi modules (like AEH-W4B1 and AEH-W4E1) that are not compatible or otherwise tested with this integration. + +It is highly recommended not to use one of the official smartphone applications and this integration at the same time, to avoid problems related to command collision. + +## Configuration + +To integrate one or more Hisense AEH-W4A1 controlled ACs with Home Assistant, use the Configuration/Integrations or add the following section to your `configuration.yaml` file: + +```yaml +# Automatic discovery +hisense_aehw4a1: +``` + +Alternately, devices that are not discoverable can be statically configured. +The use of static configuration disables automatic discovery. + +{% configuration %} +ip_address: + description: One or more static IP addresses + required: false + type: list +{% endconfiguration %} + +## Full configuration example + +```yaml +# Static configured devices +hisense_aehw4a1: + ip_address: + - 192.168.5.10 + - 192.168.5.20 +``` diff --git a/source/_integrations/html5.markdown b/source/_integrations/html5.markdown index 21e1396fcaf..97ab7cdb13d 100644 --- a/source/_integrations/html5.markdown +++ b/source/_integrations/html5.markdown @@ -232,7 +232,7 @@ data: ### Dismiss -You can dismiss notifications by using service notify.html5_dismiss like so: +You can dismiss notifications by using service html5.dismiss like so: ```json { diff --git a/source/_integrations/huawei_lte.markdown b/source/_integrations/huawei_lte.markdown index 4a8b8585f7c..515b488d12b 100644 --- a/source/_integrations/huawei_lte.markdown +++ b/source/_integrations/huawei_lte.markdown @@ -8,6 +8,7 @@ ha_category: - Notifications - Sensor - Switch + - Binary Sensor ha_release: 0.79 ha_iot_class: Local Polling --- @@ -20,6 +21,7 @@ There is currently support for the following platforms within Home Assistant: - Notifications - via SMS - Sensors - device, signal, and traffic information - Switch - mobile data on/off +- Binary sensor - mobile connection status ## Configuration @@ -44,6 +46,7 @@ default: - WAN IP address sensor - LTE signal sensors RSRQ, RSRP, RSSI, and SINR - mobile data switch +- mobile connection binary sensor - device tracker entries The rest are added to the entity registry, but disabled by default. diff --git a/source/_integrations/icloud.markdown b/source/_integrations/icloud.markdown index 1f8fdb602f9..d70e5aa4a1d 100644 --- a/source/_integrations/icloud.markdown +++ b/source/_integrations/icloud.markdown @@ -64,7 +64,7 @@ If 2 Step Authentication is enabled for your iCloud account. The integration wil 2 Factor Authentication is the improved version of 2 Step Authentication, this is still not supported by the pyicloud library. Therefore it's not possible to use it with the device_tracker yet. 4 services are available for this component: -- **icloud_update**: This service can be used to ask for an update of a certain iDevice. The `account_name` and `device_name` are optional. Request will result in new Home Assistant [state_changed](/docs/configuration/events/#event-state_changed) event describing current iphone location. Can be used in automations when manual location update is needed, e.g., to check if anyone is home when door's been opened. -- **icloud_lost_iphone**: This service will play the Lost iPhone sound on a certain iDevice. The `account_name` and `device_name` are optional. -- **icloud_set_interval**: This service will change the dynamic interval of an iDevice. The `account_name` and `device_name` are optional. If `interval` is used in the service_data, the iDevice will be updated with that new interval. That interval will be fixed until the iDevice changes zone or if this service is called again. If `interval` isn't used in the service_data, the interval for that iDevice will revert back to its default dynamic interval based on its current zone, its distance towards home and its battery level. -- **icloud_reset_account**: This service can be used to reset an iCloud account. This is helpful when not all devices are found by the integration or if you have added a new iDevice to your account. The `account_name` is optional. +- **update**: This service can be used to ask for an update of a certain iDevice. The `account_name` and `device_name` are optional. Request will result in new Home Assistant [state_changed](/docs/configuration/events/#event-state_changed) event describing current iphone location. Can be used in automations when manual location update is needed, e.g., to check if anyone is home when door's been opened. +- **lost_iphone**: This service will play the Lost iPhone sound on a certain iDevice. The `account_name` and `device_name` are optional. +- **set_interval**: This service will change the dynamic interval of an iDevice. The `account_name` and `device_name` are optional. If `interval` is used in the service_data, the iDevice will be updated with that new interval. That interval will be fixed until the iDevice changes zone or if this service is called again. If `interval` isn't used in the service_data, the interval for that iDevice will revert back to its default dynamic interval based on its current zone, its distance towards home and its battery level. +- **reset_account**: This service can be used to reset an iCloud account. This is helpful when not all devices are found by the integration or if you have added a new iDevice to your account. The `account_name` is optional. diff --git a/source/_integrations/jewish_calendar.markdown b/source/_integrations/jewish_calendar.markdown index 1fd34e689fb..e772b887a43 100644 --- a/source/_integrations/jewish_calendar.markdown +++ b/source/_integrations/jewish_calendar.markdown @@ -82,53 +82,54 @@ For easier use in automations, all time sensors have a `timestamp` attribute, wh ### Holiday sensor -The holiday sensor includes two attibutes: *type* and *id*. +The holiday sensor includes 3 attributes: *type*, *type_id* and *id*. +The *type_id* is useful for cases to condition automations based on a range of types. The following is the list of holidays the sensor knows about with their selected type: -| ID | English | Hebrew | Type | -|----------------------|----------------------------|-----------------------|---------------------------| -| erev_rosh_hashana | Erev Rosh Hashana | ערב ראש השנה | EREV_YOM_TOV | -| rosh_hashana_i | Rosh Hashana I | א' ראש השנה | YOM_TOV | -| rosh_hashana_ii | Rosh Hashana II | ב' ראש השנה | YOM_TOV | -| tzom_gedaliah | Tzom Gedaliah | צום גדליה | FAST_DAY | -| erev_yom_kippur | Erev Yom Kippur | עיוה"כ | EREV_YOM_TOV | -| yom_kippur | Yom Kippur | יום הכפורים | YOM_TOV | -| erev_sukkot | Erev Sukkot | ערב סוכות | EREV_YOM_TOV | -| sukkot | Sukkot | סוכות | YOM_TOV | -| hol_hamoed_sukkot | Hol hamoed Sukkot | חול המועד סוכות | HOL_HAMOED | -| hoshana_raba | Hoshana Raba | הושענא רבה | EREV_YOM_TOV | -| simchat_torah | Simchat Torah | שמחת תורה | YOM_TOV | -| chanukah | Chanukah | חנוכה | MELACHA_PERMITTED_HOLIDAY | -| asara_btevet | Asara B'Tevet | צום עשרה בטבת | FAST_DAY | -| tu_bshvat | Tu B'Shvat | ט"ו בשבט | MINOR_HOLIDAY | -| taanit_esther | Ta'anit Esther | תענית אסתר | FAST_DAY | -| purim | Purim | פורים | MELACHA_PERMITTED_HOLIDAY | -| shushan_purim | Shushan Purim | שושן פורים | MELACHA_PERMITTED_HOLIDAY | -| erev_pesach | Erev Pesach | ערב פסח | EREV_YOM_TOV | -| pesach | Pesach | פסח | YOM_TOV | -| hol_hamoed_pesach | Hol hamoed Pesach | חול המועד פסח | HOL_HAMOED | -| pesach_vii | Pesach VII | שביעי פסח | YOM_TOV | -| yom_haatzmaut | Yom HaAtzma'ut | יום העצמאות | MODERN_HOLIDAY | -| lag_bomer | Lag B'Omer | ל"ג בעומר | MINOR_HOLIDAY | -| erev_shavuot | Erev Shavuot | ערב שבועות | EREV_YOM_TOV | -| shavuot | Shavuot | שבועות | YOM_TOV | -| tzom_tammuz | Tzom Tammuz | צום שבעה עשר בתמוז | FAST_DAY | -| tisha_bav | Tish'a B'Av | תשעה באב | FAST_DAY | -| tu_bav | Tu B'Av | ט"ו באב | MINOR_HOLIDAY | -| yom_hashoah | Yom HaShoah | יום השואה | MEMORIAL_DAY | -| yom_hazikaron | Yom HaZikaron | יום הזכרון | MEMORIAL_DAY | -| yom_yerushalayim | Yom Yerushalayim | יום ירושלים | MODERN_HOLIDAY | -| shmini_atzeret | Shmini Atzeret | שמיני עצרת | YOM_TOV | -| pesach_viii | Pesach VIII | אחרון של פסח | YOM_TOV | -| shavuot_ii | Shavuot II | שני של שבועות | YOM_TOV | -| sukkot_ii | Sukkot II | שני של סוכות | YOM_TOV | -| pesach_ii | Pesach II | שני של פסח | YOM_TOV | -| family_day | Family Day | יום המשפחה | ISRAEL_NATIONAL_HOLIDAY | -| memorial_day_unknown | Memorial day for fallen whose place of burial is unknown | יום זכרון... | MEMORIAL_DAY | -| rabin_memorial_day | Yitzhak Rabin memorial day | יום הזכרון ליצחק רבין | MEMORIAL_DAY | -| zeev_zhabotinsky_day | Zeev Zhabotinsky day | יום ז'בוטינסקי | MEMORIAL_DAY | +| ID | English | Hebrew | Type | +|----------------------|----------------------------|-----------------------|--------------------------------| +| erev_rosh_hashana | Erev Rosh Hashana | ערב ראש השנה | EREV_YOM_TOV (2) | +| rosh_hashana_i | Rosh Hashana I | א' ראש השנה | YOM_TOV (1) | +| rosh_hashana_ii | Rosh Hashana II | ב' ראש השנה | YOM_TOV (1) | +| tzom_gedaliah | Tzom Gedaliah | צום גדליה | FAST_DAY (5) | +| erev_yom_kippur | Erev Yom Kippur | עיוה"כ | EREV_YOM_TOV (2) | +| yom_kippur | Yom Kippur | יום הכפורים | YOM_TOV (1) | +| erev_sukkot | Erev Sukkot | ערב סוכות | EREV_YOM_TOV (2) | +| sukkot | Sukkot | סוכות | YOM_TOV (1) | +| hol_hamoed_sukkot | Hol hamoed Sukkot | חול המועד סוכות | HOL_HAMOED (3) | +| hoshana_raba | Hoshana Raba | הושענא רבה | EREV_YOM_TOV (2) | +| simchat_torah | Simchat Torah | שמחת תורה | YOM_TOV (1) | +| chanukah | Chanukah | חנוכה | MELACHA_PERMITTED_HOLIDAY (4) | +| asara_btevet | Asara B'Tevet | צום עשרה בטבת | FAST_DAY (5) | +| tu_bshvat | Tu B'Shvat | ט"ו בשבט | MINOR_HOLIDAY (7) | +| taanit_esther | Ta'anit Esther | תענית אסתר | FAST_DAY (5) | +| purim | Purim | פורים | MELACHA_PERMITTED_HOLIDAY (4) | +| shushan_purim | Shushan Purim | שושן פורים | MELACHA_PERMITTED_HOLIDAY (4) | +| erev_pesach | Erev Pesach | ערב פסח | EREV_YOM_TOV (2) | +| pesach | Pesach | פסח | YOM_TOV (1) | +| hol_hamoed_pesach | Hol hamoed Pesach | חול המועד פסח | HOL_HAMOED (3) | +| pesach_vii | Pesach VII | שביעי פסח | YOM_TOV (1) | +| yom_haatzmaut | Yom HaAtzma'ut | יום העצמאות | MODERN_HOLIDAY (6) | +| lag_bomer | Lag B'Omer | ל"ג בעומר | MINOR_HOLIDAY (7) | +| erev_shavuot | Erev Shavuot | ערב שבועות | EREV_YOM_TOV (2) | +| shavuot | Shavuot | שבועות | YOM_TOV (1) | +| tzom_tammuz | Tzom Tammuz | צום שבעה עשר בתמוז | FAST_DAY (5) | +| tisha_bav | Tish'a B'Av | תשעה באב | FAST_DAY (5) | +| tu_bav | Tu B'Av | ט"ו באב | MINOR_HOLIDAY (7) | +| yom_hashoah | Yom HaShoah | יום השואה | MEMORIAL_DAY (8) | +| yom_hazikaron | Yom HaZikaron | יום הזכרון | MEMORIAL_DAY (8) | +| yom_yerushalayim | Yom Yerushalayim | יום ירושלים | MODERN_HOLIDAY (6) | +| shmini_atzeret | Shmini Atzeret | שמיני עצרת | YOM_TOV (1) | +| pesach_viii | Pesach VIII | אחרון של פסח | YOM_TOV (1) | +| shavuot_ii | Shavuot II | שני של שבועות | YOM_TOV (1) | +| sukkot_ii | Sukkot II | שני של סוכות | YOM_TOV (1) | +| pesach_ii | Pesach II | שני של פסח | YOM_TOV (1) | +| family_day | Family Day | יום המשפחה | ISRAEL_NATIONAL_HOLIDAY (9) | +| memorial_day_unknown | Memorial day for fallen whose place of burial is unknown | יום זכרון... | MEMORIAL_DAY (8) | +| rabin_memorial_day | Yitzhak Rabin memorial day | יום הזכרון ליצחק רבין | MEMORIAL_DAY (8) | +| zeev_zhabotinsky_day | Zeev Zhabotinsky day | יום ז'בוטינסקי | MEMORIAL_DAY (8) | ## Full configuration sample diff --git a/source/_integrations/lifx.markdown b/source/_integrations/lifx.markdown index badbf351f59..bc3b9a39b42 100644 --- a/source/_integrations/lifx.markdown +++ b/source/_integrations/lifx.markdown @@ -65,7 +65,7 @@ script: The available light effects and their options are listed below. -### Service `light.lifx_effect_pulse` +### Service `lifx.effect_pulse` Run a flash effect by changing to a color and then back. @@ -80,7 +80,7 @@ Run a flash effect by changing to a color and then back. | `mode` | The way to change between colors. Valid modes: `blink` (default - direct transition to new color for 'period' time with original color between cycles), `breathe` (color fade transition to new color and back to original), `ping` (short pulse of new color), `strobe` (light turns off between color changes), `solid`(light does not return to original color between cycles). | `power_on` | Set this to False to skip the effect on lights that are turned off (defaults to True). -### Service `light.lifx_effect_colorloop` +### Service `lifx.effect_colorloop` Run an effect with colors looping around the color wheel. All participating lights will coordinate to keep similar (but not identical) colors. @@ -94,7 +94,7 @@ Run an effect with colors looping around the color wheel. All participating ligh | `spread` | Maximum color difference between participating lights, in degrees on a color wheel (ranges from 0 to 359). | `power_on` | Set this to False to skip the effect on lights that are turned off (defaults to True). -### Service `light.lifx_effect_stop` +### Service `lifx.effect_stop` Run an effect that does nothing, thereby stopping any other effect that might be running. diff --git a/source/_integrations/light.xiaomi_miio.markdown b/source/_integrations/light.xiaomi_miio.markdown index f6b160f1798..1494eba80f8 100644 --- a/source/_integrations/light.xiaomi_miio.markdown +++ b/source/_integrations/light.xiaomi_miio.markdown @@ -132,7 +132,7 @@ model: ## Platform Services -### Service `light.xiaomi_miio_set_scene` +### Service `xiaomi_miio.light_set_scene` Set one of the 4 available fixed scenes. @@ -141,7 +141,7 @@ Set one of the 4 available fixed scenes. | `entity_id` | no | Only act on a specific Xiaomi miIO light entity. | | `scene` | no | Scene, between 1 and 4. | -### Service `light.xiaomi_miio_set_delayed_turn_off` +### Service `xiaomi_miio.light_set_delayed_turn_off` Delayed turn off. @@ -150,7 +150,7 @@ Delayed turn off. | `entity_id` | no | Only act on a specific Xiaomi miIO light entity. | | `time_period` | no | Time period for the delayed turn off. | -### Service `light.xiaomi_miio_reminder_on` (Eyecare Smart Lamp 2 only) +### Service `xiaomi_miio.light_reminder_on` (Eyecare Smart Lamp 2 only) Enable the eye fatigue reminder/notification. @@ -158,7 +158,7 @@ Enable the eye fatigue reminder/notification. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO light entity. | -### Service `light.xiaomi_miio_reminder_off` (Eyecare Smart Lamp 2 only) +### Service `xiaomi_miio.light_reminder_off` (Eyecare Smart Lamp 2 only) Disable the eye fatigue reminder/notification. @@ -166,7 +166,7 @@ Disable the eye fatigue reminder/notification. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO light entity. | -### Service `light.xiaomi_miio_night_light_mode_on` (Eyecare Smart Lamp 2 only) +### Service `xiaomi_miio.light_night_light_mode_on` (Eyecare Smart Lamp 2 only) Turn the smart night light mode on. @@ -174,7 +174,7 @@ Turn the smart night light mode on. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO light entity. | -### Service `light.xiaomi_miio_night_light_mode_off` (Eyecare Smart Lamp 2 only) +### Service `xiaomi_miio.light_night_light_mode_off` (Eyecare Smart Lamp 2 only) Turn the smart night light mode off. @@ -182,7 +182,7 @@ Turn the smart night light mode off. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO light entity. | -### Service `light.xiaomi_miio_eyecare_mode_on` (Eyecare Smart Lamp 2 only) +### Service `xiaomi_miio.light_eyecare_mode_on` (Eyecare Smart Lamp 2 only) Turn the eyecare mode on. @@ -190,7 +190,7 @@ Turn the eyecare mode on. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO light entity. | -### Service `light.xiaomi_miio_eyecare_mode_off` (Eyecare Smart Lamp 2 only) +### Service `xiaomi_miio.light_eyecare_mode_off` (Eyecare Smart Lamp 2 only) Turn the eyecare mode off. diff --git a/source/_integrations/local_file.markdown b/source/_integrations/local_file.markdown index d6e4e223f3a..35969d5b130 100644 --- a/source/_integrations/local_file.markdown +++ b/source/_integrations/local_file.markdown @@ -34,7 +34,7 @@ name: type: string {% endconfiguration %} -### Service `camera.local_file_update_file_path` +### Service `local_file.update_file_path` Use this service to change the file displayed by the camera. diff --git a/source/_integrations/lutron_caseta.markdown b/source/_integrations/lutron_caseta.markdown index 36f20244baa..38f2ee71e8d 100644 --- a/source/_integrations/lutron_caseta.markdown +++ b/source/_integrations/lutron_caseta.markdown @@ -8,6 +8,7 @@ ha_category: - Light - Scene - Switch + - Fan ha_release: 0.41 ha_iot_class: Local Polling --- @@ -22,6 +23,7 @@ The currently supported Caseta devices are: - Wall switches as [switches](#switch) - Scenes as [scenes](#scene) - Lutron shades as [covers](#cover) +- Lutron smart [fan](#fan) speed control When configured, the `lutron_caseta` integration will automatically discover the currently supported devices as setup in the Lutron Smart Bridge. The name assigned in the Lutron mobile app will be used to form the `entity_id` used in Home Assistant. e.g., a dimmer called 'Lamp' in a room called 'Bedroom' becomes `light.bedroom_lamp` in Home Assistant. @@ -104,3 +106,11 @@ For dimmable lights including wall and plug-in dimmers, see the light section on For more information on working with switches in Home Assistant, see the [Switches component](/integrations/switch/). Available services: `switch.turn_on` and `switch.turn_off`. + +## Fan + +After setup, fans will appear in Home Assistant using an `entity_id` based on the name used in the Lutron mobile app. For example, a light switch called 'Master Bathroom Vanity' will appear in Home Assistant as `fan.master_bedroom_ceiling_fan`. + +For more information on working with fans in Home Assistant, see the [Fans component](/components/fan/). + +Available services: `fan.turn_on`, `fan.turn_off`, and `fan.set_speed`. diff --git a/source/_integrations/mill.markdown b/source/_integrations/mill.markdown index bf05c29224e..9c38fd6a74a 100644 --- a/source/_integrations/mill.markdown +++ b/source/_integrations/mill.markdown @@ -36,7 +36,7 @@ password: This platform supports a service to set the temperature for the room connected to heater in the Mill app: -`climate.mill_set_room_temperature` +`mill.set_room_temperature` | Service data attribute | Optional | Description | diff --git a/source/_integrations/monoprice.markdown b/source/_integrations/monoprice.markdown index fd8cb8ed387..6abacd00446 100644 --- a/source/_integrations/monoprice.markdown +++ b/source/_integrations/monoprice.markdown @@ -52,7 +52,7 @@ sources: type: integer {% endconfiguration %} -### Service `snapshot` +### Service `monoprice.snapshot` Take a snapshot of one or more zones' states. This service, and the following one are useful if you want to play a doorbell or notification sound and resume playback afterward. If no `entity_id` is provided, all zones are snapshotted. @@ -66,7 +66,7 @@ The following attributes are stored in a snapshot: | ---------------------- | -------- | ----------- | | `entity_id` | yes | String or list of strings that point at `entity_id`s of zones. -### Service `restore` +### Service `monoprice.restore` Restore a previously taken snapshot of one or more speakers. If no `entity_id` is provided, all zones are restored. diff --git a/source/_integrations/neato.markdown b/source/_integrations/neato.markdown index ca71b882aed..9654f71f0b2 100644 --- a/source/_integrations/neato.markdown +++ b/source/_integrations/neato.markdown @@ -78,11 +78,11 @@ Currently supported services are: And a specific Platform Service: -- `vacuum.neato_custom_cleaning` +- `neato.custom_cleaning` ### Platform Services -#### Service `vacuum.neato_custom_cleaning` +#### Service `neato.custom_cleaning` Starts a custom cleaning of your house. You can set the various options like in the mobile application (mode, map usage, navigation mode, zone). diff --git a/source/_integrations/nuheat.markdown b/source/_integrations/nuheat.markdown index 7f5de3858fb..14659359816 100644 --- a/source/_integrations/nuheat.markdown +++ b/source/_integrations/nuheat.markdown @@ -159,7 +159,7 @@ Sets the thermostat's preset mode. Without a preset mode set it run the thermost | `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Else targets all. | `hold_mode` | no | New value of hold mode. -### Service `resume_program` +### Service `nuheat.resume_program` Resumes the currently active schedule. diff --git a/source/_integrations/nzbget.markdown b/source/_integrations/nzbget.markdown index 65a743d2198..621c9967246 100644 --- a/source/_integrations/nzbget.markdown +++ b/source/_integrations/nzbget.markdown @@ -62,6 +62,7 @@ This component will create these sensors: - `nzbget_speed`: Current download rate in MB/s. - `nzbget_queue_size`: Remaining size to download in MB. - `nzbget_disk_free`: Free disk space at the storage location of NZBGet. +- `nzbget_post_processing_jobs`: Number of Par-Jobs or Post-processing script jobs in the post-processing queue. - `nzbget_post_processing_paused`: Whether post processing is paused. - `nzbget_uptime`: NZBGet server uptime. - `nzbget_size`: Amount of data downloaded since server start in MB. diff --git a/source/_integrations/ombi.markdown b/source/_integrations/ombi.markdown index 8f3742b96a0..41d7e9a31fd 100644 --- a/source/_integrations/ombi.markdown +++ b/source/_integrations/ombi.markdown @@ -12,8 +12,12 @@ The `Ombi` integration monitors data from your [Ombi](https://ombi.io) instance. ## Setup +This component needs to authenticate to your Ombi instance with either a user `password` or an `api_key`. + To find your `api_key` open the Ombi web interface. Navigate to **Settings** and then to **Ombi**, you should then be able to see your `api_key`. +If you want to use `password` authentication simply use the same `password` you normally use to login to Ombi. Alternatively, you can set up a separate local account in Ombi designated for Home Assistant. In order to do this, open the Ombi web interface. Navigate to **User Management** and then press **Add User To Ombi**. Input your desired user details and use the same details when configuring this integration. + ## Configuration If you want to enable this sensor, add the following lines to your `configuration.yaml`: @@ -21,16 +25,12 @@ If you want to enable this sensor, add the following lines to your `configuratio ```yaml # Example configuration.yaml entry ombi: - api_key: OMBI_API_KEY host: OMBI_HOST username: OMBI_USERNAME + password: OMBI_PASSWORD ``` {% configuration %} -api_key: - description: Your Ombi API key. - required: true - type: string host: description: The hostname or IP Address Ombi is running on. required: true @@ -39,6 +39,14 @@ username: description: Your Ombi username. required: true type: string +password: + description: Your Ombi password. [`password`](#password) and [`api_key`](#api_key) cannot be specified concurrently. + required: exclusive + type: string +api_key: + description: Your Ombi API key. [`password`](#password) and [`api_key`](#api_key) cannot be specified concurrently. + required: exclusive + type: string port: description: The port Ombi is running on. required: false @@ -60,9 +68,9 @@ ssl: ```yaml # Example configuration.yaml entry ombi: - api_key: OMBI_API_KEY host: OMBI_HOST username: OMBI_USERNAME + api_key: OMBI_API_KEY port: OMBI_PORT urlbase: ombi/ ssl: true diff --git a/source/_integrations/opengarage.markdown b/source/_integrations/opengarage.markdown index e981339fef4..866df325e02 100644 --- a/source/_integrations/opengarage.markdown +++ b/source/_integrations/opengarage.markdown @@ -23,7 +23,10 @@ cover: device_key: opendoor name: Left Garage Door garage2: - host: 192.168.1.13 + protocol: https + verify_ssl: false + host: garage.example.com + port: 443 device_key: opendoor name: Right Garage Door ``` @@ -39,6 +42,16 @@ covers: required: true type: map keys: + ssl: + description: Use HTTPS instead of HTTP to connect. + required: false + type: boolean + default: false + verify_ssl: + description: Enable or disable SSL certificate verification. Set to false if you have a self-signed SSL certificate and haven't installed the CA certificate to enable verification. + required: false + default: true + type: boolean host: description: IP address of device. required: true @@ -123,4 +136,5 @@ customize: sensor.garage_car_present: icon: mdi:car ``` + {% endraw %} diff --git a/source/_integrations/opentherm_gw.markdown b/source/_integrations/opentherm_gw.markdown index bb38a6313a8..4e951f8edd2 100644 --- a/source/_integrations/opentherm_gw.markdown +++ b/source/_integrations/opentherm_gw.markdown @@ -19,7 +19,7 @@ The following device types are currently supported within Home Assistant: - Climate - Sensor -This integration will add a single `climate` entity and multiple `sensor` and `binary_sensor` entities to Home Assistant for each configured gateway. +This integration will add a single `climate` entity to Home Assistant for each configured gateway. Each gateway also has a collection of `sensor` and `binary_sensor` entities, which are disabled by default. These can be enabled from the `Devices` panel in the `Configuration` page of the web interface.
The OpenTherm protocol is based on polling. The thermostat sends requests to the boiler at specific intervals. As a result, it may take some time for changes to propagate between Home Assistant and the thermostat. @@ -183,7 +183,7 @@ The value you provide here will be used with the GPIO `home` (5) and `away` (6) ## Sensors -The following `sensor` entities will be created for each configured gateway. The `entity_id` of every sensor will have a suffix containing the `gateway_id` of the gateway to which it belongs. +The following `sensor` entities will be created for each configured gateway. The `entity_id` of every sensor will have a suffix containing the `gateway_id` of the gateway to which it belongs. All `sensor` entities are disabled by default.

Not all boilers and thermostats properly support all OpenTherm features, so not all of the sensors will have useful values.

@@ -383,7 +383,7 @@ Not all boilers and thermostats properly support all OpenTherm features, so not ## Binary Sensors -The following `binary_sensor` entities will be created for each configured gateway. The `entity_id` of every sensor will have a suffix containing the `gateway_id` of the gateway to which it belongs. +The following `binary_sensor` entities will be created for each configured gateway. The `entity_id` of every sensor will have a suffix containing the `gateway_id` of the gateway to which it belongs. All `binary_sensor` entities are disabled by default.

Not all boilers and thermostats properly support all OpenTherm features, so not all of the sensors will have useful values.

diff --git a/source/_integrations/panasonic_viera.markdown b/source/_integrations/panasonic_viera.markdown index dd241aadcc8..a02cc8cebe8 100644 --- a/source/_integrations/panasonic_viera.markdown +++ b/source/_integrations/panasonic_viera.markdown @@ -33,7 +33,7 @@ If your model is not on the list then give it a test, if everything works correc Some Panasonic Viera TVs allow Home Assistant to turn them on, if you specify the MAC address with `mac:`. -Note that your TV has to reside in the same network as your home assistant instance for this platform to work. +Note that your TV has to reside in the same network as your Home Assistant instance for this platform to work. If you have multiple network interfaces on your Home Assistant instance, you may need to specify the `broadcast_address`. To add a TV to your installation, add the following to your `configuration.yaml` file: @@ -58,6 +58,11 @@ mac: description: The MAC address of your Panasonic Viera TV, e.g., `AA:BB:CC:DD:99:1A`. required: false type: string +broadcast_address: + description: The broadcast address on which to send the Wake-On-Lan packet. + required: false + default: 255.255.255.255 + type: string app_power: description: Set to `true` if your Panasonic Viera TV supports "Turn on via App". required: false diff --git a/source/_integrations/proxmoxve.markdown b/source/_integrations/proxmoxve.markdown new file mode 100644 index 00000000000..f8f01727126 --- /dev/null +++ b/source/_integrations/proxmoxve.markdown @@ -0,0 +1,100 @@ +--- +title: "Proxmox VE" +description: "Access your ProxmoxVE instance in Home Assistant." +logo: proxmoxve.png +ha_category: + - Binary Sensor +ha_release: 0.103 +ha_iot_class: Local Polling +--- + +[Proxmox VE](https://www.proxmox.com/en/) is an open-source server virtualization environment. This integration allows you to poll various data from your instance. + +After configuring this component, the binary sensors automatically appear. + +## Configuration + +
+You should have at least one VM or container entry configured, else this integration won't do anything. +
+ +To use the `proxmoxve` component, add the following config to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +proxmox: + - host: IP_ADDRESS + username: USERNAME + password: PASSWORD + nodes: + - node: NODE_NAME + vms: + - VM_ID + containers: + - CONTAINER_ID +``` + +{% configuration %} +host: + description: IP address of the Proxmox VE instance. + required: true + type: string +port: + description: The port number on which Proxmox VE is running. + required: false + default: 8006 + type: integer +verify_ssl: + description: Whether to do strict validation on SSL certificates. + required: false + default: true + type: boolean +username: + description: The username used to authenticate. + required: true + type: string +password: + description: The password used to authenticate. + required: true + type: string +realm: + description: The authentication realm of the user. + required: false + default: pam + type: string +nodes: + description: List of the Proxmox VE nodes to monitor. + required: true + type: map + keys: + node: + description: Name of the node + required: true + type: string + vms: + description: List of the QEMU VMs to monitor. + required: false + type: list + containers: + description: List of the LXC containers to monitor. + required: false + type: list +{% endconfiguration %} + +Example with multiple VMs and no containers: + +```yaml +proxmox: + - host: IP_ADDRESS + username: USERNAME + password: PASSWORD + nodes: + - node: NODE_NAME + vms: + - VM_ID_1 + - VM_ID_2 +``` + +## Binary Sensor + +The integration will automatically create a binary sensor for each tracked VM or container, the binary sensor will either be on if the VM's state is running or off if the VM's state is different. diff --git a/source/_integrations/pulseaudio_loopback.markdown b/source/_integrations/pulseaudio_loopback.markdown index d9c60825bde..63278529450 100644 --- a/source/_integrations/pulseaudio_loopback.markdown +++ b/source/_integrations/pulseaudio_loopback.markdown @@ -46,7 +46,7 @@ host: port: description: The port that Pulseaudio is listening on. required: false - default: 4712 + default: 4713 type: integer buffer_size: description: How much data to load from Pulseaudio at once. diff --git a/source/_integrations/remote.xiaomi_miio.markdown b/source/_integrations/remote.xiaomi_miio.markdown index eb40c0a70b6..d06af7d9043 100644 --- a/source/_integrations/remote.xiaomi_miio.markdown +++ b/source/_integrations/remote.xiaomi_miio.markdown @@ -111,7 +111,7 @@ The Xiaomi IR Remote Platform currently supports two different formats for IR co ### Raw -A raw command is a command learned from [`remote.xiaomi_miio_learn_command`](/integrations/remote.xiaomi_miio/#remotexiaomi_miio_learn_command). +A raw command is a command learned from [`xiaomi_miio.remote_learn_command`](/integrations/remote.xiaomi_miio/#xiaomi_miioremote_learn_command). A raw command is defined as in the following example: @@ -158,7 +158,7 @@ The Xiaomi IR Remote Platform registers two services. Allows sending either named commands using an identifier or sending commands as one of the two types defined in [Command Types](/integrations/remote.xiaomi_miio/#command-types). -### `remote.xiaomi_miio_learn_command` +### `xiaomi_miio.remote_learn_command` Used to learn new commands. diff --git a/source/_integrations/rest.markdown b/source/_integrations/rest.markdown index 1c91c94b0b3..8f644dad45c 100644 --- a/source/_integrations/rest.markdown +++ b/source/_integrations/rest.markdown @@ -132,6 +132,8 @@ $ curl -X GET http://192.168.1.31/temperature/ {"temperature": 77, "id": "sensor02", "name": "livingroom", "connected": true} ``` +The response is expected to be a dictionary or a list with a dictionary as its 0th element. + ## Examples In this section you find some real-life examples of how to use this sensor. diff --git a/source/_integrations/rest_command.markdown b/source/_integrations/rest_command.markdown index 5893f5c41fb..ebf3058e64f 100644 --- a/source/_integrations/rest_command.markdown +++ b/source/_integrations/rest_command.markdown @@ -31,7 +31,7 @@ service_name: url: description: The URL (supports template) for sending request. required: true - type: [string, template] + type: template method: description: HTTP method to use (get, patch, post, put, or delete). required: false @@ -44,7 +44,7 @@ service_name: payload: description: A string/template to send with request. required: false - type: [string, template] + type: template username: description: The username for HTTP authentication. required: false @@ -83,6 +83,7 @@ rest_command: headers: authorization: !secret rest_headers_secret accept: 'application/json, text/html' + user-agent: 'Mozilla/5.0 {{ useragent }}' payload: '{"profile":{"status_text": "{{ status }}","status_emoji": "{{ emoji }}"}}' content_type: 'application/json; charset=utf-8' verify_ssl: true diff --git a/source/_integrations/rfxtrx.markdown b/source/_integrations/rfxtrx.markdown index 5c6c841a032..a42d39e681b 100644 --- a/source/_integrations/rfxtrx.markdown +++ b/source/_integrations/rfxtrx.markdown @@ -7,33 +7,58 @@ ha_category: ha_release: pre 0.7 --- -The `rfxtrx` integration supports RFXtrx devices by [RFXCOM](http://www.rfxcom.com) which communicate in the frequency range of 433.92 MHz. +The `rfxtrx` integration supports RFXtrx devices by [RFXCOM](http://www.rfxcom.com), which communicate in the frequency range of 433.92 MHz. To enable RFXtrx in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yaml entry +# Example configuration.yaml entry for local serial device rfxtrx: - device: PATH_TO_DEVICE + device: /dev/ttyUSB0 +``` + +OR + +```yaml +# Example configuration.yaml entry for TCP connected device using ser2net +rfxtrx: + host: 192.168.0.2 + port: 50000 ``` {% configuration %} device: - description: "The path to your device, e.g., `/dev/serial/by-id/usb-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0` or `/dev/ttyUSB0`." - required: true + description: "The path to your device, e.g., `/dev/serial/by-id/usb-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0` or `/dev/ttyUSB0`. Required if you are using a locally connected USB device." + required: false type: string +host: + description: "The hostname the remote RFXtrx is available on if connecting via TCP. If this is set, a port is required." + required: false + type: string +port: + description: "The TCP port the remote RFXtrx is available on. If this is set, a host is required." + required: false + type: integer debug: - description: If you want to receive debug output. + description: "If you want to receive debug output." required: false default: false type: boolean dummy: - description: Then you have need a connected drive to test your settings. Can be useful for debugging and testing. + description: "Then you need a connected drive to test your settings. Can be useful for debugging and testing." required: false default: false type: boolean {% endconfiguration %} -Supported protocols +## Supported protocols -Not all protocols as advertised are enabled on initial setup of your transceiver. Enabling all protocols is not recommended either. Your 433.92 product not showing in the logs? Visit the RFXtrx website to [download RFXmgmr](http://www.rfxcom.com/epages/78165469.sf/nl_NL/?ObjectPath=/Shops/78165469/Categories/Downloads) and enable the required protocol. +Not all protocols as advertised are enabled on the initial setup of your transceiver. Enabling all protocols is not recommended either. Your 433.92 product not showing in the logs? Visit the RFXtrx website to [download RFXmgmr](http://www.rfxcom.com/epages/78165469.sf/nl_NL/?ObjectPath=/Shops/78165469/Categories/Downloads) and enable the required protocol. + +### ser2net + +You can host your device on another computer by setting up ser2net and example configuration for ser2net looks like this and then using host/port in your home assistant config. + +```text +50000:raw:0:/dev/ttyUSB0:38400 8DATABITS NONE 1STOPBIT +``` diff --git a/source/_integrations/roomba.markdown b/source/_integrations/roomba.markdown index c205470f74e..91fcc80c065 100644 --- a/source/_integrations/roomba.markdown +++ b/source/_integrations/roomba.markdown @@ -58,6 +58,11 @@ continuous: required: false type: boolean default: true +delay: + description: Custom connection delay (in seconds) for periodic mode + required: false + type: integer + default: 1 {% endconfiguration %}
diff --git a/source/_integrations/samsungtv.markdown b/source/_integrations/samsungtv.markdown index 64dc0281ab5..9ffd7b3e2ea 100644 --- a/source/_integrations/samsungtv.markdown +++ b/source/_integrations/samsungtv.markdown @@ -48,6 +48,11 @@ mac: description: "The MAC address of the Samsung Smart TV, e.g., `00:11:22:33:44:55:66`. Required for power on support via wake on lan." required: false type: string +broadcast_address: + description: The broadcast address on which to send the Wake-On-Lan packet. + required: false + default: 255.255.255.255 + type: string {% endconfiguration %} Currently known supported models: diff --git a/source/_integrations/scene.markdown b/source/_integrations/scene.markdown index 8463c734690..0848e1cc02f 100644 --- a/source/_integrations/scene.markdown +++ b/source/_integrations/scene.markdown @@ -96,12 +96,12 @@ Whenever you make a change to your scene configuration, you can call the `scene. Create a new scene without having to configure it by calling the `scene.create` service. This scene will be discarded after reloading the configuration. -You need to pass a `scene_id` in lowercase and with underscores instead of spaces. You also need to specify the entities in the same format as when configuring the scene. +You need to pass a `scene_id` in lowercase and with underscores instead of spaces. You also may want to specify the entities in the same format as when configuring the scene. You can also take a snapshot of the current state by using the `snapshot_entities` parameter. In this case, you have to specify the `entity_id` of all entities you want to take a snapshot of. `entities` and `snapshot_entities` can be combined but you have to use at least one of them. If the scene was previously created by `scene.create`, it will be overwritten. If the scene was created by YAML, nothing happens but a warning in your log files. ```yaml -# Example automation +# Example automation using entities automation: trigger: platform: homeassistant @@ -119,3 +119,41 @@ automation: state: on source: HDMI 1 ``` + +The following example turns off some entities as soon as a window opens. The states of the entities are restored after the window is closed again. + +```yaml +# Example automation using snapshot +- alias: Window opened + trigger: + - platform: state + entity_id: binary_sensor.window + from: 'off' + to: 'on' + condition: [] + action: + - service: scene.create + data: + scene_id: before + snapshot_entities: + - climate.ecobee + - light.ceiling_lights + - service: light.turn_off + data: + entity_id: light.ceiling_lights + - service: climate.set_hvac_mode + data: + entity_id: climate.ecobee + hvac_mode: 'off' +- alias: Window closed + trigger: + - platform: state + entity_id: binary_sensor.window + from: 'on' + to: 'off' + condition: [] + action: + - service: scene.turn_on + data: + entity_id: scene.before +``` diff --git a/source/_integrations/season.markdown b/source/_integrations/season.markdown index 428f89b560e..e98a1f4d15a 100644 --- a/source/_integrations/season.markdown +++ b/source/_integrations/season.markdown @@ -37,4 +37,9 @@ type: required: false type: string default: astronomical +name: + description: "An identifier for the sensor in the frontend." + required: false + type: string + default: Season {% endconfiguration %} diff --git a/source/_integrations/simplisafe.markdown b/source/_integrations/simplisafe.markdown index 6f798b8bfda..f3fd0b49cd1 100644 --- a/source/_integrations/simplisafe.markdown +++ b/source/_integrations/simplisafe.markdown @@ -5,13 +5,15 @@ logo: simplisafe.png ha_release: 0.81 ha_category: - Alarm + - Lock --- The `simplisafe` integration integrates SimpliSafe home security (V2 and V3) systems into Home Assistant. Multiple SimpliSafe accounts can be accommodated. There is currently support for the following device types within Home Assistant: -- Alarm +- **Alarm Control Panel**: reports on the current alarm status and can be used to arm and disarm the system. +- **Lock**: Reports on `Door Locks` and can be used to lock and unlock a lock. ## Configuration @@ -52,15 +54,54 @@ Remove a SimpliSafe PIN (by label or PIN value). | Service Data Attribute | Optional | Description | |---------------------------|----------|---------------------------------------------| -| `system_id` | no | The ID of the system to remove the PIN from | +| `system_id` | no | The ID of a SimpliSafe system | | `label_or_pin` | no | The PIN label or value to remove | +### `simplisafe.set_alarm_duration` + +Set the duration (in seconds) of an active alarm. + +| Service Data Attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------| +| `system_id` | no | The ID of a SimpliSafe system | +| `duaration` | no | The number of seconds to sound the alarm | + +### `simplisafe.set_delay` + +Set a duration for how long the base station should delay when transitioning between states. + +| Service Data Attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------| +| `system_id` | no | The ID of a SimpliSafe system | +| `arrival_state` | no | The target "arrival" state (away, home) | +| `transition` | no | The system state transition to affect (entry, exit) | +| `seconds` | no | The number of seconds to delay | + +### `simplisafe.set_light` + +Turn the base station light on/off. + +| Service Data Attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------| +| `system_id` | no | The ID of a SimpliSafe system | +| `light_state` | no | True for on, False for off | + ### `simplisafe.set_pin` Set a SimpliSafe PIN. | Service Data Attribute | Optional | Description | |---------------------------|----------|---------------------------------------------| -| `system_id` | no | The ID of the system to remove the PIN from | +| `system_id` | no | The ID of the system to remove the PIN from | | `label` | no | The label to show in the SimpliSafe UI | | `pin` | no | The PIN value to use | + +### `simplisafe.set_volume_property` + +Set a level for one of the base station's various volumes. + +| Service Data Attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------| +| `system_id` | no | The ID of a SimpliSafe system | +| `volume_property` | no | The volume property to set (alarm, chime, voice_prompt) | +| `volume` | no | A volume (off, low, medium, high) | diff --git a/source/_integrations/songpal.markdown b/source/_integrations/songpal.markdown index ac3977f1a71..6877ebf0d83 100644 --- a/source/_integrations/songpal.markdown +++ b/source/_integrations/songpal.markdown @@ -49,7 +49,7 @@ See [python-songpal's documentation](https://github.com/rytilahti/python-songpal In addition to the general [media player services](/integrations/media_player/#services), the following services are provided: -### Service `media_player/songpal_set_sound_setting` +### Service `songpal/set_sound_setting` For a list of available settings and their values use [`songpal sound`](https://github.com/rytilahti/python-songpal#sound-settings) command. diff --git a/source/_integrations/soundtouch.markdown b/source/_integrations/soundtouch.markdown index 7b15e66d1dc..8bc82bfaaa6 100644 --- a/source/_integrations/soundtouch.markdown +++ b/source/_integrations/soundtouch.markdown @@ -83,7 +83,7 @@ You can use TTS services like [Google Text-to-Speech](/integrations/google_trans A workaround if you want to publish your Home Assistant installation on Internet in SSL is to configure an HTTPS Web Server as a reverse proxy ([nginx](/docs/ecosystem/nginx/) for example) and let your Home Assistant configuration in HTTP on your local network. The Soundtouch devices will be available to access the TTS files in HTTP in local and your configuration will be in HTTPS on the Internet. -### Service `soundtouch_play_everywhere` +### Service `play_everywhere` Create a multi-room (zone) from a master and play same content on all other devices (slaves) @@ -92,7 +92,7 @@ Create a multi-room (zone) from a master and play same content on all other | ---------------------- | -------- | ----------- | | `master` | no | `entity_id` of the master device -### Service `soundtouch_create_zone` +### Service `create_zone` Create a multi-room (zone) from a master and play on selected slaves @@ -101,7 +101,7 @@ Create a multi-room (zone) from a master and play on selected slaves | `master` | no | `entity_id` of the master device| | `slaves` | no | List of slaves `entity_id` | -### Service `soundtouch_add_zone_slave` +### Service `add_zone_slave` Add slave(s) to an existing zone @@ -110,7 +110,7 @@ Add slave(s) to an existing zone | `master` | no | `entity_id` of the master device | | `slaves` | no | List of slaves `entity_id` to add| -### Service `soundtouch_remove_zone_slave` +### Service `remove_zone_slave` Remove slave(s) from an existing zone. diff --git a/source/_integrations/squeezebox.markdown b/source/_integrations/squeezebox.markdown index c9e81bf4074..2de50583424 100644 --- a/source/_integrations/squeezebox.markdown +++ b/source/_integrations/squeezebox.markdown @@ -59,7 +59,7 @@ transporter_toslink: media_content_type: "music" ``` -### Service `squeezebox_call_method` +### Service `call_method` Call a custom Squeezebox JSONRPC API. diff --git a/source/_integrations/starline.markdown b/source/_integrations/starline.markdown new file mode 100644 index 00000000000..2ff6da66b01 --- /dev/null +++ b/source/_integrations/starline.markdown @@ -0,0 +1,62 @@ +--- +title: "StarLine" +description: "Instructions on how to setup your StarLine account with Home Assistant." +logo: starline.png +ha_category: + - Car + - Binary Sensor + - Presence Detection + - Lock + - Sensor + - Switch +ha_release: 0.103 +ha_iot_class: Cloud Polling +ha_config_flow: true +--- + +The `starline` integration lets you retrieve data of your StarLine security system from the StarLine portal. You will need a working StarLine account. + +This integration provides the following platforms: + +- Binary Sensors: Hand brake, hood, trunk, alarm status and doors lock state. +- Device tracker: The location of your car. +- Lock: Control the lock of your car. +- Sensors: Battery level, SIM card balance, GSM signal level, interior temperature and engine temperature. +- Switches: Start/stop engine, heater (webasto), additional channel and sound the horn. +- Services: Update the state, set update frequency. More details can be found [here](#services). + +## Configuration + +1. Create a new application in the [StarLine developer profile](https://my.starline.ru/developer). +2. Open the integrations page and add the StarLine integration. +3. Fill in your application ID, secret, login and password. + +After adding the integration, you can configure the API update interval on the integration page. + +
+ +You can make up to 1000 API calls per day, which means you could make one approximately every 86 seconds. +By default, the state of integration will be updated every 3 minutes, making 480 calls per day. +It is not recommended to set an update interval of less than 90 seconds. + +
+ +## Services + +### Update the state + +The service `starline.update_state` fetches the last state of the device from the StarLine server. + +This service does not require any attributes. + +### Set scan interval + +The service `starline.set_scan_interval` sets update frequency for entities. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `scan_interval` | no | Update frequency in seconds. + +## Disclaimer + +This software is not affiliated with or endorsed by StarLine Company. diff --git a/source/_integrations/switch.mysensors.markdown b/source/_integrations/switch.mysensors.markdown index 03acee61f65..1d35df94d29 100644 --- a/source/_integrations/switch.mysensors.markdown +++ b/source/_integrations/switch.mysensors.markdown @@ -54,7 +54,7 @@ The MySensors switch platform exposes a service to change an IR code attribute f | Service | Description | | ------- | ----------- | -| mysensors_send_ir_code | Set an IR code as a state attribute for a MySensors IR device switch and turn the switch on.| +| mysensors.send_ir_code | Set an IR code as a state attribute for a MySensors IR device switch and turn the switch on.| The service can be used as part of an automation script. For example: @@ -66,7 +66,7 @@ automation: platform: time at: '5:30:00' action: - service: switch.mysensors_send_ir_code + service: mysensors.send_ir_code entity_id: switch.hvac_1_1 data: V_IR_SEND: '0xC284' # the IR code to send @@ -76,7 +76,7 @@ automation: platform: time at: '0:30:00' action: - service: switch.mysensors_send_ir_code + service: mysensors.send_ir_code entity_id: switch.hvac_1_1 data: V_IR_SEND: '0xC288' # the IR code to send diff --git a/source/_integrations/switch.xiaomi_miio.markdown b/source/_integrations/switch.xiaomi_miio.markdown index 17049dc3faf..a6dd3f74fcc 100644 --- a/source/_integrations/switch.xiaomi_miio.markdown +++ b/source/_integrations/switch.xiaomi_miio.markdown @@ -88,7 +88,7 @@ model: ## Platform Services -### Service `switch.xiaomi_miio_set_wifi_led_on` (Power Strip only) +### Service `xiaomi_miio.switch_set_wifi_led_on` (Power Strip only) Turn the wifi led on. @@ -96,7 +96,7 @@ Turn the wifi led on. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO switch entity. | -### Service `switch.xiaomi_miio_set_wifi_led_off` (Power Strip only) +### Service `xiaomi_miio.switch_set_wifi_led_off` (Power Strip only) Turn the wifi led off. @@ -104,7 +104,7 @@ Turn the wifi led off. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO switch entity. | -### Service `switch.xiaomi_miio_set_power_price` (Power Strip) +### Service `xiaomi_miio.switch_set_power_price` (Power Strip) Set the power price. @@ -113,7 +113,7 @@ Set the power price. | `entity_id` | no | Only act on a specific Xiaomi miIO switch entity. | | `price` | no | Power price, between 0 and 999. | -### Service `switch.xiaomi_miio_set_power_mode` (Power Strip V1 only) +### Service `xiaomi_miio.switch_set_power_mode` (Power Strip V1 only) Set the power mode. diff --git a/source/_integrations/todoist.markdown b/source/_integrations/todoist.markdown index 7c82331fc4d..bedcfa150b8 100644 --- a/source/_integrations/todoist.markdown +++ b/source/_integrations/todoist.markdown @@ -121,7 +121,7 @@ Home Assistant does its best to [determine what task in each project is "most" i ### Services -Todoist also comes with access to a service, `calendar.todoist_new_task`. This service can be used to create a new Todoist task. You can specify labels and a project, or you can leave them blank, and the task will go to your "Inbox" project. +Todoist also comes with access to a service, `todoist.new_task`. This service can be used to create a new Todoist task. You can specify labels and a project, or you can leave them blank, and the task will go to your "Inbox" project. Here are two example JSON payloads resulting in the same task: diff --git a/source/_integrations/transmission.markdown b/source/_integrations/transmission.markdown index 8981e96f6fc..dd8455037c5 100644 --- a/source/_integrations/transmission.markdown +++ b/source/_integrations/transmission.markdown @@ -119,8 +119,10 @@ Adds a new torrent to download. It can either be a URL (http, https or ftp), mag | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | +| `name` | no | Name of the configured instance | `torrent` | no | Torrent to download + ## Templating ### Sensor `started_torrents` diff --git a/source/_integrations/vacuum.xiaomi_miio.markdown b/source/_integrations/vacuum.xiaomi_miio.markdown index c573b03801d..edf2c21979f 100644 --- a/source/_integrations/vacuum.xiaomi_miio.markdown +++ b/source/_integrations/vacuum.xiaomi_miio.markdown @@ -54,15 +54,15 @@ name: ## Platform Services -In addition to all of the services provided by the `vacuum` integration (`start`, `pause`, `stop`, `return_to_base`, `locate`, `set_fan_speed` and `send_command`), the `xiaomi` platform introduces specific services to access the remote control mode of the robot. These are: +In addition to all of the services provided by the `vacuum` integration (`start`, `pause`, `stop`, `return_to_base`, `locate`, `set_fan_speed` and `send_command`), the `xiaomi_miio` platform introduces specific services to access the remote control mode of the robot. These are: -- `xiaomi_remote_control_start` -- `xiaomi_remote_control_stop` -- `xiaomi_remote_control_move` -- `xiaomi_remote_control_move_step` -- `xiaomi_clean_zone` +- `xiaomi_miio.vacuum_remote_control_start` +- `xiaomi_miio.vacuum_remote_control_stop` +- `xiaomi_miio.vacuum_remote_control_move` +- `xiaomi_miio.vacuum_remote_control_move_step` +- `xiaomi_miio.vacuum_clean_zone` -### Service `vacuum.xiaomi_remote_control_start` +### Service `xiaomi_miio.vacuum_remote_control_start` Start the remote control mode of the robot. You can then move it with `remote_control_move`; when done, call `remote_control_stop`. @@ -70,7 +70,7 @@ Start the remote control mode of the robot. You can then move it with `remote_co |---------------------------|----------|---------------------------------------------------| | `entity_id` | no | Only act on a specific robot | -### Service `vacuum.xiaomi_remote_control_stop` +### Service `xiaomi_miio.vacuum_remote_control_stop` Exit the remote control mode of the robot. @@ -78,7 +78,7 @@ Exit the remote control mode of the robot. |---------------------------|----------|---------------------------------------------------| | `entity_id` | no | Only act on a specific robot | -### Service `vacuum.xiaomi_remote_control_move` +### Service `xiaomi_miio.vacuum_remote_control_move` Remote control the robot. Please ensure you first set it in remote control mode with `remote_control_start`. @@ -89,7 +89,7 @@ Remote control the robot. Please ensure you first set it in remote control mode | `rotation` | no | Rotation: between -179 degrees and 179 degrees | | `duration` | no | The number of milliseconds that the robot should move for | -### Service `vacuum.xiaomi_remote_control_move_step` +### Service `xiaomi_miio.vacuum_remote_control_move_step` Enter remote control mode, make one move, stop, and exit remote control mode. @@ -100,7 +100,7 @@ Enter remote control mode, make one move, stop, and exit remote control mode. | `rotation` | no | Rotation: between -179 degrees and 179 degrees | | `duration` | no | The number of milliseconds that the robot should move for | -### Service `vacuum.xiaomi_clean_zone` +### Service `xiaomi_miio.vacuum_clean_zone` Start the cleaning operation in the areas selected for the number of repeats indicated. @@ -110,7 +110,7 @@ Start the cleaning operation in the areas selected for the number of repeats ind | `zone` | no | List of zones. Each zone is an array of 4 integer value. Example: [[23510,25311,25110,26361]] | | `repeats` | no | Number of cleaning repeats for each zone between 1 and 3. | -Example of `vacuum.xiaomi_clean_zone` use: +Example of `xiaomi_miio.vacuum_clean_zone` use: Inline array: {% raw %} @@ -122,7 +122,7 @@ automation: platform: homeassistant condition: [] action: - - service: vacuum.xiaomi_clean_zone + - service: xiaomi_miio.vacuum_clean_zone data_template: entity_id: vacuum.xiaomi_vacuum repeats: '{{states('input_number.vacuum_passes')|int}}' @@ -140,7 +140,7 @@ automation: platform: homeassistant condition: [] action: - - service: vacuum.xiaomi_clean_zone + - service: xiaomi_miio.vacuum_clean_zone data_template: entity_id: vacuum.xiaomi_vacuum repeats: '{{states('input_number.vacuum_passes')|int}}' @@ -159,7 +159,7 @@ automation: platform: homeassistant condition: [] action: - - service: vacuum.xiaomi_clean_zone + - service: xiaomi_miio.vacuum_clean_zone data: entity_id: vacuum.xiaomi_vacuum repeats: 1 diff --git a/source/_integrations/versasense.markdown b/source/_integrations/versasense.markdown new file mode 100644 index 00000000000..f54e1e68716 --- /dev/null +++ b/source/_integrations/versasense.markdown @@ -0,0 +1,43 @@ +--- +title: "VersaSense" +description: "Integrate your VersaSense MicroPnP devices." +date: 2019-11-19 14:00 +logo: versasense.png +ha_release: 0.103 +ha_category: + - Hub + - Sensor + - Switch +ha_iot_class: Local Polling +--- + +The `VersaSense` integration supports the VersaSense Edge Gateway. The gateway is able to control hubs and their peripherals (sensors and actuators) in the mesh network. + +## Configuration + +```yaml +# Example configuration.yaml entry +versasense: + host: GATEWAY_URI +``` + +{% configuration %} +host: + description: "The IP address or hostname of the VersaSense gateway. Including *protocol* and *port*, e.g., https://gateway.versasense.com:8889" + required: true + type: string +{% endconfiguration %} + +## Supported hardware + +All Versasense gateways with software version >= 1.0.2.10 + +The integration is tested with following peripherals and devices: + +- S03 S04: Temperature and Humidity sensor +- S06: Barometric Pressure sensor +- S10: Light sensor +- S17: Object detection sensor +- S19: Buzzer actuator +- Pxx: SmartMesh IP Hub +- M01: SmartMesh Edge Gateway diff --git a/source/_integrations/version.markdown b/source/_integrations/version.markdown index 55e767fdba2..62f7755e94a 100644 --- a/source/_integrations/version.markdown +++ b/source/_integrations/version.markdown @@ -46,7 +46,7 @@ source: ### Supported images for Hass.io and Docker -`default`, `qemux86`, `qemux86-64`, `qemuarm`, `qemuarm-64`, `intel-nuc`, `raspberrypi`, `raspberrypi2`, `raspberrypi3`, `raspberrypi3-64`, `tinker`, `odroid-c2`, `odroid-xu` +`default`, `qemux86`, `qemux86-64`, `qemuarm`, `qemuarm-64`, `intel-nuc`, `raspberrypi`, `raspberrypi2`, `raspberrypi3`, `raspberrypi3-64`, `raspberrypi4`, `raspberrypi4-64`, `tinker`, `odroid-c2`, `odroid-xu` ## Alternatives for showing local version diff --git a/source/_integrations/vivotek.markdown b/source/_integrations/vivotek.markdown index 63a479470d0..f00ddafb14d 100644 --- a/source/_integrations/vivotek.markdown +++ b/source/_integrations/vivotek.markdown @@ -43,6 +43,11 @@ password: description: The password for accessing your camera. required: true type: string +security_level: + description: The security level of the user accessing your camera. This could be `admin` or `viewer`. + required: false + default: admin + type: string ssl: description: Enable or disable SSL. Set to false to use an HTTP-only camera. required: false @@ -76,6 +81,7 @@ camera: ssl: true username: !secret fd_camera_username password: !secret fd_camera_pwd + security_level: admin verify_ssl: false framerate: 5 stream_path: live2.sdp diff --git a/source/_integrations/wake_on_lan.markdown b/source/_integrations/wake_on_lan.markdown index 664020e3561..fe65e758050 100644 --- a/source/_integrations/wake_on_lan.markdown +++ b/source/_integrations/wake_on_lan.markdown @@ -61,12 +61,12 @@ To enable this switch in your installation, add the following to your `configura # Example configuration.yaml entry switch: - platform: wake_on_lan - mac_address: "00-01-02-03-04-05" + mac: "00-01-02-03-04-05" ``` {% configuration %} -mac_address: - description: MAC address to send the wake up command to. +mac: + description: The MAC address to send the wake up command to. required: true type: string name: diff --git a/source/_integrations/waze_travel_time.markdown b/source/_integrations/waze_travel_time.markdown index 2f65bb76550..e223131dd7f 100644 --- a/source/_integrations/waze_travel_time.markdown +++ b/source/_integrations/waze_travel_time.markdown @@ -64,8 +64,25 @@ vehicle_type: description: "Set the vehicle type for the sensor: car, taxi, or motorcycle, otherwise the default is car." required: false type: string +avoid_ferries: + description: "If this is set to true, Waze will avoid ferries on your route." + required: false + type: boolean + default: false +avoid_toll_roads: + description: "If this is set to true, Waze will avoid toll roads on your route." + required: false + type: boolean + default: false +avoid_subscription_roads: + description: "If this is set to true, Waze will avoid roads needing a vignette / subscription on your route." + required: false + type: boolean + default: false {% endconfiguration %} +When using the `avoid_toll_roads`, `avoid_subscription_roads` and `avoid_ferries` options be aware that Waze will sometimes still route you over toll roads or ferries if a valid vignette/subscription is assumed. Default behaviour is that Waze will route you over roads having subscription options, so best is to set both `avoid_toll_roads` and `avoid_subscription_roads` or `avoid_ferries` if needed and experiment to ensure the desired outcome. + ## Example using dynamic destination Using the flexible option to set a sensor value to the `destination`, you can setup a single Waze integration that will calculate travel time to multiple optional locations on demand. @@ -118,6 +135,15 @@ sensor: region: 'US' units: imperial # 'metric' for Metric, 'imperial' for Imperial vehicle_type: motorcycle # vehicle type used for routing + + # Avoiding toll, subscription + - platform: waze_travel_time + name: Westerscheldetunnel + origin: 51.330436, 3.802043 + destination: 51.445677, 3.749929 + region: 'EU' + avoid_toll_roads: true + avoid_subscription_roads: true ``` {% endraw %} diff --git a/source/_integrations/wemo.markdown b/source/_integrations/wemo.markdown index d3d8808ec28..f4b671742a0 100644 --- a/source/_integrations/wemo.markdown +++ b/source/_integrations/wemo.markdown @@ -101,5 +101,5 @@ There are several services which can be used for automations and control of the | `toggle` | Calling this service will toggle the humidifier between on and off states. | `turn_off` | Calling this service will turn the humidifier off (entity_id is required). | `turn_on` | Calling this service will turn the humidifier on and set the speed to the last used speed (defaults to medium, entity_id is required). -| `wemo_set_humidity` | Calling this service will set the desired relative humidity setting on the device (entity_id is a required list of 1 or more entities to set humidity on, and target_humidity is a required float value between 0 and 100 (this value will be rounded down and mapped to one of the valid desired humidity settings of 45, 50, 55, 60, or 100 that are supported by the WeMo humidifier)). -| `wemo_reset_filter_life` | Calling this service will reset the humdifier's filter life back to 100% (entity_id is a required list of 1 or more entities to reset the filter life on). Call this service when you change the filter on your humidifier. +| `wemo.set_humidity` | Calling this service will set the desired relative humidity setting on the device (entity_id is a required list of 1 or more entities to set humidity on, and target_humidity is a required float value between 0 and 100 (this value will be rounded down and mapped to one of the valid desired humidity settings of 45, 50, 55, 60, or 100 that are supported by the WeMo humidifier)). +| `wemo.reset_filter_life` | Calling this service will reset the humdifier's filter life back to 100% (entity_id is a required list of 1 or more entities to reset the filter life on). Call this service when you change the filter on your humidifier. diff --git a/source/_integrations/wink.markdown b/source/_integrations/wink.markdown index 5dbd141bb09..2d886838490 100644 --- a/source/_integrations/wink.markdown +++ b/source/_integrations/wink.markdown @@ -501,9 +501,9 @@ The requirement is that you have setup [Wink](/integrations/wink/) from above. The following services have only been confirmed on Schlage locks.
-### Service `wink_set_lock_alarm_mode` +### Service `set_lock_alarm_mode` -You can use the service wink/wink_set_lock_alarm_mode to set the alarm mode of your lock. +You can use the service wink/set_lock_alarm_mode to set the alarm mode of your lock. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -516,14 +516,14 @@ Example: script: set_locks_to_tamper: sequence: - - service: wink.wink_set_lock_alarm_mode + - service: wink.set_lock_alarm_mode data: mode: "tamper" ``` -### Service `wink_set_lock_alarm_sensitivity` +### Service `set_lock_alarm_sensitivity` -You can use the service wink/wink_set_lock_alarm_sensitivity to set the alarm sensitivity of your lock. +You can use the service wink/set_lock_alarm_sensitivity to set the alarm sensitivity of your lock. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -536,14 +536,14 @@ Example: script: set_locks_to_high_sensitivity: sequence: - - service: wink.wink_set_lock_alarm_sensitivity + - service: wink.set_lock_alarm_sensitivity data: sensitivity: "high" ``` -### Service `wink_set_lock_alarm_state` +### Service `set_lock_alarm_state` -You can use the service wink/wink_set_lock_alarm_state to set the alarm state of your lock. +You can use the service wink/set_lock_alarm_state to set the alarm state of your lock. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -556,14 +556,14 @@ Example: script: disable_all_locks_alarm: sequence: - - service: wink.wink_set_lock_alarm_state + - service: wink.set_lock_alarm_state data: enabled: false ``` -### Service `wink_set_lock_beeper_state` +### Service `set_lock_beeper_state` -You can use the service wink/wink_set_lock_beeper_state to set the beeper state of your lock. +You can use the service wink/set_lock_beeper_state to set the beeper state of your lock. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -576,14 +576,14 @@ Example: script: disable_all_locks_beepers: sequence: - - service: wink.wink_set_lock_beeper_state + - service: wink.set_lock_beeper_state data: enabled: false ``` -### Service `wink_set_lock_vacation_mode` +### Service `set_lock_vacation_mode` -You can use the service wink/wink_set_lock_vacation_mode to set the vacation mode of your lock. +You can use the service wink/set_lock_vacation_mode to set the vacation mode of your lock. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -596,14 +596,14 @@ Example: script: enabled_vacation_mode_on_all_locks: sequence: - - service: wink.wink_set_lock_vacation_mode + - service: wink.set_lock_vacation_mode data: enabled: false ``` -### Service `wink_add_new_lock_key_code` +### Service `add_new_lock_key_code` -You can use the service wink/wink_add_new_lock_key_code to add a new user code to your Wink lock. +You can use the service wink/add_new_lock_key_code to add a new user code to your Wink lock. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | diff --git a/source/_integrations/yamaha.markdown b/source/_integrations/yamaha.markdown index 400f94a220b..2bcd02479be 100644 --- a/source/_integrations/yamaha.markdown +++ b/source/_integrations/yamaha.markdown @@ -127,7 +127,7 @@ script: ``` -### Service `yamaha_enable_output` +### Service `enable_output` Enable or disable an output port (HDMI) on the receiver. diff --git a/source/_lovelace/entities.markdown b/source/_lovelace/entities.markdown index 23c614811b4..68d61c8e11b 100644 --- a/source/_lovelace/entities.markdown +++ b/source/_lovelace/entities.markdown @@ -61,7 +61,7 @@ image: type: string secondary_info: required: false - description: "Show additional info. Values: `entity-id`, `last-changed`." + description: "Show additional info. Values: `entity-id`, `last-changed`, `last-triggered' (only for automations and scripts)." type: string format: required: false diff --git a/source/_posts/2019-12-11-release-103.markdown b/source/_posts/2019-12-11-release-103.markdown new file mode 100644 index 00000000000..faa306bc133 --- /dev/null +++ b/source/_posts/2019-12-11-release-103.markdown @@ -0,0 +1,1707 @@ +--- +layout: post +title: "0.103: Happy Holidays, Service calls, StarLine, GeoNet NZ and Proxmox" +description: "The final major release of this year! Happy Holidays and see you in 2020!" +date: 2019-12-11 17:00:00 +date_formatted: "December 11, 2019" +author: Franck Nijhof +author_twitter: frenck +comments: true +categories: Release-Notes +og_image: /images/blog/2019-12-0.103/components.png +--- + + + +Here it is! Home Assistant 0.103 is released, which is the last major release +for this year. For the final stretch of this year, we've focussed on +cleaning things up. This release contains many things that were still +in progress (e.g., due to Hacktoberfest), lots of bugfixes; mainly +things that help to improve the stability and experience of Home Assistant. + +We wish you happy holidays! As always, we skip a release cycle at the end +of the year, making this the final, major release of 2019. This gives all of +us time to enjoy the holidays with our families as well. +The first release of 2020, will be on 15 January. + +Furthermore, we'd like to take the opportunity to thank all of our contributors, +no matter how small or big the contribution; code, documentation, +issue reporting, beta testing, supporters in our +[forum](https://community.home-assistant.io) and [chat](/join-chat). +We salute and thank you and wish you the best for the new decade, +as we are entering 2020! ❤️ + +Cheers! + +## Service's have been moved to their respective integration namespaces + +For 0.103, an extensive cleanup has been taken place around the names of the +services. We realize this affects many users; therefore, we made sure all these +changes are in this release. +This change was driven by [@raman325], who did an excellent job of completing +this in time for 0.103. + +We used to have services that were placed inside other domains, +which wasn't always the case, and therefore inconsistent. +So, for example, the service to add an item to Todoist was actually a service +call under the `calendar` domain: `calendar.todoist_new_task`. + +This release, all services that were not placed correctly, are moved into their +respective integration domain. So, for the above example of +`calendar.todoist_new_task`, has been renamed to `todoist.new_task`. + +We hope this brings a more streamlined experience to the use of services, +for now, and in the future. For a complete list of old vs. new service names, +a table as been added to the release notes, [below](#updated-service-names). + +## Moving imports of Python packages + +Internally, Home Assistant uses a lot of Python packages, that our integrations +are using. In the past weeks, the locations where all those imports take +place, was changed. This does not directly resonate with your system +and is mainly an internal cleanup. + +A big shout out to the following contributors that together are responsible +for making **hundreds** of contributions the past weeks to help us out: + +[@Bouni], [@briglx], [@djpremier], [@exxamalte], [@javicalle], [@Michsior14], +[@Misiu], [@mnigbur], [@Quentame], [@springstan], [@thaohtp], [@tulindo] + +Thank you so much! + +[@briglx]: https://github.com/briglx +[@djpremier]: https://github.com/djpremier +[@javicalle]: https://github.com/javicalle +[@Michsior14]: https://github.com/Michsior14 +[@mnigbur]: https://github.com/mnigbur +[@thaohtp]: https://github.com/thaohtp + +## Python 3.6 support is deprecated + +Since version 0.101, support for Python 3.6 has been deprecated. We are +currently working on Python 3.8 support, which is expected soon. + +Therefore, this release marks the last release, which supports Python 3.6. + +If you haven't upgraded your system to Python 3.7 yet, it is recommended to +do so, to ensure you can keep using Home Assistant in the future. + +If you are using Docker or Hass.io, you don't have to worry about this, since +we provide a matching and working Python version for you. + +## Frenck Joins Nabu Casa + +As announced during the [State of the Union 2019](https://www.home-assistant.io/blog/2019/11/22/state-of-the-union/), +Frenck has joined Nabu Casa. + + + +## Frontend + +We gave some love and attention to the automation editor, +fixing some bugs and adding some useful features. + +### Natural language improvements + +We add area support for automations that you create with natural language, +and we try to pick the right area or device for you if you mentioned the name. + +So you can now say: "Turn the lights on in the living room", and it adds all +the light devices of your living room to the automation. +By clicking `Choose individual devices`, you can add or remove devices. + +

+Screenshot of the result of the above query +Screenshot of the result of the above query. +

+ +### YAML support + +You can now edit every individual trigger, condition or action as YAML. +This makes it possible even to do very complicated automations in the +automation editor and allows you to copy parts of your automation quickly. + +

+Screenshot of the automation YAML editor +Screenshot of the automation YAML editor. +

+ +### Rearange actions + +We also added the ability to rearrange your actions, so you don't have to start +all over when you want to add a delay between 2 service calls. +Talking about the service call action, that has now an entity picker +to help you search for the right one. + +

+Screenshot of automation actions +Screenshot of automation actions. +

+ +## In other news + + + + + + + +## New Integrations + +The following integrations are added in this release: + +- Add support for Hisense AEH-W4A1 wifi module (AC remote control) ([@bannhead] - [#28641]) ([hisense_aehw4a1 docs]) (new-integration) +- GeoNet NZ Volcanic Alert Level sensor ([@exxamalte] - [#26901]) ([geonetnz_volcano docs]) (new-integration) +- Add component VersaSense ([@flamm3blemuff1n] - [#24619]) ([versasense docs]) (new-integration) +- Add Proxmox VE integration ([@K4ds3] - [#27315]) ([proxmoxve docs]) (new-integration) +- Add flume support ([@ChrisMandich] - [#27235]) ([flume docs]) (new-integration) +- StarLine integration ([@Anonym-tsk] - [#27197]) ([starline docs]) (new-integration) +- Add intent integration to expose intent handle API ([@balloob] - [#29124]) ([conversation docs]) ([intent docs]) (new-integration) +- Dsmr reader ([@depl0y] - [#28701]) ([dsmr_reader docs]) ([fleetgo docs]) ([openhardwaremonitor docs]) (new-integration) +- Add ATEN PE component for ATEN eco PDUs ([@mtdcr] - [#27960]) ([aten_pe docs]) (new-integration) + +## New Platforms + +The following platforms have been added to existing integrations: + +- Add support for SimpliSafe locks ([@bachya] - [#28672]) ([simplisafe docs]) (new-platform) +- Add fan support to lutron_caseta ([@djj211] - [#29033]) ([lutron_caseta docs]) (new-platform) +- Add support for Somfy Camera Shutter ([@tetienne] - [#29057]) ([somfy docs]) (new-platform) +- Add Huawei LTE binary sensor support, mobile connection sensor ([@scop] - [#28226]) ([huawei_lte docs]) (new-platform) +- Broadlink remote ([@felipediel] - [#26528]) ([broadlink docs]) (new-platform) + +## Breaking Changes + +If you are an existing user, make sure to read the this section **before** upgrading, +this helps you understand the changes and avoids having issues during an upgrade. + +### Updated Service Names + +All services for use in Home Assistant are moved to their integration naming space. + +**The list below shows service calls and platforms which have been moved to their own integrations** - [@raman325] + +- **Local File**: `camera.local_file_update_file_path` -> `local_file.update_file_path` ([#28890]) +- **Elk-M1 Controller**: `alarm_control_panel.elkm1_*` -> `elkm1.*` ([#29128]) +- **Neato**: `vacuum.neato_custom_cleaning` -> `neato.custom_cleaning` ([#29148]) +- **Envisalink**: `alarm_control_panel.envisalink_alarm_keypress` -> `envisalink.alarm_keypress` ([#29126]) +- **IFTTT**: `alarm_control_panel.ifttt_push_alarm_state` -> `ifttt.push_alarm_state` ([#29129]) +- **AlarmDecoder Alarm**: `alarm_control_panel.alarmdecoder_alarm_toggle_chime` -> `alarmdecoder.alarm_toggle_chime` ([#29127]) +- **Econet**: `water_heater.econet_*` -> `econet.*` ([#29149]) +- **APNS**: `notify.apns_*` -> `apns.apns_*` ([#29165]) +- **Facebox**: `image_processing.facebox_teach_face` -> `facebox.teach_face` ([#29151]) +- **HTML5**: `notify.html5_dismiss` -> `html5.dismiss` ([#29145]) +- **Lifx**: `light.lifx_*` -> `lifx.*` ([#29136]) +- **Mill**: `climate.mill_set_room_temperature` -> `mill.set_room_temperature` ([#29132]) +- **Todoist**: `calendar.todoist_new_task` -> `todoist.new_task` ([#29131]) +- **Wink**: `lock.wink_*` -> `wink.*` ([#29137]) +- **Wemo**: `fan.wemo_*` -> `wemo.*` ([#29135]) +- **Bluetooth**: `device_tracker.update` -> `bluetooth_tracker.update` ([#29161]) +- **Demo**: `device_tracker.randomize_device_tracker_data` -> `demo.randomize_device_tracker_data` ([#29164]) +- **iCloud**: `device_tracker.icloud_*` -> `icloud.*` ([#29144]) +- **Blackbird**: `media_player.blackbird_set_all_zones` -> `blackbird.set_all_zones` ([#29112]) +- **Bluesound**: `media_player.bluesound_*` -> `bluesound.*` ([#29111]) +- **Channels**: `media_player.channels_*` -> `channels.*` ([#29139]) +- **Epson**: `media_player.epson_select_cmode` -> `epson.select_cmode` ([#29113]) +- **Monoprice**: `media_player.monoprice_*` -> `monoprice.*` ([#29099]) +- **Songpal**: `media_player.songpal_set_sound_setting` -> `songpal.set_sound_setting` ([#29143]) +- **Soundtouch**: `media_player.soundtouch_*` -> `soundtouch.*` ([#29140]) +- **Squeezebox**: `media_player.squeezebox_call_method` -> `squeezebox.call_method` ([#29141]) +- **Xiaomi Miio**: `*.xiaomi_miio_*` -> `xiaomi_miio.*` ([#29134]) +- **Xiaomi Miio**: `*.xiaomi_*` -> `xiaomi_miio.*` ([#29134]) +- **Yamaha**: `media_player.yamaha_*` -> `yamaha.*` ([#29142]) + +### Other Breaking Changes + +- **Mobile App** - Loading the Mobile App no longer causes the Cloud integration to be loaded. If you relied on this, add `cloud:` to your configuration.yaml. - ([@balloob] - [#29373]) ([mobile_app docs]) +- **Samsung TV** - The behavior for next and previous track commands for Samsung TVs has changed. Before the change, the Samsung TV integration reacted to the two above commands sending the KEY_FF and KEY_REWIND commands. While watching TV programs, those two commands do nothing. After the change, the entity sends the KEY_CHUP and KEY_CHDOWN commands instead, thus allowing the user to change the channel using the media player standard Lovelace interface. The user doesn't need to change anything in the configuration. - ([@tulindo] - [#28213]) ([samsungtv docs]) +- **Wake on LAN** - The configuration key `mac_address:` was renamed to `mac:` to be in sync with the service. ([@fabaff] - [#28830]) ([wake_on_lan docs]) +- **PulseAudio Loopback Switch** - The default port was incorrectly set to 4712, however, the official documentation states that the default port is 4713. Therefore, the port has been changed and all previously configured switches now need to listen to port 4713. - ([@springstan] - [#28857]) ([pulseaudio_loopback docs]) +- **Z-Wave** - This changes the primary command class for z-wave thermostats in discovery schemas from `COMMAND_CLASS_THERMOSTAT_SETPOINT` to `COMMAND_CLASS_THERMOSTAT_MODE`. This will cause a typical dual setpoint thermostat to be correctly represented as a single entity. - ([@oandrew] - [#27040]) ([zwave docs]) +- **Transmission** - Added host field to `add_torrent` service in order to support multiple Transmission instances. ([@engrbm87] - [#28653]) ([transmission docs]) +- **Opentherm Gateway** - Adds device support. This change breaks enabled `sensor` and `binary_sensor` entities, which are now disabled by default and can be re-enabled through the Devices panel. It also breaks `entity_id` of the climate entity in some configurations. The `entity_id` is now based on the `gateway_id` rather than the configured `name` to guarantee uniqueness. - ([@mvn23] - [#28722]) ([opentherm_gw docs]) +- **Intent** - If you use the built-in intents for shopping list, cover or light, you need to add `intent:` to your `configuration.yaml`. - ([@balloob] - [#29280]) ([conversation docs]) ([cover docs]) ([intent docs]) ([light docs]) ([shopping_list docs]) +- **Emulated Hue** - As previous `entityid` were not Hue compliant, `emulated_hue_ids.json` will need to be cleared out and devices re-discovered and configured in Alexa / Google Home. This is a necessary growing pain to move the integration forward in a Hue-compliant fashion. - ([@NobleKangaroo] - [#28317]) ([emulated_hue docs]) +- **Miflora** - Values for an unresponsive device aren't reported any more as if they were valid, so it's possible to send an alert. - ([@ferbar] - [#29276]) ([miflora docs]) + + Example configuration YAML: + + ```yaml + - id: plant_unreachable + alias: plant unreachable + trigger: + - entity_id: sensor.plant_moisture + for: 01:00:00 + platform: state + to: unavailable + action: + ``` + +- **Entity ID** - It is no longer possible to target all entities by not passing both `entity_id` and `area_id` to your service data. This feature was previously deprecated and has been printing warnings. The correct way to target all entities is to set `entity_id: all` - ([@balloob] - [#29178]) +- **Heatmiser Thermostat** - The Heatmiser integration has been updated to the latest version of the heatmiserV3 library, meaning less code inside HA, and more leverage on the library. The current version of the Heatmiser integration went out of date with the introduction of voluptuous. This has now been fixed, but it breaks the old config syntax slightly. See the updated docs for the new config format. - ([@andylockran] - [#29006]) ([heatmiser docs]) + +## If you need help... + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). + +## Reporting Issues + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + + +## Beta Fixes + +- Delay Plex websocket connection to avoid race ([@jjlawren] - [#28934]) ([plex docs]) (beta fix) +- Limit available heat/cool modes for HomeKit thermostats ([@neffs] - [#28586]) ([homekit docs]) (beta fix) +- Increase somfy SCAN_INTERVAL ([@tetienne] - [#29524]) ([somfy docs]) (beta fix) +- Bump georss_generic_client to 0.3 ([@exxamalte] - [#29532]) ([geo_rss_events docs]) (beta fix) +- Huawei LTE device tracker fixes ([@scop] - [#29551]) ([huawei_lte docs]) (beta fix) +- Change source of device_info ([@Santobert] - [#29570]) ([neato docs]) (beta fix) +- Only update disabled_by when enabled default and entity enabled states differ ([@Kane610] - [#29643]) ([unifi docs]) (beta fix) +- Fix unit_of_measurement for Starline temperature sensors ([@Anonym-tsk] - [#29740]) ([starline docs]) (beta fix) +- HomeAssistant-pyozw 0.1.7 ([@pvizeli] - [#29743]) ([zwave docs]) (beta fix) +- Updated frontend to 20191204.1 ([@bramkragten] - [#29787]) ([frontend docs]) (beta fix) +- Bump Roku to 4.0.0 ([@bwarden] - [#29809]) ([roku docs]) (beta fix) +- Add user-agent to fix dwd_weather_warnings setup error ([@springstan] - [#29596]) ([dwd_weather_warnings docs]) (beta fix) +- Add more logging to help future debug situations ([@Kane610] - [#29800]) ([unifi docs]) (beta fix) +- UniFi - honor detection time when UniFi wire bug happens ([@Kane610] - [#29820]) ([unifi docs]) (beta fix) +- UniFi - Handle disabled switches ([@Kane610] - [#29824]) ([unifi docs]) (beta fix) +- Remove uvloop event policy ([@pvizeli] - [#29835]) (beta fix) + +## All changes + +- Add verisure ethernet status ([@thomasgermain] - [#28656]) ([verisure docs]) +- Bump pyotgw to 0.5b1 ([@mvn23] - [#28751]) ([opentherm_gw docs]) +- Add config entry and device support to Demo ([@bramkragten] - [#28702]) ([demo docs]) +- Add support for SimpliSafe locks ([@bachya] - [#28672]) ([simplisafe docs]) (new-platform) +- Add small speed improvement when unloading Ambient PWS ([@bachya] - [#28756]) ([ambient_station docs]) +- Add small speed improvement when unloading Notion ([@bachya] - [#28757]) ([notion docs]) +- Add small speed improvement when unloading OpenUV ([@bachya] - [#28758]) ([openuv docs]) +- Add small speed improvement when unloading RainMachine ([@bachya] - [#28759]) ([rainmachine docs]) +- Upgrade ephem to 3.7.7.0 ([@fabaff] - [#28715]) ([season docs]) +- Added plus sign to safe characters in urllib.parse.quote method ([@springstan] - [#28763]) ([squeezebox docs]) +- DECONZ - Add device trigger support for aqara 86sw2 switches to Deconz ([@bramkragten] - [#28767]) ([deconz docs]) +- Bump pytest to 5.2.3 ([@cgtobi] - [#28785]) +- Convert Tesla to Async ([@alandtse] - [#28748]) ([tesla docs]) +- bump home mitemp_bt to 0.0.3. It has an important bugfix for reading … ([@herrlado] - [#28765]) ([mitemp_bt docs]) +- Change keys for Samsung TV next and prev track command ([@tulindo] - [#28213]) ([samsungtv docs]) (breaking change) +- Add support for Hisense AEH-W4A1 wifi module (AC remote control) ([@bannhead] - [#28641]) ([hisense_aehw4a1 docs]) (new-integration) +- Upgrade sqlalchemy to 1.3.11 ([@fabaff] - [#28721]) ([recorder docs]) ([sql docs]) +- Bump pyHik library to 0.2.5 for id, tamper fixes ([@mezz64] - [#28807]) ([hikvision docs]) +- Upgrade pylint, tweak config ([@scop] - [#28798]) +- Lint exclusions ([@scop] - [#28655]) +- Add ombi password authentication option ([@larssont] - [#28742]) ([ombi docs]) +- Move imports in braviatv component ([@Bouni] - [#27855]) ([braviatv docs]) ([braviatv docs]) ([braviatv docs]) +- Truncate sensor state values ([@michaeldavie] - [#28788]) ([environment_canada docs]) +- Upgrade alpha_vantage to 2.1.2 ([@fabaff] - [#28810]) ([alpha_vantage docs]) +- Upgrade shodan to 1.19.1 ([@fabaff] - [#28809]) ([shodan docs]) +- Improve coverage of input_datetime/reproduce_state ([@Santobert] - [#28272]) ([input_datetime docs]) +- Bump androidtv to 0.0.34 ([@JeffLIrion] - [#28816]) ([androidtv docs]) +- Add broadcast_address for wake-on-lan ([@uSpike] - [#28793]) ([panasonic_viera docs]) +- Add broadcast address for WOL and samsungtv ([@JayNewstrom] - [#28819]) ([samsungtv docs]) +- Align naming ([@fabaff] - [#28830]) ([wake_on_lan docs]) (breaking change) +- Esphome climate features ([@glmnet] - [#28786]) ([esphome docs]) +- Implement more Comfoconnect sensors ([@michaelarnauts] - [#28817]) ([comfoconnect docs]) +- Add bandit, use to catch known vulnerable XML parsing ([@scop] - [#28341]) +- Make intents end Snips session without speech ([@Romkabouter] - [#28820]) ([snips docs]) +- Update Vivotek camera integration ([@HarlemSquirrel] - [#28841]) ([vivotek docs]) +- Move imports in owntracks component ([@Quentame] - [#27780]) ([owntracks docs]) +- Update roomba integration ([@freekode] - [#28560]) ([roomba docs]) +- GeoNet NZ Volcanic Alert Level sensor ([@exxamalte] - [#26901]) ([geonetnz_volcano docs]) (new-integration) +- Add component VersaSense ([@flamm3blemuff1n] - [#24619]) ([versasense docs]) (new-integration) +- Bump pyps4-2ndscreen to 1.0.3 ([@ktnrg45] - [#28874]) ([ps4 docs]) +- Pulseaudio: Changed default port from 4712 to 4713 ([@springstan] - [#28857]) ([pulseaudio_loopback docs]) (breaking change) +- Add state dependent icons to moon sensor ([@Mariusthvdb] - [#28743]) ([moon docs]) +- Move import to top for alarmdecoder ([@frenck] - [#28862]) ([alarmdecoder docs]) +- Move import to top for aftership ([@frenck] - [#28860]) ([aftership docs]) +- Move imports to top for serial_pm ([@frenck] - [#28861]) ([serial_pm docs]) +- Downgrade duplicate YAML key log to warning ([@frenck] - [#28851]) +- Mark entity abc ([@balloob] - [#28869]) ([climate docs]) +- Add @rohankapoorcom to CODEOWNERS for speedtestdotnet and fastdotcom ([@rohankapoorcom] - [#28879]) ([fastdotcom docs]) ([speedtestdotnet docs]) +- Add HTTP view to conversation to handle intents via JSON POST ([@synesthesiam] - [#28818]) ([conversation docs]) +- Add ZHA service to issue group commands ([@abmantis] - [#28823]) ([zha docs]) +- Bump pytest to 5.3.0 ([@frenck] - [#28883]) +- Allow connection to rfxtrx using tcp ([@foxy82] - [#28297]) ([rfxtrx docs]) +- Update services.yaml for Roku component ([@raman325] - [#28887]) +- Command arguments for issue_zigbee_cluster_commands. ([@Adminiuga] - [#28885]) ([zha docs]) +- Update services.yaml for cloudflare component ([@raman325] - [#28888]) +- update services.yaml for keyboard component ([@raman325] - [#28889]) +- bump herepy to 0.6.3.3 ([@eifinger] - [#28907]) ([here_travel_time docs]) +- Update __init__.py ([@SNoof85] - [#28911]) ([freebox docs]) +- Delay Plex websocket connection to avoid race ([@jjlawren] - [#28934]) ([plex docs]) (beta fix) +- Bump verisure to vsure 1.5.4 and jsonpath 0.82 ([@persandstrom] - [#28933]) ([verisure docs]) +- Add device trigger support for Aqara WXKG11LM 2016 switch to Deconz ([@kurniawan77] - [#28946]) ([deconz docs]) +- fix typo for mediumvioletred ([@awkwardDuck] - [#28941]) +- Add round to half template method ([@tofuSCHNITZEL] - [#28948]) +- Fix return values of preset_mode(s) properties ([@akasma74] - [#27751]) ([generic_thermostat docs]) +- Creating a scene by snapshotting entities ([@Santobert] - [#28939]) ([homeassistant docs]) +- Add Proxmox VE integration ([@K4ds3] - [#27315]) ([proxmoxve docs]) (new-integration) +- Add flume support ([@ChrisMandich] - [#27235]) ([flume docs]) (new-integration) +- Rename rest_command request to response, add exc_info for exceptions ([@Misiu] - [#28521]) ([rest_command docs]) +- Upgrade youtube_dl to 2019.11.22 ([@BKPepe] - [#28964]) ([media_extractor docs]) +- Bumped pypca to 0.0.7 ([@majuss] - [#28976]) ([elv docs]) +- Catch Zeroconf exception ([@fabaff] - [#28728]) ([zeroconf docs]) +- Update pyjuicenet dependency ([@jesserockz] - [#28958]) ([juicenet docs]) +- Upgrade mutagen to 1.43.0 ([@fabaff] - [#28984]) ([tts docs]) +- Bumped keenetic NDMS2 client version to 0.0.11 ([@foxel] - [#28990]) ([keenetic_ndms2 docs]) +- Upgrade zeroconf to 0.24.0 ([@fabaff] - [#28986]) ([zeroconf docs]) +- Upgrade shodan to 1.20.0 ([@fabaff] - [#28983]) ([shodan docs]) +- Ensure wheel package is present when running Pylint ([@frenck] - [#29012]) +- Move imports to top for volkszaehler ([@springstan] - [#29025]) ([volkszaehler docs]) +- Made spotify playlist name validation less strict ([@springstan] - [#28684]) ([spotify docs]) +- Move imports to the top for Tado. ([@michaelarnauts] - [#29016]) ([tado docs]) +- Add an early start sensor for heating zones ([@andersonshatch] - [#28732]) ([tado docs]) +- Fix #27028 ([@pschmitt] - [#29042]) ([roomba docs]) +- Move philips_js imports at top-level ([@Quentame] - [#29003]) ([philips_js docs]) +- Move imports to top for watson_tts ([@springstan] - [#29023]) ([watson_tts docs]) +- Move imports to top for todoist ([@springstan] - [#29022]) ([todoist docs]) +- Move imports to top for geizhals ([@springstan] - [#29021]) ([geizhals docs]) +- Upgrade discord.py to 1.2.5 ([@fabaff] - [#28998]) ([discord docs]) +- Catch samsungtv websocket exceptions ([@escoand] - [#28849]) ([samsungtv docs]) +- Move imports to top for discovery ([@springstan] - [#29020]) ([discovery docs]) +- Report device unavailable state through Emulated Hue ([@challs] - [#29029]) ([emulated_hue docs]) +- Use TADO_MODE for temperature overrides in tado climate component. ([@michaelarnauts] - [#29014]) ([tado docs]) +- Move edimax imports at top-level ([@Quentame] - [#29053]) ([edimax docs]) +- Move vizio imports at top-level ([@Quentame] - [#29046]) ([vizio docs]) +- Move dyson imports at top-level ([@Quentame] - [#29047]) ([dyson docs]) +- Added error checking ([@kuchel77] - [#29041]) ([synologydsm docs]) +- Move ebox imports at top-level ([@Quentame] - [#29048]) ([ebox docs]) +- Move ecoal_boiler imports at top-level ([@Quentame] - [#29049]) ([ecoal_boiler docs]) +- Move imports to top for ffmpeg_motion and ffmpeg_noise ([@springstan] - [#29026]) ([ffmpeg_motion docs]) ([ffmpeg_noise docs]) +- Move fibaro imports at top-level ([@Quentame] - [#28995]) ([fibaro docs]) +- Add climate hvac_action for ESPHome ([@OttoWinter] - [#28993]) ([esphome docs]) +- Code maintenance for HomematicIP Cloud ([@SukramJ] - [#28980]) ([homematicip_cloud docs]) +- Fix typo in scaffold generator script ([@cgtobi] - [#29058]) +- Move hdmi_cec imports at top-level ([@Quentame] - [#29056]) ([hdmi_cec docs]) +- Handle offline state of SAJ inverters (fixes #29007) ([@fredericvl] - [#29009]) ([saj docs]) +- Bump numpy 1.17.4 / opencv 4.1.2 for Python 3.8 ([@pvizeli] - [#29061]) ([iqvia docs]) ([opencv docs]) ([tensorflow docs]) ([trend docs]) +- Drop < 0.97 Huawei LTE sensor unique id migration workaround ([@scop] - [#29060]) ([huawei_lte docs]) +- Move econet imports at top-level ([@Quentame] - [#29050]) ([econet docs]) +- track Raspberry Pi 4 image in the version integration ([@basnijholt] - [#29059]) ([version docs]) +- Fix climate device actions ([@SukramJ] - [#28660]) ([climate docs]) +- Bumped lupupy to version 0.0.18 ([@majuss] - [#28989]) ([lupusec docs]) +- Move yi imports at top-level ([@Quentame] - [#29001]) ([yi docs]) +- Nilu integration code owner ([@hfurubotten] - [#29081]) ([nilu docs]) +- Entur public transport code owner ([@hfurubotten] - [#29080]) ([entur_public_transport docs]) +- Move eddystone_temperature imports at top-level ([@Quentame] - [#29052]) ([eddystone_temperature docs]) +- Support default display category based one switch device_class. ([@ochlocracy] - [#28221]) ([alexa docs]) +- Add Alexa.ModeController to cover entities, adds open/close utterances! ([@ochlocracy] - [#28309]) ([alexa docs]) +- Fix opentherm_gw config flow migration ([@mvn23] - [#28474]) ([opentherm_gw docs]) +- Add valid inputs to alexa InputController ([@ochlocracy] - [#28483]) ([alexa docs]) +- Move epsonworkforce imports at top-level ([@Quentame] - [#29086]) ([epsonworkforce docs]) +- Move velux imports at top-level ([@Quentame] - [#29085]) ([velux docs]) +- Move upnp imports at top-level ([@Quentame] - [#29083]) ([upnp docs]) +- Move dlna_dmr imports at top-level ([@Quentame] - [#29082]) ([dlna_dmr docs]) +- Move imports to top for xfinity ([@springstan] - [#29077]) ([xfinity docs]) +- Move imports to top for xeoma ([@springstan] - [#29076]) ([xeoma docs]) +- Move imports to top for version ([@springstan] - [#29075]) ([version docs]) +- Move imports to top for yale_smart_alarm ([@springstan] - [#29074]) ([yale_smart_alarm docs]) +- Move imports to top for xiaomi_tv ([@springstan] - [#29073]) ([xiaomi_tv docs]) +- Add supported_features to Alarm Control Panel to limit device_actions ([@SukramJ] - [#29065]) +- Move hangouts imports at top-level ([@Quentame] - [#29055]) ([hangouts docs]) +- Add SSL configuration ([@USA-RedDragon] - [#29038]) ([opengarage docs]) +- Refactor template components to extract common routines ([@grillp] - [#27064]) ([template docs]) +- Improve z-wave thermostat support ([@oandrew] - [#27040]) ([zwave docs]) (breaking change) +- Fix Onvif setup error: premature end of connection on GetStreamURI ([@olijouve] - [#26781]) ([onvif docs]) +- Move esphome imports at top-level ([@Quentame] - [#29064]) ([esphome docs]) +- Cast the volume_level of a universal media_player to a float ([@michaelarnauts] - [#29045]) ([universal docs]) +- Move imports to top for ecovacs ([@springstan] - [#29017]) ([ecovacs docs]) +- Allow templates in rest_command headers ([@PedroLamas] - [#26099]) ([rest_command docs]) +- Fixed CONFIG_SCHEMA and getting data from the config ([@springstan] - [#28985]) ([dovado docs]) +- Allow to change MQTT climate hold mode ([@krasnoukhov] - [#28988]) ([mqtt docs]) +- Add scale and offset to temperature values to Modbus Climate ([@adamchengtkc] - [#27045]) ([modbus docs]) +- Add uptime and number of reboot for bbox sensor ([@Mryck] - [#28880]) ([bbox docs]) +- google_assistant: support for humidity sensors ([@Shulyaka] - [#28695]) ([google_assistant docs]) +- If volume disabled do not enable support ([@bazwilliams] - [#28635]) ([openhome docs]) +- Lint config cleanups ([@scop] - [#28864]) +- Simplify getting alias from tplink smartplug.context ([@basnijholt] - [#28696]) ([tplink docs]) +- Explicitly include "Alexa" Interface in discovery response ([@ochlocracy] - [#28218]) ([alexa docs]) +- Fix digest auth rest sensors ([@timmccor] - [#28153]) ([rest docs]) +- Make conversation and intent context aware ([@balloob] - [#28965]) ([almond docs]) ([conversation docs]) ([http docs]) ([intent_script docs]) ([light docs]) +- Fix empty data attribute in sinch service call ([@bendikrb] - [#28253]) ([sinch docs]) +- Fix Alexa tests ([@pvizeli] - [#29100]) +- Fix HomeKit linked battery sensor crash ([@adrum] - [#28974]) ([homekit docs]) +- Move icloud imports at top-level ([@Quentame] - [#29089]) ([icloud docs]) +- Move ee_brightbox imports at top-level ([@Quentame] - [#29054]) ([ee_brightbox docs]) +- Update WazeRouteCalculator, add config options, fix subscription ([@hmmbob] - [#27963]) ([waze_travel_time docs]) +- Add serial to caseta devices ([@mdonoughe] - [#28886]) ([lutron_caseta docs]) +- Add host field to add_torrent service ([@engrbm87] - [#28653]) ([transmission docs]) (breaking change) +- Update service domain for local_file from 'camera' to 'local_file' ([@raman325] - [#28890]) ([local_file docs]) (breaking change) +- Move imports to top for webostv ([@springstan] - [#29102]) ([webostv docs]) +- Add hvac_action to HomematicIP Cloud Climate ([@SukramJ] - [#28859]) ([homematicip_cloud docs]) +- move service constants to const.py, move custom services to monoprice domain ([@raman325] - [#29099]) ([monoprice docs]) (breaking change) +- Move imports to top for uptimerobot ([@springstan] - [#29103]) ([uptimerobot docs]) +- Move imports to top for twilio_call ([@springstan] - [#29104]) ([twilio_call docs]) +- Move imports to top for ubee ([@springstan] - [#29105]) ([ubee docs]) +- Move flexit imports at top-level ([@Quentame] - [#29097]) ([flexit docs]) +- Move flunearyou imports at top-level ([@Quentame] - [#29096]) ([flunearyou docs]) +- Move folder_watcher imports at top-level ([@Quentame] - [#29095]) ([folder_watcher docs]) +- Move foobot imports at top-level ([@Quentame] - [#29094]) ([foobot docs]) +- Move fortigate imports at top-level ([@Quentame] - [#29093]) ([fortigate docs]) +- Move free_mobile imports at top-level ([@Quentame] - [#29092]) ([free_mobile docs]) +- Move dominos imports at top-level ([@Quentame] - [#29090]) ([dominos docs]) +- Move imports to top for uvc ([@springstan] - [#29072]) ([uvc docs]) +- Move imports to top for travisci ([@springstan] - [#29107]) ([travisci docs]) +- Move imports to top for unifi_direct ([@springstan] - [#29106]) ([unifi_direct docs]) +- Move imports to top for trackr ([@springstan] - [#29109]) ([trackr docs]) +- Move imports to top for thinkingcleaner ([@springstan] - [#29110]) ([thinkingcleaner docs]) +- Move imports to top for trafikverket_weatherstation ([@springstan] - [#29108]) ([trafikverket_weatherstation docs]) +- Add new properties and services for V3 SimpliSafe systems ([@bachya] - [#28997]) ([simplisafe docs]) +- Fix Vicare imports ([@rappenze] - [#29071]) ([vicare docs]) +- Update service domain for bluesound from 'media_player' to 'bluesound' ([@raman325] - [#29111]) ([bluesound docs]) (breaking change) +- Update service domain for blackbird from 'media_player' to 'blackbird' ([@raman325] - [#29112]) ([blackbird docs]) (breaking change) +- Update service domain for epson from 'media_player' to 'epson' ([@raman325] - [#29113]) ([epson docs]) (breaking change) +- StarLine integration ([@Anonym-tsk] - [#27197]) ([starline docs]) (new-integration) +- Fix all entities triggering all observations in bayesian sensor ([@sophof] - [#28979]) ([bayesian docs]) +- Add Post Processing Jobs to NZBGet component ([@alex3305] - [#29027]) ([nzbget docs]) +- Update roomba bin state checking ([@freekode] - [#29030]) ([roomba docs]) +- Remove the alarm_control_panel CODEOWNER ([@colinodell] - [#29114]) +- Update list of supported countries for Workday Sensor ([@springstan] - [#29000]) ([workday docs]) +- Allow rest sensor list responses ([@gjbadros] - [#28835]) ([rest docs]) +- Move request sync logic into GoogleConfig ([@elupus] - [#28227]) ([cloud docs]) ([google_assistant docs]) +- Move imports to top for tank_utility ([@springstan] - [#29119]) ([tank_utility docs]) +- Move imports to top for temper ([@springstan] - [#29118]) ([temper docs]) +- Move imports to top for touchline ([@springstan] - [#29117]) ([touchline docs]) +- Move imports to top for traccar ([@springstan] - [#29116]) ([traccar docs]) +- UpCloud updates ([@scop] - [#28646]) ([upcloud docs]) +- Upgrade huawei-lte-api to 1.4.4 ([@scop] - [#29130]) ([huawei_lte docs]) +- bumped supported apprise version to 0.8.2 ([@caronc] - [#29125]) ([apprise docs]) +- move html5 service to html5 domain ([@raman325] - [#29145]) ([html5 docs]) (breaking change) +- move nuki service to nuki domain services.yaml and remove missing service ([@raman325] - [#29138]) +- Update service domain for elkm1 from 'alarm_control_panel' to 'elkm1' ([@raman325] - [#29128]) ([elkm1 docs]) (breaking change) +- move neato service to neato domain ([@raman325] - [#29148]) ([neato docs]) (breaking change) +- move icloud services to icloud domain ([@raman325] - [#29144]) ([icloud docs]) (breaking change) +- move econet services to econet domain ([@raman325] - [#29149]) ([econet docs]) (breaking change) +- move songpal service to songpal domain ([@raman325] - [#29143]) ([songpal docs]) (breaking change) +- move facebox service to facebox domain ([@raman325] - [#29151]) ([facebox docs]) (breaking change) +- move wink service definitions from lock to wink domain ([@raman325] - [#29137]) ([wink docs]) (breaking change) +- Update service domain for lifx from 'light' to 'lifx' ([@raman325] - [#29136]) ([lifx docs]) (breaking change) +- move service constants to const.py and move channels services to channels domain ([@raman325] - [#29139]) ([channels docs]) (breaking change) +- Add intent integration to expose intent handle API ([@balloob] - [#29124]) ([conversation docs]) ([intent docs]) (new-integration) +- Update service domain for todoist from 'calendar' to 'todoist' ([@raman325] - [#29131]) ([todoist docs]) (breaking change) +- update envisalink service domain ([@raman325] - [#29126]) ([envisalink docs]) (breaking change) +- Update service domain for mysensors from 'switch' to 'mysensor… ([@raman325] - [#29147]) ([mysensors docs]) +- Remove ios warning for no devices subscribed to ios.notify ([@TomBrien] - [#29153]) ([ios docs]) +- Add "gentle" mode for Xiaomi Roborock vacuum ([@abmantis] - [#29004]) ([xiaomi_miio docs]) +- Update service domain for mill from 'climate' to 'mill' ([@raman325] - [#29132]) ([mill docs]) (breaking change) +- move squeezebox service to squeezebox domain ([@raman325] - [#29141]) ([squeezebox docs]) (breaking change) +- Add opentherm_gw device support ([@mvn23] - [#28722]) ([opentherm_gw docs]) (breaking change) +- Update services.yaml for nuheat ([@raman325] - [#29133]) ([nuheat docs]) +- move yamaha service to yamaha domain ([@raman325] - [#29142]) ([yamaha docs]) (breaking change) +- Update service domain for harmony from 'remote' to 'harmony' ([@raman325] - [#29146]) ([harmony docs]) +- add services.yaml description for matrix service ([@raman325] - [#29159]) +- Update service domain for ifttt from 'alarm_control_panel' to 'ifttt' ([@raman325] - [#29129]) ([ifttt docs]) (breaking change) +- Use roku.poweron method for media_player.turn_on ([@bwarden] - [#29123]) ([roku docs]) +- Return Jewish Calendar holiday type id support ([@tsvi] - [#29168]) ([jewish_calendar docs]) +- move import to top and add service definition for pilight ([@raman325] - [#29163]) ([pilight docs]) +- Reduce connection timeout to avoid config flow timeouts ([@jjlawren] - [#29172]) ([plex docs]) +- Handle case when device can be None ([@Kane610] - [#29171]) ([deconz docs]) +- Change apns service domain and remove unused variable ([@raman325] - [#29165]) ([apns docs]) (breaking change) +- Update bluetooth_tracker service name and domain from 'device_tracker' to 'bluetooth_tracker' ([@raman325] - [#29161]) ([bluetooth_tracker docs]) (breaking change) +- add services.yaml description for service ([@raman325] - [#29160]) +- move soundtouch services to soundtouch domain ([@raman325] - [#29140]) ([soundtouch docs]) (breaking change) +- move wemo services to wemo domain ([@raman325] - [#29135]) ([wemo docs]) (breaking change) +- Update service domain for alarmdecoder from 'alarm_control_panel' to 'alarmdecoder' ([@raman325] - [#29127]) ([alarmdecoder docs]) (breaking change) +- Add fan support to lutron_caseta ([@djj211] - [#29033]) ([lutron_caseta docs]) (new-platform) +- Fix mobile app device identifiers ([@balloob] - [#29173]) ([mobile_app docs]) +- update demo service domain and service description ([@raman325] - [#29164]) ([demo docs]) (breaking change) +- Move GoogleConfig initialization into setup of component ([@elupus] - [#29170]) ([google_assistant docs]) +- Bump plexwebsocket to 0.0.6 ([@jjlawren] - [#29175]) ([plex docs]) +- Add support for Somfy Camera Shutter ([@tetienne] - [#29057]) ([somfy docs]) (new-platform) +- Only create cloud user if cloud in use ([@balloob] - [#29150]) ([cloud docs]) +- Dsmr reader ([@depl0y] - [#28701]) ([dsmr_reader docs]) ([fleetgo docs]) ([openhardwaremonitor docs]) (new-integration) +- Resolve hosts for fritzbox_callmonitor ([@guillempages] - [#28761]) ([fritzbox_callmonitor docs]) +- Upgrade psutil to 5.6.6 ([@fabaff] - [#29192]) ([systemmonitor docs]) +- Move imports to top for usgs_earthquakes_feed ([@springstan] - [#29202]) ([usgs_earthquakes_feed docs]) +- Move imports to top for syncthru ([@springstan] - [#29206]) ([syncthru docs]) +- Move imports to top for tapsaff ([@springstan] - [#29205]) ([tapsaff docs]) +- Move imports to top for tautulli ([@springstan] - [#29204]) ([tautulli docs]) +- Move imports to top for tof ([@springstan] - [#29203]) ([tof docs]) +- Move imports to top for volvooncall ([@springstan] - [#29201]) ([volvooncall docs]) +- Move imports to top for vultr ([@springstan] - [#29200]) ([vultr docs]) +- Upgrade youtube_dl to 2019.11.28 ([@fabaff] - [#29199]) ([media_extractor docs]) +- Move imports to top for wirelesstag ([@springstan] - [#29198]) ([wirelesstag docs]) +- Move imports to top for zabbix ([@springstan] - [#29195]) ([zabbix docs]) +- Move imports to top for zhong_hong ([@springstan] - [#29194]) ([zhong_hong docs]) +- Move imports to top for ziggo_mediabox_xl ([@springstan] - [#29193]) ([ziggo_mediabox_xl docs]) +- Handle None when trucating long Environment Canada state values ([@michaeldavie] - [#29208]) ([environment_canada docs]) +- Move imports to top for xiaomi_aqara ([@springstan] - [#29196]) ([xiaomi_aqara docs]) +- Move imports to top for xiaomi ([@springstan] - [#29197]) ([xiaomi docs]) +- Migrate NSW Rural Fire Service integration to async library ([@exxamalte] - [#29181]) ([nsw_rural_fire_service_feed docs]) +- Fix somfy switch inherit from SwitchDevice instead of ToggleEntity ([@tetienne] - [#29182]) ([somfy docs]) +- Allow controlling Tado Hot Water Devices with temperature control ([@springstan] - [#29191]) ([tado docs]) +- Allow turning off a tado water heater ([@michaelarnauts] - [#29221]) ([tado docs]) +- Move imports to top for switchbot ([@springstan] - [#29229]) ([switchbot docs]) +- Move imports to top for starlingbank ([@springstan] - [#29233]) ([starlingbank docs]) +- Move imports to top for tahoma ([@springstan] - [#29232]) ([tahoma docs]) +- Move imports to top for synologdsm ([@springstan] - [#29231]) ([synologydsm docs]) +- Move imports to top for synology ([@springstan] - [#29230]) ([synology docs]) +- Move imports to top for supla ([@springstan] - [#29226]) ([supla docs]) +- Move imports to top for streamlabswater ([@springstan] - [#29225]) ([streamlabswater docs]) +- Move imports to top for stiebel_eltron ([@springstan] - [#29224]) ([stiebel_eltron docs]) +- Move imports to top for swiss_hydrological_data ([@springstan] - [#29227]) ([swiss_hydrological_data docs]) +- Move imports to top for swiss_public_transport ([@springstan] - [#29228]) ([swiss_public_transport docs]) +- Address DSMR Reader review notes ([@depl0y] - [#29209]) ([dsmr_reader docs]) +- Move imports to top for simplisafe ([@springstan] - [#29262]) ([simplisafe docs]) +- Move imports to top for route53 ([@springstan] - [#29273]) ([route53 docs]) +- Move imports to top for roomba ([@springstan] - [#29272]) ([roomba docs]) +- Move imports to top for rpi_rf ([@springstan] - [#29271]) ([rpi_rf docs]) +- Move imports to top for rova ([@springstan] - [#29269]) ([rova docs]) +- Move imports to top for russound_rnet ([@springstan] - [#29268]) ([russound_rnet docs]) +- Move imports to top for russound_rio ([@springstan] - [#29267]) ([russound_rio docs]) +- Move imports to top for rpi_gpio_pwm ([@springstan] - [#29270]) ([rpi_gpio_pwm docs]) +- Move imports to top for sabnzbd ([@springstan] - [#29266]) ([sabnzbd docs]) +- Move imports to top for satel_integra ([@springstan] - [#29263]) ([satel_integra docs]) +- Move imports to top for simplepush ([@springstan] - [#29261]) ([simplepush docs]) +- Move imports to top for sht31 ([@springstan] - [#29260]) ([sht31 docs]) +- Move imports to top for sensehat ([@springstan] - [#29259]) ([sensehat docs]) +- Move imports to top for tradfri ([@springstan] - [#29247]) ([tradfri docs]) +- Move imports to top for spider ([@springstan] - [#29249]) ([spider docs]) +- Move imports to top for sochain ([@springstan] - [#29250]) ([sochain docs]) +- Move imports to top for smarty ([@springstan] - [#29251]) ([smarty docs]) +- Move imports to top for sisyphus ([@springstan] - [#29252]) ([sisyphus docs]) +- Move imports to top for scsgate ([@springstan] - [#29257]) ([scsgate docs]) +- Neato reduce API calls ([@Santobert] - [#29156]) ([neato docs]) +- Fix Espalexa being detected as Hue Bridge ([@frenck] - [#29237]) ([hue docs]) +- Add device trigger for alarm_control_panel ([@springstan] - [#29068]) ([alarm_control_panel docs]) +- Fix Hue linking with non ASCII chars in location ([@bramkragten] - [#29213]) ([hue docs]) +- Move imports to top for sense ([@springstan] - [#29258]) ([sense docs]) +- Stop Plex config flow imports where more user input needed ([@jjlawren] - [#29241]) ([plex docs]) +- Add Huawei LTE binary sensor support, mobile connection sensor ([@scop] - [#28226]) ([huawei_lte docs]) (new-platform) +- Move imports to top for roku ([@springstan] - [#29289]) ([roku docs]) +- Move imports to top for raincloud ([@springstan] - [#29283]) ([raincloud docs]) +- Move imports to top for rocketchat ([@springstan] - [#29288]) ([rocketchat docs]) +- Upgrade Tibber library ([@Danielhiversen] - [#29290]) ([tibber docs]) +- Move imports to top for ripple ([@springstan] - [#29287]) ([ripple docs]) +- Move imports to top for remote_rpi_gpio ([@springstan] - [#29286]) ([remote_rpi_gpio docs]) +- Move imports to top for recswitch ([@springstan] - [#29285]) ([recswitch docs]) +- Move imports to top for raspyrfm ([@springstan] - [#29284]) ([raspyrfm docs]) +- Add ATEN PE component for ATEN eco PDUs ([@mtdcr] - [#27960]) ([aten_pe docs]) (new-integration) +- Upgrade mypy to 0.750 ([@scop] - [#29294]) +- Move imports to top for seventeentrack ([@springstan] - [#29264]) ([seventeentrack docs]) +- Improve naming and attrs of hostnameless Huawei LTE device tracker entities ([@scop] - [#29281]) ([huawei_lte docs]) +- Limit parallel requests to Philips Hue ([@bramkragten] - [#29189]) ([hue docs]) +- Move intent registration to own integration ([@balloob] - [#29280]) ([conversation docs]) ([cover docs]) ([intent docs]) ([light docs]) ([shopping_list docs]) (breaking change) +- Overhaul Emulated Hue ([@NobleKangaroo] - [#28317]) ([emulated_hue docs]) (breaking change) +- Add name option to season sensor ([@springstan] - [#29302]) ([season docs]) +- Add capability-attributes ([@balloob] - [#29306]) ([light docs]) +- Clear miflora sensor state on exception ([@ferbar] - [#29276]) ([miflora docs]) (breaking change) +- Inline MQTT paho imports ([@balloob] - [#29177]) ([mqtt docs]) +- Update service domains for xiaomi_miio from base domains to xiaomi_miio domain ([@raman325] - [#29134]) ([xiaomi_miio docs]) (breaking change) +- Add Emulated Hue code owner ([@NobleKangaroo] - [#29319]) ([emulated_hue docs]) +- Broadlink remote ([@felipediel] - [#26528]) ([broadlink docs]) (new-platform) +- Move imports to top for python_script ([@springstan] - [#29331]) ([python_script docs]) +- Move imports to top for postnl ([@springstan] - [#29330]) ([postnl docs]) +- Move imports to top for prezzibenzina ([@springstan] - [#29329]) ([prezzibenzina docs]) +- Move imports to top for quantum_gateway ([@springstan] - [#29327]) ([quantum_gateway docs]) +- Move imports to top for qnap ([@springstan] - [#29326]) ([qnap docs]) +- Move imports to top for qbittorrent ([@springstan] - [#29325]) ([qbittorrent docs]) +- Move imports to top for plum_lightpad ([@springstan] - [#29324]) ([plum_lightpad docs]) +- Move imports to top for rachio ([@springstan] - [#29323]) ([rachio docs]) +- Improve Alexa interface selection for binary sensors ([@abmantis] - [#29120]) ([alexa docs]) +- Add alexa check for "name" channelMetadata attribute ([@Dilbert66] - [#29279]) ([alexa docs]) +- Move imports to top for qwikswitch ([@springstan] - [#29328]) ([qwikswitch docs]) +- Move imports to top for radarr ([@springstan] - [#29322]) ([radarr docs]) +- Improve WLED white value support for RGBW strips ([@frenck] - [#29312]) ([wled docs]) +- delete incorrect "mdi:brightness-3" ([@Mariusthvdb] - [#29309]) ([moon docs]) +- Do not select all entities when omitting entity ID in service call ([@balloob] - [#29178]) (breaking change) +- Update heatmiserv3 integration ([@andylockran] - [#29006]) ([heatmiser docs]) (breaking change) +- Google assistant storage of connected agents ([@elupus] - [#29158]) ([cloud docs]) ([google_assistant docs]) +- Report unavailable entities to google ([@elupus] - [#28501]) ([google_assistant docs]) +- Add initial test suite for arcam_fmj integration ([@elupus] - [#29335]) +- Fix uvloop warning ([@pvizeli] - [#29341]) ([stream docs]) +- Move imports to top for pushetta ([@springstan] - [#29332]) ([pushetta docs]) +- Move imports to top for pencom ([@springstan] - [#29348]) ([pencom docs]) +- Include telegram_bot message id for all messages ([@luca-angemi] - [#29315]) ([telegram_bot docs]) +- Ignore state of climate entities in prometheus ([@springstan] - [#29346]) ([prometheus docs]) +- Move imports to top for owlet ([@springstan] - [#29352]) ([owlet docs]) +- Rendering complex template objects to leave non-template values alone ([@balloob] - [#29353]) +- Move imports to top for opple ([@springstan] - [#29372]) ([opple docs]) +- Move imports to top for orvibo ([@springstan] - [#29371]) ([orvibo docs]) +- Move imports to top for nut ([@springstan] - [#29368]) ([nut docs]) +- Move imports to top for mycroft ([@springstan] - [#29355]) ([mycroft docs]) +- Upgrade enturclient to 0.2.1 ([@hfurubotten] - [#29375]) ([entur_public_transport docs]) +- Remove cloud dependency from mobile_app ([@balloob] - [#29373]) ([mobile_app docs]) (breaking change) +- Move imports to top for opensensemap ([@springstan] - [#29370]) ([opensensemap docs]) +- Move imports to top for mystrom ([@springstan] - [#29356]) ([mystrom docs]) +- Move imports to top for nello ([@springstan] - [#29361]) ([nello docs]) ([nello docs]) +- Move imports to top for nederlandse_spoorwegen ([@springstan] - [#29360]) ([nederlandse_spoorwegen docs]) +- Move imports to top for nanoleaf ([@springstan] - [#29359]) ([nanoleaf docs]) +- Move imports to top for nad ([@springstan] - [#29358]) ([nad docs]) +- Move imports to top for n26 ([@springstan] - [#29357]) ([n26 docs]) +- Move imports to top for netdata ([@springstan] - [#29362]) ([netdata docs]) +- Move imports to top for netio ([@springstan] - [#29363]) ([netio docs]) +- Move imports to top for nmap_tracker ([@springstan] - [#29364]) ([nmap_tracker docs]) +- Move imports to top for nmbs ([@springstan] - [#29365]) ([nmbs docs]) +- Move imports to top for noaa_tides ([@springstan] - [#29366]) ([noaa_tides docs]) +- Move imports to top for nuimo_controller ([@springstan] - [#29367]) ([nuimo_controller docs]) +- Move imports to top for openhome ([@springstan] - [#29369]) ([openhome docs]) +- Allow negative altitude in location updates ([@balloob] - [#29381]) ([mobile_app docs]) +- Move imports to top for lametric ([@springstan] - [#29406]) ([lametric docs]) +- Move imports to top for lacrosse ([@springstan] - [#29405]) ([lacrosse docs]) +- Move imports to top for kwb ([@springstan] - [#29404]) ([kwb docs]) +- Move imports to top for kiwi ([@springstan] - [#29403]) ([kiwi docs]) +- Move imports to top for iota ([@springstan] - [#29399]) ([iota docs]) +- Move imports to top for lauch_library ([@springstan] - [#29383]) ([launch_library docs]) +- Move imports to top for lg_netcast ([@springstan] - [#29384]) ([lg_netcast docs]) +- Move imports to top for lightwave ([@springstan] - [#29385]) ([lightwave docs]) +- Move imports to top for limitlessled ([@springstan] - [#29386]) ([limitlessled docs]) +- Move imports to top for london_underground ([@springstan] - [#29387]) ([london_underground docs]) +- Move imports to top for luci ([@springstan] - [#29388]) ([luci docs]) +- Move imports to top for lutron ([@springstan] - [#29389]) ([lutron docs]) +- Move imports to top for lutron_caseta ([@springstan] - [#29390]) ([lutron_caseta docs]) +- Move imports to top for lyft ([@springstan] - [#29391]) ([lyft docs]) +- Move imports to top for matrix ([@springstan] - [#29392]) ([matrix docs]) +- Move imports to top for maxcube ([@springstan] - [#29393]) ([maxcube docs]) +- Move imports to top for meteo_france ([@springstan] - [#29394]) ([meteo_france docs]) ([meteoalarm docs]) +- Move imports to top for microsoft ([@springstan] - [#29395]) ([microsoft docs]) +- Move imports to top for modem_callerid ([@springstan] - [#29396]) ([modem_callerid docs]) +- Move imports to top for keenetic-ndms2 ([@springstan] - [#29400]) ([keenetic_ndms2 docs]) +- Move imports to top for irish_rail_transport ([@springstan] - [#29401]) ([irish_rail_transport docs]) +- Move imports to top for joaoapps_join ([@springstan] - [#29402]) ([joaoapps_join docs]) +- Upgrade psutil to 5.6.7 ([@fabaff] - [#29407]) ([systemmonitor docs]) +- Move imports to top for iglo ([@springstan] - [#29424]) ([iglo docs]) +- Move imports to top for idteck_prox ([@springstan] - [#29423]) ([idteck_prox docs]) +- Move imports to top for gogogate2 ([@springstan] - [#29411]) ([gogogate2 docs]) +- Move imports to top for hydrawise ([@springstan] - [#29421]) ([hydrawise docs]) +- Move imports to top for ihc ([@springstan] - [#29425]) ([ihc docs]) +- Move imports to top for ialarm ([@springstan] - [#29422]) ([ialarm docs]) +- Move imports to top for gitter ([@springstan] - [#29412]) ([gitter docs]) +- Move imports to top for homeworks ([@springstan] - [#29418]) ([homeworks docs]) +- Move imports to top for gpmdp ([@springstan] - [#29413]) ([gpmdp docs]) +- Move imports to top for greeneye_monitor ([@springstan] - [#29414]) ([greeneye_monitor docs]) +- Move imports to top for gstreamer ([@springstan] - [#29415]) ([gstreamer docs]) +- Move imports to top for habitica ([@springstan] - [#29416]) ([habitica docs]) +- Move imports to top for hikvision ([@springstan] - [#29417]) ([hikvision docs]) +- Move imports to top for horizon ([@springstan] - [#29419]) ([horizon docs]) +- Move imports to top for hunterdouglas_powerview ([@springstan] - [#29420]) ([hunterdouglas_powerview docs]) +- Move imports to top for gearbest ([@springstan] - [#29432]) ([gearbest docs]) +- Move imports to top for fleetgo ([@springstan] - [#29431]) ([fleetgo docs]) +- Move imports to top for fints ([@springstan] - [#29429]) ([fints docs]) +- Move imports to top for fastdotcom ([@springstan] - [#29428]) ([fastdotcom docs]) +- Move imports to top for familyhub ([@springstan] - [#29427]) ([familyhub docs]) +- Move imports to top for etherscan ([@springstan] - [#29426]) ([etherscan docs]) +- Move imports to top for fixer ([@springstan] - [#29430]) ([fixer docs]) +- Move imports to top for danfoss_air ([@springstan] - [#29435]) ([danfoss_air docs]) +- Updated frontend to 20191204.0 ([@bramkragten] - [#29461]) ([frontend docs]) +- Move imports to top for litejet ([@springstan] - [#29481]) ([litejet docs]) +- Move imports to top for tuya ([@springstan] - [#29467]) ([tuya docs]) +- Move imports to top for zoneminder ([@springstan] - [#29468]) ([zoneminder docs]) +- Move imports to top for point ([@springstan] - [#29470]) ([point docs]) +- Move imports to top for ps4 ([@springstan] - [#29471]) ([ps4 docs]) +- Move imports to top for rainmachine ([@springstan] - [#29472]) ([rainmachine docs]) +- Move imports to top for random ([@springstan] - [#29473]) ([random docs]) +- Move imports to top for ring ([@springstan] - [#29474]) ([ring docs]) +- Move imports to top for skybell ([@springstan] - [#29475]) ([skybell docs]) +- Move imports to top for mhz19 ([@springstan] - [#29478]) ([mhz19 docs]) +- Move imports to top for mfi ([@springstan] - [#29479]) ([mfi docs]) +- Move imports to top for mailgun ([@springstan] - [#29480]) ([mailgun docs]) +- Move imports to top for logi_circle ([@springstan] - [#29482]) ([logi_circle docs]) +- Move imports to top for hlk_sw16 ([@springstan] - [#29483]) ([hlk_sw16 docs]) +- Move imports to top for history ([@springstan] - [#29484]) ([history docs]) +- Move imports to top for geo_json_events ([@springstan] - [#29486]) ([geo_json_events docs]) +- Move imports to top for emulated_hue ([@springstan] - [#29488]) ([emulated_roku docs]) +- Move imports to top for deconz ([@springstan] - [#29489]) ([deconz docs]) +- Move imports to top for daikin ([@springstan] - [#29490]) ([daikin docs]) +- Move imports to top for somfy_mylink ([@springstan] - [#29464]) ([somfy_mylink docs]) +- Move imports to top for solaredge ([@springstan] - [#29463]) ([solaredge docs]) +- Move imports to top for entur_public_transport ([@springstan] - [#29459]) ([entur_public_transport docs]) +- Move imports to top for environment_canada ([@springstan] - [#29458]) ([environment_canada docs]) +- Move imports to top for sonarr ([@springstan] - [#29462]) ([sonarr docs]) +- Fix setup of Huawei LTE for which we can't get a MAC address ([@scop] - [#29455]) ([huawei_lte docs]) +- Move imports to top for emby ([@springstan] - [#29453]) ([emby docs]) +- Move imports to top for eq3btsmart ([@springstan] - [#29456]) ([eq3btsmart docs]) +- Move imports to top for enigma2 ([@springstan] - [#29452]) ([enigma2 docs]) +- Move imports to top for enocean ([@springstan] - [#29451]) ([enocean docs]) +- Move imports to top for envisalink ([@springstan] - [#29457]) ([envisalink docs]) +- Move imports to top for enphase_envoy ([@springstan] - [#29450]) ([enphase_envoy docs]) +- Move imports to top for egardia ([@springstan] - [#29448]) ([egardia docs]) +- Move imports to top for eight_sleep ([@springstan] - [#29447]) ([eight_sleep docs]) +- Update eternalegypt to 0.0.11 ([@amelchio] - [#29446]) ([netgear_lte docs]) +- Move imports to top for duke_energy ([@springstan] - [#29445]) ([duke_energy docs]) +- Move imports to top for dunehd ([@springstan] - [#29444]) ([dunehd docs]) +- Move imports to top for dlink ([@springstan] - [#29443]) ([dlink docs]) +- Move imports to top for doorbird ([@springstan] - [#29442]) ([doorbird docs]) +- Move imports to top for directv ([@springstan] - [#29441]) ([directv docs]) ([directv docs]) +- Move imports to top for datadog ([@springstan] - [#29440]) ([datadog docs]) +- Move imports to top for deluge ([@springstan] - [#29438]) ([deluge docs]) +- Move imports to top for clementine ([@springstan] - [#29437]) ([clementine docs]) +- Move imports to top for asuswrt ([@springstan] - [#29436]) ([asuswrt docs]) +- Move imports to top for canary ([@springstan] - [#29449]) ([canary docs]) +- Switch iperf3 to generate a new client every time it runs a test ([@rohankapoorcom] - [#29495]) ([iperf3 docs]) +- Update pyhomematic ([@danielperna84] - [#29477]) ([homematic docs]) +- Limit available heat/cool modes for HomeKit thermostats ([@neffs] - [#28586]) ([homekit docs]) (beta fix) +- Increase somfy SCAN_INTERVAL ([@tetienne] - [#29524]) ([somfy docs]) (beta fix) +- Bump georss_generic_client to 0.3 ([@exxamalte] - [#29532]) ([geo_rss_events docs]) (beta fix) +- Huawei LTE device tracker fixes ([@scop] - [#29551]) ([huawei_lte docs]) (beta fix) +- Change source of device_info ([@Santobert] - [#29570]) ([neato docs]) (beta fix) +- Only update disabled_by when enabled default and entity enabled states differ ([@Kane610] - [#29643]) ([unifi docs]) (beta fix) +- Fix unit_of_measurement for Starline temperature sensors ([@Anonym-tsk] - [#29740]) ([starline docs]) (beta fix) +- HomeAssistant-pyozw 0.1.7 ([@pvizeli] - [#29743]) ([zwave docs]) (beta fix) +- Updated frontend to 20191204.1 ([@bramkragten] - [#29787]) ([frontend docs]) (beta fix) +- Bump Roku to 4.0.0 ([@bwarden] - [#29809]) ([roku docs]) (beta fix) +- Add user-agent to fix dwd_weather_warnings setup error ([@springstan] - [#29596]) ([dwd_weather_warnings docs]) (beta fix) +- Add more logging to help future debug situations ([@Kane610] - [#29800]) ([unifi docs]) (beta fix) +- UniFi - honor detection time when UniFi wire bug happens ([@Kane610] - [#29820]) ([unifi docs]) (beta fix) +- UniFi - Handle disabled switches ([@Kane610] - [#29824]) ([unifi docs]) (beta fix) +- Remove uvloop event policy ([@pvizeli] - [#29835]) (beta fix) + +[#24619]: https://github.com/home-assistant/home-assistant/pull/24619 +[#26099]: https://github.com/home-assistant/home-assistant/pull/26099 +[#26528]: https://github.com/home-assistant/home-assistant/pull/26528 +[#26781]: https://github.com/home-assistant/home-assistant/pull/26781 +[#26901]: https://github.com/home-assistant/home-assistant/pull/26901 +[#27040]: https://github.com/home-assistant/home-assistant/pull/27040 +[#27045]: https://github.com/home-assistant/home-assistant/pull/27045 +[#27064]: https://github.com/home-assistant/home-assistant/pull/27064 +[#27197]: https://github.com/home-assistant/home-assistant/pull/27197 +[#27235]: https://github.com/home-assistant/home-assistant/pull/27235 +[#27315]: https://github.com/home-assistant/home-assistant/pull/27315 +[#27751]: https://github.com/home-assistant/home-assistant/pull/27751 +[#27780]: https://github.com/home-assistant/home-assistant/pull/27780 +[#27855]: https://github.com/home-assistant/home-assistant/pull/27855 +[#27960]: https://github.com/home-assistant/home-assistant/pull/27960 +[#27963]: https://github.com/home-assistant/home-assistant/pull/27963 +[#28153]: https://github.com/home-assistant/home-assistant/pull/28153 +[#28213]: https://github.com/home-assistant/home-assistant/pull/28213 +[#28218]: https://github.com/home-assistant/home-assistant/pull/28218 +[#28221]: https://github.com/home-assistant/home-assistant/pull/28221 +[#28226]: https://github.com/home-assistant/home-assistant/pull/28226 +[#28227]: https://github.com/home-assistant/home-assistant/pull/28227 +[#28253]: https://github.com/home-assistant/home-assistant/pull/28253 +[#28272]: https://github.com/home-assistant/home-assistant/pull/28272 +[#28297]: https://github.com/home-assistant/home-assistant/pull/28297 +[#28309]: https://github.com/home-assistant/home-assistant/pull/28309 +[#28317]: https://github.com/home-assistant/home-assistant/pull/28317 +[#28341]: https://github.com/home-assistant/home-assistant/pull/28341 +[#28474]: https://github.com/home-assistant/home-assistant/pull/28474 +[#28483]: https://github.com/home-assistant/home-assistant/pull/28483 +[#28501]: https://github.com/home-assistant/home-assistant/pull/28501 +[#28521]: https://github.com/home-assistant/home-assistant/pull/28521 +[#28560]: https://github.com/home-assistant/home-assistant/pull/28560 +[#28586]: https://github.com/home-assistant/home-assistant/pull/28586 +[#28635]: https://github.com/home-assistant/home-assistant/pull/28635 +[#28641]: https://github.com/home-assistant/home-assistant/pull/28641 +[#28646]: https://github.com/home-assistant/home-assistant/pull/28646 +[#28653]: https://github.com/home-assistant/home-assistant/pull/28653 +[#28655]: https://github.com/home-assistant/home-assistant/pull/28655 +[#28656]: https://github.com/home-assistant/home-assistant/pull/28656 +[#28660]: https://github.com/home-assistant/home-assistant/pull/28660 +[#28672]: https://github.com/home-assistant/home-assistant/pull/28672 +[#28684]: https://github.com/home-assistant/home-assistant/pull/28684 +[#28695]: https://github.com/home-assistant/home-assistant/pull/28695 +[#28696]: https://github.com/home-assistant/home-assistant/pull/28696 +[#28701]: https://github.com/home-assistant/home-assistant/pull/28701 +[#28702]: https://github.com/home-assistant/home-assistant/pull/28702 +[#28715]: https://github.com/home-assistant/home-assistant/pull/28715 +[#28721]: https://github.com/home-assistant/home-assistant/pull/28721 +[#28722]: https://github.com/home-assistant/home-assistant/pull/28722 +[#28728]: https://github.com/home-assistant/home-assistant/pull/28728 +[#28732]: https://github.com/home-assistant/home-assistant/pull/28732 +[#28742]: https://github.com/home-assistant/home-assistant/pull/28742 +[#28743]: https://github.com/home-assistant/home-assistant/pull/28743 +[#28748]: https://github.com/home-assistant/home-assistant/pull/28748 +[#28751]: https://github.com/home-assistant/home-assistant/pull/28751 +[#28756]: https://github.com/home-assistant/home-assistant/pull/28756 +[#28757]: https://github.com/home-assistant/home-assistant/pull/28757 +[#28758]: https://github.com/home-assistant/home-assistant/pull/28758 +[#28759]: https://github.com/home-assistant/home-assistant/pull/28759 +[#28761]: https://github.com/home-assistant/home-assistant/pull/28761 +[#28763]: https://github.com/home-assistant/home-assistant/pull/28763 +[#28765]: https://github.com/home-assistant/home-assistant/pull/28765 +[#28767]: https://github.com/home-assistant/home-assistant/pull/28767 +[#28785]: https://github.com/home-assistant/home-assistant/pull/28785 +[#28786]: https://github.com/home-assistant/home-assistant/pull/28786 +[#28788]: https://github.com/home-assistant/home-assistant/pull/28788 +[#28793]: https://github.com/home-assistant/home-assistant/pull/28793 +[#28798]: https://github.com/home-assistant/home-assistant/pull/28798 +[#28807]: https://github.com/home-assistant/home-assistant/pull/28807 +[#28809]: https://github.com/home-assistant/home-assistant/pull/28809 +[#28810]: https://github.com/home-assistant/home-assistant/pull/28810 +[#28816]: https://github.com/home-assistant/home-assistant/pull/28816 +[#28817]: https://github.com/home-assistant/home-assistant/pull/28817 +[#28818]: https://github.com/home-assistant/home-assistant/pull/28818 +[#28819]: https://github.com/home-assistant/home-assistant/pull/28819 +[#28820]: https://github.com/home-assistant/home-assistant/pull/28820 +[#28823]: https://github.com/home-assistant/home-assistant/pull/28823 +[#28830]: https://github.com/home-assistant/home-assistant/pull/28830 +[#28835]: https://github.com/home-assistant/home-assistant/pull/28835 +[#28841]: https://github.com/home-assistant/home-assistant/pull/28841 +[#28849]: https://github.com/home-assistant/home-assistant/pull/28849 +[#28851]: https://github.com/home-assistant/home-assistant/pull/28851 +[#28857]: https://github.com/home-assistant/home-assistant/pull/28857 +[#28859]: https://github.com/home-assistant/home-assistant/pull/28859 +[#28860]: https://github.com/home-assistant/home-assistant/pull/28860 +[#28861]: https://github.com/home-assistant/home-assistant/pull/28861 +[#28862]: https://github.com/home-assistant/home-assistant/pull/28862 +[#28864]: https://github.com/home-assistant/home-assistant/pull/28864 +[#28869]: https://github.com/home-assistant/home-assistant/pull/28869 +[#28874]: https://github.com/home-assistant/home-assistant/pull/28874 +[#28879]: https://github.com/home-assistant/home-assistant/pull/28879 +[#28880]: https://github.com/home-assistant/home-assistant/pull/28880 +[#28883]: https://github.com/home-assistant/home-assistant/pull/28883 +[#28885]: https://github.com/home-assistant/home-assistant/pull/28885 +[#28886]: https://github.com/home-assistant/home-assistant/pull/28886 +[#28887]: https://github.com/home-assistant/home-assistant/pull/28887 +[#28888]: https://github.com/home-assistant/home-assistant/pull/28888 +[#28889]: https://github.com/home-assistant/home-assistant/pull/28889 +[#28890]: https://github.com/home-assistant/home-assistant/pull/28890 +[#28907]: https://github.com/home-assistant/home-assistant/pull/28907 +[#28911]: https://github.com/home-assistant/home-assistant/pull/28911 +[#28933]: https://github.com/home-assistant/home-assistant/pull/28933 +[#28934]: https://github.com/home-assistant/home-assistant/pull/28934 +[#28939]: https://github.com/home-assistant/home-assistant/pull/28939 +[#28941]: https://github.com/home-assistant/home-assistant/pull/28941 +[#28946]: https://github.com/home-assistant/home-assistant/pull/28946 +[#28948]: https://github.com/home-assistant/home-assistant/pull/28948 +[#28958]: https://github.com/home-assistant/home-assistant/pull/28958 +[#28964]: https://github.com/home-assistant/home-assistant/pull/28964 +[#28965]: https://github.com/home-assistant/home-assistant/pull/28965 +[#28974]: https://github.com/home-assistant/home-assistant/pull/28974 +[#28976]: https://github.com/home-assistant/home-assistant/pull/28976 +[#28979]: https://github.com/home-assistant/home-assistant/pull/28979 +[#28980]: https://github.com/home-assistant/home-assistant/pull/28980 +[#28983]: https://github.com/home-assistant/home-assistant/pull/28983 +[#28984]: https://github.com/home-assistant/home-assistant/pull/28984 +[#28985]: https://github.com/home-assistant/home-assistant/pull/28985 +[#28986]: https://github.com/home-assistant/home-assistant/pull/28986 +[#28988]: https://github.com/home-assistant/home-assistant/pull/28988 +[#28989]: https://github.com/home-assistant/home-assistant/pull/28989 +[#28990]: https://github.com/home-assistant/home-assistant/pull/28990 +[#28993]: https://github.com/home-assistant/home-assistant/pull/28993 +[#28995]: https://github.com/home-assistant/home-assistant/pull/28995 +[#28997]: https://github.com/home-assistant/home-assistant/pull/28997 +[#28998]: https://github.com/home-assistant/home-assistant/pull/28998 +[#29000]: https://github.com/home-assistant/home-assistant/pull/29000 +[#29001]: https://github.com/home-assistant/home-assistant/pull/29001 +[#29003]: https://github.com/home-assistant/home-assistant/pull/29003 +[#29004]: https://github.com/home-assistant/home-assistant/pull/29004 +[#29006]: https://github.com/home-assistant/home-assistant/pull/29006 +[#29009]: https://github.com/home-assistant/home-assistant/pull/29009 +[#29012]: https://github.com/home-assistant/home-assistant/pull/29012 +[#29014]: https://github.com/home-assistant/home-assistant/pull/29014 +[#29016]: https://github.com/home-assistant/home-assistant/pull/29016 +[#29017]: https://github.com/home-assistant/home-assistant/pull/29017 +[#29020]: https://github.com/home-assistant/home-assistant/pull/29020 +[#29021]: https://github.com/home-assistant/home-assistant/pull/29021 +[#29022]: https://github.com/home-assistant/home-assistant/pull/29022 +[#29023]: https://github.com/home-assistant/home-assistant/pull/29023 +[#29025]: https://github.com/home-assistant/home-assistant/pull/29025 +[#29026]: https://github.com/home-assistant/home-assistant/pull/29026 +[#29027]: https://github.com/home-assistant/home-assistant/pull/29027 +[#29029]: https://github.com/home-assistant/home-assistant/pull/29029 +[#29030]: https://github.com/home-assistant/home-assistant/pull/29030 +[#29033]: https://github.com/home-assistant/home-assistant/pull/29033 +[#29038]: https://github.com/home-assistant/home-assistant/pull/29038 +[#29041]: https://github.com/home-assistant/home-assistant/pull/29041 +[#29042]: https://github.com/home-assistant/home-assistant/pull/29042 +[#29045]: https://github.com/home-assistant/home-assistant/pull/29045 +[#29046]: https://github.com/home-assistant/home-assistant/pull/29046 +[#29047]: https://github.com/home-assistant/home-assistant/pull/29047 +[#29048]: https://github.com/home-assistant/home-assistant/pull/29048 +[#29049]: https://github.com/home-assistant/home-assistant/pull/29049 +[#29050]: https://github.com/home-assistant/home-assistant/pull/29050 +[#29052]: https://github.com/home-assistant/home-assistant/pull/29052 +[#29053]: https://github.com/home-assistant/home-assistant/pull/29053 +[#29054]: https://github.com/home-assistant/home-assistant/pull/29054 +[#29055]: https://github.com/home-assistant/home-assistant/pull/29055 +[#29056]: https://github.com/home-assistant/home-assistant/pull/29056 +[#29057]: https://github.com/home-assistant/home-assistant/pull/29057 +[#29058]: https://github.com/home-assistant/home-assistant/pull/29058 +[#29059]: https://github.com/home-assistant/home-assistant/pull/29059 +[#29060]: https://github.com/home-assistant/home-assistant/pull/29060 +[#29061]: https://github.com/home-assistant/home-assistant/pull/29061 +[#29064]: https://github.com/home-assistant/home-assistant/pull/29064 +[#29065]: https://github.com/home-assistant/home-assistant/pull/29065 +[#29068]: https://github.com/home-assistant/home-assistant/pull/29068 +[#29071]: https://github.com/home-assistant/home-assistant/pull/29071 +[#29072]: https://github.com/home-assistant/home-assistant/pull/29072 +[#29073]: https://github.com/home-assistant/home-assistant/pull/29073 +[#29074]: https://github.com/home-assistant/home-assistant/pull/29074 +[#29075]: https://github.com/home-assistant/home-assistant/pull/29075 +[#29076]: https://github.com/home-assistant/home-assistant/pull/29076 +[#29077]: https://github.com/home-assistant/home-assistant/pull/29077 +[#29080]: https://github.com/home-assistant/home-assistant/pull/29080 +[#29081]: https://github.com/home-assistant/home-assistant/pull/29081 +[#29082]: https://github.com/home-assistant/home-assistant/pull/29082 +[#29083]: https://github.com/home-assistant/home-assistant/pull/29083 +[#29085]: https://github.com/home-assistant/home-assistant/pull/29085 +[#29086]: https://github.com/home-assistant/home-assistant/pull/29086 +[#29089]: https://github.com/home-assistant/home-assistant/pull/29089 +[#29090]: https://github.com/home-assistant/home-assistant/pull/29090 +[#29092]: https://github.com/home-assistant/home-assistant/pull/29092 +[#29093]: https://github.com/home-assistant/home-assistant/pull/29093 +[#29094]: https://github.com/home-assistant/home-assistant/pull/29094 +[#29095]: https://github.com/home-assistant/home-assistant/pull/29095 +[#29096]: https://github.com/home-assistant/home-assistant/pull/29096 +[#29097]: https://github.com/home-assistant/home-assistant/pull/29097 +[#29099]: https://github.com/home-assistant/home-assistant/pull/29099 +[#29100]: https://github.com/home-assistant/home-assistant/pull/29100 +[#29102]: https://github.com/home-assistant/home-assistant/pull/29102 +[#29103]: https://github.com/home-assistant/home-assistant/pull/29103 +[#29104]: https://github.com/home-assistant/home-assistant/pull/29104 +[#29105]: https://github.com/home-assistant/home-assistant/pull/29105 +[#29106]: https://github.com/home-assistant/home-assistant/pull/29106 +[#29107]: https://github.com/home-assistant/home-assistant/pull/29107 +[#29108]: https://github.com/home-assistant/home-assistant/pull/29108 +[#29109]: https://github.com/home-assistant/home-assistant/pull/29109 +[#29110]: https://github.com/home-assistant/home-assistant/pull/29110 +[#29111]: https://github.com/home-assistant/home-assistant/pull/29111 +[#29112]: https://github.com/home-assistant/home-assistant/pull/29112 +[#29113]: https://github.com/home-assistant/home-assistant/pull/29113 +[#29114]: https://github.com/home-assistant/home-assistant/pull/29114 +[#29116]: https://github.com/home-assistant/home-assistant/pull/29116 +[#29117]: https://github.com/home-assistant/home-assistant/pull/29117 +[#29118]: https://github.com/home-assistant/home-assistant/pull/29118 +[#29119]: https://github.com/home-assistant/home-assistant/pull/29119 +[#29120]: https://github.com/home-assistant/home-assistant/pull/29120 +[#29123]: https://github.com/home-assistant/home-assistant/pull/29123 +[#29124]: https://github.com/home-assistant/home-assistant/pull/29124 +[#29125]: https://github.com/home-assistant/home-assistant/pull/29125 +[#29126]: https://github.com/home-assistant/home-assistant/pull/29126 +[#29127]: https://github.com/home-assistant/home-assistant/pull/29127 +[#29128]: https://github.com/home-assistant/home-assistant/pull/29128 +[#29129]: https://github.com/home-assistant/home-assistant/pull/29129 +[#29130]: https://github.com/home-assistant/home-assistant/pull/29130 +[#29131]: https://github.com/home-assistant/home-assistant/pull/29131 +[#29132]: https://github.com/home-assistant/home-assistant/pull/29132 +[#29133]: https://github.com/home-assistant/home-assistant/pull/29133 +[#29134]: https://github.com/home-assistant/home-assistant/pull/29134 +[#29135]: https://github.com/home-assistant/home-assistant/pull/29135 +[#29136]: https://github.com/home-assistant/home-assistant/pull/29136 +[#29137]: https://github.com/home-assistant/home-assistant/pull/29137 +[#29138]: https://github.com/home-assistant/home-assistant/pull/29138 +[#29139]: https://github.com/home-assistant/home-assistant/pull/29139 +[#29140]: https://github.com/home-assistant/home-assistant/pull/29140 +[#29141]: https://github.com/home-assistant/home-assistant/pull/29141 +[#29142]: https://github.com/home-assistant/home-assistant/pull/29142 +[#29143]: https://github.com/home-assistant/home-assistant/pull/29143 +[#29144]: https://github.com/home-assistant/home-assistant/pull/29144 +[#29145]: https://github.com/home-assistant/home-assistant/pull/29145 +[#29146]: https://github.com/home-assistant/home-assistant/pull/29146 +[#29147]: https://github.com/home-assistant/home-assistant/pull/29147 +[#29148]: https://github.com/home-assistant/home-assistant/pull/29148 +[#29149]: https://github.com/home-assistant/home-assistant/pull/29149 +[#29150]: https://github.com/home-assistant/home-assistant/pull/29150 +[#29151]: https://github.com/home-assistant/home-assistant/pull/29151 +[#29153]: https://github.com/home-assistant/home-assistant/pull/29153 +[#29156]: https://github.com/home-assistant/home-assistant/pull/29156 +[#29158]: https://github.com/home-assistant/home-assistant/pull/29158 +[#29159]: https://github.com/home-assistant/home-assistant/pull/29159 +[#29160]: https://github.com/home-assistant/home-assistant/pull/29160 +[#29161]: https://github.com/home-assistant/home-assistant/pull/29161 +[#29163]: https://github.com/home-assistant/home-assistant/pull/29163 +[#29164]: https://github.com/home-assistant/home-assistant/pull/29164 +[#29165]: https://github.com/home-assistant/home-assistant/pull/29165 +[#29168]: https://github.com/home-assistant/home-assistant/pull/29168 +[#29170]: https://github.com/home-assistant/home-assistant/pull/29170 +[#29171]: https://github.com/home-assistant/home-assistant/pull/29171 +[#29172]: https://github.com/home-assistant/home-assistant/pull/29172 +[#29173]: https://github.com/home-assistant/home-assistant/pull/29173 +[#29175]: https://github.com/home-assistant/home-assistant/pull/29175 +[#29177]: https://github.com/home-assistant/home-assistant/pull/29177 +[#29178]: https://github.com/home-assistant/home-assistant/pull/29178 +[#29181]: https://github.com/home-assistant/home-assistant/pull/29181 +[#29182]: https://github.com/home-assistant/home-assistant/pull/29182 +[#29189]: https://github.com/home-assistant/home-assistant/pull/29189 +[#29191]: https://github.com/home-assistant/home-assistant/pull/29191 +[#29192]: https://github.com/home-assistant/home-assistant/pull/29192 +[#29193]: https://github.com/home-assistant/home-assistant/pull/29193 +[#29194]: https://github.com/home-assistant/home-assistant/pull/29194 +[#29195]: https://github.com/home-assistant/home-assistant/pull/29195 +[#29196]: https://github.com/home-assistant/home-assistant/pull/29196 +[#29197]: https://github.com/home-assistant/home-assistant/pull/29197 +[#29198]: https://github.com/home-assistant/home-assistant/pull/29198 +[#29199]: https://github.com/home-assistant/home-assistant/pull/29199 +[#29200]: https://github.com/home-assistant/home-assistant/pull/29200 +[#29201]: https://github.com/home-assistant/home-assistant/pull/29201 +[#29202]: https://github.com/home-assistant/home-assistant/pull/29202 +[#29203]: https://github.com/home-assistant/home-assistant/pull/29203 +[#29204]: https://github.com/home-assistant/home-assistant/pull/29204 +[#29205]: https://github.com/home-assistant/home-assistant/pull/29205 +[#29206]: https://github.com/home-assistant/home-assistant/pull/29206 +[#29208]: https://github.com/home-assistant/home-assistant/pull/29208 +[#29209]: https://github.com/home-assistant/home-assistant/pull/29209 +[#29213]: https://github.com/home-assistant/home-assistant/pull/29213 +[#29221]: https://github.com/home-assistant/home-assistant/pull/29221 +[#29224]: https://github.com/home-assistant/home-assistant/pull/29224 +[#29225]: https://github.com/home-assistant/home-assistant/pull/29225 +[#29226]: https://github.com/home-assistant/home-assistant/pull/29226 +[#29227]: https://github.com/home-assistant/home-assistant/pull/29227 +[#29228]: https://github.com/home-assistant/home-assistant/pull/29228 +[#29229]: https://github.com/home-assistant/home-assistant/pull/29229 +[#29230]: https://github.com/home-assistant/home-assistant/pull/29230 +[#29231]: https://github.com/home-assistant/home-assistant/pull/29231 +[#29232]: https://github.com/home-assistant/home-assistant/pull/29232 +[#29233]: https://github.com/home-assistant/home-assistant/pull/29233 +[#29237]: https://github.com/home-assistant/home-assistant/pull/29237 +[#29241]: https://github.com/home-assistant/home-assistant/pull/29241 +[#29247]: https://github.com/home-assistant/home-assistant/pull/29247 +[#29249]: https://github.com/home-assistant/home-assistant/pull/29249 +[#29250]: https://github.com/home-assistant/home-assistant/pull/29250 +[#29251]: https://github.com/home-assistant/home-assistant/pull/29251 +[#29252]: https://github.com/home-assistant/home-assistant/pull/29252 +[#29257]: https://github.com/home-assistant/home-assistant/pull/29257 +[#29258]: https://github.com/home-assistant/home-assistant/pull/29258 +[#29259]: https://github.com/home-assistant/home-assistant/pull/29259 +[#29260]: https://github.com/home-assistant/home-assistant/pull/29260 +[#29261]: https://github.com/home-assistant/home-assistant/pull/29261 +[#29262]: https://github.com/home-assistant/home-assistant/pull/29262 +[#29263]: https://github.com/home-assistant/home-assistant/pull/29263 +[#29264]: https://github.com/home-assistant/home-assistant/pull/29264 +[#29266]: https://github.com/home-assistant/home-assistant/pull/29266 +[#29267]: https://github.com/home-assistant/home-assistant/pull/29267 +[#29268]: https://github.com/home-assistant/home-assistant/pull/29268 +[#29269]: https://github.com/home-assistant/home-assistant/pull/29269 +[#29270]: https://github.com/home-assistant/home-assistant/pull/29270 +[#29271]: https://github.com/home-assistant/home-assistant/pull/29271 +[#29272]: https://github.com/home-assistant/home-assistant/pull/29272 +[#29273]: https://github.com/home-assistant/home-assistant/pull/29273 +[#29276]: https://github.com/home-assistant/home-assistant/pull/29276 +[#29279]: https://github.com/home-assistant/home-assistant/pull/29279 +[#29280]: https://github.com/home-assistant/home-assistant/pull/29280 +[#29281]: https://github.com/home-assistant/home-assistant/pull/29281 +[#29283]: https://github.com/home-assistant/home-assistant/pull/29283 +[#29284]: https://github.com/home-assistant/home-assistant/pull/29284 +[#29285]: https://github.com/home-assistant/home-assistant/pull/29285 +[#29286]: https://github.com/home-assistant/home-assistant/pull/29286 +[#29287]: https://github.com/home-assistant/home-assistant/pull/29287 +[#29288]: https://github.com/home-assistant/home-assistant/pull/29288 +[#29289]: https://github.com/home-assistant/home-assistant/pull/29289 +[#29290]: https://github.com/home-assistant/home-assistant/pull/29290 +[#29294]: https://github.com/home-assistant/home-assistant/pull/29294 +[#29302]: https://github.com/home-assistant/home-assistant/pull/29302 +[#29306]: https://github.com/home-assistant/home-assistant/pull/29306 +[#29309]: https://github.com/home-assistant/home-assistant/pull/29309 +[#29312]: https://github.com/home-assistant/home-assistant/pull/29312 +[#29315]: https://github.com/home-assistant/home-assistant/pull/29315 +[#29319]: https://github.com/home-assistant/home-assistant/pull/29319 +[#29322]: https://github.com/home-assistant/home-assistant/pull/29322 +[#29323]: https://github.com/home-assistant/home-assistant/pull/29323 +[#29324]: https://github.com/home-assistant/home-assistant/pull/29324 +[#29325]: https://github.com/home-assistant/home-assistant/pull/29325 +[#29326]: https://github.com/home-assistant/home-assistant/pull/29326 +[#29327]: https://github.com/home-assistant/home-assistant/pull/29327 +[#29328]: https://github.com/home-assistant/home-assistant/pull/29328 +[#29329]: https://github.com/home-assistant/home-assistant/pull/29329 +[#29330]: https://github.com/home-assistant/home-assistant/pull/29330 +[#29331]: https://github.com/home-assistant/home-assistant/pull/29331 +[#29332]: https://github.com/home-assistant/home-assistant/pull/29332 +[#29335]: https://github.com/home-assistant/home-assistant/pull/29335 +[#29341]: https://github.com/home-assistant/home-assistant/pull/29341 +[#29346]: https://github.com/home-assistant/home-assistant/pull/29346 +[#29348]: https://github.com/home-assistant/home-assistant/pull/29348 +[#29352]: https://github.com/home-assistant/home-assistant/pull/29352 +[#29353]: https://github.com/home-assistant/home-assistant/pull/29353 +[#29355]: https://github.com/home-assistant/home-assistant/pull/29355 +[#29356]: https://github.com/home-assistant/home-assistant/pull/29356 +[#29357]: https://github.com/home-assistant/home-assistant/pull/29357 +[#29358]: https://github.com/home-assistant/home-assistant/pull/29358 +[#29359]: https://github.com/home-assistant/home-assistant/pull/29359 +[#29360]: https://github.com/home-assistant/home-assistant/pull/29360 +[#29361]: https://github.com/home-assistant/home-assistant/pull/29361 +[#29362]: https://github.com/home-assistant/home-assistant/pull/29362 +[#29363]: https://github.com/home-assistant/home-assistant/pull/29363 +[#29364]: https://github.com/home-assistant/home-assistant/pull/29364 +[#29365]: https://github.com/home-assistant/home-assistant/pull/29365 +[#29366]: https://github.com/home-assistant/home-assistant/pull/29366 +[#29367]: https://github.com/home-assistant/home-assistant/pull/29367 +[#29368]: https://github.com/home-assistant/home-assistant/pull/29368 +[#29369]: https://github.com/home-assistant/home-assistant/pull/29369 +[#29370]: https://github.com/home-assistant/home-assistant/pull/29370 +[#29371]: https://github.com/home-assistant/home-assistant/pull/29371 +[#29372]: https://github.com/home-assistant/home-assistant/pull/29372 +[#29373]: https://github.com/home-assistant/home-assistant/pull/29373 +[#29375]: https://github.com/home-assistant/home-assistant/pull/29375 +[#29381]: https://github.com/home-assistant/home-assistant/pull/29381 +[#29383]: https://github.com/home-assistant/home-assistant/pull/29383 +[#29384]: https://github.com/home-assistant/home-assistant/pull/29384 +[#29385]: https://github.com/home-assistant/home-assistant/pull/29385 +[#29386]: https://github.com/home-assistant/home-assistant/pull/29386 +[#29387]: https://github.com/home-assistant/home-assistant/pull/29387 +[#29388]: https://github.com/home-assistant/home-assistant/pull/29388 +[#29389]: https://github.com/home-assistant/home-assistant/pull/29389 +[#29390]: https://github.com/home-assistant/home-assistant/pull/29390 +[#29391]: https://github.com/home-assistant/home-assistant/pull/29391 +[#29392]: https://github.com/home-assistant/home-assistant/pull/29392 +[#29393]: https://github.com/home-assistant/home-assistant/pull/29393 +[#29394]: https://github.com/home-assistant/home-assistant/pull/29394 +[#29395]: https://github.com/home-assistant/home-assistant/pull/29395 +[#29396]: https://github.com/home-assistant/home-assistant/pull/29396 +[#29399]: https://github.com/home-assistant/home-assistant/pull/29399 +[#29400]: https://github.com/home-assistant/home-assistant/pull/29400 +[#29401]: https://github.com/home-assistant/home-assistant/pull/29401 +[#29402]: https://github.com/home-assistant/home-assistant/pull/29402 +[#29403]: https://github.com/home-assistant/home-assistant/pull/29403 +[#29404]: https://github.com/home-assistant/home-assistant/pull/29404 +[#29405]: https://github.com/home-assistant/home-assistant/pull/29405 +[#29406]: https://github.com/home-assistant/home-assistant/pull/29406 +[#29407]: https://github.com/home-assistant/home-assistant/pull/29407 +[#29411]: https://github.com/home-assistant/home-assistant/pull/29411 +[#29412]: https://github.com/home-assistant/home-assistant/pull/29412 +[#29413]: https://github.com/home-assistant/home-assistant/pull/29413 +[#29414]: https://github.com/home-assistant/home-assistant/pull/29414 +[#29415]: https://github.com/home-assistant/home-assistant/pull/29415 +[#29416]: https://github.com/home-assistant/home-assistant/pull/29416 +[#29417]: https://github.com/home-assistant/home-assistant/pull/29417 +[#29418]: https://github.com/home-assistant/home-assistant/pull/29418 +[#29419]: https://github.com/home-assistant/home-assistant/pull/29419 +[#29420]: https://github.com/home-assistant/home-assistant/pull/29420 +[#29421]: https://github.com/home-assistant/home-assistant/pull/29421 +[#29422]: https://github.com/home-assistant/home-assistant/pull/29422 +[#29423]: https://github.com/home-assistant/home-assistant/pull/29423 +[#29424]: https://github.com/home-assistant/home-assistant/pull/29424 +[#29425]: https://github.com/home-assistant/home-assistant/pull/29425 +[#29426]: https://github.com/home-assistant/home-assistant/pull/29426 +[#29427]: https://github.com/home-assistant/home-assistant/pull/29427 +[#29428]: https://github.com/home-assistant/home-assistant/pull/29428 +[#29429]: https://github.com/home-assistant/home-assistant/pull/29429 +[#29430]: https://github.com/home-assistant/home-assistant/pull/29430 +[#29431]: https://github.com/home-assistant/home-assistant/pull/29431 +[#29432]: https://github.com/home-assistant/home-assistant/pull/29432 +[#29435]: https://github.com/home-assistant/home-assistant/pull/29435 +[#29436]: https://github.com/home-assistant/home-assistant/pull/29436 +[#29437]: https://github.com/home-assistant/home-assistant/pull/29437 +[#29438]: https://github.com/home-assistant/home-assistant/pull/29438 +[#29440]: https://github.com/home-assistant/home-assistant/pull/29440 +[#29441]: https://github.com/home-assistant/home-assistant/pull/29441 +[#29442]: https://github.com/home-assistant/home-assistant/pull/29442 +[#29443]: https://github.com/home-assistant/home-assistant/pull/29443 +[#29444]: https://github.com/home-assistant/home-assistant/pull/29444 +[#29445]: https://github.com/home-assistant/home-assistant/pull/29445 +[#29446]: https://github.com/home-assistant/home-assistant/pull/29446 +[#29447]: https://github.com/home-assistant/home-assistant/pull/29447 +[#29448]: https://github.com/home-assistant/home-assistant/pull/29448 +[#29449]: https://github.com/home-assistant/home-assistant/pull/29449 +[#29450]: https://github.com/home-assistant/home-assistant/pull/29450 +[#29451]: https://github.com/home-assistant/home-assistant/pull/29451 +[#29452]: https://github.com/home-assistant/home-assistant/pull/29452 +[#29453]: https://github.com/home-assistant/home-assistant/pull/29453 +[#29455]: https://github.com/home-assistant/home-assistant/pull/29455 +[#29456]: https://github.com/home-assistant/home-assistant/pull/29456 +[#29457]: https://github.com/home-assistant/home-assistant/pull/29457 +[#29458]: https://github.com/home-assistant/home-assistant/pull/29458 +[#29459]: https://github.com/home-assistant/home-assistant/pull/29459 +[#29461]: https://github.com/home-assistant/home-assistant/pull/29461 +[#29462]: https://github.com/home-assistant/home-assistant/pull/29462 +[#29463]: https://github.com/home-assistant/home-assistant/pull/29463 +[#29464]: https://github.com/home-assistant/home-assistant/pull/29464 +[#29467]: https://github.com/home-assistant/home-assistant/pull/29467 +[#29468]: https://github.com/home-assistant/home-assistant/pull/29468 +[#29470]: https://github.com/home-assistant/home-assistant/pull/29470 +[#29471]: https://github.com/home-assistant/home-assistant/pull/29471 +[#29472]: https://github.com/home-assistant/home-assistant/pull/29472 +[#29473]: https://github.com/home-assistant/home-assistant/pull/29473 +[#29474]: https://github.com/home-assistant/home-assistant/pull/29474 +[#29475]: https://github.com/home-assistant/home-assistant/pull/29475 +[#29477]: https://github.com/home-assistant/home-assistant/pull/29477 +[#29478]: https://github.com/home-assistant/home-assistant/pull/29478 +[#29479]: https://github.com/home-assistant/home-assistant/pull/29479 +[#29480]: https://github.com/home-assistant/home-assistant/pull/29480 +[#29481]: https://github.com/home-assistant/home-assistant/pull/29481 +[#29482]: https://github.com/home-assistant/home-assistant/pull/29482 +[#29483]: https://github.com/home-assistant/home-assistant/pull/29483 +[#29484]: https://github.com/home-assistant/home-assistant/pull/29484 +[#29486]: https://github.com/home-assistant/home-assistant/pull/29486 +[#29488]: https://github.com/home-assistant/home-assistant/pull/29488 +[#29489]: https://github.com/home-assistant/home-assistant/pull/29489 +[#29490]: https://github.com/home-assistant/home-assistant/pull/29490 +[#29495]: https://github.com/home-assistant/home-assistant/pull/29495 +[#29524]: https://github.com/home-assistant/home-assistant/pull/29524 +[#29532]: https://github.com/home-assistant/home-assistant/pull/29532 +[#29551]: https://github.com/home-assistant/home-assistant/pull/29551 +[#29570]: https://github.com/home-assistant/home-assistant/pull/29570 +[#29596]: https://github.com/home-assistant/home-assistant/pull/29596 +[#29643]: https://github.com/home-assistant/home-assistant/pull/29643 +[#29740]: https://github.com/home-assistant/home-assistant/pull/29740 +[#29743]: https://github.com/home-assistant/home-assistant/pull/29743 +[#29787]: https://github.com/home-assistant/home-assistant/pull/29787 +[#29800]: https://github.com/home-assistant/home-assistant/pull/29800 +[#29809]: https://github.com/home-assistant/home-assistant/pull/29809 +[#29820]: https://github.com/home-assistant/home-assistant/pull/29820 +[#29824]: https://github.com/home-assistant/home-assistant/pull/29824 +[#29835]: https://github.com/home-assistant/home-assistant/pull/29835 +[@Adminiuga]: https://github.com/Adminiuga +[@Anonym-tsk]: https://github.com/Anonym-tsk +[@BKPepe]: https://github.com/BKPepe +[@Bouni]: https://github.com/Bouni +[@ChrisMandich]: https://github.com/ChrisMandich +[@Danielhiversen]: https://github.com/Danielhiversen +[@Dilbert66]: https://github.com/Dilbert66 +[@HarlemSquirrel]: https://github.com/HarlemSquirrel +[@JayNewstrom]: https://github.com/JayNewstrom +[@JeffLIrion]: https://github.com/JeffLIrion +[@K4ds3]: https://github.com/K4ds3 +[@Kane610]: https://github.com/Kane610 +[@Mariusthvdb]: https://github.com/Mariusthvdb +[@Misiu]: https://github.com/Misiu +[@Mryck]: https://github.com/Mryck +[@NobleKangaroo]: https://github.com/NobleKangaroo +[@OttoWinter]: https://github.com/OttoWinter +[@PedroLamas]: https://github.com/PedroLamas +[@Quentame]: https://github.com/Quentame +[@Romkabouter]: https://github.com/Romkabouter +[@SNoof85]: https://github.com/SNoof85 +[@Santobert]: https://github.com/Santobert +[@Shulyaka]: https://github.com/Shulyaka +[@SukramJ]: https://github.com/SukramJ +[@TomBrien]: https://github.com/TomBrien +[@USA-RedDragon]: https://github.com/USA-RedDragon +[@abmantis]: https://github.com/abmantis +[@adamchengtkc]: https://github.com/adamchengtkc +[@adrum]: https://github.com/adrum +[@akasma74]: https://github.com/akasma74 +[@alandtse]: https://github.com/alandtse +[@alex3305]: https://github.com/alex3305 +[@amelchio]: https://github.com/amelchio +[@andersonshatch]: https://github.com/andersonshatch +[@andylockran]: https://github.com/andylockran +[@awkwardDuck]: https://github.com/awkwardDuck +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@bannhead]: https://github.com/bannhead +[@basnijholt]: https://github.com/basnijholt +[@bazwilliams]: https://github.com/bazwilliams +[@bendikrb]: https://github.com/bendikrb +[@bramkragten]: https://github.com/bramkragten +[@bwarden]: https://github.com/bwarden +[@caronc]: https://github.com/caronc +[@cgtobi]: https://github.com/cgtobi +[@challs]: https://github.com/challs +[@colinodell]: https://github.com/colinodell +[@danielperna84]: https://github.com/danielperna84 +[@depl0y]: https://github.com/depl0y +[@djj211]: https://github.com/djj211 +[@eifinger]: https://github.com/eifinger +[@elupus]: https://github.com/elupus +[@engrbm87]: https://github.com/engrbm87 +[@escoand]: https://github.com/escoand +[@exxamalte]: https://github.com/exxamalte +[@fabaff]: https://github.com/fabaff +[@felipediel]: https://github.com/felipediel +[@ferbar]: https://github.com/ferbar +[@flamm3blemuff1n]: https://github.com/flamm3blemuff1n +[@foxel]: https://github.com/foxel +[@foxy82]: https://github.com/foxy82 +[@fredericvl]: https://github.com/fredericvl +[@freekode]: https://github.com/freekode +[@frenck]: https://github.com/frenck +[@gjbadros]: https://github.com/gjbadros +[@glmnet]: https://github.com/glmnet +[@grillp]: https://github.com/grillp +[@guillempages]: https://github.com/guillempages +[@herrlado]: https://github.com/herrlado +[@hfurubotten]: https://github.com/hfurubotten +[@hmmbob]: https://github.com/hmmbob +[@jesserockz]: https://github.com/jesserockz +[@jjlawren]: https://github.com/jjlawren +[@krasnoukhov]: https://github.com/krasnoukhov +[@ktnrg45]: https://github.com/ktnrg45 +[@kuchel77]: https://github.com/kuchel77 +[@kurniawan77]: https://github.com/kurniawan77 +[@larssont]: https://github.com/larssont +[@luca-angemi]: https://github.com/luca-angemi +[@majuss]: https://github.com/majuss +[@mdonoughe]: https://github.com/mdonoughe +[@mezz64]: https://github.com/mezz64 +[@michaelarnauts]: https://github.com/michaelarnauts +[@michaeldavie]: https://github.com/michaeldavie +[@mtdcr]: https://github.com/mtdcr +[@mvn23]: https://github.com/mvn23 +[@neffs]: https://github.com/neffs +[@oandrew]: https://github.com/oandrew +[@ochlocracy]: https://github.com/ochlocracy +[@olijouve]: https://github.com/olijouve +[@persandstrom]: https://github.com/persandstrom +[@pschmitt]: https://github.com/pschmitt +[@pvizeli]: https://github.com/pvizeli +[@raman325]: https://github.com/raman325 +[@rappenze]: https://github.com/rappenze +[@rohankapoorcom]: https://github.com/rohankapoorcom +[@scop]: https://github.com/scop +[@sophof]: https://github.com/sophof +[@springstan]: https://github.com/springstan +[@synesthesiam]: https://github.com/synesthesiam +[@tetienne]: https://github.com/tetienne +[@thomasgermain]: https://github.com/thomasgermain +[@timmccor]: https://github.com/timmccor +[@tofuSCHNITZEL]: https://github.com/tofuSCHNITZEL +[@tsvi]: https://github.com/tsvi +[@tulindo]: https://github.com/tulindo +[@uSpike]: https://github.com/uSpike +[aftership docs]: /integrations/aftership/ +[alarm_control_panel docs]: /integrations/alarm_control_panel/ +[alarmdecoder docs]: /integrations/alarmdecoder/ +[alexa docs]: /integrations/alexa/ +[almond docs]: /integrations/almond/ +[alpha_vantage docs]: /integrations/alpha_vantage/ +[ambient_station docs]: /integrations/ambient_station/ +[androidtv docs]: /integrations/androidtv/ +[apns docs]: /integrations/apns/ +[apprise docs]: /integrations/apprise/ +[asuswrt docs]: /integrations/asuswrt/ +[aten_pe docs]: /integrations/aten_pe/ +[bayesian docs]: /integrations/bayesian/ +[bbox docs]: /integrations/bbox/ +[blackbird docs]: /integrations/blackbird/ +[bluesound docs]: /integrations/bluesound/ +[bluetooth_tracker docs]: /integrations/bluetooth_tracker/ +[braviatv docs]: /integrations/braviatv/ +[broadlink docs]: /integrations/broadlink/ +[canary docs]: /integrations/canary/ +[channels docs]: /integrations/channels/ +[clementine docs]: /integrations/clementine/ +[climate docs]: /integrations/climate/ +[cloud docs]: /integrations/cloud/ +[comfoconnect docs]: /integrations/comfoconnect/ +[conversation docs]: /integrations/conversation/ +[cover docs]: /integrations/cover/ +[daikin docs]: /integrations/daikin/ +[danfoss_air docs]: /integrations/danfoss_air/ +[datadog docs]: /integrations/datadog/ +[deconz docs]: /integrations/deconz/ +[deluge docs]: /integrations/deluge/ +[demo docs]: /integrations/demo/ +[directv docs]: /integrations/directv/ +[discord docs]: /integrations/discord/ +[discovery docs]: /integrations/discovery/ +[dlink docs]: /integrations/dlink/ +[dlna_dmr docs]: /integrations/dlna_dmr/ +[dominos docs]: /integrations/dominos/ +[doorbird docs]: /integrations/doorbird/ +[dovado docs]: /integrations/dovado/ +[dsmr_reader docs]: /integrations/dsmr_reader/ +[duke_energy docs]: /integrations/duke_energy/ +[dunehd docs]: /integrations/dunehd/ +[dwd_weather_warnings docs]: /integrations/dwd_weather_warnings/ +[dyson docs]: /integrations/dyson/ +[ebox docs]: /integrations/ebox/ +[ecoal_boiler docs]: /integrations/ecoal_boiler/ +[econet docs]: /integrations/econet/ +[ecovacs docs]: /integrations/ecovacs/ +[eddystone_temperature docs]: /integrations/eddystone_temperature/ +[edimax docs]: /integrations/edimax/ +[ee_brightbox docs]: /integrations/ee_brightbox/ +[egardia docs]: /integrations/egardia/ +[eight_sleep docs]: /integrations/eight_sleep/ +[elkm1 docs]: /integrations/elkm1/ +[elv docs]: /integrations/elv/ +[emby docs]: /integrations/emby/ +[emulated_hue docs]: /integrations/emulated_hue/ +[emulated_roku docs]: /integrations/emulated_roku/ +[enigma2 docs]: /integrations/enigma2/ +[enocean docs]: /integrations/enocean/ +[enphase_envoy docs]: /integrations/enphase_envoy/ +[entur_public_transport docs]: /integrations/entur_public_transport/ +[environment_canada docs]: /integrations/environment_canada/ +[envisalink docs]: /integrations/envisalink/ +[epson docs]: /integrations/epson/ +[epsonworkforce docs]: /integrations/epsonworkforce/ +[eq3btsmart docs]: /integrations/eq3btsmart/ +[esphome docs]: /integrations/esphome/ +[etherscan docs]: /integrations/etherscan/ +[facebox docs]: /integrations/facebox/ +[familyhub docs]: /integrations/familyhub/ +[fastdotcom docs]: /integrations/fastdotcom/ +[ffmpeg_motion docs]: /integrations/ffmpeg_motion/ +[ffmpeg_noise docs]: /integrations/ffmpeg_noise/ +[fibaro docs]: /integrations/fibaro/ +[fints docs]: /integrations/fints/ +[fixer docs]: /integrations/fixer/ +[fleetgo docs]: /integrations/fleetgo/ +[flexit docs]: /integrations/flexit/ +[flume docs]: /integrations/flume/ +[flunearyou docs]: /integrations/flunearyou/ +[folder_watcher docs]: /integrations/folder_watcher/ +[foobot docs]: /integrations/foobot/ +[fortigate docs]: /integrations/fortigate/ +[free_mobile docs]: /integrations/free_mobile/ +[freebox docs]: /integrations/freebox/ +[fritzbox_callmonitor docs]: /integrations/fritzbox_callmonitor/ +[frontend docs]: /integrations/frontend/ +[gearbest docs]: /integrations/gearbest/ +[geizhals docs]: /integrations/geizhals/ +[generic_thermostat docs]: /integrations/generic_thermostat/ +[geo_json_events docs]: /integrations/geo_json_events/ +[geo_rss_events docs]: /integrations/geo_rss_events/ +[geonetnz_volcano docs]: /integrations/geonetnz_volcano/ +[gitter docs]: /integrations/gitter/ +[gogogate2 docs]: /integrations/gogogate2/ +[google_assistant docs]: /integrations/google_assistant/ +[gpmdp docs]: /integrations/gpmdp/ +[greeneye_monitor docs]: /integrations/greeneye_monitor/ +[gstreamer docs]: /integrations/gstreamer/ +[habitica docs]: /integrations/habitica/ +[hangouts docs]: /integrations/hangouts/ +[harmony docs]: /integrations/harmony/ +[hdmi_cec docs]: /integrations/hdmi_cec/ +[heatmiser docs]: /integrations/heatmiser/ +[here_travel_time docs]: /integrations/here_travel_time/ +[hikvision docs]: /integrations/hikvision/ +[hisense_aehw4a1 docs]: /integrations/hisense_aehw4a1/ +[history docs]: /integrations/history/ +[hlk_sw16 docs]: /integrations/hlk_sw16/ +[homeassistant docs]: /integrations/homeassistant/ +[homekit docs]: /integrations/homekit/ +[homematic docs]: /integrations/homematic/ +[homematicip_cloud docs]: /integrations/homematicip_cloud/ +[homeworks docs]: /integrations/homeworks/ +[horizon docs]: /integrations/horizon/ +[html5 docs]: /integrations/html5/ +[http docs]: /integrations/http/ +[huawei_lte docs]: /integrations/huawei_lte/ +[hue docs]: /integrations/hue/ +[hunterdouglas_powerview docs]: /integrations/hunterdouglas_powerview/ +[hydrawise docs]: /integrations/hydrawise/ +[ialarm docs]: /integrations/ialarm/ +[icloud docs]: /integrations/icloud/ +[idteck_prox docs]: /integrations/idteck_prox/ +[ifttt docs]: /integrations/ifttt/ +[iglo docs]: /integrations/iglo/ +[ihc docs]: /integrations/ihc/ +[input_datetime docs]: /integrations/input_datetime/ +[intent docs]: /integrations/intent/ +[intent_script docs]: /integrations/intent_script/ +[ios docs]: /integrations/ios/ +[iota docs]: /integrations/iota/ +[iperf3 docs]: /integrations/iperf3/ +[iqvia docs]: /integrations/iqvia/ +[irish_rail_transport docs]: /integrations/irish_rail_transport/ +[jewish_calendar docs]: /integrations/jewish_calendar/ +[joaoapps_join docs]: /integrations/joaoapps_join/ +[juicenet docs]: /integrations/juicenet/ +[keenetic_ndms2 docs]: /integrations/keenetic_ndms2/ +[kiwi docs]: /integrations/kiwi/ +[kwb docs]: /integrations/kwb/ +[lacrosse docs]: /integrations/lacrosse/ +[lametric docs]: /integrations/lametric/ +[launch_library docs]: /integrations/launch_library/ +[lg_netcast docs]: /integrations/lg_netcast/ +[lifx docs]: /integrations/lifx/ +[light docs]: /integrations/light/ +[lightwave docs]: /integrations/lightwave/ +[limitlessled docs]: /integrations/limitlessled/ +[litejet docs]: /integrations/litejet/ +[local_file docs]: /integrations/local_file/ +[logi_circle docs]: /integrations/logi_circle/ +[london_underground docs]: /integrations/london_underground/ +[luci docs]: /integrations/luci/ +[lupusec docs]: /integrations/lupusec/ +[lutron docs]: /integrations/lutron/ +[lutron_caseta docs]: /integrations/lutron_caseta/ +[lyft docs]: /integrations/lyft/ +[mailgun docs]: /integrations/mailgun/ +[matrix docs]: /integrations/matrix/ +[maxcube docs]: /integrations/maxcube/ +[media_extractor docs]: /integrations/media_extractor/ +[meteo_france docs]: /integrations/meteo_france/ +[meteoalarm docs]: /integrations/meteoalarm/ +[mfi docs]: /integrations/mfi/ +[mhz19 docs]: /integrations/mhz19/ +[microsoft docs]: /integrations/microsoft/ +[miflora docs]: /integrations/miflora/ +[mill docs]: /integrations/mill/ +[mitemp_bt docs]: /integrations/mitemp_bt/ +[mobile_app docs]: /integrations/mobile_app/ +[modbus docs]: /integrations/modbus/ +[modem_callerid docs]: /integrations/modem_callerid/ +[monoprice docs]: /integrations/monoprice/ +[moon docs]: /integrations/moon/ +[mqtt docs]: /integrations/mqtt/ +[mycroft docs]: /integrations/mycroft/ +[mysensors docs]: /integrations/mysensors/ +[mystrom docs]: /integrations/mystrom/ +[n26 docs]: /integrations/n26/ +[nad docs]: /integrations/nad/ +[nanoleaf docs]: /integrations/nanoleaf/ +[neato docs]: /integrations/neato/ +[nederlandse_spoorwegen docs]: /integrations/nederlandse_spoorwegen/ +[nello docs]: /integrations/nello/ +[netdata docs]: /integrations/netdata/ +[netgear_lte docs]: /integrations/netgear_lte/ +[netio docs]: /integrations/netio/ +[nilu docs]: /integrations/nilu/ +[nmap_tracker docs]: /integrations/nmap_tracker/ +[nmbs docs]: /integrations/nmbs/ +[noaa_tides docs]: /integrations/noaa_tides/ +[notion docs]: /integrations/notion/ +[nsw_rural_fire_service_feed docs]: /integrations/nsw_rural_fire_service_feed/ +[nuheat docs]: /integrations/nuheat/ +[nuimo_controller docs]: /integrations/nuimo_controller/ +[nut docs]: /integrations/nut/ +[nzbget docs]: /integrations/nzbget/ +[ombi docs]: /integrations/ombi/ +[onvif docs]: /integrations/onvif/ +[opencv docs]: /integrations/opencv/ +[opengarage docs]: /integrations/opengarage/ +[openhardwaremonitor docs]: /integrations/openhardwaremonitor/ +[openhome docs]: /integrations/openhome/ +[opensensemap docs]: /integrations/opensensemap/ +[opentherm_gw docs]: /integrations/opentherm_gw/ +[openuv docs]: /integrations/openuv/ +[opple docs]: /integrations/opple/ +[orvibo docs]: /integrations/orvibo/ +[owlet docs]: /integrations/owlet/ +[owntracks docs]: /integrations/owntracks/ +[panasonic_viera docs]: /integrations/panasonic_viera/ +[pencom docs]: /integrations/pencom/ +[philips_js docs]: /integrations/philips_js/ +[pilight docs]: /integrations/pilight/ +[plex docs]: /integrations/plex/ +[plum_lightpad docs]: /integrations/plum_lightpad/ +[point docs]: /integrations/point/ +[postnl docs]: /integrations/postnl/ +[prezzibenzina docs]: /integrations/prezzibenzina/ +[prometheus docs]: /integrations/prometheus/ +[proxmoxve docs]: /integrations/proxmoxve/ +[ps4 docs]: /integrations/ps4/ +[pulseaudio_loopback docs]: /integrations/pulseaudio_loopback/ +[pushetta docs]: /integrations/pushetta/ +[python_script docs]: /integrations/python_script/ +[qbittorrent docs]: /integrations/qbittorrent/ +[qnap docs]: /integrations/qnap/ +[quantum_gateway docs]: /integrations/quantum_gateway/ +[qwikswitch docs]: /integrations/qwikswitch/ +[rachio docs]: /integrations/rachio/ +[radarr docs]: /integrations/radarr/ +[raincloud docs]: /integrations/raincloud/ +[rainmachine docs]: /integrations/rainmachine/ +[random docs]: /integrations/random/ +[raspyrfm docs]: /integrations/raspyrfm/ +[recorder docs]: /integrations/recorder/ +[recswitch docs]: /integrations/recswitch/ +[remote_rpi_gpio docs]: /integrations/remote_rpi_gpio/ +[rest docs]: /integrations/rest/ +[rest_command docs]: /integrations/rest_command/ +[rfxtrx docs]: /integrations/rfxtrx/ +[ring docs]: /integrations/ring/ +[ripple docs]: /integrations/ripple/ +[rocketchat docs]: /integrations/rocketchat/ +[roku docs]: /integrations/roku/ +[roomba docs]: /integrations/roomba/ +[route53 docs]: /integrations/route53/ +[rova docs]: /integrations/rova/ +[rpi_gpio_pwm docs]: /integrations/rpi_gpio_pwm/ +[rpi_rf docs]: /integrations/rpi_rf/ +[russound_rio docs]: /integrations/russound_rio/ +[russound_rnet docs]: /integrations/russound_rnet/ +[sabnzbd docs]: /integrations/sabnzbd/ +[saj docs]: /integrations/saj/ +[samsungtv docs]: /integrations/samsungtv/ +[satel_integra docs]: /integrations/satel_integra/ +[scsgate docs]: /integrations/scsgate/ +[season docs]: /integrations/season/ +[sense docs]: /integrations/sense/ +[sensehat docs]: /integrations/sensehat/ +[serial_pm docs]: /integrations/serial_pm/ +[seventeentrack docs]: /integrations/seventeentrack/ +[shodan docs]: /integrations/shodan/ +[shopping_list docs]: /integrations/shopping_list/ +[sht31 docs]: /integrations/sht31/ +[simplepush docs]: /integrations/simplepush/ +[simplisafe docs]: /integrations/simplisafe/ +[sinch docs]: /integrations/sinch/ +[sisyphus docs]: /integrations/sisyphus/ +[skybell docs]: /integrations/skybell/ +[smarty docs]: /integrations/smarty/ +[snips docs]: /integrations/snips/ +[sochain docs]: /integrations/sochain/ +[solaredge docs]: /integrations/solaredge/ +[somfy docs]: /integrations/somfy/ +[somfy_mylink docs]: /integrations/somfy_mylink/ +[sonarr docs]: /integrations/sonarr/ +[songpal docs]: /integrations/songpal/ +[soundtouch docs]: /integrations/soundtouch/ +[speedtestdotnet docs]: /integrations/speedtestdotnet/ +[spider docs]: /integrations/spider/ +[spotify docs]: /integrations/spotify/ +[sql docs]: /integrations/sql/ +[squeezebox docs]: /integrations/squeezebox/ +[starline docs]: /integrations/starline/ +[starlingbank docs]: /integrations/starlingbank/ +[stiebel_eltron docs]: /integrations/stiebel_eltron/ +[stream docs]: /integrations/stream/ +[streamlabswater docs]: /integrations/streamlabswater/ +[supla docs]: /integrations/supla/ +[swiss_hydrological_data docs]: /integrations/swiss_hydrological_data/ +[swiss_public_transport docs]: /integrations/swiss_public_transport/ +[switchbot docs]: /integrations/switchbot/ +[syncthru docs]: /integrations/syncthru/ +[synology docs]: /integrations/synology/ +[synologydsm docs]: /integrations/synologydsm/ +[systemmonitor docs]: /integrations/systemmonitor/ +[tado docs]: /integrations/tado/ +[tahoma docs]: /integrations/tahoma/ +[tank_utility docs]: /integrations/tank_utility/ +[tapsaff docs]: /integrations/tapsaff/ +[tautulli docs]: /integrations/tautulli/ +[telegram_bot docs]: /integrations/telegram_bot/ +[temper docs]: /integrations/temper/ +[template docs]: /integrations/template/ +[tensorflow docs]: /integrations/tensorflow/ +[tesla docs]: /integrations/tesla/ +[thinkingcleaner docs]: /integrations/thinkingcleaner/ +[tibber docs]: /integrations/tibber/ +[todoist docs]: /integrations/todoist/ +[tof docs]: /integrations/tof/ +[touchline docs]: /integrations/touchline/ +[tplink docs]: /integrations/tplink/ +[traccar docs]: /integrations/traccar/ +[trackr docs]: /integrations/trackr/ +[tradfri docs]: /integrations/tradfri/ +[trafikverket_weatherstation docs]: /integrations/trafikverket_weatherstation/ +[transmission docs]: /integrations/transmission/ +[travisci docs]: /integrations/travisci/ +[trend docs]: /integrations/trend/ +[tts docs]: /integrations/tts/ +[tuya docs]: /integrations/tuya/ +[twilio_call docs]: /integrations/twilio_call/ +[ubee docs]: /integrations/ubee/ +[unifi docs]: /integrations/unifi/ +[unifi_direct docs]: /integrations/unifi_direct/ +[universal docs]: /integrations/universal/ +[upcloud docs]: /integrations/upcloud/ +[upnp docs]: /integrations/upnp/ +[uptimerobot docs]: /integrations/uptimerobot/ +[usgs_earthquakes_feed docs]: /integrations/usgs_earthquakes_feed/ +[uvc docs]: /integrations/uvc/ +[velux docs]: /integrations/velux/ +[verisure docs]: /integrations/verisure/ +[versasense docs]: /integrations/versasense/ +[version docs]: /integrations/version/ +[vicare docs]: /integrations/vicare/ +[vivotek docs]: /integrations/vivotek/ +[vizio docs]: /integrations/vizio/ +[volkszaehler docs]: /integrations/volkszaehler/ +[volvooncall docs]: /integrations/volvooncall/ +[vultr docs]: /integrations/vultr/ +[wake_on_lan docs]: /integrations/wake_on_lan/ +[watson_tts docs]: /integrations/watson_tts/ +[waze_travel_time docs]: /integrations/waze_travel_time/ +[webostv docs]: /integrations/webostv/ +[wemo docs]: /integrations/wemo/ +[wink docs]: /integrations/wink/ +[wirelesstag docs]: /integrations/wirelesstag/ +[wled docs]: /integrations/wled/ +[workday docs]: /integrations/workday/ +[xeoma docs]: /integrations/xeoma/ +[xfinity docs]: /integrations/xfinity/ +[xiaomi docs]: /integrations/xiaomi/ +[xiaomi_aqara docs]: /integrations/xiaomi_aqara/ +[xiaomi_miio docs]: /integrations/xiaomi_miio/ +[xiaomi_tv docs]: /integrations/xiaomi_tv/ +[yale_smart_alarm docs]: /integrations/yale_smart_alarm/ +[yamaha docs]: /integrations/yamaha/ +[yi docs]: /integrations/yi/ +[zabbix docs]: /integrations/zabbix/ +[zeroconf docs]: /integrations/zeroconf/ +[zha docs]: /integrations/zha/ +[zhong_hong docs]: /integrations/zhong_hong/ +[ziggo_mediabox_xl docs]: /integrations/ziggo_mediabox_xl/ +[zoneminder docs]: /integrations/zoneminder/ +[zwave docs]: /integrations/zwave/ diff --git a/source/images/blog/2019-12-0.103/automation-actions.png b/source/images/blog/2019-12-0.103/automation-actions.png new file mode 100644 index 00000000000..43db08d2cf8 Binary files /dev/null and b/source/images/blog/2019-12-0.103/automation-actions.png differ diff --git a/source/images/blog/2019-12-0.103/automation-yaml.png b/source/images/blog/2019-12-0.103/automation-yaml.png new file mode 100644 index 00000000000..5dd796667fb Binary files /dev/null and b/source/images/blog/2019-12-0.103/automation-yaml.png differ diff --git a/source/images/blog/2019-12-0.103/components.png b/source/images/blog/2019-12-0.103/components.png new file mode 100644 index 00000000000..dc23c3df9d1 Binary files /dev/null and b/source/images/blog/2019-12-0.103/components.png differ diff --git a/source/images/blog/2019-12-0.103/natural-language-area.png b/source/images/blog/2019-12-0.103/natural-language-area.png new file mode 100644 index 00000000000..dac43310731 Binary files /dev/null and b/source/images/blog/2019-12-0.103/natural-language-area.png differ diff --git a/source/images/integrations/geonetnz_volcano/map.png b/source/images/integrations/geonetnz_volcano/map.png new file mode 100644 index 00000000000..b27733b30b9 Binary files /dev/null and b/source/images/integrations/geonetnz_volcano/map.png differ diff --git a/source/images/integrations/geonetnz_volcano/sensor.png b/source/images/integrations/geonetnz_volcano/sensor.png new file mode 100644 index 00000000000..1182a96600a Binary files /dev/null and b/source/images/integrations/geonetnz_volcano/sensor.png differ diff --git a/source/images/supported_brands/aten.png b/source/images/supported_brands/aten.png new file mode 100644 index 00000000000..44b1f7f29d8 Binary files /dev/null and b/source/images/supported_brands/aten.png differ diff --git a/source/images/supported_brands/flume.jpg b/source/images/supported_brands/flume.jpg new file mode 100644 index 00000000000..e1417d08f5d Binary files /dev/null and b/source/images/supported_brands/flume.jpg differ diff --git a/source/images/supported_brands/hisense.png b/source/images/supported_brands/hisense.png new file mode 100755 index 00000000000..9c52e3a59fb Binary files /dev/null and b/source/images/supported_brands/hisense.png differ diff --git a/source/images/supported_brands/proxmoxve.png b/source/images/supported_brands/proxmoxve.png new file mode 100644 index 00000000000..0d08aec1b21 Binary files /dev/null and b/source/images/supported_brands/proxmoxve.png differ diff --git a/source/images/supported_brands/starline.png b/source/images/supported_brands/starline.png new file mode 100644 index 00000000000..1cc29749e16 Binary files /dev/null and b/source/images/supported_brands/starline.png differ diff --git a/source/images/supported_brands/versasense.png b/source/images/supported_brands/versasense.png new file mode 100644 index 00000000000..e51daeba944 Binary files /dev/null and b/source/images/supported_brands/versasense.png differ