From 9a0e9f80b4a8f99be649da97923eef6dae8640aa Mon Sep 17 00:00:00 2001 From: djtimca <60706061+djtimca@users.noreply.github.com> Date: Wed, 11 Nov 2020 15:29:33 -0500 Subject: [PATCH 01/67] Updated Aurora documentation to reflect fixes and addition of config_flow. (#15598) Co-authored-by: Franck Nijhof --- source/_integrations/aurora.markdown | 35 +++++++++------------------- 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/source/_integrations/aurora.markdown b/source/_integrations/aurora.markdown index a937af28a6a..6ae26f74042 100644 --- a/source/_integrations/aurora.markdown +++ b/source/_integrations/aurora.markdown @@ -16,31 +16,18 @@ You can check the attributes of the sensor to see your exact forecast. ## Configuration -To add the aurora binary sensor to your installation, add the following to your `configuration.yaml` file: +To add the aurora binary sensor to your installation, search for the Aurora integration through the Configuration -> Integrations menu. -```yaml -# Example configuration.yaml entry -binary_sensor: - - platform: aurora -``` +Enter a name for your Aurora location as well as the longitude and latitude of the location (default to your Home Assistant location). -{% configuration %} -forecast_threshold: - description: Provide your own threshold number above which the sensor will trigger. - required: false - type: integer - default: 75 -name: - description: The name of the sensor. - required: false - type: string - default: Aurora Visibility -{% endconfiguration %} +Click Submit to add the integration to your environment. -## Full example +You can configure multiple locations by adding the integration multiple times. -```yaml -binary_sensor: - - platform: aurora - forecast_threshold: 50 -``` +## Options + +Once installed you can adjust the threshold for this location by clicking on the Options link on the integration. + +## Sensors + +The integration will add a single binary sensor for each location you configure which will be in the state on when there is a forecast probability of Aurora viewing above your threshold and off when it is below your selected threshold. From d86bed74db78cd37fbd3c6e7db4d44f174a12ba4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Schmitz=20von=20H=C3=BClst?= Date: Wed, 11 Nov 2020 21:30:45 +0100 Subject: [PATCH 02/67] Add rest query params documentation (#15352) --- source/_integrations/rest.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_integrations/rest.markdown b/source/_integrations/rest.markdown index 361f81dfb06..f7c60bc8918 100644 --- a/source/_integrations/rest.markdown +++ b/source/_integrations/rest.markdown @@ -104,6 +104,10 @@ headers: description: The headers for the requests. required: false type: [string, list] +params: + description: The query params for the requests. + required: false + type: [string, list] json_attributes: description: A list of keys to extract values from a JSON dictionary result and then set as sensor attributes. If the endpoint returns XML with the "text/xml" or "application/xml" content type, it will automatically be converted to JSON according to this [specification](https://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html) required: false From a355abf72f4adb8c3de75f99dcaa024b99d3ea32 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 12 Nov 2020 12:00:56 +0100 Subject: [PATCH 03/67] Add support for multiple event triggers in automation (#15611) --- source/_docs/automation/trigger.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index 0535c07d01b..eacc004fd7f 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -32,6 +32,18 @@ automation: - ANOTHER_USER_ID ``` +It is also possible to listen for multiple events at once. This is useful for +event that contain no, or similar, data and contexts. + +```yaml +automation: + trigger: + platform: event + event_type: + - automation_reloaded + - scene_reloaded +``` + ### Home Assistant trigger Fires when Home Assistant starts up or shuts down. From d0558cdd5097c4c5b57ef85d9a524622a6b90c74 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Fri, 13 Nov 2020 06:17:55 -0700 Subject: [PATCH 04/67] Update Recollect Waste configuration instructions (#15624) --- source/_integrations/recollect_waste.markdown | 33 +++---------------- 1 file changed, 5 insertions(+), 28 deletions(-) diff --git a/source/_integrations/recollect_waste.markdown b/source/_integrations/recollect_waste.markdown index 5a1e7e12b11..5d625b00725 100644 --- a/source/_integrations/recollect_waste.markdown +++ b/source/_integrations/recollect_waste.markdown @@ -19,36 +19,13 @@ The `recollect_waste` integration allows you to track the next scheduled waste p 5. Use the place_id and service_id when configuring the sensor. -## Configuration - -To enable this sensor, add the following lines to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: recollect_waste - place_id: YOUR_PLACE_ID - service_id: YOUR_SERVICE_ID -``` - -{% configuration %} -place_id: - description: The place_id used for your neighbourhood. - required: true - type: string -service_id: - description: The service_id used for your city. - required: true - type: string -name: - description: Name the sensor. - required: false - type: string - default: recollect_waste -{% endconfiguration %} - The default frequency for pulling data from Recollect Waste is once a day (86400 seconds).
The Recollect Waste sensor uses the Recollect API URL to obtain data not an official API from Recollect. Use at your own risk.
+ +## Configuration + +This integration can be configured via the Home Assistant UI by navigating to +**Configuration** -> **Integrations**. From e7c9d021e20b2c1dd122ea4bf8cfbfa837c9aa47 Mon Sep 17 00:00:00 2001 From: Thomas Delaet Date: Sat, 14 Nov 2020 13:05:34 +0100 Subject: [PATCH 05/67] Add quarter-hour support to utility meter (#15384) --- source/_integrations/utility_meter.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/utility_meter.markdown b/source/_integrations/utility_meter.markdown index 3e6c537b35d..86fea522997 100644 --- a/source/_integrations/utility_meter.markdown +++ b/source/_integrations/utility_meter.markdown @@ -39,7 +39,7 @@ source: required: true type: string cycle: - description: How often to reset the counter. Valid values are `hourly`, `daily`, `weekly`, `monthly`, `bimonthly`, `quarterly` and `yearly`. Cycle value `bimonthly` will reset the counter once in two months. + description: How often to reset the counter. Valid values are `quarter-hourly`, `hourly`, `daily`, `weekly`, `monthly`, `bimonthly`, `quarterly` and `yearly`. Cycle value `bimonthly` will reset the counter once in two months. required: true type: string offset: From b95e4433687d05da13e64bc485a34ffc5cf8558a Mon Sep 17 00:00:00 2001 From: b4dpxl <26406101+b4dpxl@users.noreply.github.com> Date: Sat, 14 Nov 2020 17:44:34 +0000 Subject: [PATCH 06/67] Support for Broadlink BG1 switches (#15509) --- source/_integrations/broadlink.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/broadlink.markdown b/source/_integrations/broadlink.markdown index 2cb535982a6..955d6430761 100644 --- a/source/_integrations/broadlink.markdown +++ b/source/_integrations/broadlink.markdown @@ -20,7 +20,7 @@ The Broadlink integration allows you to control and monitor Broadlink universal - Sensors: `e-Sensor` - Smart Plugs: `SP mini`, `SP mini+`, `SP mini 3`, `SP1`, `SP2`, `SP2-CL`, `SP2-UK/BR/IN`, `SP3`, `SP3-EU`, `SP3S-EU`, `SP3S-US`, `SP4L-EU` and `SP4M-US` - Universal Remotes: `RM mini`, `RM mini 3`, `RM pro`, `RM pro+`, `RM plus`, `RM4 mini`, `RM4 pro` and `RM4C mini` -- Wi-Fi Controlled Switches: `SC1` +- Wi-Fi Controlled Switches: `BG1`, `SC1` ## Configuration From ec34a97d0631747c1080a791a55b5b9760638b13 Mon Sep 17 00:00:00 2001 From: Austin Drummond Date: Sat, 14 Nov 2020 14:41:25 -0500 Subject: [PATCH 07/67] Add humidifier support for HomeKit Controller (#15387) --- source/_integrations/homekit_controller.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/homekit_controller.markdown b/source/_integrations/homekit_controller.markdown index 5f6e6db3206..a9a52de7e44 100644 --- a/source/_integrations/homekit_controller.markdown +++ b/source/_integrations/homekit_controller.markdown @@ -13,6 +13,7 @@ ha_category: - Sensor - Fan - Health + - Humidifier ha_release: 0.68 ha_iot_class: Local Push ha_config_flow: true @@ -41,6 +42,7 @@ There is currently support for the following device types within Home Assistant: - Sensor (HomeKit humidity, temperature, co2 and light level sensors) - Fan - Air Quality +- Humidifier (HomeKit humidifiers and dehumidifiers) - Automation Triggers (HomeKit 'stateless' accessories like buttons, remotes and doorbells)
From cec49efaaa2df10d8701a70830a17ea4c7f06a8e Mon Sep 17 00:00:00 2001 From: Federico Leoni Date: Sat, 14 Nov 2020 17:21:13 -0300 Subject: [PATCH 08/67] Tasmota Integration update (#15636) --- source/_integrations/tasmota.markdown | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/source/_integrations/tasmota.markdown b/source/_integrations/tasmota.markdown index c1c751bb76d..b4c76e3bb61 100644 --- a/source/_integrations/tasmota.markdown +++ b/source/_integrations/tasmota.markdown @@ -22,15 +22,18 @@ This integration allows you to control [Tasmota](https://tasmota.github.io/docs/ - Tasmota devices flashed with version 9.1, or later. - Tasmota devices configured for native discovery (`SetOption19 0`) -## Limitations +## Supported Features -Lights, relays, sensors and switches are supported. +Lights, relays, sensors, switches and buttons are supported. -- Lights will be added as Home Assistant `light` entities. +- Lights will be added as Home Assistant `light` entities. Single channel Dimmers, RGB lights, RGB lights with Color Temperature control and RGB lights with White control are supported. - Relays will be added as Home Assistant `switch` entities, if `SetOption30 = 0`. If `SetOption30 = 1`, relays will be added as `light` entities. - Sensors will be added as Home Assistant `sensor` entities. -- Switches will be added as Home Assistant `binary_sensor` entities or `automation triggers` depending by the `switchmode` used. To enable them, `switchtopic` needs to be set. If there are no corresponding power device (light, relay, etc.) the `switch` will be added automatically. +- Switches will be added as Home Assistant `binary_sensor` entities or `automation triggers` depending by the `switchmode` used when `SetOption114` is enabled. - Buttons will be added as Home Assistant `automation triggers` when `SetOption73` is enabled. +- The integration will also create up to eight Status Sensors, each one with a different information. Please note all the Status Sensors are disabled by default. + +![iot](https://user-images.githubusercontent.com/7702766/99080146-a1d43980-259f-11eb-856b-addb53695381.png) ## Configuration From 7a56cbf0a8acb0000f39709f0150abd4b1a9d5b9 Mon Sep 17 00:00:00 2001 From: Andrew Sayre <6730289+andrewsayre@users.noreply.github.com> Date: Mon, 16 Nov 2020 05:54:49 -0600 Subject: [PATCH 09/67] Add Gas Meter sensor docs to SmartThings integration (#15659) --- source/_integrations/smartthings.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index b12963cd2f4..47a81a4a43f 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -228,6 +228,7 @@ The SmartThings Sensor platform lets your view devices that have sensor-related | [`energyMeter`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Energy-Meter) | `energy` | | [`equivalentCarbonDioxideMeasurement`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Equivalent-Carbon-Dioxide-Measurement) | `equivalentCarbonDioxideMeasurement` | | [`formaldehydeMeasurement`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Formaldehyde-Measurement) | `formaldehydeLevel` | +| `gasMeter` | `gasMeter`, `meterCalorific`, `meterTime`, and `meterVolume` | | [`illuminanceMeasurement`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Illuminance-Measurement) | `illuminance` | | [`infraredLevel`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Infrared-Level) | `infraredLevel` | | [`lock`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Lock) | `lock` | From 9743d982429535be10d49909df5f1d9b62028988 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 16 Nov 2020 13:42:18 +0100 Subject: [PATCH 10/67] Force color or white mode exclusivity for MQTT lights (#15653) --- source/_integrations/light.mqtt.markdown | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown index 2d1431c3bb9..c57dd58d5e9 100644 --- a/source/_integrations/light.mqtt.markdown +++ b/source/_integrations/light.mqtt.markdown @@ -37,6 +37,9 @@ When a state topic is not available, the light will work in optimistic mode. In Optimistic mode can be forced, even if the `state_topic` is available. Try to enable it, if experiencing incorrect light operation. +Home Assistant internally assumes that a light either has a color or a color temperature. +The state of MQTT lights with default schema and support for both color and color temperature will include a color if `white_value` is 0 or None and a `color_temp` is white_value > 0. + ```yaml # Example configuration.yaml entry light: @@ -94,7 +97,7 @@ color_temp_command_topic: required: false type: string color_temp_state_topic: - description: The MQTT topic subscribed to receive color temperature state updates. + description: "The MQTT topic subscribed to receive color temperature state updates. If the light also supports setting colors, also define a `white_value_state_topic`. " required: false type: string color_temp_value_template: From f66da0db8619f3d7ac005ce244ca0e9d1d4ec75e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Wilczy=C5=84ski?= Date: Tue, 17 Nov 2020 20:08:47 +0100 Subject: [PATCH 11/67] Add docs for template delay in template binary sensor (#15654) --- source/_integrations/binary_sensor.template.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/binary_sensor.template.markdown b/source/_integrations/binary_sensor.template.markdown index 8a9ea63e9bf..6584a1a31ca 100644 --- a/source/_integrations/binary_sensor.template.markdown +++ b/source/_integrations/binary_sensor.template.markdown @@ -83,11 +83,11 @@ sensors: required: true type: template delay_on: - description: The amount of time the template state must be ***met*** before this sensor will switch to `on`. + description: The amount of time the template state must be ***met*** before this sensor will switch to `on`. This can also be a template. required: false type: time delay_off: - description: The amount of time the template state must be ***not met*** before this sensor will switch to `off`. + description: The amount of time the template state must be ***not met*** before this sensor will switch to `off`. This can also be a template. required: false type: time {% endconfiguration %} From dd6cd5039272d56453a484f9e8cbad7f60e69228 Mon Sep 17 00:00:00 2001 From: Andrew Sayre <6730289+andrewsayre@users.noreply.github.com> Date: Wed, 18 Nov 2020 02:08:16 -0600 Subject: [PATCH 12/67] Add tvChannelName to sensor platform (#15670) --- source/_integrations/smartthings.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index 47a81a4a43f..d557ba3729e 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -257,7 +257,7 @@ The SmartThings Sensor platform lets your view devices that have sensor-related | [`thermostatOperatingState`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Thermostat-Operating-State) | `thermostatOperatingState` | | [`thermostatSetpoint`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Thermostat-Setpoint) | `thermostatSetpoint` | | [`threeAxis`](https://docs.smartthings.com/en/latest/capabilities-reference.html#three-axis) | `threeAxis` (as discrete sensors `X`, `Y` and `Z`) | -| [`tvChannel`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Tv-Channel) | `tvChannel` | +| [`tvChannel`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Tv-Channel) | `tvChannel` and `tvChannelName` | | [`tvocMeasurement`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Tvoc-Measurement) | `tvocLevel` | | [`ultravioletIndex`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Ultraviolet-Index) | `ultravioletIndex` | | [`voltageMeasurement`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Voltage-Measurement) | `voltage` | From 5ea5bb4237df0b7fff21d1e3e1233a5971ab755e Mon Sep 17 00:00:00 2001 From: 100ferhas <46828393+100ferhas@users.noreply.github.com> Date: Fri, 20 Nov 2020 14:47:31 +0100 Subject: [PATCH 13/67] Update alexa.smart_home.markdown (#15637) added supported languages for Alexa smart home integration --- source/_integrations/alexa.smart_home.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_integrations/alexa.smart_home.markdown b/source/_integrations/alexa.smart_home.markdown index bab6b2c5ad2..541bfc87c3d 100644 --- a/source/_integrations/alexa.smart_home.markdown +++ b/source/_integrations/alexa.smart_home.markdown @@ -348,10 +348,13 @@ The supported locales are: - `en-US` - `es-ES` - `es-MX` +- `es-US` - `fr-CA` - `fr-FR` +- `hi-IN` - `it-IT` - `ja-JP` +- `pt-BR` See [List of Capability Interfaces and Supported Locales][alexa-supported-locales]. From a4ebce297b87c1b99f2341479118e600901308a0 Mon Sep 17 00:00:00 2001 From: Anton Palgunov Date: Fri, 20 Nov 2020 16:06:59 +0000 Subject: [PATCH 14/67] integrations/xiaomi_miio added Air Humidifier CA (zhimi.humidifier.ca4) (#14466) --- source/_integrations/xiaomi_miio.markdown | 50 ++++++++++++++++++++--- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/source/_integrations/xiaomi_miio.markdown b/source/_integrations/xiaomi_miio.markdown index 8ed4717665a..16a9b6d8235 100644 --- a/source/_integrations/xiaomi_miio.markdown +++ b/source/_integrations/xiaomi_miio.markdown @@ -24,7 +24,7 @@ The `xiaomi_miio` integration supports the following devices: - [Xiaomi Gateway](#xiaomi-gateway) - [Xiaomi device tracker (Xiaomi Mi WiFi Repeater 2)](#xiaomi-device-tracker-xiaomi-mi-wifi-repeater-2)) -- [Xiaomi Air Purifier](#xiaomi-air-purifier) +- [Xiaomi Air Purifier and Humidifier](#xiaomi-air-purifier-and-humidifier) - [Xiaomi Air Quality Index Monitor](#xiaomi-air-quality-index-monitor) - [Xiaomi Mi Air Quality Monitor](#xiaomi-mi-air-quality-monitor) - [Xiaomi IR Remote](#xiaomi-ir-remote) @@ -89,7 +89,7 @@ This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot Vacuu ### iOS 1. Configure the robot with the Mi Home app. Make sure to select the correct region, as Xiaomi uses different product names for different geographical areas. Note that the new RoboRock app is currently not supported for this method. -2. Using iTunes, create an unencrypted backup of your iPhone. Since macOS 10.15 there is no iTunes app. Use Finder instead - after connecting your iOS device you should see it in left menu of Finder window. +2. Using iTunes, create an unencrypted backup of your iPhone. Since macOS 10.15 there is no iTunes app. Use Finder instead - after connecting your iOS device you should see it in left menu of Finder window. 3. Install [iBackup Viewer](https://www.imactools.com/iphonebackupviewer/), open it, and open your backup. 4. Open the "Raw Data" module. 5. Navigate to `com.xiaomi.mihome`. @@ -106,7 +106,7 @@ This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot Vacuu -- Execute to retrieve token for Smart Powerstrip SELECT ZTOKEN FROM ZDEVICE WHERE ZMODEL LIKE "%powerstrip%" - + -- Execute to retrieve token for Smart Plug SELECT ZTOKEN FROM ZDEVICE WHERE ZMODEL LIKE "%plug%" ``` @@ -304,7 +304,7 @@ token: type: string {% endconfiguration %} -## Xiaomi Air Purifier +## Xiaomi Air Purifier and Humidifier The `xiaomi_miio` fan platform allows you to control the Xiaomi Air Purifier, Air Humidifier and Air Fresh. @@ -329,6 +329,7 @@ Supported devices: | Air Purifier 3H (2019) | zhimi.airpurifier.mb3 | | | Air Humidifier | zhimi.humidifier.v1 | | | Air Humidifier CA1 | zhimi.humidifier.ca1 | | +| Air Humidifier CA4 | zhimi.humidifier.ca4 | | | Air Humidifier CB1 | zhimi.humidifier.cb1 | | | Air Fresh VA2 | zhimi.airfresh.va2 | | @@ -579,6 +580,34 @@ This model uses newer MiOT communication protocol. - `depth` - `dry` +### Air Humidifier CA (zhimi.humidifier.ca4) + +- On, Off +- Operation modes (auto, low, mid, high) +- Buzzer (on, off) +- Child lock (on, off) +- LED brightness (off, dim, bright) +- Target humidity (30 - 80) +- Dry mode (on, off) +- Motor speed rpm (200 - 2000) +- Attributes + - `model` + - `temperature` + - `humidity` + - `mode` + - `buzzer` + - `child_lock` + - `target_humidity` + - `led_brightness` + - `use_time` + - `actual_speed` + - `button_pressed` + - `dry` + - `fahrenheit` + - `motor_speed` + - `power_time` + - `water_level` + ### Air Humidifier CB (zhimi.humidifier.cb1) - On, Off @@ -832,13 +861,22 @@ Turn the dry mode off. |---------------------------|----------|---------------------------------------------------------| | `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | +### Service `xiaomi_miio.fan_set_motor_speed` (Air Humidifier CA4) + +Set motor speed RPM. + +| Service data attribute | Optional | Description | +|---------------------------|----------|----------------------------------------------------------| +| `entity_id` | no | Only act on a specific Xiaomi miIO fan entity. | +| `motor_speed` | no | Motor speed RPM. Allowed values are between 200 and 2000 | + ### Troubleshooting `Unable to find device` error messages Check if the device is in the same subnet as the Home Assistant instance. Otherwise, you should configure your router/firewall to put this device in the same VLAN as the Home Assistant instance. If it's not possible to use VLANs for some reason, your last resort may be using NAT translation, between the IPs. -## Xiaomi Air Quality Index Monitor +## Xiaomi Air Quality Index Monitor The `xiaomi_miio` sensor platform is observing your Xiaomi Mi Air Quality Monitor (PM2.5) and reporting the air quality index. @@ -1297,7 +1335,7 @@ Clean the specified segment/room. A room is identified by a number. Instructions | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | no | Only act on a specific robot | +| `entity_id` | no | Only act on a specific robot | | `segments` | no | List of segment numbers or one single segment number. | Example of `xiaomi_miio.vacuum_clean_segment` use: From 894f81521c68feef90107f3a654b517952de2c05 Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Fri, 20 Nov 2020 21:48:40 +0100 Subject: [PATCH 15/67] Remove salt integration for webscraping (#15702) --- CODEOWNERS | 1 - source/_integrations/salt.markdown | 47 ------------------- source/_posts/2020-02-26-release-106.markdown | 5 +- 3 files changed, 2 insertions(+), 51 deletions(-) delete mode 100644 source/_integrations/salt.markdown diff --git a/CODEOWNERS b/CODEOWNERS index 6afb998172d..3dbc894a9eb 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -357,7 +357,6 @@ source/_integrations/rpi_power.markdown @shenxn @swetoast source/_integrations/ruckus_unleashed.markdown @gabe565 source/_integrations/safe_mode.markdown @home-assistant/core source/_integrations/saj.markdown @fredericvl -source/_integrations/salt.markdown @bjornorri source/_integrations/samsungtv.markdown @escoand source/_integrations/scene.markdown @home-assistant/core source/_integrations/schluter.markdown @prairieapps diff --git a/source/_integrations/salt.markdown b/source/_integrations/salt.markdown deleted file mode 100644 index 331f193b74a..00000000000 --- a/source/_integrations/salt.markdown +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Salt Fiber Box -description: Instructions on how to integrate Salt Fiber Box router into Home Assistant. -ha_category: - - Presence Detection -ha_iot_class: Local Polling -ha_codeowners: - - '@bjornorri' -ha_release: 0.106 -ha_domain: salt ---- - -The `salt` platform offers presence detection by looking at connected devices to a [Salt Fiber Box](https://fiber.salt.ch/en/fiber/equipment/fiber-box) router from [Salt](https://www.salt.ch), which is an internet provider in Switzerland. - -
-The router only allows one user session at a time. If you log into the router's web interface, the platform will stop updating until you log out. -
- -## Configuration - -To use a Salt Fiber Box router in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -device_tracker: - - platform: salt - host: 192.168.1.1 - username: admin - password: YOUR_PASSWORD -``` - -{% configuration %} -host: - description: The IP address of your router, e.g. `192.168.1.1`. - required: true - type: string -username: - description: The username used to log into the router's web interface, e.g. `admin`. - required: true - type: string -password: - description: The password used to log into the router's web interface. - required: true - type: string -{% endconfiguration %} - -See the [device tracker integration page](/integrations/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_posts/2020-02-26-release-106.markdown b/source/_posts/2020-02-26-release-106.markdown index 1dea56edb57..7185e79ce5b 100644 --- a/source/_posts/2020-02-26-release-106.markdown +++ b/source/_posts/2020-02-26-release-106.markdown @@ -121,7 +121,7 @@ We have made some changes to Lovelace that might impact your custom card, so be ## New Integrations -- Add Salt Fiber Box device tracker ([@bjornorri] - [#30986]) ([salt docs]) (new-integration) +- Add Salt Fiber Box device tracker ([@bjornorri] - [#30986]) (new-integration) - Add GDACS feed integration ([@exxamalte] - [#31235]) ([gdacs docs]) (new-integration) - Add Minecraft Server Integration ([@elmurato] - [#30992]) ([minecraft_server docs]) (new-integration) - Add MELCloud integration ([@vilppuvuorinen] - [#30712]) ([melcloud docs]) (new-integration) @@ -487,7 +487,7 @@ Added a Coronavirus integration to help monitor the ongoing epidemic. [More info - Catch device not found in device automations ([@balloob] - [#31401]) ([device_automation docs]) - Upgrade numpy to 1.18.1 ([@fabaff] - [#31411]) ([iqvia docs]) ([opencv docs]) ([tensorflow docs]) ([trend docs]) - Update pyhomematic to 0.1.64 ([@danielperna84] - [#31406]) ([homematic docs]) -- Add Salt Fiber Box device tracker ([@bjornorri] - [#30986]) ([salt docs]) (new-integration) +- Add Salt Fiber Box device tracker ([@bjornorri] - [#30986]) (new-integration) - Upgrade alpha_vantage to 2.1.3 ([@fabaff] - [#31388]) ([alpha_vantage docs]) - Search specific train in Nederlandse Spoorwegen ([@gurbyz] - [#28898]) ([nederlandse_spoorwegen docs]) - Enable SUPPORT_VOLUME_STEP ([@Cloudenius] - [#31023]) ([pioneer docs]) @@ -1194,7 +1194,6 @@ Added a Coronavirus integration to help monitor the ongoing epidemic. [More info [roku docs]: /integrations/roku/ [rpi_gpio_pwm docs]: /integrations/rpi_gpio_pwm/ [sabnzbd docs]: /integrations/sabnzbd/ -[salt docs]: /integrations/salt/ [samsungtv docs]: /integrations/samsungtv/ [scrape docs]: /integrations/scrape/ [script docs]: /integrations/script/ From c557677c51632a90e6fe6826c35a79c5c3bc4baf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Fri, 20 Nov 2020 23:59:32 +0200 Subject: [PATCH 16/67] Add ONVIF PTZ Stop support (#14418) Refs https://github.com/home-assistant/core/pull/39734 --- source/_integrations/onvif.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/onvif.markdown b/source/_integrations/onvif.markdown index a34e8aba161..48f870b7146 100644 --- a/source/_integrations/onvif.markdown +++ b/source/_integrations/onvif.markdown @@ -74,7 +74,7 @@ If your ONVIF camera supports PTZ, you will be able to pan, tilt or zoom your ca | `distance` | Distance coefficient. Sets how much PTZ should be executed in one request. Allowed values: floating point numbers, 0 to 1. Default : 0.1 | | `speed` | Speed coefficient. Sets how fast PTZ will be executed. Allowed values: floating point numbers, 0 to 1. Default : 0.5 | | `preset` | PTZ preset profile token. Sets the preset profile token which is executed with GotoPreset. | -| `move_mode` | PTZ moving mode. Allowed values: `ContinuousMove`, `RelativeMove`, `AbsoluteMove`, `GotoPreset`. Default :`RelativeMove` | +| `move_mode` | PTZ moving mode. Allowed values: `ContinuousMove`, `RelativeMove`, `AbsoluteMove`, `GotoPreset`, `Stop`. Default :`RelativeMove` | | `continuous_duration` | Set ContinuousMove delay in seconds before stoping the move. Allowed values: floating point numbers or integer. Default : 0.5 | If you are running into trouble with this sensor, please refer to the [Troubleshooting section](/integrations/ffmpeg/#troubleshooting). From 4ecb4452560242060a5bda6e73cf6d85e1bdbe20 Mon Sep 17 00:00:00 2001 From: Brig Lamoreaux Date: Fri, 20 Nov 2020 15:11:17 -0700 Subject: [PATCH 17/67] New Integration - SRP Energy (#14800) Co-authored-by: Klaas Schoute --- source/_integrations/srp_energy.markdown | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 source/_integrations/srp_energy.markdown diff --git a/source/_integrations/srp_energy.markdown b/source/_integrations/srp_energy.markdown new file mode 100644 index 00000000000..0af75e7c7d5 --- /dev/null +++ b/source/_integrations/srp_energy.markdown @@ -0,0 +1,18 @@ +--- +title: "SRP Energy" +description: "How to integrate SRP Energy within Home Assistant." +ha_category: + - Energy +ha_release: 0.119 +ha_iot_class: Cloud Polling +--- + +The SRP Energy integration shows information from SRP hourly energy usage report for their customers. + +You need a username, password, and account ID which you can create at [SRP](https://www.srpnet.com). + +## Configuration + +Add SRP Energy to your installation from the configuration integration. + +Navigate to "Configuration", then "Integrations" and click `+` button in the bottom right. Select `SRP Energy` to start the configuration. After completing the configuration procedure, the SRP Energy integration will be available. From 984d31de14dee172397f51b3174ea9a119da7172 Mon Sep 17 00:00:00 2001 From: Indu Prakash <6459774+iprak@users.noreply.github.com> Date: Sat, 21 Nov 2020 05:44:49 -0600 Subject: [PATCH 18/67] Support for multiple states in history_stats (#15708) --- source/_integrations/history_stats.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/history_stats.markdown b/source/_integrations/history_stats.markdown index 0d836cf1b18..4493616fe71 100644 --- a/source/_integrations/history_stats.markdown +++ b/source/_integrations/history_stats.markdown @@ -44,9 +44,9 @@ entity_id: required: true type: string state: - description: The state you want to track. + description: The states you want to track. required: true - type: string + type: [list, string] name: description: Name displayed on the frontend. Note that it is used by Home Assistant to generate sensor's `object_id` so it is advisable to choose a unique one and change name for frontend using [customization](/docs/configuration/customizing-devices/#friendly_name) or via [Lovelace](/lovelace/entities/#name). required: false From ac239b815b0d5e20f68eee2e700da9bef23533b0 Mon Sep 17 00:00:00 2001 From: Ernst Klamer Date: Sat, 21 Nov 2020 17:50:59 +0100 Subject: [PATCH 19/67] Remove YAML documentation for Solar-log (#15713) --- source/_integrations/solarlog.markdown | 38 ++------------------------ 1 file changed, 3 insertions(+), 35 deletions(-) diff --git a/source/_integrations/solarlog.markdown b/source/_integrations/solarlog.markdown index 239311e65b3..b2c0f2b2fe9 100644 --- a/source/_integrations/solarlog.markdown +++ b/source/_integrations/solarlog.markdown @@ -23,41 +23,9 @@ The open JSON interface is deactivated by default. To activate the open JSON int ## Configuration -There are 2 options in configuring the `solarlog` integration: - -- Via the Home Assistant user interface where it will let you enter the name and host to connect to your Solar-Log device. -- Via the Home Assistant `configuration.yaml` file. - -```yaml -# Example configuration.yaml entry -sensor: - platform: solarlog -``` - -{% configuration %} -host: - description: The IP Address or host address of your Solar-Log device. - required: false - default: http://solar-log - type: string -name: - description: Let you overwrite the name of the device in the frontend. - required: false - default: solarlog - type: string -{% endconfiguration %} - -### Full configuration sample - -A full configuration entry would look like the sample below. - -```yaml -# Example configuration.yaml entry -sensor: - - platform: solarlog - name: solarlog - host: 192.168.1.123 -``` +This integration can be configured via the Home Assistant UI by navigating to +**Configuration** -> **Integrations**. +You will have to enter a name that is used as prefix for your sensors and a host to connect to your Solar-Log device. In case you would like to convert the values, for example, to Wh instead of the default kWh, you can use the [template platform](/integrations/template/). From b8b3fe37643fe61dba0858a02a67144b22ebb6ac Mon Sep 17 00:00:00 2001 From: David Date: Mon, 23 Nov 2020 13:13:29 -0500 Subject: [PATCH 20/67] Add documentation for the Twinkly integration (#15323) Co-authored-by: Franck Nijhof --- source/_integrations/twinkly.markdown | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 source/_integrations/twinkly.markdown diff --git a/source/_integrations/twinkly.markdown b/source/_integrations/twinkly.markdown new file mode 100644 index 00000000000..9652f048d83 --- /dev/null +++ b/source/_integrations/twinkly.markdown @@ -0,0 +1,28 @@ +--- +title: Twinkly +description: Instructions on how to integrate Twinkly LED string to Home Assistant. +ha_category: + - Light +ha_release: 0.119 +ha_config_flow: true +ha_domain: twinkly +ha_iot_class: Local pull +--- + +The Twinkly integration allows you to control [Twinkly](https://twinkly.com/) LED string from Home Assistant. + +The Twinkly devices does not store the effects locally, they are instead re-sent from the Twinkly application each time. +This means that this integration does not support to change the LED string effect. +It only supports to configure the brightness and to turn the device on and off. + +## Configuration + +You can setup this integration from the Home Assistant user interface: + +1. In Home Assistant, go to **Configuration > Integrations**. +1. At the bottom right, click on the **+** button. +1. In the list select the **Twinkly** integration. +1. Configure the host (or IP address) of your twinkly device. + + _If configured using an IP address, on your router / DHCP, you should assign a static IP to your Twinkly device._ + From 7ea145f3504e2933458e1c03d5859d5c4106739e Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Tue, 24 Nov 2020 09:18:22 +0100 Subject: [PATCH 21/67] Add Motion Blinds Integration (#15616) Co-authored-by: Franck Nijhof --- source/_integrations/motion_blinds.markdown | 32 ++++++++++++++++++ .../motion_blinds/Motion_App__get_key_1.jpg | Bin 0 -> 13103 bytes .../motion_blinds/Motion_App__get_key_2.jpg | Bin 0 -> 10616 bytes 3 files changed, 32 insertions(+) create mode 100644 source/_integrations/motion_blinds.markdown create mode 100644 source/images/integrations/motion_blinds/Motion_App__get_key_1.jpg create mode 100644 source/images/integrations/motion_blinds/Motion_App__get_key_2.jpg diff --git a/source/_integrations/motion_blinds.markdown b/source/_integrations/motion_blinds.markdown new file mode 100644 index 00000000000..c9268cc80a0 --- /dev/null +++ b/source/_integrations/motion_blinds.markdown @@ -0,0 +1,32 @@ +--- +title: Motion Blinds +description: Instructions on how to integrate Motion Blinds from Coulisse B.V. into Home Assistant. +ha_category: + - Cover +ha_iot_class: Local Polling +ha_release: 0.119.0 +ha_domain: motion_blinds +ha_codeowners: + - '@starkillerOG' +ha_config_flow: true +--- + +The integration allows you to control [Motion Blinds](https://motion-blinds.com) from [Coulisse B.V.](https://coulisse.com/products/motion). + +To add a Motion Bridge to your installation, click Configuration in the sidebar, then click Integrations. Click the + icon in the lower right. Then search for "Motion Blinds" and enter the setup. + +You will be asked for the IP address of the Motion Bridge, e.g., 192.168.1.100. Note that a static IP address is required in order for this integration to keep working properly. + +## Retrieving the API Key + + +The Motion Blinds API uses a 16 character key that can be retrieved from the official "Motion Blinds" app for [IOS](https://apps.apple.com/us/app/motion-blinds/id1437234324) or [Android](https://play.google.com/store/apps/details?id=com.coulisse.motion). + +Open the app, click the 3 dots in the top right corner, go to "settings", go to "Motion APP About", Please quickly tap this "Motion APP About" page 5 times, a popup will appear that gives you the key. + +Please note that "-" characters need to be included in the key when providing it to Home Assistant. The key needs to be similar to `12ab345c-d67e-8f` + +

+ + +

diff --git a/source/images/integrations/motion_blinds/Motion_App__get_key_1.jpg b/source/images/integrations/motion_blinds/Motion_App__get_key_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3ede21efd7d5ca89d3c9c28247a3bc5e7d16a7e GIT binary patch literal 13103 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 Mo0l9p=-2fB0`z^&!vFvP literal 0 HcmV?d00001 diff --git a/source/images/integrations/motion_blinds/Motion_App__get_key_2.jpg b/source/images/integrations/motion_blinds/Motion_App__get_key_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..35528c52bdc1fcfa30482ee597c69b7ac9149c2b GIT binary patch literal 10616 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 YEdTuRh{OP9e8hTF+P~|8mN4-D0H2WGssI20 literal 0 HcmV?d00001 From 6deb2273fdca5efd1e59581b914424cfd1e30856 Mon Sep 17 00:00:00 2001 From: koolsb <14332595+koolsb@users.noreply.github.com> Date: Tue, 24 Nov 2020 14:50:08 -0600 Subject: [PATCH 22/67] Update meraki.markdown (#15745) --- source/_integrations/meraki.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/meraki.markdown b/source/_integrations/meraki.markdown index 93240e61236..0621343580f 100644 --- a/source/_integrations/meraki.markdown +++ b/source/_integrations/meraki.markdown @@ -16,7 +16,7 @@ Use your Meraki AP as device tracker. Note that Meraki will see all devices, not 1. Make sure analytics and Scanning API are both enabled. 1. Make note of the Validator string, which will be used in the `device_tracker` configuration. 1. Click **Add a Post URL**: - 1. Set the Post URL to `https://YOUR_HOSTNAME/api/meraki?api_password=YOUR_HASS_PASSWORD` + 1. Set the Post URL to `https://YOUR_HOSTNAME/api/meraki` 1. Set the Secret to a randomly generated string, and make note of it for the `device_tracker` configuration. 1. Make sure the API Version is set to `2.0`. 1. Hit **Save** in the bottom right of the page. From e64254e0c0a8f921dc37d06c817d9dbfd1bf8795 Mon Sep 17 00:00:00 2001 From: Ron Klinkien Date: Fri, 27 Nov 2020 17:50:28 +0100 Subject: [PATCH 23/67] Added fireservicerota documentation (#14862) Co-authored-by: Franck Nijhof Co-authored-by: Klaas Schoute Co-authored-by: Paulus Schoutsen --- source/_integrations/fireservicerota.markdown | 224 ++++++++++++++++++ .../fireservicerota/dashboard.png | Bin 0 -> 108021 bytes 2 files changed, 224 insertions(+) create mode 100644 source/_integrations/fireservicerota.markdown create mode 100644 source/images/integrations/fireservicerota/dashboard.png diff --git a/source/_integrations/fireservicerota.markdown b/source/_integrations/fireservicerota.markdown new file mode 100644 index 00000000000..1541e2352d6 --- /dev/null +++ b/source/_integrations/fireservicerota.markdown @@ -0,0 +1,224 @@ +--- +title: FireServiceRota +description: Instructions on how to configure the FireServiceRota integration for Home Assistant. +ha_category: + - Binary Sensor + - Sensor + - Switch +ha_iot_class: Cloud Polling +ha_release: 0.119 +ha_codeowners: + - '@cyberjunky' +ha_config_flow: true +ha_domain: fireservicerota +--- + +FireServiceRota is a powerful and flexible availability, scheduling and dispatching system for firefighters. +It's the international brand of the Dutch [BrandweerRooster](https://www.brandweerrooster.nl), which is in use by more than 200 fire stations in The Netherlands. + +The FireServiceRota integration provides you real-time information about incidents (emergency calls) from your local fire station and the ability to send a response depending on your duty schedule. + +You will need a FireServiceRota or BrandweerRooster account. + +
+ +A word of caution: Do not solely rely on this integration for your emergency calls! + +
+ +This integration provides the following platforms: + +- Sensor: Incoming emergency calls. Metadata contains _among other data_ the location of the incident and a text-to-speech URL. The integration uses a WebSocket client connection with the service to ensure a minimum delay. +- Binary Sensor: Your current duty status (as scheduled via the FireServiceRota mobile app and/or website). +- Switch: Enabled for 30 minutes after an emergency call. ‘on’ represents a confirmed response. Use this to automate your emergency call response and save valuable seconds. + +On how to write automations using these platform read the 'Advanced Configuration' section below. + +## Configuration + +1. From Home Assistant, navigate to ‘Configuration’ then ‘Integrations’. Click the plus icon and type/select ‘FireServiceRota’. +1. Choose your platform `BrandweerRooster` or `FireServiceRota`. +1. Enter your login credentials. + +1. Click the Save button. + +## Entities + +The following entity types are created: + +### Incidents Sensor + +This is the main entity of the integration containing the incident message as it's `value`, it has several attributes which are described below. + +| Attribute | Description | +| --------- | ----------- | +| `trigger` | Type of trigger, `new` or `update`.| +| `state` | The state of the incident. | +| `created_at` | Date and time when incident was created.| +| `message_to_speech_url` | The URL of the mp3 file containing the spoken text of the incident.| +| `prio` | Priority of the incident, `a1`, `a2`, `b1` or `b2`.| +| `type` | Type of incident, e.g. `incident_alert`.| +| `responder_mode` | Modes of response, e.g. `available_in_schedule_is_acknowledgment`.| +| `can_respond_until` | Date and time until response is accepted.| +| `latitude` | The Latitude of the incident.| +| `longitude` | The Longitude of the incident.| +| `address_type` | Type of address, e.g. `home`.| +| `formatted_address` | Address in string format.| + +### Duty Binary Sensor + +This entity reflects the duty you have scheduled, the value can be `on` = on duty, `off` = no duty. When you have no duty the response switch is disabled which means you cannot respond to a call. + +| Attribute | Description | +| --------- | ----------- | +| `start_time` | Start date and time of duty schedule.| +| `end_time` | End date and time of duty schedule.| +| `available` | `true` or `false`.| +| `active` | `true` or `false`.| +| `assigned_function_ids` | Function id's, e.g. `540`.| +| `skill_ids` | Skill id's, e.g. `6, 8`.| +| `type` | Type, e.g. `standby_duty`.| +| `assigned function` | Assigned function, e.g. `Chauffeur`.| + +### Incident Response Switch + +With this switch you can respond to a incident, either by manually controlling the switch via the GUI, or by using an automation action. +It gets reset to `unknown` value with every incident received. Switching it to `on` means you send a response acknowledgement, switching it back `off` sends a response rejected. + +The following attributes are available: + +| Attribute | Description | +| --------- | ----------- | +| `user_name` | Your username.| +| `assigned_skill_ids` | Assigned skill ID's.| +| `responded_at` | Time you responded.| +| `start_time` | Incident response start time.| +| `status` | Status of response, e.g., `pending`.| +| `reported_status` | Reported status, e.g., `shown_up`.| +| `arrived_at_station` | `true` or `false`.| +| `available_at_incident_creation` | `true` or `false`.| +| `active_duty_function_ids` | Active function ID's, e.g., `540`.| + +## Advanced Configuration + +With Automation you can configure one or more of the following useful actions: + +1. Sound an alarm and/or switch on lights when an emergency incident is received. +1. Use text to speech to play incident details via a media player while getting dressed. +1. Respond with a response acknowledgment using a door-sensor when leaving the house or by pressing a button to let your teammates know you are underway. +1. Cast a FireServiceRota dashboard to a Chromecast device. (this requires a Nabu Casa subscription) + +These are documented below. + +### Example Automation + +{% raw %} + +```yaml +automation: + - alias: 'Switch on a light when incident is received' + trigger: + platform: state + entity_id: sensor.incidents + action: + service: light.turn_on + entity_id: light.bedroom + + - alias: 'Play TTS incident details when incident is received' + trigger: + platform: state + entity_id: sensor.incidents + attribute: message_to_speech_url + condition: + - condition: not + conditions: + - condition: state + entity_id: sensor.incidents + attribute: message_to_speech_url + state: None + action: + - service: media_player.play_media + data_template: + entity_id: media_player.nest_hub_bedroom + media_content_id: > + {{ state_attr('sensor.incidents','message_to_speech_url') }} + media_content_type: 'audio/mp4' + + - alias: 'Send response acknowledgement when a button is pressed' + trigger: + platform: state + entity_id: switch.response_button + action: + service: homeassistant.turn_on + entity_id: switch.incident_response + + - alias: 'Cast FireServiceRota dashboard to Nest Hub' + trigger: + platform: homeassistant + event: start + action: + service: cast.show_lovelace_view + data: + entity_id: media_player.nest_hub_bedroom + view_path: fsr +``` + + +### Example Lovelace Dashboard + +```yaml +panel: true +title: Home +views: + - badges: [] + cards: + - entity: sensor.incidents + type: entity + - cards: + - cards: + - default_zoom: 15 + entities: + - entity: sensor.incidents + hours_to_show: 0 + type: map + type: vertical-stack + - cards: + - entities: + - entity: sensor.incidents + hours_to_show: 1 + refresh_interval: 0 + type: history-graph + type: vertical-stack + type: horizontal-stack + - content: | + {{ states('sensor.incidents') }} + title: Incident + type: markdown + - entities: + - entity: binary_sensor.duty + - entity: switch.incident_response + type: entities + path: fsr + title: FireServiceRota + type: horizontal-stack +``` + +{% endraw %} + +### Screenshot + +Example of a FireServiceRota dashboard + +This screenshot shows what a FireServiceRota dashboard can look like. + +## Debugging + +The FireServiceRota integration will log additional information about WebSocket incidents received, response and duty status gathered, and other messages when the log level is set to `debug`. Add the relevant lines below to the `configuration.yaml`: + +```yaml +logger: + default: info + logs: + homeassistant.components.fireservicerota: debug + pyfireservicerota: debug +``` diff --git a/source/images/integrations/fireservicerota/dashboard.png b/source/images/integrations/fireservicerota/dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..eaa27b7266e3c0f2500d0cae4f1b5b107f70f3cc GIT binary patch literal 108021 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 FV1h&lsjmP4 literal 0 HcmV?d00001 From 954732a5370b88adf40dd93abae75a853506a779 Mon Sep 17 00:00:00 2001 From: shred86 <32663154+shred86@users.noreply.github.com> Date: Fri, 27 Nov 2020 08:55:34 -0800 Subject: [PATCH 24/67] Update Abode for MFA support and quality scale rating (#15755) --- source/_integrations/abode.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/abode.markdown b/source/_integrations/abode.markdown index 73fd777d8c5..ba989b90c6b 100644 --- a/source/_integrations/abode.markdown +++ b/source/_integrations/abode.markdown @@ -36,7 +36,7 @@ There is currently support for the following device types within Home Assistant: ## Configuration -To use Abode devices in your installation, add your Abode account from the integrations page. Two-factor authentication must be disabled on your Abode account. Alternatively, Abode can be configured by adding the following `abode` section to your `configuration.yaml` file: +To use Abode devices in your installation, add your Abode account from the integrations page. Alternatively, Abode can be configured by adding the following `abode` section to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry From 288205f0e331d08098bf6aeefbb7856a17f653ed Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sat, 28 Nov 2020 23:51:57 +0100 Subject: [PATCH 25/67] Removed relative time sensor from description (#15634) --- source/_integrations/cert_expiry.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/cert_expiry.markdown b/source/_integrations/cert_expiry.markdown index 1823fb68cae..91d3661b90e 100644 --- a/source/_integrations/cert_expiry.markdown +++ b/source/_integrations/cert_expiry.markdown @@ -12,7 +12,7 @@ ha_codeowners: ha_domain: cert_expiry --- -The `cert_expiry` integration fetches the certificate from a configured host and displays its expiration in both timestamp and days-to-expiry sensors. +The `cert_expiry` integration fetches the certificate from a configured host and displays its expiration in a timestamp sensor. ## Configuration From 1fef709bcc98bd2903850bd9731d9fd962430592 Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Mon, 30 Nov 2020 09:51:48 +0100 Subject: [PATCH 26/67] Update Shelly documentation (#15778) Co-authored-by: Franck Nijhof --- source/_integrations/shelly.markdown | 57 +++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown index 6d545187c22..2c0e4afcbbe 100644 --- a/source/_integrations/shelly.markdown +++ b/source/_integrations/shelly.markdown @@ -51,8 +51,61 @@ Names are set from the device web page: - Channel name for single-channel devices can be set in **Settings** >> **CHANNEL NAME** - Channel name for multi-channel devices can be set in **Settings** >> **CHANNEL NAME** after selecting the channel, by clicking on the channel name. +## Appliance type + +Shelly device relays are added to the Home Assistant by default as `switch` entities. A relay can be added as a `light` entity if the device uses firmware version 1.9.0 or newer and the **Settings** >> **APPLIANCE TYPE** value is set to `light`. + +## Events + +If the **BUTTON TYPE** of the switch connected to the device is set to `momentary` or `detached switch`, integration fires events when the switch is used. You can use these events in your automations. + +### Automation examples + +```yaml +- alias: "Toggle living room light" + trigger: + platform: event + event_type: shelly.click + event_data: + device: shellyswitch25-AABBCC + channel: 1 + click_type: single + action: + service: light.toggle + entity_id: light.living_room + +- alias: "Toggle living room lamp" + trigger: + platform: event + event_type: shelly.click + event_data: + device: shellyswitch25-AABBCC + channel: 2 + click_type: long + action: + service: light.toggle + entity_id: light.lamp_living_room +``` + +### Possible values for `click_type` + +| Shelly input event | Click Type | +| ------------------ | --------------| +| `S` | `single` | +| `SS` | `double` | +| `SSS` | `triple` | +| `L` | `long` | +| `SL` | `single_long` | +| `LS` | `long_single` | + +
+ +Not all devices support all input events. You can check on [Shelly API Reference](https://shelly-api-docs.shelly.cloud/) website what types of Shelly input events your device supports. + +
+ ## Known issues and limitations - Only supports firmware 1.8 and later -- Support relays, lights (with brightness), sensors and rollers -- Support for battery-powered devices is currently very limited +- Support for RGB devices is limited +- Support for battery-powered devices is limited From 441619e072d0ac45016fb97fb4239b77fff2e6ed Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Mon, 30 Nov 2020 10:19:09 +0100 Subject: [PATCH 27/67] Fix GitHub suggestion failure in PR #15778 (#15785) --- source/_integrations/shelly.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown index 2c0e4afcbbe..7e85a6ab2e7 100644 --- a/source/_integrations/shelly.markdown +++ b/source/_integrations/shelly.markdown @@ -84,7 +84,7 @@ If the **BUTTON TYPE** of the switch connected to the device is set to `momentar click_type: long action: service: light.toggle - entity_id: light.lamp_living_room + entity_id: light.lamp_living_room ``` ### Possible values for `click_type` From 0e6e96dcc19cbe69a66404a62237b2079e49b447 Mon Sep 17 00:00:00 2001 From: Dermot Duffy Date: Mon, 30 Nov 2020 09:40:07 -0800 Subject: [PATCH 28/67] Update Hyperion docs to reflect the new configflow (#15763) --- source/_integrations/hyperion.markdown | 55 +++++++++++++------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/source/_integrations/hyperion.markdown b/source/_integrations/hyperion.markdown index 490a1a7fc5b..602686baca7 100644 --- a/source/_integrations/hyperion.markdown +++ b/source/_integrations/hyperion.markdown @@ -14,41 +14,40 @@ The `hyperion` platform allows you to integrate your [Hyperion](https://docs.hyperion-project.org/) into Home Assistant. Hyperion is an open source Ambilight implementation which runs on many platforms. -NOTE: [Hyperion-NG](https://github.com/hyperion-project/hyperion.ng) is +**NOTE**: [Hyperion-NG](https://github.com/hyperion-project/hyperion.ng) is supported, the original [discontinued Hyperion](https://github.com/hyperion-project/hyperion) is not supported by this integration. ## Configuration -To use your Hyperion light in your installation, add the following to your `configuration.yaml` file: +This integration can be configured using the integrations in the +Home Assistant frontend. -```yaml -# Example configuration.yaml entry -light: - - platform: hyperion - host: IP_ADDRESS -``` +Menu: **Configuration** -> **Integrations**. -{% configuration %} - host: - description: The IP address of the device the Hyperion service is running on. - required: true - type: string - port: - description: The port used to communicate with the Hyperion service. - required: false - type: integer - default: 19444 - name: - description: The name of the device used in the frontend. - required: false - type: string - priority: - description: The priority for color and effects, make sure this is lower then the streaming sources priority in hyperion itself (typically lower than 200 is appropriate). - required: false - type: integer - default: 128 -{% endconfiguration %} +In most cases, Hyperion servers will be automatically discovered by +Home Assistant. Those automatically discovered devices are listed +on the integrations page. + +If for some reason Hyperion isn't discovered, it can be added manually. + +Click on the `+` sign to add an integration and click on **Hyperion**. +After completing the configuration flow, the Hyperion integration will be +available. + +### Extra configuration of the integration + +All configuration options are offered from the frontend. Choose `Options` under the +relevant entry on the `Integrations` page. + +Options supported: +- **priority**: The priority for color and effects, make sure this is lower then the streaming sources priority in hyperion itself (typically lower than 200 is appropriate). + +## Hyperion Instances + +This integration supports multiple Hyperion instances running on a single Hyperion +server. As instances are added/removed on the Hyperion UI, they will automatically be +added/removed from Home Assistant. ## Effects From a3c19a84618f191564f7906d1239aabc2dfc9a49 Mon Sep 17 00:00:00 2001 From: Andre Lengwenus Date: Mon, 30 Nov 2020 18:40:39 +0100 Subject: [PATCH 29/67] Rename LCN logic operation sensor states (#15767) --- source/_integrations/lcn.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/lcn.markdown b/source/_integrations/lcn.markdown index ecad4a4297a..5d5cc80064e 100644 --- a/source/_integrations/lcn.markdown +++ b/source/_integrations/lcn.markdown @@ -402,7 +402,7 @@ The [MOTOR_PORT](#ports) values specify which hardware relay or outputs configur | Constant | Values | | -------- | ------ | | LED_STATE | `on`, `off`, `blink`, `flicker` | -| LOGICOP_STATE | `not`, `or`, `and` | +| LOGICOP_STATE | `none`, `some`, `all` | | KEY_STATE | `hit`, `make`, `break`, `dontsend` | ### Keys: From 4d40da6bd3b1f30e813327415b295ced79f6d431 Mon Sep 17 00:00:00 2001 From: Felipe Martins Diel <41558831+felipediel@users.noreply.github.com> Date: Mon, 30 Nov 2020 14:42:19 -0300 Subject: [PATCH 30/67] Add support for learning RF commands with Broadlink remotes (#14398) --- source/_integrations/broadlink.markdown | 105 ++++++++++++++++++------ 1 file changed, 78 insertions(+), 27 deletions(-) diff --git a/source/_integrations/broadlink.markdown b/source/_integrations/broadlink.markdown index 955d6430761..d53fd17aab2 100644 --- a/source/_integrations/broadlink.markdown +++ b/source/_integrations/broadlink.markdown @@ -40,34 +40,67 @@ The entities are divided into three subdomains: ## Remote -The `remote` entities allow you to control Broadlink universal remotes. You can learn IR codes, send the codes you have learned and send RF codes (use the base64 functionality). These entities are created automatically when you configure a device that has IR/RF capabilities. +The `remote` entities allow you to learn and send codes with universal remotes. They are created automatically when you configure devices with IR/RF capabilities. -### Learning IR codes +### Learning commands -Use the `remote.learn_command` service to learn IR codes. +Use `remote.learn_command` to learn IR and RF codes. These codes are grouped by device and stored as commands in the [storage folder](#Learned%20codes%20storage%20location). They can be sent with the `remote.send_command` service later. -| Service data attribute | Optional | Description | -| ---------------------- | -------- | ------------------------------------ | -| `entity_id` | no | ID of the remote. | -| `device` | no | Name of the device to be controlled. | -| `command` | no | Names of the commands to be learned. | -| `alternative` | yes | Are they toggle commands? | -Example 1: Learn a single command +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ------------------------------------- | +| `entity_id` | no | ID of the remote. | +| `device` | no | Name of the device to be controlled. | +| `command` | no | Names of the commands to be learned. | +| `command_type` | yes | Command type. `ir` (default) or `rf`. | +| `alternative` | yes | Toggle command indicator. | + +#### Learning IR codes + +To learn IR codes, call `remote.learn_command` with the device name and command to be learned: ```yaml # Example configuration.yaml entry script: - learn_mute_tv: + learn_tv_power: sequence: - service: remote.learn_command data: entity_id: remote.bedroom device: television - command: ok + command: power ``` -Example 2: Learn a sequence of commands +When the LED blinks, point the remote at the Broadlink device and press the button you want to learn. + +After this, you can call `remote.send_command` with the same data to send the code. You can also access the code in the storage folder to build a custom IR/RF switch or send it with the prefix `b64:`. + +#### Learning RF codes + +Learning RF codes takes place in two steps. First call `remote.learn_command` with the `command_type: rf` option: + +```yaml +# Example configuration.yaml entry +script: + learn_car_unlock: + sequence: + - service: remote.learn_command + data: + entity_id: remote.garage + device: car + command: unlock + command_type: rf +``` + +When the LED blinks for the first time, press and hold the button to sweep the frequency. Then wait for the LED to blink again and press the button a second time to capture the code. + +The codes will be stored in the same way as the IR codes. You don't need to specify `command_type` to send them because this information is stored in the first byte of the code. + +_Tip:_ Click Notifications in the sidebar after calling the service and follow the instructions to make sure you are pressing the button at the right time. + +#### Learning a sequence of commands + +In order to streamline the learning process, you may want to provide a list of commands to be learned sequentially: ```yaml # Example configuration.yaml entry @@ -85,9 +118,15 @@ script: - volume down ``` -Example 3: Learn a toggle command +After calling this service, you will be prompted to press the buttons in the same order as provided. Check the notifications to stay on track and make sure you are pressing the right button at the right time. -The `alternative` flag is useful for capturing commands in which the same button is used for more than one purpose, such as the power button, which can turn the television on and off. +#### Learning an alternative code + +Some protocols require a toggle bit to distinguish one button press from another. In such cases, learning an alternative code will significantly increase the response rate of the device. + +The toggle bit is common when a button is used for multiple purposes, such as the power button, which can turn the television on and off, and the volume button, which can be used with a short press or a long press. + +If the code works sometimes, and sometimes it doesn't, you can try to relearn it with the `alternative: true` option: ```yaml # Example configuration.yaml entry @@ -102,15 +141,15 @@ script: alternative: true ``` -In the above example, two codes will be captured for the power command, and they will be sent alternately each time this command is called. +When the LED blinks for the first time, press the button you want to learn. Then wait for the LED to blink again and press the same button. By doing so, two different codes will be learned for the same command, and they will be sent alternately at each call. #### Learned codes storage location -The learned codes are stored in the `/configuration/.storage` folder in a file called `broadlink_remote_xxxxxxxxxxx_codes.json`. You can open this file with a text editor and copy the codes to set up a custom switch, but beware: the files in the .storage folder _should never be edited manually_. +The learned codes are stored in `/configuration/.storage/` in a JSON file called `broadlink_remote_MACADDRESS_codes`. You can open this file with a text editor and copy the codes to set up [custom IR/RF switches](#Setting%20up%20custom%20IR/RF%20switches) or to send them as [base64 codes](#Sending%20a%20base64%20code), but beware: the files in the .storage folder _should never be edited manually_. -### Sending IR/RF codes +### Sending commands -Use the `remote.send_command` service to send IR/RF codes. +After learning IR and RF codes with the `remote.learn_command` service, you can use `remote.send_command` to send them. You can also use this service to send base64 codes taken from elsewhere. | Service data attribute | Optional | Description | | ---------------------- | -------- | ---------------------------------------------------------------------- | @@ -120,21 +159,25 @@ Use the `remote.send_command` service to send IR/RF codes. | `num_repeats` | yes | Number of times to repeat the commands. | | `delay_secs` | yes | Interval in seconds between one send and another. | -Example 1: Send a single command +#### Sending a command + +To send a command that you've learned, call `remote.send_command` with the device name and the command to be sent: ```yaml # Example configuration.yaml entry script: - mute_tv: + tv_power: sequence: - service: remote.send_command data: entity_id: remote.bedroom device: television - command: mute + command: power ``` -Example 2: Send a command repeatedly +#### Sending a command repeatedly + +Use `num_repeats:` to send the same command multiple times: ```yaml # Example configuration.yaml entry @@ -149,7 +192,9 @@ script: num_repeats: 20 ``` -Example 3: Send a sequence of commands +#### Sending a sequence of commands + +You can provide a list of commands to be sent sequentially: ```yaml # Example configuration.yaml entry @@ -165,7 +210,9 @@ script: - turn off display ``` -Example 4: Send a single base64 code +#### Sending a base64 code + +Sometimes you may want to send a base64 code obtained elsewhere. Use the `b64:` prefix for this: ```yaml # Example configuration.yaml entry @@ -178,7 +225,9 @@ script: command: b64:JgAcAB0dHB44HhweGx4cHR06HB0cHhwdHB8bHhwADQUAAAAAAAAAAAAAAAA= ``` -Example 5: Send a sequence of base64 codes +#### Sending a sequence of base64 codes + +You can send a sequence of base64 codes just like normal commands: ```yaml # Example configuration.yaml entry @@ -193,7 +242,9 @@ script: - b64:JgAaABweOR4bHhwdHB4dHRw6HhsdHR0dOTocAA0FAAAAAAAAAAAAAAAAAAA= ``` -Example 6: Mix commands and base64 codes +#### Mixing commands and base64 codes + +You can mix commands and base64 codes: ```yaml # Example configuration.yaml entry From caf898caefda2a9404eeb29e534eb2103f6dc927 Mon Sep 17 00:00:00 2001 From: Willem-Jan Date: Mon, 30 Nov 2020 20:41:32 +0100 Subject: [PATCH 31/67] Update docs bsblan (#15386) --- source/_integrations/bsblan.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_integrations/bsblan.markdown b/source/_integrations/bsblan.markdown index b54d79cdf67..d3e20b66212 100644 --- a/source/_integrations/bsblan.markdown +++ b/source/_integrations/bsblan.markdown @@ -30,9 +30,8 @@ Menu: **Configuration** -> **Integrations**. Click on the `+` sign to add an integration and click on **BSBLan**. Fill in the IP address of the device in your network and, if needed, -the port number. The default value should be 80. -For authentication now only passkey is supported. -Username and password are not supported yet. This will be supported in the next release. +the port number. The default value should be `80`. +For authentication passkey is supported and also HTTP authentication with username and password. After completing the configuration flow, the BSBLan Climate integration will be available. @@ -45,4 +44,5 @@ To see a more detailed listing of the reported systems which are successfully us - [`Elco`](https://1coderookie.github.io/BSB-LPB-LAN_EN/chap03.html#312-elco) - [`Other Manufacturers (e.g. Fujitsu, Atlantic, Weishaupt)`](https://1coderookie.github.io/BSB-LPB-LAN_EN/chap03.html#313-other-manufacturers) -The integration is tested with firmware the stable version `v0.43`. +The integration is tested with the stable firmware version `1.00`. A newer firmware versions will not work, because the parameters are changed of the specific info that is needed. +Please use the latest release. [release 1.0](https://github.com/fredlcore/bsb_lan/releases/tag/v1.0) From e2e5c949211abefc8f2fcc558c4b5de4c323c73c Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 1 Dec 2020 09:01:31 +0100 Subject: [PATCH 32/67] Add support for multiple tags and devices in tag trigger (#15612) --- source/_docs/automation/trigger.markdown | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index f58013794d9..f16c68ffe84 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -331,8 +331,6 @@ A very thorough explanation of this is available in the Wikipedia article about Fires when a [tag](/integrations/tag) is scanned. For example, a NFC tag is scanned using the Home Assistant Companion mobile application. -{% raw %} - ```yaml automation: trigger: @@ -340,13 +338,9 @@ automation: tag_id: A7-6B-90-5F ``` -{% endraw %} - Additionally, you can also only trigger if a card is scanned by a specific device/scanner by setting the `device_id`: -{% raw %} - ```yaml automation: trigger: @@ -355,7 +349,19 @@ automation: device_id: 0e19cd3cf2b311ea88f469a7512c307d ``` -{% endraw %} +Or trigger on multiple possible devices for multiple tags: + +```yaml +automation: + trigger: + platform: tag + tag_id: + - A7-6B-90-5F + - A7-6B-15-AC + device_id: + - 0e19cd3cf2b311ea88f469a7512c307d + - d0609cb25f4a13922bb27d8f86e4c821 +``` ### Template trigger From 1619f6926430082feb751cd8d6a0f4f34f67271c Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 1 Dec 2020 17:16:48 +0100 Subject: [PATCH 33/67] Remove Ubee Router integration (ADR-0004) (#15796) --- CODEOWNERS | 1 - source/_integrations/ubee.markdown | 63 ------------------- source/_posts/2019-04-24-release-92.markdown | 3 +- source/_posts/2019-05-16-release-93.markdown | 3 +- source/_posts/2019-06-26-release-95.markdown | 3 +- source/_posts/2019-12-11-release-103.markdown | 3 +- source/_posts/2020-02-05-release-105.markdown | 3 +- source/_posts/2020-03-18-release-107.markdown | 3 +- source/_posts/2020-04-08-release-108.markdown | 3 +- source/_redirects | 2 - 10 files changed, 7 insertions(+), 80 deletions(-) delete mode 100644 source/_integrations/ubee.markdown diff --git a/CODEOWNERS b/CODEOWNERS index c0f2e59e8fb..f50bd8fec90 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -452,7 +452,6 @@ source/_integrations/transmission.markdown @engrbm87 @JPHutchins source/_integrations/tts.markdown @pvizeli source/_integrations/tuya.markdown @ollo69 source/_integrations/twentemilieu.markdown @frenck -source/_integrations/ubee.markdown @mzdrale source/_integrations/unifi.markdown @Kane610 source/_integrations/unifiled.markdown @florisvdk source/_integrations/upb.markdown @gwww diff --git a/source/_integrations/ubee.markdown b/source/_integrations/ubee.markdown deleted file mode 100644 index 6e355a24120..00000000000 --- a/source/_integrations/ubee.markdown +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Ubee Router -description: Instructions on how to integrate Ubee routers into Home Assistant. -ha_category: - - Presence Detection -ha_release: 0.89 -ha_iot_class: Local Polling -ha_codeowners: - - '@mzdrale' -ha_domain: ubee ---- - -This platform offers presence detection by looking at connected devices to a [Ubee Router](https://www.ubeeinteractive.com/). - -To use a Ubee router in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -device_tracker: - - platform: ubee - host: ROUTER_IP_ADDRESS - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD -``` - -{% configuration %} -model: - description: Ubee Router model, e.g., `EVW32C-0N`. If omitted, model will be detected automatically. - required: false - default: detect - type: string -host: - description: The IP address of your router, e.g., `192.168.1.1`. - required: true - type: string -username: - description: The username of a user with administrative privileges, usually `admin`. - required: true - type: string -password: - description: The password for your given admin account. - required: true - type: string -{% endconfiguration %} - -Supported models: - -- Ambit EVW320B -- Ambit EVW321B -- Ubee DDW36C -- Ubee DVW32CB -- Ubee EVW3200-Wifi -- Ubee EVW3226 (UPC) -- Ubee EVW32C-0N - -
- -This integration uses pyUbee library, which was tested with models listed above. If you have different model of Ubee Router and it doesn't work with this component, please create pyUbee issue to request for support for your model. - -
- -By default, Home Assistant pulls information about connected devices from Ubee router every 5 seconds. -See the [device tracker integration page](/integrations/device_tracker/) for instructions on how to configure the people to be tracked. diff --git a/source/_posts/2019-04-24-release-92.markdown b/source/_posts/2019-04-24-release-92.markdown index f86136fef7a..84755f12c19 100644 --- a/source/_posts/2019-04-24-release-92.markdown +++ b/source/_posts/2019-04-24-release-92.markdown @@ -405,7 +405,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Catch connection reset ([@balloob] - [#22982]) ([websocket_api docs]) - Stream support for Netatmo cameras ([@cgtobi] - [#22952]) ([netatmo docs]) - Google Assistant: Migrate light setting trait to use HSV color spectrum ([@balloob] - [#22980]) ([google_assistant docs]) (breaking change) -- Bump pyubee version to support more models and detect model automatically ([@mzdrale] - [#22450]) ([ubee docs]) +- Bump pyubee version to support more models and detect model automatically ([@mzdrale] - [#22450]) - Load requirements and dependencies from manifests. Fallback to current `REQUIREMENTS` and `DEPENDENCIES` ([@rohankapoorcom] - [#22717]) (breaking change) - Add device HmIP-MIOB to Homematic IP Cloud ([@SukramJ] - [#22975]) ([homematicip_cloud docs]) - Prevent the projector to toogle on/off ([@stbkde] - [#22985]) ([epson docs]) @@ -1081,7 +1081,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [trend docs]: /integrations/trend/ [tts docs]: /integrations/tts/ [twilio docs]: /integrations/twilio/ -[ubee docs]: /integrations/ubee/ [version docs]: /integrations/version/ [water_heater docs]: /integrations/water_heater/ [websocket_api docs]: /integrations/websocket_api/ diff --git a/source/_posts/2019-05-16-release-93.markdown b/source/_posts/2019-05-16-release-93.markdown index 3317d19f38c..94c7bc04629 100644 --- a/source/_posts/2019-05-16-release-93.markdown +++ b/source/_posts/2019-05-16-release-93.markdown @@ -282,7 +282,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Fix non-syncthru supporting printers ([@nielstron] - [#21482]) ([syncthru docs]) - Add support for a wider variety of EnOcean devices ([@bdurrer] - [#22052]) ([enocean docs]) - Convert Pollen.com sensor into IQVIA component ([@bachya] - [#22986]) ([iqvia docs]) ([pollen docs]) (breaking change) (new-integration) (new-platform) -- Upgrade to pyubee==0.6 ([@StevenLooman] - [#23355]) ([ubee docs]) +- Upgrade to pyubee==0.6 ([@StevenLooman] - [#23355]) - Fix tox.ini lint target ([@ViViDboarder] - [#23359]) - Add media player external url ([@balloob] - [#23337]) ([media_player docs]) - Fix race condition. ([@mitchellrj] - [#21244]) ([plex docs]) @@ -859,7 +859,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [tplink_lte docs]: /integrations/tplink_lte/ [traccar docs]: /integrations/traccar/ [trend docs]: /integrations/trend/ -[ubee docs]: /integrations/ubee/ [upc_connect docs]: /integrations/upc_connect/ [upnp docs]: /integrations/upnp/ [velux docs]: /integrations/velux/ diff --git a/source/_posts/2019-06-26-release-95.markdown b/source/_posts/2019-06-26-release-95.markdown index 10582a641bf..f6de57b1405 100644 --- a/source/_posts/2019-06-26-release-95.markdown +++ b/source/_posts/2019-06-26-release-95.markdown @@ -301,7 +301,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add websock command to query device for triggers ([@emontnemery] - [#24044]) ([automation docs]) ([light docs]) - Uber API is going away on June 13, 2019, remove component ([@robbiet480] - [#24468]) (breaking change) - Use met.no instead of yr.no in default config ([@thomasloven] - [#24470]) -- Bump pyubee to 0.7 to support more models ([@mzdrale] - [#24477]) ([ubee docs]) +- Bump pyubee to 0.7 to support more models ([@mzdrale] - [#24477]) - Somfy open api ([@tetienne] - [#19548]) ([somfy docs]) (new-platform) - Add APRS device tracker component ([@PhilRW] - [#22469]) ([aprs docs]) (new-platform) - Add Linky sensors : yesterday + months + years ([@Quentame] - [#23726]) (breaking change) @@ -780,7 +780,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [totalconnect docs]: /integrations/totalconnect/ [traccar docs]: /integrations/traccar/ [tradfri docs]: /integrations/tradfri/ -[ubee docs]: /integrations/ubee/ [unifi docs]: /integrations/unifi/ [velbus docs]: /integrations/velbus/ [velux docs]: /integrations/velux/ diff --git a/source/_posts/2019-12-11-release-103.markdown b/source/_posts/2019-12-11-release-103.markdown index 4a795095b65..ea96afa1c48 100644 --- a/source/_posts/2019-12-11-release-103.markdown +++ b/source/_posts/2019-12-11-release-103.markdown @@ -556,7 +556,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - 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 imports to top for ubee ([@springstan] - [#29105]) - 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]) @@ -1771,7 +1771,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [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/ diff --git a/source/_posts/2020-02-05-release-105.markdown b/source/_posts/2020-02-05-release-105.markdown index 1101061275d..a60f6f205c7 100644 --- a/source/_posts/2020-02-05-release-105.markdown +++ b/source/_posts/2020-02-05-release-105.markdown @@ -765,7 +765,7 @@ Hats over your heart for these shuttered integrations. Pour one out for: - Search: Add search to default config and don't resolve area ([@bramkragten] - [#30762]) ([default_config docs]) ([search docs]) - Allow input_* and timer component setup without config ([@Adminiuga] - [#30772]) ([input_boolean docs]) ([input_number docs]) ([input_select docs]) ([input_text docs]) ([timer docs]) - Add Config Flow support, Device Registry support, available property to vizio component ([@raman325] - [#30653]) ([vizio docs]) (breaking change) -- Update pyubee to 0.8 ([@mzdrale] - [#30785]) ([ubee docs]) +- Update pyubee to 0.8 ([@mzdrale] - [#30785]) - Add support for vacuums to Alexa. ([@ochlocracy] - [#30764]) ([alexa docs]) - Mark hide_entity deprecated in automation integration ([@frenck] - [#30799]) ([automation docs]) (breaking change) - Bump librouteros to 3.0.0 ([@springstan] - [#30800]) ([mikrotik docs]) @@ -1544,7 +1544,6 @@ Hats over your heart for these shuttered integrations. Pour one out for: [tod docs]: /integrations/tod/ [tplink docs]: /integrations/tplink/ [tuya docs]: /integrations/tuya/ -[ubee docs]: /integrations/ubee/ [velbus docs]: /integrations/velbus/ [versasense docs]: /integrations/versasense/ [vicare docs]: /integrations/vicare/ diff --git a/source/_posts/2020-03-18-release-107.markdown b/source/_posts/2020-03-18-release-107.markdown index 66ac327b93f..f12d7444474 100644 --- a/source/_posts/2020-03-18-release-107.markdown +++ b/source/_posts/2020-03-18-release-107.markdown @@ -746,7 +746,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Bump pyicloud to 0.9.3 ([@Quentame] - [#32582]) ([icloud docs]) - Upgrade youtube_dl to version 2020.03.08 ([@BKPepe] - [#32581]) ([media_extractor docs]) - Bump denonavr to 0.8.0 ([@scarface-4711] - [#32578]) ([denonavr docs]) -- Add support for Ubee Router DVW32CB ([@seanvictory] - [#32406]) ([ubee docs]) +- Add support for Ubee Router DVW32CB ([@seanvictory] - [#32406]) - Bump rflink to 0.0.52 ([@jeyrb] - [#32588]) ([rflink docs]) - Correct grammatical error in CUSTOM_WARNING ([@davet2001] - [#32569]) - Add Steam game ID and screenshot paths as attributes ([@i00] - [#32005]) ([steam_online docs]) @@ -1441,7 +1441,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [transmission docs]: /integrations/transmission/ [tts docs]: /integrations/tts/ [twitch docs]: /integrations/twitch/ -[ubee docs]: /integrations/ubee/ [unifi docs]: /integrations/unifi/ [upnp docs]: /integrations/upnp/ [utility_meter docs]: /integrations/utility_meter/ diff --git a/source/_posts/2020-04-08-release-108.markdown b/source/_posts/2020-04-08-release-108.markdown index ed2a6a4b9d3..cf63cf72652 100644 --- a/source/_posts/2020-04-08-release-108.markdown +++ b/source/_posts/2020-04-08-release-108.markdown @@ -651,7 +651,7 @@ These integrations have been removed. The websites for both have changed, causin - Type hint improvements ([@scop] - [#32905]) ([directv docs]) ([directv docs]) ([gtfs docs]) ([here_travel_time docs]) ([remote docs]) ([switch docs]) ([switcher_kis docs]) ([vizio docs]) ([zone docs]) - Small tweaks ([@dshokouhi] - [#32946]) ([obihai docs]) - Resolve unexpected exception caused by sinch error_code being a string ([@bendikrb] - [#32929]) ([sinch docs]) -- Bump pyubee to 0.10 to support more Ubee routers ([@mzdrale] - [#32934]) ([ubee docs]) +- Bump pyubee to 0.10 to support more Ubee routers ([@mzdrale] - [#32934]) - Add support for homekit valve accessories to homekit_controller ([@Jc2k] - [#32937]) ([homekit_controller docs]) - Remove deprecated features from MQTT platforms ([@emontnemery] - [#32909]) ([mqtt docs]) (breaking change) - Add pending to template alarm ([@MatthewFlamm] - [#31614]) ([template docs]) @@ -1450,7 +1450,6 @@ These integrations have been removed. The websites for both have changed, causin [tplink docs]: /integrations/tplink/ [tts docs]: /integrations/tts/ [twentemilieu docs]: /integrations/twentemilieu/ -[ubee docs]: /integrations/ubee/ [unifi docs]: /integrations/unifi/ [velbus docs]: /integrations/velbus/ [version docs]: /integrations/version/ diff --git a/source/_redirects b/source/_redirects index 975a28dbe18..1639219dcd4 100644 --- a/source/_redirects +++ b/source/_redirects @@ -366,7 +366,6 @@ /components/device_tracker.tplink /integrations/tplink /components/device_tracker.traccar /integrations/traccar /components/device_tracker.trackr /integrations/trackr -/components/device_tracker.ubee /integrations/ubee /components/device_tracker.ubus /integrations/ubus /components/device_tracker.unifi /integrations/unifi /components/device_tracker.unifi_direct /integrations/unifi_direct @@ -1916,7 +1915,6 @@ /components/twilio_sms /integrations/twilio_sms /components/twitch /integrations/twitch /components/twitter /integrations/twitter -/components/ubee /integrations/ubee /components/ubus /integrations/ubus /components/ue_smart_radio /integrations/ue_smart_radio /components/uk_transport /integrations/uk_transport From 049b38f6c613ae7c9cb0aa418def2c73c3f1518a Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Tue, 1 Dec 2020 17:30:54 +0100 Subject: [PATCH 34/67] Removed unit of measurement from config (#15750) --- source/_integrations/uptime.markdown | 6 ------ 1 file changed, 6 deletions(-) diff --git a/source/_integrations/uptime.markdown b/source/_integrations/uptime.markdown index a0bc44dc199..9c60a196188 100644 --- a/source/_integrations/uptime.markdown +++ b/source/_integrations/uptime.markdown @@ -28,11 +28,6 @@ name: required: false type: string default: Uptime -unit_of_measurement: - description: "Units for uptime measurement in either `days`, `hours` or `minutes`." - required: false - type: string - default: days {% endconfiguration %} ## Example @@ -42,5 +37,4 @@ unit_of_measurement: sensor: - platform: uptime name: Time Online - unit_of_measurement: hours ```` From 11ef3cbdbd1bf8fa3c3bd89118d10b0e25154f21 Mon Sep 17 00:00:00 2001 From: Allen Porter Date: Tue, 1 Dec 2020 08:47:54 -0800 Subject: [PATCH 35/67] Add documentation for nest device triggers (#15724) --- source/_integrations/nest.markdown | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/_integrations/nest.markdown b/source/_integrations/nest.markdown index 63d9d9319b3..3be3c36c503 100644 --- a/source/_integrations/nest.markdown +++ b/source/_integrations/nest.markdown @@ -6,6 +6,7 @@ ha_category: - Binary Sensor - Camera - Climate + - Doorbell - Sensor ha_iot_class: Cloud Push ha_release: 0.7 @@ -165,6 +166,18 @@ All Google Nest Thermostat models have traits exposed from the SDM API. The init Given a thermostat named `Upstairs` then sensors are created with names such as `sensor.upstairs_temperature` or `sensor.upstairs_humidity`. +## Automation and Device Triggers + +All Google Nest Cam models and the Google Nest Hello Video Doorbell support [Device Triggers](/docs/automation/trigger/#device-triggers) that enable automation in Home Assistant: + +- `camera_motion`: Motion detected, when a [CameraMotion](https://developers.google.com/nest/device-access/traits/device/camera-motion#events) event is received. +- `camera_person`: Person detected, when a [CameraPerson](https://developers.google.com/nest/device-access/traits/device/camera-person#events) event is received. +- `camera_sound`: Sound detected, when a [CameraSound](https://developers.google.com/nest/device-access/traits/device/camera-sound#events) event is received. +- `doorbell_chime`: Doorbell pressed, when a [DoorbellChime](https://developers.google.com/nest/device-access/traits/device/doorbell-chime#events) event is received. + +See [Automating Home Assistant](/getting-started/automation/) for the getting started guide on automations or the [Automation](/docs/automation/) documentation for full details. + + # Legacy Works With Nest API This section contains instructions for the Legacy [Works with Nest](https://developers.nest.com/) API. From 845ae7e5c375922ed61958d1f269b7f0fddd10e3 Mon Sep 17 00:00:00 2001 From: Florian Klien Date: Tue, 1 Dec 2020 19:27:35 +0100 Subject: [PATCH 36/67] removing yessssms integration (#15649) Co-authored-by: Franck Nijhof --- CODEOWNERS | 1 - source/_integrations/yessssms.markdown | 96 ------------------- source/_posts/2017-11-04-release-57.markdown | 5 +- source/_posts/2019-10-10-release-100.markdown | 3 +- source/_posts/2020-01-15-release-104.markdown | 3 +- source/_posts/2020-10-28-release-117.markdown | 3 +- source/_redirects | 2 - 7 files changed, 5 insertions(+), 108 deletions(-) delete mode 100644 source/_integrations/yessssms.markdown diff --git a/CODEOWNERS b/CODEOWNERS index f50bd8fec90..cf9dd2008f0 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -497,7 +497,6 @@ source/_integrations/yamaha_musiccast.markdown @jalmeroth source/_integrations/yandex_transport.markdown @rishatik92 @devbis source/_integrations/yeelight.markdown @rytilahti @zewelor @shenxn source/_integrations/yeelightsunflower.markdown @lindsaymarkward -source/_integrations/yessssms.markdown @flowolf source/_integrations/yi.markdown @bachya source/_integrations/zeroconf.markdown @bdraco source/_integrations/zerproc.markdown @emlove diff --git a/source/_integrations/yessssms.markdown b/source/_integrations/yessssms.markdown deleted file mode 100644 index b12191a7453..00000000000 --- a/source/_integrations/yessssms.markdown +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: yesss! SMS -description: Instructions on how to add Yesss-SMS notifications to Home Assistant. -ha_category: - - Notifications -ha_release: 0.57 -ha_codeowners: - - '@flowolf' -ha_domain: yessssms -ha_iot_class: Cloud Push ---- - -The `yessssms` platform is using the Austrian mobile operator [Yesss.at](https://yesss.at) and others to send SMS via their web-site. - -Currently some MVNOs (mobile virtual network operators), in the A1 network, that use the kontomanager.at interface work. These are currently (as of version 0.4.0 of [YesssSMS](https://pypi.org/project/YesssSMS/)): -* YESSS -* billitel -* EDUCOM -* fenercell -* georg -* goood -* kronemobile -* kuriermobil -* SIMfonie -* teleplanet -* WOWWW -* yooopi - -![supported providers](/images/screenshots/yessssms_brands.png) - -
-Regular charges apply and a contract or prepaid plan is needed. -
- -
-Do not use this for high frequency notifications. The web-SMS page is rate limited and sending more than 45 SMS/h might get you blocked. -
- -You can send to any number, but your phone number will appear as sender. - -To enable SMS notifications in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -notify: - - name: NOTIFIER_NAME - platform: yessssms - username: YOUR_PHONE_NUMBER - password: YOUR_PASSWORD - recipient: PHONE_NUMBER_TO_NOTIFY -``` - -{% configuration %} -name: - description: "The optional parameter name allows multiple notifiers to be created. The notifier will bind to the service notify.NOTIFIER_NAME." - required: false - type: string - default: notify -username: - description: This is your login name (usually your phone number, but in some cases it could be your e-mail). Veryfy that you can use your credentials on the Yesss.at website. - required: true - type: string -password: - description: This is the password you use to login to Yesss.at. - required: true - type: string -recipient: - description: This is the phone number you want to send the SMS notification to. - required: true - type: string -provider: - description: Possible values are `yesss`, `billitel`, `educom`, `fenercell`, `georg`, `goood`, `kronemobile`, `kuriermobil`, `simfonie`, `teleplanet`, `wowww` and `yooopi`. - required: false - default: "YESSS" - type: string -{% endconfiguration %} - -For an alternative provider you would set the `provider` option. An example configuration for the `educom` provider with SMS to yourself would be: -```yaml -# Example configuration.yaml entry -notify: - - name: sms_to_self - platform: yessssms - username: "+436641234567" - password: tops3cr3tpass0rd - recipient: "+436641234567" - provider: educom -``` - -
-Verify that your credentials work on the website of your provider. -Using the wrong credentials three times in a row will get you suspended for one hour. -
- -Home Assistant will check your credentials on startup. Check the logs for errors. -If the login credentials are not valid, re-check the credentials and restart Home Assistant. diff --git a/source/_posts/2017-11-04-release-57.markdown b/source/_posts/2017-11-04-release-57.markdown index e8f786460d8..5208886dacd 100644 --- a/source/_posts/2017-11-04-release-57.markdown +++ b/source/_posts/2017-11-04-release-57.markdown @@ -72,7 +72,7 @@ Okay, one more highlight before we'll let you check out the changelog. Contribut - Support for NO-IP ([@fabaff] - [#10155]) ([no_ip docs]) (new-platform) - Linode ([@ryanm101] - [#9936]) ([linode docs]) ([binary_sensor.linode docs]) (new-platform) - Nederlandse spoorwegen ([@b10m] - [#10136]) ([sensor.nederlandse_spoorwegen docs]) (new-platform) -- added Yesss SMS platform ([@flowolf] - [#10177]) ([notify.yessssms docs]) (new-platform) +- added Yesss SMS platform ([@flowolf] - [#10177]) (new-platform) - Add Sytadin Traffic component ([@gautric] - [#9524]) (new-platform) - Added new Clickatell SMS messaging Notify Platform ([@davlloyd] - [#9775]) ([notify.clickatell docs]) (new-platform) - Add Random binary sensor ([@fabaff] - [#10164]) ([binary_sensor.random docs]) (new-platform) @@ -209,7 +209,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Nederlandse spoorwegen ([@b10m] - [#10136]) ([sensor.nederlandse_spoorwegen docs]) (new-platform) - Added capability to pass a filename to the downloader component ([@tchellomello] - [#10059]) ([downloader docs]) - Limits of the favorite level updated. Values between 0 and 16 will be accepted. ([@syssi] - [#10186]) ([fan.xiaomi_miio docs]) -- added Yesss SMS platform ([@flowolf] - [#10177]) ([notify.yessssms docs]) (new-platform) +- added Yesss SMS platform ([@flowolf] - [#10177]) (new-platform) - Add Sytadin Traffic component ([@gautric] - [#9524]) (new-platform) - media_title property now returns current source ([@etsinko] - [#10120]) ([media_player.monoprice docs]) - Added new Clickatell SMS messaging Notify Platform ([@davlloyd] - [#9775]) ([notify.clickatell docs]) (new-platform) @@ -585,7 +585,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [no_ip docs]: /integrations/no_ip/ [notify.clickatell docs]: /integrations/clickatell [notify.sendgrid docs]: /integrations/sendgrid -[notify.yessssms docs]: /integrations/yessssms [panel_custom docs]: /integrations/panel_custom/ [persistent_notification docs]: /integrations/persistent_notification/ [plant docs]: /integrations/plant/ diff --git a/source/_posts/2019-10-10-release-100.markdown b/source/_posts/2019-10-10-release-100.markdown index f50b8720265..a9e3c68e4e6 100644 --- a/source/_posts/2019-10-10-release-100.markdown +++ b/source/_posts/2019-10-10-release-100.markdown @@ -471,7 +471,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Fix possible OpenUV exception due to missing data ([@bachya] - [#26958]) ([openuv docs]) - Update pythonegardia to 1.0.40 ([@SneakSnackSnake] - [#27009]) ([egardia docs]) - Improve ecobee service schemas ([@marthoc] - [#26955]) ([ecobee docs]) -- Add more providers, bump yessssms version to 0.4.1 ([@flowolf] - [#26874]) ([yessssms docs]) +- Add more providers, bump yessssms version to 0.4.1 ([@flowolf] - [#26874]) - Upgrade youtube_dl to 2019.09.28 ([@BKPepe] - [#27031]) ([media_extractor docs]) - Add availability_template to Template Cover platform ([@grillp] - [#26509]) ([template docs]) - Add availability_template to Template Binary Sensor platform ([@grillp] - [#26510]) ([template docs]) @@ -1001,7 +1001,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [xbox_live docs]: /integrations/xbox_live/ [xiaomi_aqara docs]: /integrations/xiaomi_aqara/ [yandex_transport docs]: /integrations/yandex_transport/ -[yessssms docs]: /integrations/yessssms/ [zha docs]: /integrations/zha/ [zone docs]: /integrations/zone/ [zwave docs]: /integrations/zwave/ diff --git a/source/_posts/2020-01-15-release-104.markdown b/source/_posts/2020-01-15-release-104.markdown index b09976634eb..16037541a7a 100644 --- a/source/_posts/2020-01-15-release-104.markdown +++ b/source/_posts/2020-01-15-release-104.markdown @@ -723,7 +723,7 @@ Make sure to fill in all fields of the issue template, that is helping us a lot! - Sort imports according to PEP8 for components starting with "N" ([@basnijholt] - [#29773]) - Sort imports according to PEP8 for components starting with "W" ([@basnijholt] - [#29781]) - Sort imports according to PEP8 for components starting with "Q" ([@basnijholt] - [#29785]) -- Sort imports according to PEP8 for components starting with "Y" ([@basnijholt] - [#29783]) ([yale_smart_alarm docs]) ([yamaha docs]) ([yamaha_musiccast docs]) ([yandex_transport docs]) ([yeelightsunflower docs]) ([yessssms docs]) +- Sort imports according to PEP8 for components starting with "Y" ([@basnijholt] - [#29783]) ([yale_smart_alarm docs]) ([yamaha docs]) ([yamaha_musiccast docs]) ([yandex_transport docs]) ([yeelightsunflower docs]) - Sort imports according to PEP8 for components starting with "X" ([@basnijholt] - [#29782]) ([x10 docs]) ([xbox_live docs]) ([xeoma docs]) ([xiaomi_tv docs]) ([xmpp docs]) ([xs1 docs]) - Move imports to top for homekit ([@springstan] - [#29560]) ([homekit docs]) - Cleanup removed component ([@pvizeli] - [#29788]) @@ -2083,7 +2083,6 @@ Make sure to fill in all fields of the issue template, that is helping us a lot! [yandex_transport docs]: /integrations/yandex_transport/ [yeelight docs]: /integrations/yeelight/ [yeelightsunflower docs]: /integrations/yeelightsunflower/ -[yessssms docs]: /integrations/yessssms/ [zamg docs]: /integrations/zamg/ [zengge docs]: /integrations/zengge/ [zeroconf docs]: /integrations/zeroconf/ diff --git a/source/_posts/2020-10-28-release-117.markdown b/source/_posts/2020-10-28-release-117.markdown index f63ea27ed91..7a5aa87bcf4 100644 --- a/source/_posts/2020-10-28-release-117.markdown +++ b/source/_posts/2020-10-28-release-117.markdown @@ -1088,7 +1088,7 @@ is automatically imported after upgrading and can be safely removed afterward. - Use reference strings in Hunter Douglas PowerView ([@SNoof85] - [#41291]) ([hunterdouglas_powerview docs]) - Indicate to user that remote was turned off when call was attempted ([@elupus] - [#40715]) ([broadlink docs]) - Fix reported temperatures in Maxcube ([@Bre77] - [#41259]) ([maxcube docs]) -- Improve yessssms test notify ([@sycx2] - [#41283]) ([yessssms docs]) +- Improve yessssms test notify ([@sycx2] - [#41283]) - Use reference strings in ambient_station ([@SNoof85] - [#41276]) ([ambient_station docs]) - Don't use asynctest directly ([@balloob] - [#41306]) - Rewrite sigfox unittest tests to pytest ([@frangiz] - [#41302]) ([sigfox docs]) @@ -2866,7 +2866,6 @@ is automatically imported after upgrading and can be safely removed afterward. [xiaomi_aqara docs]: /integrations/xiaomi_aqara/ [xiaomi_miio docs]: /integrations/xiaomi_miio/ [yamaha_musiccast docs]: /integrations/yamaha_musiccast/ -[yessssms docs]: /integrations/yessssms/ [zabbix docs]: /integrations/zabbix/ [zengge docs]: /integrations/zengge/ [zeroconf docs]: /integrations/zeroconf/ diff --git a/source/_redirects b/source/_redirects index 1639219dcd4..8b4cb598139 100644 --- a/source/_redirects +++ b/source/_redirects @@ -602,7 +602,6 @@ /components/notify.twitter /integrations/twitter /components/notify.webostv /integrations/webostv /components/notify.xmpp /integrations/xmpp -/components/notify.yessssms /integrations/yessssms /components/openalpr /integrations/openalpr_local /components/pollen /integrations/iqvia /components/public_sensor.netatmo /integrations/netatmo @@ -1998,7 +1997,6 @@ /components/yandextts /integrations/yandextts /components/yeelight /integrations/yeelight /components/yeelightsunflower /integrations/yeelightsunflower -/components/yessssms /integrations/yessssms /components/yi /integrations/yi /components/zabbix /integrations/zabbix /components/zamg /integrations/zamg From 220142044f6070539319892ee55051fbc9926f13 Mon Sep 17 00:00:00 2001 From: Thomas Tuffin <71447672+ttuffin@users.noreply.github.com> Date: Tue, 1 Dec 2020 20:14:31 +0100 Subject: [PATCH 37/67] Include station ID's in vasttrafik integration (#15623) Co-authored-by: Franck Nijhof Co-authored-by: Franck Nijhof --- source/_integrations/vasttrafik.markdown | 34 ++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/source/_integrations/vasttrafik.markdown b/source/_integrations/vasttrafik.markdown index 291967d3c1e..2f9c9842b45 100644 --- a/source/_integrations/vasttrafik.markdown +++ b/source/_integrations/vasttrafik.markdown @@ -43,11 +43,11 @@ departures: required: false type: string from: - description: The start station. + description: The start station name or ID. required: true type: string heading: - description: Direction of the traveling. + description: The destination station name or ID. required: false type: string lines: @@ -80,3 +80,33 @@ sensor: - GRÖN delay: 10 ``` + +## Solving incorrect selected station problems + +It is possible to use the full name of the station for the from/heading values, e.g., Musikvägen, Göteborg. + +In cases where the wrong station is being selected, it is possible to provide the station ID instead. To do this you first need to retrieve the station ID either via Västtrafik's [API-konsole](https://developer.vasttrafik.se/portal/#/api/Reseplaneraren/v2/landerss) or with `curl`. + +To retrieve the ID using `curl`: + +1. Login into the Västtrafik API and go to "Hantera nycklar" next to the application you created for Home Assistant. +2. Make a copy of your AccessToken and execute the following `curl` command, replacing "" and "" as necessary: + + ```shell + curl -H "Authorization: Bearer " "https://api.vasttrafik.se/bin/rest.exe/v2/location.name?input=&format=json + ``` + +3. In the output locate the key called "StopLocation", and under this key, you will find a list of stops. Copy the ID for your desired stop and use it in your configuration. + +```yaml +# Example configuration.yaml entry using station ID as departure and station name as destination +sensor: + - platform: vasttrafik + key: YOUR_API_KEY + secret: YOUR_API_SECRET + departures: + - name: To the Iron Square \o/ + from: 9021014004870000 + heading: Järntorget + delay: 0 +``` From d3518c903473b0734ddd0037834cffa4b869f557 Mon Sep 17 00:00:00 2001 From: Chris Date: Wed, 2 Dec 2020 00:56:58 -0700 Subject: [PATCH 38/67] Add instance_id to scene_activated (#15798) --- source/_integrations/ozw.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/ozw.markdown b/source/_integrations/ozw.markdown index 82b48a8f130..e9f71e9c070 100644 --- a/source/_integrations/ozw.markdown +++ b/source/_integrations/ozw.markdown @@ -136,6 +136,7 @@ This event is fired upon scene activation. The data in the event will vary depen { "event_type": "ozw.scene_activated", "data": { + "instance_id": 1, "node_id": 9, "scene_id": 1, "scene_label": "Scene 1", From 1d256954e3b9494a5f22837bac95ebe4e82509d3 Mon Sep 17 00:00:00 2001 From: pdcemulator <20071350+pdcemulator@users.noreply.github.com> Date: Wed, 2 Dec 2020 09:00:10 +0100 Subject: [PATCH 39/67] edl21: Add APATOR Norax 3D as tested smart meter and example ser2net configuration file (#15744) --- source/_integrations/edl21.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_integrations/edl21.markdown b/source/_integrations/edl21.markdown index 469634a26a0..33af296d09f 100644 --- a/source/_integrations/edl21.markdown +++ b/source/_integrations/edl21.markdown @@ -21,6 +21,7 @@ Compatible transceivers: Tested smart meters: +- APATOR Norax 3D (enable InF Mode as described in manual to retrieve full data) - Iskraemeco MT175 (ISKRA MT175-D2A51-V22-K0t) ## Configuration @@ -43,3 +44,11 @@ serial_port: required: true type: string {% endconfiguration %} + +### ser2net + +To use this integration with a remote transceiver you could use [ser2net](https://linux.die.net/man/8/ser2net). + +Example `ser2net.conf` configuration file: + +> 2001:raw:0:/dev/ttyUSB0:9600 8DATABITS NONE 1STOPBIT \ No newline at end of file From c9cee39eb3f64a7b5848181f6040e43a14f8206b Mon Sep 17 00:00:00 2001 From: Shulyaka Date: Wed, 2 Dec 2020 16:31:10 +0300 Subject: [PATCH 40/67] Add Number entity support (#15516) Co-authored-by: Franck Nijhof --- source/_integrations/number.markdown | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 source/_integrations/number.markdown diff --git a/source/_integrations/number.markdown b/source/_integrations/number.markdown new file mode 100644 index 00000000000..e340d19e911 --- /dev/null +++ b/source/_integrations/number.markdown @@ -0,0 +1,20 @@ +--- +title: Number +description: Instructions on how to manage your Number entities with Home Assistant. +ha_category: + - Number +ha_release: 0.119 +ha_quality_scale: internal +ha_domain: number +ha_iot_class: ~ +--- + +Keeps track on `number` entities in your environment, their state, and allows you to control them. This integration allows other integrations to get a value input from user within a range. + +### Services + +The Number entities registers the following services: + +| Service | Data | Description | +| ------- | ---- | ----------- | +| `set_value` | `value`
`entity_id(s)`
`area_id(s)` | Set the value of specific `number` entities From 9a59d0cb2cd2fe7bffa325f39609c2f60f5621cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre=20St=C3=A5hl?= Date: Wed, 2 Dec 2020 17:11:02 +0100 Subject: [PATCH 41/67] Update Apple TV documentation (#12133) Co-authored-by: Franck Nijhof --- source/_integrations/apple_tv.markdown | 197 +++++++------------------ 1 file changed, 56 insertions(+), 141 deletions(-) diff --git a/source/_integrations/apple_tv.markdown b/source/_integrations/apple_tv.markdown index 881314f5aac..661ca6e9d92 100644 --- a/source/_integrations/apple_tv.markdown +++ b/source/_integrations/apple_tv.markdown @@ -10,173 +10,73 @@ ha_release: 0.49 ha_domain: apple_tv --- -The `apple_tv` platform allows you to control an Apple TV (3rd and 4th generation). See the [remote platform](/integrations/apple_tv#remote) if you want to send remote control buttons, e.g., arrow keys. +The Apple TV integration allows you to control an Apple TV (any generation). See the +[remote platform](/integrations/apple_tv#remote) if you want to send remote control buttons, +e.g., arrow keys. There is currently support for the following device types within Home Assistant: - Media Player - [Remote](#remote) -
-Currently, you must have Home Sharing enabled for this to work. Support for pairing Home Assistant with your device will be supported in a later release. -
- ## Configuration -To use this component, you must first install some system libraries and a compiler. For Debian or a similar system, this should be enough: +Menu: *Configuration* > *Integrations* -```shell -sudo apt-get install build-essential libssl-dev libffi-dev python-dev -``` +Press on **Apple TV** and configure the integration: -If you want to discover new devices automatically, just make sure you have `discovery:` in your `configuration.yaml` file. To manually add one or more Apple TVs to your installation, add the following to your `configuration.yaml` file: +* Enter either an IP address or a device name and follow the next few steps -```yaml -# Example configuration.yaml entry -apple_tv: - - host: IP_1 - login_id: LOGIN_ID_1 - name: NAME_1 - start_off: START_OFF_1 - credentials: CREDENTIALS_1 - - host: IP_2 - login_id: LOGIN_ID_2 - name: NAME_2 - start_off: START_OFF_2 - credentials: CREDENTIALS_2 -``` +## FAQ -{% configuration %} -host: - description: The IP-address of the device. - required: true - type: string -login_id: - description: An identifier used to login to the device, see below. - required: true - type: string -name: - description: The name of the device used in the frontend. - required: false - type: string -start_off: - description: Set to true if the device should start in fake standby. - required: false - type: boolean - default: false -credentials: - description: Credentials used for AirPlay playback. - required: false - type: string -{% endconfiguration %} +### My Apple TV does not turn on/off when I press on/off in the frontend -In order to connect to the device, you need a *login id*. The easiest way to obtain this identifier is to use the `apple_tv_scan` service (described below). Additional information about `start_off` and `credentials` can also be found under the guides section. +That is correct; it only toggles the power state in Home Assistant. Turning the device on or off is +currently not supported. However, support for this is in development so that it will be added at some +point in the future -## Guides +### Is it possible to see if a device is on without interacting with it -### Scanning for devices +No -Make sure Home Sharing is enabled on the Apple TV. +### When adding a new device, a PIN code is requested, but none is shown on the screen -To scan for devices and determine the `login_id`, open the developer tools by selecting the hammer icon in the sidebar. Once in the developer tools select **services**. +This can happen when pairing the AirPlay protocol in case the access settings are wrong. On your +Apple TV, navigate to Settings, find the AirPlay menu and make sure that the access setting +is set to "Everyone on the same network" and try again. - +### The buttons (play, pause, etc.) does not work -Select `apple_tv` as domain and `apple_tv_scan` as service then press the button: +The tvOS apps themselves decide what commands they support and when they support +them. Likely, the app you are using does not support the action you are trying +to perform. Before writing an issue about this, verify if the same action is possible with the +Remote app in iOS. If that is the case, please write a bug in +[pyatv](https://github.com/postlund/pyatv/issues/new?assignees=&labels=bug&template=bug_report.md&title=) +and include logs (see Debugging below). - +### I'm trying to play a stream via AirPlay, but it doesn't work -Scanning will be done for three seconds and notification will be shown in the state view with all found devices: - - - -Alternatively, you may use the application ``atvremote``. Install it with ``pip3 install --upgrade pyatv`` in your Home Assistant environment (note: do *not* use sudo). Then run ``atvremote scan`` to scan for all devices (try again if a device is missing): - -```bash -$ atvremote scan -Found Apple TVs: - - Apple TV at 10.0.10.22 (login id: 00000000-1234-5678-9012-345678901234) - -Note: You must use 'pair' with devices that have home sharing disabled -``` - -Just copy and paste the `login_id` from the device you want to add. For more details about `atvremote`, see: [this page](https://postlund.github.io/pyatv). - -### Setting up device authentication - -If you, when playing media with `play_url`, get the following error message: - -“This AirPlay connection requires iOS 7.1 or later, macOS 10.10 or later, or iTunes 11.2 or later.” - -then device authentication is required, open the developer tools by selecting the hammer icon in the sidebar. Once in the developer tools select **services**. - - - -Select `apple_tv` as domain, `apple_tv_authenticate` as service and enter `{"entity_id": "XXX"}` into "Service Data", but replace XXX with the entity id of your device (e.g., `media_player.apple_tv`). Press the button and hopefully you are presented with an input dialog asking for a pin code: - - - -If no dialog appears, go back to the states view and display it from there (press `CONFIGURE` as displayed in the image): - - - -A PIN code should now be visible on your TV, just enter it into the dialog and press "Confirm". You should see if it succeeded in the state view. Copy the credentials and insert it into your configuration (make sure you copy everything, it should be 81 characters) after ``credentials:`` with no line-break: - -```yaml -# Example configuration.yaml entry -apple_tv: - - host: 10.0.0.20 - login_id: 00000000-1234-5678-9012-345678901234 - credentials: 1B8C387DDB59BDF6:CF5ABB6A2C070688F5926ADB7C010F6DF847252C15F9BDB6DA3E09D6591E90E5 -``` - -Restart Home Assistant, and you should now be able to use `play_url` as before. - -### My Apple TV turns on when I restart Home Assistant - -The Apple TV will automatically turn on if a request is sent to it, e.g., if a button is pressed, something is streamed to it via AirPlay or if current state (currently playing) is accessed. This is how Apple has designed it, and it will cause problems if you are using HDMI-CEC. Every time Home Assistant is started, a new request is sent to the device to figure out what is currently playing. When using CEC, this will wake up your TV and other devices you have configured. - -So, if your TV is randomly turning on, this is probably the reason. As stated, this is by design, and there is no real fix for it. There's also no known way to turn off the Apple TV via the protocol used for communication. You have the following options: - -- Do not use this platform -- Disable HDMI-CEC on your Apple TV -- Use "fake standby" - -The first two points are quite obvious. Fake standby is a concept implemented in this platform that disables all requests to the device and makes it appear as being "off" in the web interface. This will make sure that the device is not woken up, but it will of course not show any information or allow you to control it. It is however easy to turn it on (or off) in the web interface or to use an automation with `turn_on`. To make it more useful, you can write automations that turn it on or off depending on some other device, like the input source on your receiver. - -To put a device into fake standby when starting Home Assistant, add `start_off: true` to your configuration. - -
-Turning the device on/off in the user interface will *not* turn the physical device on/off according to the description above. -
- -## Services - -### Service `apple_tv_authenticate` - -To play media on an Apple TV with device authentication enabled (e.g., ATV4 with tvOS 10.2+), Home Assistant must be properly authenticated. This method starts the process and presents the credentials needed for playback as a persistent notification. Please see guide above for usage. - -| Service data attribute | Optional | Description | -| ---------------------- | -------- | ------------------------------------------------------------------ | -| `entity_id` | yes | String or list of strings that point at `entity_id`s of Apple TVs. | - -### Service `apple_tv_scan` - -Scans the local network for Apple TVs. All found devices are presented as a persistent notification. +The Apple TV is quite picky when it comes to which formats it plays. The best bet is MP4. If it doesn't +work, it's likely because of the media format. ## Remote -The `apple_tv` remote platform allows you to send remote control buttons to an Apple TV. It is automatically setup when an Apple TV is configured. +The `apple_tv` remote platform allows you to send remote control buttons to an Apple TV. It is +automatically set up when an Apple TV is configured. -At the moment, the following buttons are supported: +At the moment, the following buttons are available (but not necessarily supported by all devices): -- up -- down -- left -- right -- menu -- top_menu -- select +- `up` +- `down` +- `left` +- `right` +- `menu` +- `top_menu` +- `select` +- `volume_up` +- `volume_down` +- `home` +- `home_hold` A typical service call for press several buttons looks like this. @@ -190,3 +90,18 @@ data: - menu - select ``` + +## Debugging + +If you have any problems and intend to write an issue, make sure you have the +relevant logs included. For this integration, you can enable them like this: + +```yaml +logger: + logs: + pyatv: debug + homeassistant.components.apple_tv: debug +``` + +By providing logs directly when creating the issue, you will likely get help +much faster. From cf8c6fdf708fad9c45a2d8339214d6ea535be303 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Wed, 2 Dec 2020 17:51:20 +0100 Subject: [PATCH 42/67] Update lovelace dashboard info (#15805) --- source/lovelace/index.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/lovelace/index.markdown b/source/lovelace/index.markdown index 8e06d523737..54c192d7c83 100644 --- a/source/lovelace/index.markdown +++ b/source/lovelace/index.markdown @@ -5,16 +5,16 @@ description: "Lovelace is a powerful and configurable dashboard for Home Assista Lovelace is the Home Assistant dashboard. It's a fast, customizable and powerful way for users to manage their homes, working on mobile and desktop. -- 27 different cards to place and configure as you like. -- Dashboard Editor. Gives you the ability to manage your Lovelace dashboard including a live preview when editing cards. -- Fast. Using a static configuration allows us to build up the dashboard once. -- Customizable. +- 29 different cards to place and configure as you like. +- Dashboard Editor: Gives you the ability to manage your Lovelace dashboard including a live preview when editing cards. +- Fast: Using a static configuration allows us to build up the dashboard once. +- Customizable: - Cards have numerous options to configure how your data is presented. - - Themes; even at a per card basis. + - Themes (even at a per card basis). - Ability to override names and icons of entities. - Custom Cards from our amazing community are fully supported. -To start, go to the Home Assistant Overview page, click the three dots at the top right of the screen and select 'Edit Dashboard'. Then click the orange '+' icon at the bottom right and select a card to add. +To start, go to the Home Assistant Overview page, click the three dots at the top right of the screen and select 'Edit Dashboard'. Then click the blue '+ Add Card' icon at the bottom right and select a card to add.
From 920c09bc1d1e91a58e5bbb77d3010ee508d858c9 Mon Sep 17 00:00:00 2001 From: Kiall Mac Innes Date: Wed, 2 Dec 2020 19:03:14 +0000 Subject: [PATCH 43/67] Add MQTT Scenes Docs (#15497) Co-authored-by: Franck Nijhof --- source/_integrations/scene.mqtt.markdown | 132 +++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 source/_integrations/scene.mqtt.markdown diff --git a/source/_integrations/scene.mqtt.markdown b/source/_integrations/scene.mqtt.markdown new file mode 100644 index 00000000000..a23ff9be591 --- /dev/null +++ b/source/_integrations/scene.mqtt.markdown @@ -0,0 +1,132 @@ +--- +title: "MQTT Scene" +description: "Instructions on how to integrate MQTT scenes into Home Assistant." +ha_category: + - Scene +ha_release: 0.119 +ha_iot_class: Configurable +ha_domain: mqtt +--- + +The `mqtt` scene platform lets you control your MQTT enabled scenes. + +## Configuration + +To enable a MQTT scene in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +scene: + - platform: mqtt + command_topic: zigbee2mqtt/living_room_group/set +``` + +{% configuration %} +availability: + description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`. + required: false + type: list + keys: + payload_available: + description: The payload that represents the available state. + required: false + type: string + default: online + payload_not_available: + description: The payload that represents the unavailable state. + required: false + type: string + default: offline + topic: + description: An MQTT topic subscribed to receive availability (online/offline) updates. + required: true + type: string +availability_topic: + description: The MQTT topic subscribed to receive availability (online/offline) updates. Must not be used together with `availability`. + required: false + type: string +command_topic: + description: The MQTT topic to publish commands to change the switch state. + required: false + type: string +icon: + description: Icon for the switch. + required: false + type: icon +name: + description: The name to use when displaying this switch. + required: false + type: string + default: MQTT Switch +payload_available: + description: The payload that represents the available state. + required: false + type: string + default: online +payload_not_available: + description: The payload that represents the unavailable state. + required: false + type: string + default: offline +payload_on: + description: The payload that represents `on` state. If specified, will be used for both comparing to the value in the `state_topic` (see `value_template` and `state_on` for details) and sending as `on` command to the `command_topic`. + required: false + type: string + default: "ON" +qos: + description: The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. + required: false + type: integer + default: 0 +retain: + description: If the published message should have the retain flag on or not. + required: false + type: boolean + default: false +unique_id: + description: An ID that uniquely identifies this switch device. If two switches have the same unique ID, Home Assistant will raise an exception. + required: false + type: string +{% endconfiguration %} + +
+ +Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics. + +
+ +## Examples + +In this section, you will find some real-life examples of how to use this sensor. + +### Full configuration + +The example below shows a full configuration for a switch. + +```yaml +# Example configuration.yaml entry +switch: + - platform: mqtt + unique_id: living_room_party_scene + name: "Living Room Party Scene" + command_topic: "home/living_room/party_scene/set" + availability: + - topic: "home/living_room/party_scene/available" + payload_on: "ON" + qos: 0 + retain: true +``` + +### Use with a JSON Payload + +The example below shows a configuration using a JSON payload. + +```yaml +# Example configuration.yaml entry +scene: + - platform: mqtt + name: Living Room Blue Scene + unique_id: living_room_blue_scene + command_topic: "home/living_room/set" + payload_on: '{"activate_scene": "Blue Scene"}' +``` From b6d0ce075ed7fed6ab57b615260f8b1c6630406b Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Wed, 2 Dec 2020 20:03:38 +0100 Subject: [PATCH 44/67] Update ozw requirements (#15803) --- source/_integrations/ozw.markdown | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/source/_integrations/ozw.markdown b/source/_integrations/ozw.markdown index e9f71e9c070..7e3f0e3682b 100644 --- a/source/_integrations/ozw.markdown +++ b/source/_integrations/ozw.markdown @@ -17,9 +17,17 @@ This integration allows you to utilize OpenZWave's ozwdaemon to control a Z-Wave ## Requirements +### Supervisor managed installation + +- The official OpenZWave add-on installed available from the add-on store. + +### Core installation + - MQTT server and the [MQTT integration](/integrations/mqtt/) set up in Home Assistant. - The [ozwdaemon](https://github.com/OpenZWave/qt-openzwave) installed and running in your network. - For Home Assistant Supervisor there's an official add-on named OpenZWave available from the add-on store. + +### Hardware requirements + - Supported Z-Wave dongle compatible with OpenZWave 1.6. See this [list](/docs/z-wave/controllers/#supported-z-wave-usb-sticks--hardware-modules) of controllers. The Z-Wave controller dongle should be connected to the same host as where the ozwdaemon is running. ## Configuration From 839e80f1bcd816e180c7002da5d5810d5b454a62 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 2 Dec 2020 20:44:07 +0100 Subject: [PATCH 45/67] Add telegram_bot.send_voice service (#15806) --- source/_integrations/telegram_bot.markdown | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/source/_integrations/telegram_bot.markdown b/source/_integrations/telegram_bot.markdown index 8192c6d8357..9b5db8855a4 100644 --- a/source/_integrations/telegram_bot.markdown +++ b/source/_integrations/telegram_bot.markdown @@ -16,8 +16,6 @@ If you don't need to receive messages, you can use the [broadcast](/integrations ## Notification services -Available services: `send_message`, `send_photo`, `send_document`, `send_location`, `send_sticker`, `edit_message`, `edit_replymarkup`, `edit_caption`, `answer_callback_query`, `delete_message` and `leave_chat`. - ### Service `telegram_bot.send_message` Send a notification. @@ -74,6 +72,26 @@ Send a video. | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | | `message_tag` | yes | Tag for sent message. In `telegram_sent` event data: `{{trigger.event.data.message_tag}}` | +### Service `telegram_bot.send_voice` + +Send a voice message. + +| Service data attribute | Optional | Description | +|---------------------------|----------|--------------------------------------------------| +| `url` | no | Remote path to a voice message. | +| `file` | no | Local path to a voice message. | +| `caption` | yes | The title of the voice message. | +| `username` | yes | Username for a URL which requires HTTP basic authentication. | +| `password` | yes | Password for a URL which requires HTTP basic authentication. | +| `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication. Defaults to `basic`. | +| `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | +| `disable_notification` | yes | True/false to send the message silently. iOS users and web users will not receive a notification. Android users will receive a notification with no sound. Defaults to False. | +| `verify_ssl` | yes | True/false for checking the SSL certificate of the server for HTTPS URLs. Defaults to True. | +| `timeout` | yes | Timeout for send voice. Will help with timeout errors (poor internet connection, etc) | +| `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. `[]` to reset to no custom keyboard. Example: `["/command1, /command2", "/command3"]` | +| `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | +| `message_tag` | yes | Tag for sent message. In `telegram_sent` event data: `{{trigger.event.data.message_tag}}` | + ### Service `telegram_bot.send_document` Send a document. From 9a3e2ed86a355cf162b98cdf33142492f5d1de42 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 2 Dec 2020 22:29:20 +0100 Subject: [PATCH 46/67] Beta release notes for 1.0 (#15808) --- _config.yml | 8 +- source/_integrations/fireservicerota.markdown | 2 +- source/_integrations/motion_blinds.markdown | 2 +- source/_integrations/number.markdown | 2 +- source/_integrations/scene.mqtt.markdown | 2 +- source/_integrations/srp_energy.markdown | 2 +- source/_integrations/twinkly.markdown | 2 +- source/_posts/2020-12-13-release-10.markdown | 1131 +++++++++++++++++ source/images/blog/2020-12-1.0/social.png | Bin 0 -> 120822 bytes 9 files changed, 1141 insertions(+), 10 deletions(-) create mode 100644 source/_posts/2020-12-13-release-10.markdown create mode 100644 source/images/blog/2020-12-1.0/social.png diff --git a/_config.yml b/_config.yml index 9b54ea88b83..843df9cd191 100644 --- a/_config.yml +++ b/_config.yml @@ -99,10 +99,10 @@ social: account: home_assistant # Home Assistant release details -current_major_version: 0 -current_minor_version: 118 -current_patch_version: 4 -date_released: 2020-11-26 +current_major_version: 1 +current_minor_version: 0 +current_patch_version: 0 +date_released: 2020-12-13 # 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/source/_integrations/fireservicerota.markdown b/source/_integrations/fireservicerota.markdown index 1541e2352d6..5c704c75af6 100644 --- a/source/_integrations/fireservicerota.markdown +++ b/source/_integrations/fireservicerota.markdown @@ -6,7 +6,7 @@ ha_category: - Sensor - Switch ha_iot_class: Cloud Polling -ha_release: 0.119 +ha_release: 1.0 ha_codeowners: - '@cyberjunky' ha_config_flow: true diff --git a/source/_integrations/motion_blinds.markdown b/source/_integrations/motion_blinds.markdown index c9268cc80a0..9d4219b7f3d 100644 --- a/source/_integrations/motion_blinds.markdown +++ b/source/_integrations/motion_blinds.markdown @@ -4,7 +4,7 @@ description: Instructions on how to integrate Motion Blinds from Coulisse B.V. i ha_category: - Cover ha_iot_class: Local Polling -ha_release: 0.119.0 +ha_release: 1.0 ha_domain: motion_blinds ha_codeowners: - '@starkillerOG' diff --git a/source/_integrations/number.markdown b/source/_integrations/number.markdown index e340d19e911..d2fb245523f 100644 --- a/source/_integrations/number.markdown +++ b/source/_integrations/number.markdown @@ -3,7 +3,7 @@ title: Number description: Instructions on how to manage your Number entities with Home Assistant. ha_category: - Number -ha_release: 0.119 +ha_release: 1.0 ha_quality_scale: internal ha_domain: number ha_iot_class: ~ diff --git a/source/_integrations/scene.mqtt.markdown b/source/_integrations/scene.mqtt.markdown index a23ff9be591..7a933f2ddb3 100644 --- a/source/_integrations/scene.mqtt.markdown +++ b/source/_integrations/scene.mqtt.markdown @@ -3,7 +3,7 @@ title: "MQTT Scene" description: "Instructions on how to integrate MQTT scenes into Home Assistant." ha_category: - Scene -ha_release: 0.119 +ha_release: 1.0 ha_iot_class: Configurable ha_domain: mqtt --- diff --git a/source/_integrations/srp_energy.markdown b/source/_integrations/srp_energy.markdown index 0af75e7c7d5..27801107dcb 100644 --- a/source/_integrations/srp_energy.markdown +++ b/source/_integrations/srp_energy.markdown @@ -3,7 +3,7 @@ title: "SRP Energy" description: "How to integrate SRP Energy within Home Assistant." ha_category: - Energy -ha_release: 0.119 +ha_release: 1.0 ha_iot_class: Cloud Polling --- diff --git a/source/_integrations/twinkly.markdown b/source/_integrations/twinkly.markdown index 9652f048d83..9763ad80c3c 100644 --- a/source/_integrations/twinkly.markdown +++ b/source/_integrations/twinkly.markdown @@ -3,7 +3,7 @@ title: Twinkly description: Instructions on how to integrate Twinkly LED string to Home Assistant. ha_category: - Light -ha_release: 0.119 +ha_release: 1.0 ha_config_flow: true ha_domain: twinkly ha_iot_class: Local pull diff --git a/source/_posts/2020-12-13-release-10.markdown b/source/_posts/2020-12-13-release-10.markdown new file mode 100644 index 00000000000..a6590d73ed3 --- /dev/null +++ b/source/_posts/2020-12-13-release-10.markdown @@ -0,0 +1,1131 @@ +--- +layout: post +title: "1.0: Beta release notes" +description: "Beta release notes for Home Assistant Core 1.0" +date: 2020-12-2 00:00:00 +date_formatted: "December 13, 2020" +author: Franck Nijhof +author_twitter: frenck +comments: true +categories: Release-Notes +og_image: /images/blog/2020-12-1.0/social.png +--- + + + +These are the beta release notes for Home Assistant Core 1.0 (and is thus a +work in progress). + +**Yes, Home Assistant Core 1.0! This major release is going to be announced at the [Home Assistant Conference](/conference) on 13 December**: + +Get your $1 ticket + +If you encounter any issues with the beta release, please report them on GitHub: + +- Issues with integrations, automations and such (Core related):
+ +- Issues with the frontend/Lovelace:
+ +- Issues with the Supervisor:
+ +- Issues with the documentation:
+ + +Please be sure to include the beta version you are running in the issue +description (not title), so we can classify your issue correctly. + +Issues introduced in the beta are processed with priority. + +## Table of contents + +- [Table of contents](#table-of-contents) +- [Lorem ipsum](#lorem-ipsum) +- [Other noteworthy changes](#other-noteworthy-changes) +- [New Integrations](#new-integrations) +- [New Platforms](#new-platforms) +- [Integrations now available to set up from the UI](#integrations-now-available-to-set-up-from-the-ui) +- [If you need help...](#if-you-need-help) +- [Breaking Changes](#breaking-changes) +- [Farewell to the following](#farewell-to-the-following) +- [All changes](#all-changes) + +## Lorem ipsum + +Lorem ipsum + + + +## Home Assistant Blueprints + +Check Configuration panel -> Blueprints + +Examples: + + +More information and documentation will be put up as soon as possible. + +Some background in this PR: + + + +## Other noteworthy changes + +- Lorem ipsum! Thanks, [@frenck]! + +Core: + +- Refactor Apple TV integration ([@postlund] - [#31952]) ([apple_tv docs]) (breaking-change) +- Add initial rest query params ([@boxcee] - [#42198]) ([pvoutput docs]) ([rest docs]) ([scrape docs]) +- Add reload support to KNX ([@spacegaier] - [#42429]) ([knx docs]) +- Add support for learning RF commands with Broadlink remotes ([@felipediel] - [#39671]) ([broadlink docs]) ([remote docs]) +- Add HomeKit humidifier/dehumidifier ([@adrum] - [#42311]) ([homekit_controller docs]) +- Support gas meter capability for smartthings ([@javache] - [#41310]) ([smartthings docs]) +- Add dsmr_reader telegram timestamp and device classes ([@tim427] - [#42909]) ([dsmr_reader docs]) +- Add an option to template delay_on/off in template binary sensor ([@mLupine] - [#43259]) ([template docs]) +- Add shelly installed firmware info ([@chemelli74] - [#43221]) ([shelly docs]) +- Add Shelly support for REST sensors ([@chemelli74] - [#40429]) ([shelly docs]) +- Support for Shelly Input Events ([@thecode] - [#43479]) ([shelly docs]) +- Support for Shelly Binary Input Sensors ([@thecode] - [#43313]) ([shelly docs]) +- Support openRelativePercent for google assistant covers ([@elupus] - [#43336]) ([google_assistant docs]) +- Add repeat mode support to Spotify ([@frenck] - [#43247]) ([spotify docs]) +- Add tilt support to deCONZ covers ([@Kane610] - [#43607]) ([deconz docs]) +- Add nest SDM API camera/doorbell events ([@allenporter] - [#42700]) ([nest docs]) +- Add nest device triggers for camera and doorbell events ([@allenporter] - [#43548]) ([nest docs]) +- Support disabling devices ([@emontnemery] - [#43293]) ([config docs]) +- OAuth2 to use current request header ([@balloob] - [#43668]) ([toon docs]) +- Add a service target ([@balloob] - [#43725]) +- Base area IDs on initial name ([@balloob] - [#43804]) +- Make simple deCONZ thermostats work ([@Kane610] - [#43781]) ([deconz docs]) +- Add fan support to deCONZ climate platform ([@Kane610] - [#43721]) ([deconz docs]) +- Add preset support to deCONZ climate platform ([@Kane610] - [#43722]) ([deconz docs]) + +Frontend: + +- Add target selector (#7864) @bramkragten +- Enhance ZHA device pairing feedback (#7843) @dmulcahey +- Add network visualization to the ZHA config panel (#7802) @dmulcahey +- Additional number formatting (#7763) @joshmcrty +- Initial Blueprint UI (#7695) @bramkragten + +## New Integrations + +We welcome the following new integration this release: + +- [FireServiceRota][fireservicerota docs], added by [@cyberjunky] +- [Motion Blinds][motion_blinds docs], added by [@starkillerOG] +- [SRP Energy][srp_energy docs], added by [@briglx] +- [Twinkly][twinkly docs], added by [@dr1rrb] + +## New Platforms + +The following integration got support for a new platform: + +- [HomeKit Controller][homekit_controller docs] now has initial support for + cameras, added by [@Jc2k] +- [@emontnemery] has added support for fans and covers to the + [Tasmota][tasmota docs] integration. + +## Integrations now available to set up from the UI + +The following integrations are now available via the Home Assistant UI: + +- [Aurora][aurora docs], done by [@djtimca] +- [Recollect Waste][recollect_waste docs], done by [@bachya] + +## 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). + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/core/issues). Make sure to fill in all fields of the issue template. + + + +## Breaking Changes + +Below is a listing of the breaking change for this release, per subject or +integration. Click on one of those to read more about the breaking change +for that specific item. + +
+ Aurora +

+ +Configuring Aurora sensor via YAML has been removed (it was non-functional +already). The Aurora integration can now be configured via the UI. + +([@djtimca] - [#43045]) ([aurora docs]) + +

+
+ +
+ Certificate Expiry +

+ +In order to optimize stability and performance of Home Assistant, time based +sensors should use only absolute time values (store the date of the event) and +not relative time values (seconds from event), so the value doesn't change +each second. + +The Certificate Expiry integration has both of them, so to adhere to +Home Assistant architectural design rules, the offending relative time +sensor is now removed. + +If your configuration was based on it, please switch to the other one. + +([@chemelli74] - [#42338]) ([cert_expiry docs]) + +

+
+ +
+ Solar-Log +

+ +Per ADR-0010, this release deprecates YAML configuration for the Solar-log +integration. If you already use the Solar-log integration you do not need to +take action, as your configuration has already been imported into the UI. + +([@Ernst79] - [#43484]) ([solarlog docs]) + +

+
+ +
+ LCN +

+ +The logic operation sensor states are renamed from (`not`, `or`, `and`) to +(`none`, `some`, `all`). + +The renaming is more consistent with the LCN naming convention. +When using the states in an automation ensure they are correctly renamed. + +([@alengwenus] - [#43710]) ([lcn docs]) + +

+
+ +
+ Uptime +

+ +In order to optimize stability and performance of Home Assistant, sensors +should use only absolute time values (store the date of the event) and not +relative time values (seconds from event) so the value doesn't change each +second. + +The Uptime integration is one leftover, so to adhere to Home Assistant +architectural design rules, the sensor is now changed to a timestamp. + +As a side effect of this change, the `unit_of_measurement` option of this +integration is now deprecated and can be removed from your configuration if +you used that. + +Please review your Automations and Lovelace configuration to reflect this +change. + +([@chemelli74] - [#43623]) ([uptime docs]) + +

+
+ +
+ Keyring & Credstash +

+ +Support for storing secrets in Credstash and Keyring is deprecated and will be +removed in March 2021. + +([@balloob] - [#43854]) + +

+
+ +
+ Apple TV +

+ +The Apple TV integration has been completely rewritten. Support for YAML is +removed, so old configuration must be removed and devices re-added via the +integrations page. + +Furthermore, the old services `apple_tv.apple_tv_authenticate` and +`apple_tv.apple_tv_scan` are deprecated and replaced by the configration flow. + +([@postlund] - [#31952]) ([apple_tv docs]) + +

+
+ +
+ Telegram Bot +

+ +The telegram bot integration now allows/accepts messages when either the allowed +group (Chat ID) OR the User ID of the sender matches. + +This is a different behavior compared to before as before both Group (Chat ID) +AND User ID needed to be allowed. This allows members of a group to talk to +the bot, even if they are not specifically listed as a user. + +If you use Telegram groups, make sure you adjust your configuration accordingly. + +([@wicol] - [#43241]) ([telegram_bot docs]) + +

+
+ +## Farewell to the following + +The following integrations have been removed: + +- **Salt Fiber Box** ([@MartinHjelmare] - [#43452]) +- **Ubee Router** ([@frenck] - [#43809]) +- **Yessssms** ([@flowolf] - [#43200]) + +These integrations where using webscraping, which is no longer allowed. + +## All changes + +
+ Click to see all changes! + +- Add initial rest query params ([@boxcee] - [#42198]) ([pvoutput docs]) ([rest docs]) ([scrape docs]) +- Simplify distance conversion ([@springstan] - [#43107]) +- Add Shelly support for REST sensors ([@chemelli74] - [#40429]) ([shelly docs]) +- Fix Aurora integration including externalizing API to PyPi and adding config_flow ([@djtimca] - [#43045]) ([aurora docs]) (breaking-change) +- Add save and delete WS commands to blueprints ([@bramkragten] - [#42907]) ([blueprint docs]) +- Add Shelly totalWorkTime as Lamp life (Shelly Air) ([@chemelli74] - [#43112]) ([shelly docs]) +- Add a config flow for Recollect Waste ([@bachya] - [#43063]) ([recollect_waste docs]) +- Add support for multiple event triggers in automation ([@frenck] - [#43097]) ([homeassistant docs]) +- Fix aurora config flow tests ([@MartinHjelmare] - [#43128]) ([aurora docs]) +- Add reload support to KNX ([@spacegaier] - [#42429]) ([knx docs]) +- Revert "shelly_naming" rebase errors ([@thecode] - [#43134]) ([shelly docs]) +- Add VSCode debug launch conf ([@balloob] - [#43130]) +- Add support for learning RF commands with Broadlink remotes ([@felipediel] - [#39671]) ([broadlink docs]) ([remote docs]) +- Shelly: minor improvements ([@chemelli74] - [#43138]) ([shelly docs]) +- Mock time_date sensor tests ([@amelchio] - [#43141]) ([time_date docs]) +- Fix beat calculation ([@amelchio] - [#43142]) ([time_date docs]) +- Further improve MFI tests ([@balloob] - [#43167]) +- Remove relative time sensor from cert_expiry ([@chemelli74] - [#42338]) ([cert_expiry docs]) (breaking-change) +- Fix time_date timestamp offsets ([@amelchio] - [#43165]) ([time_date docs]) +- Improve entity domain validator ([@balloob] - [#43164]) +- Fix time_date interval for DST ([@amelchio] - [#43166]) ([time_date docs]) +- Add test to access current request in websocket API ([@balloob] - [#43133]) ([websocket_api docs]) +- Add log message server startup ([@balloob] - [#43177]) ([http docs]) +- Upgrade sentry-sdk to 0.19.3 ([@frenck] - [#43176]) ([sentry docs]) +- Rewrite google_wifi unittest tests to pytest style ([@Danielinte] - [#42030]) ([google_wifi docs]) +- Copy default vscode settings during bootstrap ([@MartinHjelmare] - [#43180]) +- Update ozw get_config_parameter websocket response ([@cgarwood] - [#43058]) ([ozw docs]) +- Hide cancelled trips from being displayed in vasttrafik integration ([@ttuffin] - [#43184]) ([vasttrafik docs]) +- Fix automation in packages ([@balloob] - [#43202]) ([automation docs]) +- Add support for selectors in services.yaml ([@balloob] - [#43162]) ([blueprint docs]) ([sonos docs]) +- Update fitbit battery status ([@czechmark] - [#42980]) ([fitbit docs]) +- Add quarter-hour period feature for utility_meter component ([@thomasdelaet] - [#41999]) ([utility_meter docs]) +- Add initial camera support to homekit_controller ([@Jc2k] - [#43100]) ([homekit_controller docs]) (new-platform) +- Add support for Broadlink BG1 devices ([@b4dpxl] - [#42314]) ([broadlink docs]) +- Add HomeKit humidifier/dehumidifier ([@adrum] - [#42311]) ([homekit_controller docs]) +- Upgrade youtube_dl to version 2020.11.12 ([@BKPepe] - [#43231]) ([media_extractor docs]) +- Switch ios to dispatching instead of polling ([@bdraco] - [#43233]) ([ios docs]) +- Bump pyheos to 0.7.2 ([@andrewsayre] - [#43239]) ([heos docs]) +- Bypass the slow update warning for group updates ([@bdraco] - [#43209]) ([group docs]) +- Eliminate doorbird switch polling ([@bdraco] - [#43215]) ([doorbird docs]) +- Bump pysmartthings and pysmartapp ([@andrewsayre] - [#43240]) ([smartthings docs]) +- Refactor ZHA light initialization ([@Adminiuga] - [#43149]) ([zha docs]) +- Remove yessssms integration ([@flowolf] - [#43200]) ([yessssms docs]) +- Set should_poll for zone entities ([@bdraco] - [#43212]) ([zone docs]) +- Support gas meter capability for smartthings ([@javache] - [#41310]) ([smartthings docs]) +- Add dsmr_reader telegram timestamp and device classes ([@tim427] - [#42909]) ([dsmr_reader docs]) +- Convert most esphome state updates to callbacks ([@bdraco] - [#43246]) ([esphome docs]) +- Add tests for browse media image proxy ([@ctalkington] - [#43076]) ([media_player docs]) +- Apply suggestions from #42697 to synology_dsm ([@mib1185] - [#43197]) ([synology_dsm docs]) +- Avoid creating battery sensor if Shelly device is external powered ([@chemelli74] - [#43243]) ([shelly docs]) +- Rewrite ecobee unittest tests to pytest ([@adriansuwala] - [#42584]) ([ecobee docs]) +- Bump python-miio and construct version ([@syssi] - [#43267]) ([eddystone_temperature docs]) ([eq3btsmart docs]) ([xiaomi_miio docs]) +- Xiaomi Device Tracker - Move "Refreshing device list" to debug ([@GuyKh] - [#43276]) ([xiaomi docs]) +- Bump actions/upload-artifact from v2.2.0 to v2.2.1 (dependabot - [#43272]) +- Bump Pywemo to 0.5.3 ([@pavoni] - [#43263]) ([wemo docs]) +- Automatically clean up executor as part of closing loop ([@balloob] - [#43284]) +- Convert core tests to async ([@balloob] - [#43287]) +- Bump PyEssent to 0.14 ([@TheLastProject] - [#43282]) ([essent docs]) +- Refactor how entities are created for homekit_controller services ([@Jc2k] - [#43242]) ([homekit_controller docs]) +- Add notification binary_sensor to Plugwise integration ([@CoMPaTech] - [#41473]) ([plugwise docs]) +- Update directv to 0.4.0 ([@ctalkington] - [#43302]) ([directv docs]) ([directv docs]) +- Improvement to allow parsing of station ID in vasttrafik integration. Addresses #34851 ([@ttuffin] - [#43136]) ([vasttrafik docs]) +- Bump codecov/codecov-action from v1.0.14 to v1.0.15 (dependabot - [#43304]) +- Add progress translation key to hassfest ([@MartinHjelmare] - [#43311]) +- Update cloud integration to 0.38.0 ([@klaasnicolaas] - [#43314]) ([cloud docs]) +- Add an option to template delay_on/off in template binary sensor ([@mLupine] - [#43259]) ([template docs]) +- Fix kodi media_player unavailable at start ([@mvn23] - [#41714]) ([kodi docs]) +- Improve Google Assistant cover assumed state handling ([@elupus] - [#43255]) ([google_assistant docs]) +- Add TV channel name to smartthings integration ([@Alex-Klein] - [#41729]) ([smartthings docs]) +- Tweak OZW Light discovery ([@firstof9] - [#43325]) ([ozw docs]) +- Refactor ZHA tests to allow attribute reads during device initialization ([@Adminiuga] - [#43357]) ([zha docs]) +- Update Zha dependencies ([@Adminiuga] - [#43373]) ([zha docs]) +- Refactor ZHA sensor initialization ([@Adminiuga] - [#43339]) ([zha docs]) +- Update denonavr to 0.9.6 ([@scarface-4711] - [#43370]) ([denonavr docs]) +- Add shelly installed firmware info ([@chemelli74] - [#43221]) ([shelly docs]) +- Support for Shelly Binary Input Sensors ([@thecode] - [#43313]) ([shelly docs]) +- Reword numeric_state trigger ([@amelchio] - [#43367]) ([homeassistant docs]) +- Raise in base implementation of FanEntity.oscillate ([@emontnemery] - [#43354]) ([fan docs]) +- Improve nest SDM integration error handling ([@allenporter] - [#43271]) ([nest docs]) +- Update ovoenergy to v1.1.11 ([@timmo001] - [#43391]) ([ovo_energy docs]) +- Fix selector to return the selector type ([@bramkragten] - [#43395]) +- Add twinkly integration ([@dr1rrb] - [#42103]) ([twinkly docs]) (new-integration) +- Add new air-humidifier device CA4 with miot protocol ([@Toxblh] - [#39398]) ([xiaomi_miio docs]) +- Check config to use config platforms ([@balloob] - [#43407]) +- Update pymyq to 2.0.10 ([@ehendrix23] - [#43413]) ([myq docs]) +- Update python-awair to 0.2.1 ([@ahayworth] - [#43415]) ([awair docs]) +- Add Srp energy component ([@briglx] - [#41091]) ([srp_energy docs]) (new-integration) +- Update Alexa supported languages ([@100ferhas] - [#43139]) ([alexa docs]) +- Support openRelativePercent for google assistant covers ([@elupus] - [#43336]) ([google_assistant docs]) +- Add support for checking minimum HA version ([@balloob] - [#43350]) ([blueprint docs]) +- Provide HA username via auth WS ([@spacegaier] - [#43283]) ([config docs]) +- Verify that we register blueprints on automation setup ([@balloob] - [#43434]) ([automation docs]) ([blueprint docs]) +- Update dsmr_parser to 0.23 ([@RobBie1221] - [#43403]) ([dsmr docs]) +- Upgrade Beewi Smartclim component to 0.0.10 ([@alemuro] - [#43441]) ([beewi_smartclim docs]) +- Fix empty local_ip config flow ([@spacegaier] - [#43333]) ([local_ip docs]) +- Use weather attribute conditions constants ([@springstan] - [#39945]) +- Move Flo logger to a package logger ([@bachya] - [#43449]) ([flo docs]) +- Move Ambient PWS logger to a package logger ([@bachya] - [#43448]) ([ambient_station docs]) +- Move legacy device tracker setup to legacy module ([@MartinHjelmare] - [#43447]) ([device_tracker docs]) +- Remove salt integration for webscraping ([@MartinHjelmare] - [#43452]) ([salt docs]) (breaking-change) +- Move Notion logger to a package logger ([@bachya] - [#43450]) ([notion docs]) +- Add ONVIF PTZ Stop support ([@scop] - [#39734]) ([onvif docs]) +- Remove zigpy monkey patching ([@Adminiuga] - [#43456]) ([zha docs]) +- Change Plugwise integration to plugwise module ([@CoMPaTech] - [#43036]) ([plugwise docs]) +- Avoid arbitrarily reducing ZHA climate temperature information ([@FrnchFrgg] - [#43442]) ([zha docs]) +- Bump acmeda dependency aiopulse to 0.4.2 ([@atmurray] - [#43217]) ([acmeda docs]) +- Fix ConnectTimeout during wolflink start ([@adamkrol93] - [#43418]) ([wolflink docs]) +- Add reauth support for OVO Energy ([@timmo001] - [#38882]) ([ovo_energy docs]) +- Upgrade debugpy to 1.2.0 ([@frenck] - [#43328]) ([debugpy docs]) +- Add repeat mode support to Spotify ([@frenck] - [#43247]) ([spotify docs]) +- Fix Luftdaten.info data retrieval ([@FlavorFx] - [#43471]) ([luftdaten docs]) +- Support for multiple states in history_stats ([@iprak] - [#43416]) ([history_stats docs]) +- Upgrade discord.py to 1.5.1 ([@LordBoos] - [#43473]) +- Bump rpi-bad-power to 0.1.0 ([@shenxn] - [#43476]) ([rpi_power docs]) +- Deprecate YAML config for Solar-log ([@Ernst79] - [#43484]) ([solarlog docs]) (breaking-change) +- Add updated British Voices ([@CrashWorksLLC] - [#43496]) ([watson_tts docs]) +- Clean up Solar-log review comments ([@frenck] - [#43503]) ([solarlog docs]) +- Optimize Sonos queue position ([@amelchio] - [#43514]) ([sonos docs]) +- Re-organize OpenUV constants ([@bachya] - [#43453]) ([openuv docs]) +- Bump envoy version to 0.17.0 ([@gtdiehl] - [#43498]) ([enphase_envoy docs]) +- Optimize Sonos favorites updates ([@amelchio] - [#43516]) ([sonos docs]) +- Add seek support to plex media players ([@shocklateboy92] - [#43420]) ([plex docs]) +- Clean up RainMachine config entry ([@bachya] - [#43508]) ([rainmachine docs]) +- Add vendor effects to Yeelight integration ([@danielrheinbay] - [#42711]) ([yeelight docs]) +- Optimize Sonos current playing state ([@amelchio] - [#43517]) ([sonos docs]) +- Make Brother uptime sensor disabled by default ([@bieniu] - [#43478]) ([brother docs]) +- Add device id to deconz_event ([@Kane610] - [#43552]) ([deconz docs]) +- Bump actions/stale from v3.0.13 to v3.0.14 (dependabot - [#43551]) +- Update Blinkpy to fix non-updating blink mini cameras ([@fronzbot] - [#43549]) ([blink docs]) +- Optimize reading of Sonos source mode ([@amelchio] - [#43541]) ([sonos docs]) +- Mill Heater: Add support for Energy consumption ([@Danielhiversen] - [#43523]) ([mill docs]) +- Track deCONZ lib changes to light based devices ([@Kane610] - [#43366]) ([deconz docs]) +- update solax to 0.2.5 ([@squishykid] - [#43564]) ([solax docs]) +- Upgrade sentry-sdk to 0.19.4 ([@frenck] - [#43504]) ([sentry docs]) +- Update denonavr to 0.9.7 ([@scarface-4711] - [#43546]) ([denonavr docs]) +- Fix RTS cover with set position available ([@tetienne] - [#43555]) ([somfy docs]) +- Add codeowner to Enphase Envoy manifest ([@gtdiehl] - [#43402]) ([enphase_envoy docs]) +- Add webhook to default config ([@frenck] - [#43521]) ([default_config docs]) +- Cannot use vcgencmd in HassOS ([@denics] - [#42710]) ([sensehat docs]) +- Add Motion Blinds integration ([@starkillerOG] - [#42989]) ([motion_blinds docs]) (new-integration) +- Use references in config flow for solaredge ([@Cereal2nd] - [#43511]) ([solaredge docs]) +- Bump version to 0.119.0dev0 ([@frenck] - [#43485]) +- Decrease asuswrt connects per sensor ([@JJdeVries] - [#43383]) ([asuswrt docs]) +- Fix warning generated by surpetcare test ([@balloob] - [#43598]) ([surepetcare docs]) +- Fix conversion of cover position between HASS and deCONZ ([@Kane610] - [#43602]) ([deconz docs]) +- Update nest library and switch events to async ([@allenporter] - [#43583]) ([nest docs]) +- Add unknown_authorize_url_generation to base strings for config flows ([@springstan] - [#42484]) ([nest docs]) ([point docs]) ([tellduslive docs]) ([toon docs]) +- Bump hatasmota to 0.1.1 ([@emontnemery] - [#43608]) ([tasmota docs]) +- Fix Meraki API Auth ([@koolsb] - [#43578]) ([meraki docs]) +- Upgrade foobot_async to 1.0.0 ([@balloob] - [#43611]) ([foobot docs]) +- Add tilt support to deCONZ covers ([@Kane610] - [#43607]) ([deconz docs]) +- update xknx to 0.15.4 ([@farmio] - [#43536]) ([knx docs]) +- Add nest SDM API camera/doorbell events ([@allenporter] - [#42700]) ([nest docs]) +- Bump pyhs100 dependency to fix hs220 discoverability issues ([@rytilahti] - [#43619]) ([tplink docs]) +- Bump ha-ffmpeg to 3.0.2 ([@balloob] - [#43597]) +- Add default config if not there ([@balloob] - [#43321]) +- Support for Shelly Input Events ([@thecode] - [#43479]) ([shelly docs]) +- Add Shelly UNI ADC sensor ([@chemelli74] - [#43490]) ([shelly docs]) +- Add FireServiceRota/BrandweerRooster integration ([@cyberjunky] - [#38206]) ([fireservicerota docs]) (new-integration) +- Fix flapping derivative tests where time would move between state changes ([@elupus] - [#43579]) ([derivative docs]) +- Add Tasmota fan ([@emontnemery] - [#43353]) ([tasmota docs]) (new-platform) +- Add Tasmota cover ([@emontnemery] - [#43368]) ([tasmota docs]) (new-platform) +- Add more selectors ([@bramkragten] - [#43639]) ([input_number docs]) +- Add default to inputs ([@bramkragten] - [#43636]) ([blueprint docs]) +- Add location to summary sensor attributes ([@ofalvai] - [#43641]) ([seventeentrack docs]) +- Suggest folder when importing blueprint and store source_url ([@balloob] - [#43650]) ([blueprint docs]) +- Add Duty binary_sensor platform to FireServiceRota integration ([@cyberjunky] - [#43638]) ([fireservicerota docs]) (new-platform) +- Add area selector, remove date selector ([@bramkragten] - [#43658]) +- Allow importing gist ([@balloob] - [#43659]) ([blueprint docs]) +- Support disabling devices ([@emontnemery] - [#43293]) ([config docs]) +- Add Roomba support for automatic emptying of bin ([@jasperslits] - [#43594]) ([roomba docs]) +- Make input_datetime better handle timezones ([@balloob] - [#43396]) ([input_datetime docs]) +- Fix check config ([@balloob] - [#43663]) ([blueprint docs]) +- Fix MQTT threading bug ([@emontnemery] - [#43667]) ([mqtt docs]) +- Upgrade pre-commit to 2.9.2 ([@frenck] - [#43655]) +- Small cleanup of Tasmota ([@emontnemery] - [#43642]) ([tasmota docs]) +- Updated frontend to 20201126.0 ([@bramkragten] - [#43682]) ([frontend docs]) +- Met.no: Fix for zero temp entries ([@thimic] - [#43684]) ([met docs]) +- OAuth2 to use current request header ([@balloob] - [#43668]) ([toon docs]) +- Exclude disabled entities from async_entries_for_device ([@emontnemery] - [#43665]) ([deconz docs]) ([mqtt docs]) ([tasmota docs]) ([tuya docs]) ([unifi docs]) ([zha docs]) +- Add option to deactivate a user ([@spacegaier] - [#43463]) ([config docs]) +- Bugfix schedule assigned to wrong day of week ([@zxdavb] - [#43676]) ([evohome docs]) +- Code quality improvement for evohome ([@zxdavb] - [#43678]) ([evohome docs]) +- Fix Shelly uptime sensor ([@thecode] - [#43651]) ([shelly docs]) +- Convert API integration to async setup ([@balloob] - [#43685]) ([api docs]) +- Eliminate evohome unhandled exceptions when client API call fails ([@zxdavb] - [#43681]) ([evohome docs]) +- Maybe fix flaky test ([@balloob] - [#43690]) ([shelly docs]) +- Stub finding custom integrations in tests ([@balloob] - [#43692]) +- Add Abode MFA support ([@shred86] - [#43572]) ([abode docs]) +- Use run_job for service helper ([@balloob] - [#43696]) ([input_boolean docs]) ([input_datetime docs]) +- Use utcnow from date util for http.ban ([@balloob] - [#43686]) ([http docs]) +- Await callbacks to keep cleaner stacktraces ([@balloob] - [#43693]) ([mqtt docs]) +- Update xknx to 0.15.6 ([@farmio] - [#43645]) ([knx docs]) +- Add system health check to Spotify ([@frenck] - [#43249]) ([spotify docs]) +- Fix exception upon lock initialization on V2 SimpliSafe systems ([@bachya] - [#43705]) ([simplisafe docs]) +- Bump RFLink to v0.0.55 ([@javicalle] - [#43704]) ([rflink docs]) +- Proxy Plex media browser images ([@jjlawren] - [#43111]) ([plex docs]) +- Bump up ZHA dependencies ([@Adminiuga] - [#43707]) ([zha docs]) +- Add support to control cooling in deCONZ climate platform ([@Kane610] - [#43720]) ([deconz docs]) +- Blueprint config to override blueprint ([@balloob] - [#43724]) ([blueprint docs]) +- Ensure MariaDB/MySQL can be purged and handle states being deleted out from under the recorder ([@moinmoin-sh] - [#43610]) ([recorder docs]) +- Bump Brother library to version 0.1.20 ([@bieniu] - [#43628]) ([brother docs]) +- Bump hatasmota to 0.1.2 ([@emontnemery] - [#43719]) ([tasmota docs]) +- Make threshold binary sensor faster ([@balloob] - [#43695]) ([threshold docs]) +- Add Response switch platform to FireServiceRota integration ([@cyberjunky] - [#43700]) ([fireservicerota docs]) (new-platform) +- Add additional events to enhance the ZHA device pairing experience ([@dmulcahey] - [#43729]) ([zha docs]) +- Add a service target ([@balloob] - [#43725]) +- Create tables with a charset that can hold all expected data under mysql ([@bdraco] - [#43732]) ([recorder docs]) +- Allow configuring the delay in the motion light blueprint ([@balloob] - [#43737]) ([automation docs]) +- Add support for multiple tags and devices in tag trigger ([@frenck] - [#43098]) ([tag docs]) +- Remove temporary variable by only retrieving needed value ([@springstan] - [#42522]) +- Bump pypck to v0.7.6 ([@alengwenus] - [#43710]) ([lcn docs]) (breaking-change) +- Use the correct property for full init event ([@dmulcahey] - [#43745]) ([zha docs]) +- ZHA: remove unused 'from_cache' argument from 'async_get_state' and add 'async_update' ([@basnijholt] - [#42413]) ([zha docs]) +- Address FireServiceRota late code review ([@cyberjunky] - [#43741]) ([fireservicerota docs]) +- Always keep the current recorder run when purging ([@bdraco] - [#43733]) ([recorder docs]) +- Add nest device triggers for camera and doorbell events ([@allenporter] - [#43548]) ([nest docs]) +- Report correct weather condition at night for OpenWeatherMap ([@springstan] - [#42982]) ([openweathermap docs]) +- Support asking covers to stop using google assistant ([@elupus] - [#43537]) ([google_assistant docs]) +- Fix updating of Tesla switches after command ([@alandtse] - [#43754]) ([tesla docs]) +- Allow specifying device_id as target ([@balloob] - [#43767]) +- Add system health check to IPMA ([@dgomes] - [#43762]) ([ipma docs]) +- Add device information to solarlog integration ([@Ernst79] - [#43680]) ([solarlog docs]) +- Add hyperion config options flow ([@dermotduffy] - [#43673]) ([hyperion docs]) +- Add show progress to ozw config flow ([@MartinHjelmare] - [#43310]) ([ozw docs]) +- Pin pip < 20.3 ([@MartinHjelmare] - [#43771]) +- Add authentication support to bsblan ([@liudger] - [#42306]) ([bsblan docs]) +- Increase Supervisor add-on helper timeout ([@MartinHjelmare] - [#43778]) ([hassio docs]) +- Add support for device class in target selector ([@balloob] - [#43768]) +- Fix MQTT birth message deadlock ([@emontnemery] - [#43790]) ([mqtt docs]) +- Warn when referencing missing devices/areas ([@balloob] - [#43787]) +- Add lock.open service to nello ([@pattyland] - [#42141]) ([nello docs]) ([nello docs]) +- Migrate foscam to use entity platform entity services ([@balloob] - [#43775]) ([foscam docs]) +- Use entity platform for Neato ([@balloob] - [#43772]) ([neato docs]) +- Upgrade elgato to 1.0.0 ([@frenck] - [#43792]) ([elgato docs]) +- Bump aiorecollect to 0.2.2 ([@bachya] - [#43796]) ([recollect_waste docs]) +- Base area IDs on initial name ([@balloob] - [#43804]) +- Remove unused stuff from ZHA registries ([@abmantis] - [#43786]) ([zha docs]) +- Remove Ubee Router integration (ADR-0004) ([@frenck] - [#43809]) ([ubee docs]) (breaking-change) +- Fix config validation tests for upcoming beta ([@frenck] - [#43811]) +- Remove invalidation version from Airvisual ([@frenck] - [#43810]) ([airvisual docs]) +- Move uptime from relative time to absolute time ([@chemelli74] - [#43623]) ([uptime docs]) (breaking-change) +- Add device action to mobile app to notify ([@balloob] - [#43814]) ([mobile_app docs]) ([notify docs]) +- Use !input instead of !placeholder ([@balloob] - [#43820]) ([automation docs]) ([blueprint docs]) +- Fix wrong temperature setting in LCN climate ([@alengwenus] - [#43818]) ([lcn docs]) +- Make simple deCONZ thermostats work ([@Kane610] - [#43781]) ([deconz docs]) +- Another try to get rid of Shelly flaky test ([@balloob] - [#43821]) ([shelly docs]) +- Add Analog cluster for Lumi plugs ([@Adminiuga] - [#43817]) ([zha docs]) +- Add ozw scene_instance to scene_activated ([@firstof9] - [#43829]) ([ozw docs]) +- Support more edl21 devices and sensors ([@mtdcr] - [#43603]) ([edl21 docs]) +- Update area and target selectors add sequence selector ([@bramkragten] - [#43831]) ([automation docs]) +- Bump libpurecool to 0.6.4 ([@etheralm] - [#43779]) ([dyson docs]) +- Add test for is_internal_request ([@ctalkington] - [#43841]) +- Upgrade TwitterAPI to 2.6.2.1 ([@fabaff] - [#43833]) ([twitter docs]) +- Correct service not found exception message ([@frenck] - [#43846]) +- Upgrade pylast to 4.0.0 ([@fabaff] - [#43830]) ([lastfm docs]) +- Bump pypck to 0.7.7 ([@alengwenus] - [#43824]) ([lcn docs]) +- Use light turn on service ([@balloob] - [#43847]) ([automation docs]) +- Do not warn for weak referenced entities ([@balloob] - [#43848]) ([homeassistant docs]) +- Migrate notify-leaving-zone to use mobile app device action ([@balloob] - [#43832]) ([automation docs]) ([mobile_app docs]) +- Add new number entity integration ([@Shulyaka] - [#42735]) ([demo docs]) ([number docs]) (new-integration) +- Make "invalid password" error message clearer ([@spacegaier] - [#43853]) ([config docs]) +- Guard for when refreshing token fails ([@balloob] - [#43855]) ([spotify docs]) +- Cleanup unique_id on onewire integration ([@epenet] - [#43783]) ([onewire docs]) +- Fix using execute on the notify_leaving_zone ([@balloob] - [#43858]) ([automation docs]) +- deCONZ improve options updating entities ([@Kane610] - [#42320]) ([deconz docs]) +- Deprecate the use of keyring and credstash ([@balloob] - [#43854]) (breaking-change) +- Refactor Apple TV integration ([@postlund] - [#31952]) ([apple_tv docs]) (breaking-change) +- Add preset support to deCONZ climate platform ([@Kane610] - [#43722]) ([deconz docs]) +- Bump androidtv to 0.0.56 ([@JeffLIrion] - [#43859]) +- Add fan support to deCONZ climate platform ([@Kane610] - [#43721]) ([deconz docs]) +- Use Plex websocket payloads to reduce overhead ([@jjlawren] - [#42332]) ([plex docs]) +- Bump Synology DSM to 1.0.1 ([@Quentame] - [#43860]) ([synology_dsm docs]) +- Allow members of allowed groups to talk to telegram_bot ([@wicol] - [#43241]) ([telegram_bot docs]) (breaking-change) +- Add support for system health to Airly integrarion ([@bieniu] - [#43220]) ([airly docs]) +- Add support for system health to AccuWeather integration ([@bieniu] - [#43277]) ([accuweather docs]) +- Automatically select "Solid" effect in Hyperion ([@dermotduffy] - [#43799]) ([hyperion docs]) +- Add support for MQTT Scenes ([@kiall] - [#42639]) ([mqtt docs]) (new-platform) +- Add ozw add-on discovery and mqtt client ([@MartinHjelmare] - [#43838]) ([hassio docs]) ([ozw docs]) +- Add telegram_bot.send_voice service ([@dvv] - [#43433]) ([telegram_bot docs]) +- Updated frontend to 20201202.0 ([@bramkragten] - [#43862]) ([frontend docs]) +- Improve custom datatype parsing in Modbus sensor and climate ([@vzahradnik] - [#42354]) ([modbus docs]) +- Improve handling of disabled devices ([@emontnemery] - [#43864]) ([config docs]) +- Implement new Google TTS API via dedicated library ([@marvin-w] - [#43863]) ([google_translate docs]) + +
+ +[#31952]: https://github.com/home-assistant/core/pull/31952 +[#38206]: https://github.com/home-assistant/core/pull/38206 +[#38882]: https://github.com/home-assistant/core/pull/38882 +[#39398]: https://github.com/home-assistant/core/pull/39398 +[#39671]: https://github.com/home-assistant/core/pull/39671 +[#39734]: https://github.com/home-assistant/core/pull/39734 +[#39945]: https://github.com/home-assistant/core/pull/39945 +[#40429]: https://github.com/home-assistant/core/pull/40429 +[#41091]: https://github.com/home-assistant/core/pull/41091 +[#41310]: https://github.com/home-assistant/core/pull/41310 +[#41473]: https://github.com/home-assistant/core/pull/41473 +[#41714]: https://github.com/home-assistant/core/pull/41714 +[#41729]: https://github.com/home-assistant/core/pull/41729 +[#41999]: https://github.com/home-assistant/core/pull/41999 +[#42030]: https://github.com/home-assistant/core/pull/42030 +[#42103]: https://github.com/home-assistant/core/pull/42103 +[#42141]: https://github.com/home-assistant/core/pull/42141 +[#42198]: https://github.com/home-assistant/core/pull/42198 +[#42306]: https://github.com/home-assistant/core/pull/42306 +[#42311]: https://github.com/home-assistant/core/pull/42311 +[#42314]: https://github.com/home-assistant/core/pull/42314 +[#42320]: https://github.com/home-assistant/core/pull/42320 +[#42332]: https://github.com/home-assistant/core/pull/42332 +[#42338]: https://github.com/home-assistant/core/pull/42338 +[#42354]: https://github.com/home-assistant/core/pull/42354 +[#42413]: https://github.com/home-assistant/core/pull/42413 +[#42429]: https://github.com/home-assistant/core/pull/42429 +[#42484]: https://github.com/home-assistant/core/pull/42484 +[#42522]: https://github.com/home-assistant/core/pull/42522 +[#42584]: https://github.com/home-assistant/core/pull/42584 +[#42639]: https://github.com/home-assistant/core/pull/42639 +[#42700]: https://github.com/home-assistant/core/pull/42700 +[#42710]: https://github.com/home-assistant/core/pull/42710 +[#42711]: https://github.com/home-assistant/core/pull/42711 +[#42735]: https://github.com/home-assistant/core/pull/42735 +[#42907]: https://github.com/home-assistant/core/pull/42907 +[#42909]: https://github.com/home-assistant/core/pull/42909 +[#42980]: https://github.com/home-assistant/core/pull/42980 +[#42982]: https://github.com/home-assistant/core/pull/42982 +[#42989]: https://github.com/home-assistant/core/pull/42989 +[#43036]: https://github.com/home-assistant/core/pull/43036 +[#43045]: https://github.com/home-assistant/core/pull/43045 +[#43058]: https://github.com/home-assistant/core/pull/43058 +[#43063]: https://github.com/home-assistant/core/pull/43063 +[#43076]: https://github.com/home-assistant/core/pull/43076 +[#43097]: https://github.com/home-assistant/core/pull/43097 +[#43098]: https://github.com/home-assistant/core/pull/43098 +[#43100]: https://github.com/home-assistant/core/pull/43100 +[#43107]: https://github.com/home-assistant/core/pull/43107 +[#43111]: https://github.com/home-assistant/core/pull/43111 +[#43112]: https://github.com/home-assistant/core/pull/43112 +[#43128]: https://github.com/home-assistant/core/pull/43128 +[#43130]: https://github.com/home-assistant/core/pull/43130 +[#43133]: https://github.com/home-assistant/core/pull/43133 +[#43134]: https://github.com/home-assistant/core/pull/43134 +[#43136]: https://github.com/home-assistant/core/pull/43136 +[#43138]: https://github.com/home-assistant/core/pull/43138 +[#43139]: https://github.com/home-assistant/core/pull/43139 +[#43141]: https://github.com/home-assistant/core/pull/43141 +[#43142]: https://github.com/home-assistant/core/pull/43142 +[#43149]: https://github.com/home-assistant/core/pull/43149 +[#43162]: https://github.com/home-assistant/core/pull/43162 +[#43164]: https://github.com/home-assistant/core/pull/43164 +[#43165]: https://github.com/home-assistant/core/pull/43165 +[#43166]: https://github.com/home-assistant/core/pull/43166 +[#43167]: https://github.com/home-assistant/core/pull/43167 +[#43176]: https://github.com/home-assistant/core/pull/43176 +[#43177]: https://github.com/home-assistant/core/pull/43177 +[#43180]: https://github.com/home-assistant/core/pull/43180 +[#43184]: https://github.com/home-assistant/core/pull/43184 +[#43197]: https://github.com/home-assistant/core/pull/43197 +[#43200]: https://github.com/home-assistant/core/pull/43200 +[#43202]: https://github.com/home-assistant/core/pull/43202 +[#43209]: https://github.com/home-assistant/core/pull/43209 +[#43212]: https://github.com/home-assistant/core/pull/43212 +[#43215]: https://github.com/home-assistant/core/pull/43215 +[#43217]: https://github.com/home-assistant/core/pull/43217 +[#43220]: https://github.com/home-assistant/core/pull/43220 +[#43221]: https://github.com/home-assistant/core/pull/43221 +[#43231]: https://github.com/home-assistant/core/pull/43231 +[#43233]: https://github.com/home-assistant/core/pull/43233 +[#43239]: https://github.com/home-assistant/core/pull/43239 +[#43240]: https://github.com/home-assistant/core/pull/43240 +[#43241]: https://github.com/home-assistant/core/pull/43241 +[#43242]: https://github.com/home-assistant/core/pull/43242 +[#43243]: https://github.com/home-assistant/core/pull/43243 +[#43246]: https://github.com/home-assistant/core/pull/43246 +[#43247]: https://github.com/home-assistant/core/pull/43247 +[#43249]: https://github.com/home-assistant/core/pull/43249 +[#43255]: https://github.com/home-assistant/core/pull/43255 +[#43259]: https://github.com/home-assistant/core/pull/43259 +[#43263]: https://github.com/home-assistant/core/pull/43263 +[#43267]: https://github.com/home-assistant/core/pull/43267 +[#43271]: https://github.com/home-assistant/core/pull/43271 +[#43272]: https://github.com/home-assistant/core/pull/43272 +[#43276]: https://github.com/home-assistant/core/pull/43276 +[#43277]: https://github.com/home-assistant/core/pull/43277 +[#43282]: https://github.com/home-assistant/core/pull/43282 +[#43283]: https://github.com/home-assistant/core/pull/43283 +[#43284]: https://github.com/home-assistant/core/pull/43284 +[#43287]: https://github.com/home-assistant/core/pull/43287 +[#43293]: https://github.com/home-assistant/core/pull/43293 +[#43302]: https://github.com/home-assistant/core/pull/43302 +[#43304]: https://github.com/home-assistant/core/pull/43304 +[#43310]: https://github.com/home-assistant/core/pull/43310 +[#43311]: https://github.com/home-assistant/core/pull/43311 +[#43313]: https://github.com/home-assistant/core/pull/43313 +[#43314]: https://github.com/home-assistant/core/pull/43314 +[#43321]: https://github.com/home-assistant/core/pull/43321 +[#43325]: https://github.com/home-assistant/core/pull/43325 +[#43328]: https://github.com/home-assistant/core/pull/43328 +[#43333]: https://github.com/home-assistant/core/pull/43333 +[#43336]: https://github.com/home-assistant/core/pull/43336 +[#43339]: https://github.com/home-assistant/core/pull/43339 +[#43350]: https://github.com/home-assistant/core/pull/43350 +[#43353]: https://github.com/home-assistant/core/pull/43353 +[#43354]: https://github.com/home-assistant/core/pull/43354 +[#43357]: https://github.com/home-assistant/core/pull/43357 +[#43366]: https://github.com/home-assistant/core/pull/43366 +[#43367]: https://github.com/home-assistant/core/pull/43367 +[#43368]: https://github.com/home-assistant/core/pull/43368 +[#43370]: https://github.com/home-assistant/core/pull/43370 +[#43373]: https://github.com/home-assistant/core/pull/43373 +[#43383]: https://github.com/home-assistant/core/pull/43383 +[#43391]: https://github.com/home-assistant/core/pull/43391 +[#43395]: https://github.com/home-assistant/core/pull/43395 +[#43396]: https://github.com/home-assistant/core/pull/43396 +[#43402]: https://github.com/home-assistant/core/pull/43402 +[#43403]: https://github.com/home-assistant/core/pull/43403 +[#43407]: https://github.com/home-assistant/core/pull/43407 +[#43413]: https://github.com/home-assistant/core/pull/43413 +[#43415]: https://github.com/home-assistant/core/pull/43415 +[#43416]: https://github.com/home-assistant/core/pull/43416 +[#43418]: https://github.com/home-assistant/core/pull/43418 +[#43420]: https://github.com/home-assistant/core/pull/43420 +[#43433]: https://github.com/home-assistant/core/pull/43433 +[#43434]: https://github.com/home-assistant/core/pull/43434 +[#43441]: https://github.com/home-assistant/core/pull/43441 +[#43442]: https://github.com/home-assistant/core/pull/43442 +[#43447]: https://github.com/home-assistant/core/pull/43447 +[#43448]: https://github.com/home-assistant/core/pull/43448 +[#43449]: https://github.com/home-assistant/core/pull/43449 +[#43450]: https://github.com/home-assistant/core/pull/43450 +[#43452]: https://github.com/home-assistant/core/pull/43452 +[#43453]: https://github.com/home-assistant/core/pull/43453 +[#43456]: https://github.com/home-assistant/core/pull/43456 +[#43463]: https://github.com/home-assistant/core/pull/43463 +[#43471]: https://github.com/home-assistant/core/pull/43471 +[#43473]: https://github.com/home-assistant/core/pull/43473 +[#43476]: https://github.com/home-assistant/core/pull/43476 +[#43478]: https://github.com/home-assistant/core/pull/43478 +[#43479]: https://github.com/home-assistant/core/pull/43479 +[#43484]: https://github.com/home-assistant/core/pull/43484 +[#43485]: https://github.com/home-assistant/core/pull/43485 +[#43490]: https://github.com/home-assistant/core/pull/43490 +[#43496]: https://github.com/home-assistant/core/pull/43496 +[#43498]: https://github.com/home-assistant/core/pull/43498 +[#43503]: https://github.com/home-assistant/core/pull/43503 +[#43504]: https://github.com/home-assistant/core/pull/43504 +[#43508]: https://github.com/home-assistant/core/pull/43508 +[#43511]: https://github.com/home-assistant/core/pull/43511 +[#43514]: https://github.com/home-assistant/core/pull/43514 +[#43516]: https://github.com/home-assistant/core/pull/43516 +[#43517]: https://github.com/home-assistant/core/pull/43517 +[#43521]: https://github.com/home-assistant/core/pull/43521 +[#43523]: https://github.com/home-assistant/core/pull/43523 +[#43536]: https://github.com/home-assistant/core/pull/43536 +[#43537]: https://github.com/home-assistant/core/pull/43537 +[#43541]: https://github.com/home-assistant/core/pull/43541 +[#43546]: https://github.com/home-assistant/core/pull/43546 +[#43548]: https://github.com/home-assistant/core/pull/43548 +[#43549]: https://github.com/home-assistant/core/pull/43549 +[#43551]: https://github.com/home-assistant/core/pull/43551 +[#43552]: https://github.com/home-assistant/core/pull/43552 +[#43555]: https://github.com/home-assistant/core/pull/43555 +[#43564]: https://github.com/home-assistant/core/pull/43564 +[#43572]: https://github.com/home-assistant/core/pull/43572 +[#43578]: https://github.com/home-assistant/core/pull/43578 +[#43579]: https://github.com/home-assistant/core/pull/43579 +[#43583]: https://github.com/home-assistant/core/pull/43583 +[#43594]: https://github.com/home-assistant/core/pull/43594 +[#43597]: https://github.com/home-assistant/core/pull/43597 +[#43598]: https://github.com/home-assistant/core/pull/43598 +[#43602]: https://github.com/home-assistant/core/pull/43602 +[#43603]: https://github.com/home-assistant/core/pull/43603 +[#43607]: https://github.com/home-assistant/core/pull/43607 +[#43608]: https://github.com/home-assistant/core/pull/43608 +[#43610]: https://github.com/home-assistant/core/pull/43610 +[#43611]: https://github.com/home-assistant/core/pull/43611 +[#43619]: https://github.com/home-assistant/core/pull/43619 +[#43623]: https://github.com/home-assistant/core/pull/43623 +[#43628]: https://github.com/home-assistant/core/pull/43628 +[#43636]: https://github.com/home-assistant/core/pull/43636 +[#43638]: https://github.com/home-assistant/core/pull/43638 +[#43639]: https://github.com/home-assistant/core/pull/43639 +[#43641]: https://github.com/home-assistant/core/pull/43641 +[#43642]: https://github.com/home-assistant/core/pull/43642 +[#43645]: https://github.com/home-assistant/core/pull/43645 +[#43650]: https://github.com/home-assistant/core/pull/43650 +[#43651]: https://github.com/home-assistant/core/pull/43651 +[#43655]: https://github.com/home-assistant/core/pull/43655 +[#43658]: https://github.com/home-assistant/core/pull/43658 +[#43659]: https://github.com/home-assistant/core/pull/43659 +[#43663]: https://github.com/home-assistant/core/pull/43663 +[#43665]: https://github.com/home-assistant/core/pull/43665 +[#43667]: https://github.com/home-assistant/core/pull/43667 +[#43668]: https://github.com/home-assistant/core/pull/43668 +[#43673]: https://github.com/home-assistant/core/pull/43673 +[#43676]: https://github.com/home-assistant/core/pull/43676 +[#43678]: https://github.com/home-assistant/core/pull/43678 +[#43680]: https://github.com/home-assistant/core/pull/43680 +[#43681]: https://github.com/home-assistant/core/pull/43681 +[#43682]: https://github.com/home-assistant/core/pull/43682 +[#43684]: https://github.com/home-assistant/core/pull/43684 +[#43685]: https://github.com/home-assistant/core/pull/43685 +[#43686]: https://github.com/home-assistant/core/pull/43686 +[#43690]: https://github.com/home-assistant/core/pull/43690 +[#43692]: https://github.com/home-assistant/core/pull/43692 +[#43693]: https://github.com/home-assistant/core/pull/43693 +[#43695]: https://github.com/home-assistant/core/pull/43695 +[#43696]: https://github.com/home-assistant/core/pull/43696 +[#43700]: https://github.com/home-assistant/core/pull/43700 +[#43704]: https://github.com/home-assistant/core/pull/43704 +[#43705]: https://github.com/home-assistant/core/pull/43705 +[#43707]: https://github.com/home-assistant/core/pull/43707 +[#43710]: https://github.com/home-assistant/core/pull/43710 +[#43719]: https://github.com/home-assistant/core/pull/43719 +[#43720]: https://github.com/home-assistant/core/pull/43720 +[#43721]: https://github.com/home-assistant/core/pull/43721 +[#43722]: https://github.com/home-assistant/core/pull/43722 +[#43724]: https://github.com/home-assistant/core/pull/43724 +[#43725]: https://github.com/home-assistant/core/pull/43725 +[#43729]: https://github.com/home-assistant/core/pull/43729 +[#43732]: https://github.com/home-assistant/core/pull/43732 +[#43733]: https://github.com/home-assistant/core/pull/43733 +[#43737]: https://github.com/home-assistant/core/pull/43737 +[#43741]: https://github.com/home-assistant/core/pull/43741 +[#43745]: https://github.com/home-assistant/core/pull/43745 +[#43754]: https://github.com/home-assistant/core/pull/43754 +[#43762]: https://github.com/home-assistant/core/pull/43762 +[#43767]: https://github.com/home-assistant/core/pull/43767 +[#43768]: https://github.com/home-assistant/core/pull/43768 +[#43771]: https://github.com/home-assistant/core/pull/43771 +[#43772]: https://github.com/home-assistant/core/pull/43772 +[#43775]: https://github.com/home-assistant/core/pull/43775 +[#43778]: https://github.com/home-assistant/core/pull/43778 +[#43779]: https://github.com/home-assistant/core/pull/43779 +[#43781]: https://github.com/home-assistant/core/pull/43781 +[#43783]: https://github.com/home-assistant/core/pull/43783 +[#43786]: https://github.com/home-assistant/core/pull/43786 +[#43787]: https://github.com/home-assistant/core/pull/43787 +[#43790]: https://github.com/home-assistant/core/pull/43790 +[#43792]: https://github.com/home-assistant/core/pull/43792 +[#43796]: https://github.com/home-assistant/core/pull/43796 +[#43799]: https://github.com/home-assistant/core/pull/43799 +[#43804]: https://github.com/home-assistant/core/pull/43804 +[#43809]: https://github.com/home-assistant/core/pull/43809 +[#43810]: https://github.com/home-assistant/core/pull/43810 +[#43811]: https://github.com/home-assistant/core/pull/43811 +[#43814]: https://github.com/home-assistant/core/pull/43814 +[#43817]: https://github.com/home-assistant/core/pull/43817 +[#43818]: https://github.com/home-assistant/core/pull/43818 +[#43820]: https://github.com/home-assistant/core/pull/43820 +[#43821]: https://github.com/home-assistant/core/pull/43821 +[#43824]: https://github.com/home-assistant/core/pull/43824 +[#43829]: https://github.com/home-assistant/core/pull/43829 +[#43830]: https://github.com/home-assistant/core/pull/43830 +[#43831]: https://github.com/home-assistant/core/pull/43831 +[#43832]: https://github.com/home-assistant/core/pull/43832 +[#43833]: https://github.com/home-assistant/core/pull/43833 +[#43838]: https://github.com/home-assistant/core/pull/43838 +[#43841]: https://github.com/home-assistant/core/pull/43841 +[#43846]: https://github.com/home-assistant/core/pull/43846 +[#43847]: https://github.com/home-assistant/core/pull/43847 +[#43848]: https://github.com/home-assistant/core/pull/43848 +[#43853]: https://github.com/home-assistant/core/pull/43853 +[#43854]: https://github.com/home-assistant/core/pull/43854 +[#43855]: https://github.com/home-assistant/core/pull/43855 +[#43858]: https://github.com/home-assistant/core/pull/43858 +[#43859]: https://github.com/home-assistant/core/pull/43859 +[#43860]: https://github.com/home-assistant/core/pull/43860 +[#43862]: https://github.com/home-assistant/core/pull/43862 +[#43863]: https://github.com/home-assistant/core/pull/43863 +[#43864]: https://github.com/home-assistant/core/pull/43864 +[@100ferhas]: https://github.com/100ferhas +[@Adminiuga]: https://github.com/Adminiuga +[@Alex-Klein]: https://github.com/Alex-Klein +[@BKPepe]: https://github.com/BKPepe +[@Cereal2nd]: https://github.com/Cereal2nd +[@CoMPaTech]: https://github.com/CoMPaTech +[@CrashWorksLLC]: https://github.com/CrashWorksLLC +[@Danielhiversen]: https://github.com/Danielhiversen +[@Danielinte]: https://github.com/Danielinte +[@Ernst79]: https://github.com/Ernst79 +[@FlavorFx]: https://github.com/FlavorFx +[@FrnchFrgg]: https://github.com/FrnchFrgg +[@GuyKh]: https://github.com/GuyKh +[@JJdeVries]: https://github.com/JJdeVries +[@Jc2k]: https://github.com/Jc2k +[@JeffLIrion]: https://github.com/JeffLIrion +[@Kane610]: https://github.com/Kane610 +[@LordBoos]: https://github.com/LordBoos +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@Quentame]: https://github.com/Quentame +[@RobBie1221]: https://github.com/RobBie1221 +[@Shulyaka]: https://github.com/Shulyaka +[@TheLastProject]: https://github.com/TheLastProject +[@Toxblh]: https://github.com/Toxblh +[@abmantis]: https://github.com/abmantis +[@adamkrol93]: https://github.com/adamkrol93 +[@adriansuwala]: https://github.com/adriansuwala +[@adrum]: https://github.com/adrum +[@ahayworth]: https://github.com/ahayworth +[@alandtse]: https://github.com/alandtse +[@alemuro]: https://github.com/alemuro +[@alengwenus]: https://github.com/alengwenus +[@allenporter]: https://github.com/allenporter +[@amelchio]: https://github.com/amelchio +[@andrewsayre]: https://github.com/andrewsayre +[@atmurray]: https://github.com/atmurray +[@b4dpxl]: https://github.com/b4dpxl +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@basnijholt]: https://github.com/basnijholt +[@bdraco]: https://github.com/bdraco +[@bieniu]: https://github.com/bieniu +[@boxcee]: https://github.com/boxcee +[@bramkragten]: https://github.com/bramkragten +[@briglx]: https://github.com/briglx +[@cgarwood]: https://github.com/cgarwood +[@chemelli74]: https://github.com/chemelli74 +[@ctalkington]: https://github.com/ctalkington +[@cyberjunky]: https://github.com/cyberjunky +[@czechmark]: https://github.com/czechmark +[@danielrheinbay]: https://github.com/danielrheinbay +[@denics]: https://github.com/denics +[@dermotduffy]: https://github.com/dermotduffy +[@dgomes]: https://github.com/dgomes +[@djtimca]: https://github.com/djtimca +[@dmulcahey]: https://github.com/dmulcahey +[@dr1rrb]: https://github.com/dr1rrb +[@dvv]: https://github.com/dvv +[@ehendrix23]: https://github.com/ehendrix23 +[@elupus]: https://github.com/elupus +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@etheralm]: https://github.com/etheralm +[@fabaff]: https://github.com/fabaff +[@farmio]: https://github.com/farmio +[@felipediel]: https://github.com/felipediel +[@firstof9]: https://github.com/firstof9 +[@flowolf]: https://github.com/flowolf +[@frenck]: https://github.com/frenck +[@fronzbot]: https://github.com/fronzbot +[@gtdiehl]: https://github.com/gtdiehl +[@iprak]: https://github.com/iprak +[@jasperslits]: https://github.com/jasperslits +[@javache]: https://github.com/javache +[@javicalle]: https://github.com/javicalle +[@jjlawren]: https://github.com/jjlawren +[@kiall]: https://github.com/kiall +[@klaasnicolaas]: https://github.com/klaasnicolaas +[@koolsb]: https://github.com/koolsb +[@liudger]: https://github.com/liudger +[@mLupine]: https://github.com/mLupine +[@marvin-w]: https://github.com/marvin-w +[@mib1185]: https://github.com/mib1185 +[@moinmoin-sh]: https://github.com/moinmoin-sh +[@mtdcr]: https://github.com/mtdcr +[@mvn23]: https://github.com/mvn23 +[@ofalvai]: https://github.com/ofalvai +[@pattyland]: https://github.com/pattyland +[@pavoni]: https://github.com/pavoni +[@postlund]: https://github.com/postlund +[@rytilahti]: https://github.com/rytilahti +[@scarface-4711]: https://github.com/scarface-4711 +[@scop]: https://github.com/scop +[@shenxn]: https://github.com/shenxn +[@shocklateboy92]: https://github.com/shocklateboy92 +[@shred86]: https://github.com/shred86 +[@spacegaier]: https://github.com/spacegaier +[@springstan]: https://github.com/springstan +[@squishykid]: https://github.com/squishykid +[@starkillerOG]: https://github.com/starkillerOG +[@syssi]: https://github.com/syssi +[@tetienne]: https://github.com/tetienne +[@thecode]: https://github.com/thecode +[@thimic]: https://github.com/thimic +[@thomasdelaet]: https://github.com/thomasdelaet +[@tim427]: https://github.com/tim427 +[@timmo001]: https://github.com/timmo001 +[@ttuffin]: https://github.com/ttuffin +[@vzahradnik]: https://github.com/vzahradnik +[@wicol]: https://github.com/wicol +[@zxdavb]: https://github.com/zxdavb +[abode docs]: /integrations/abode/ +[accuweather docs]: /integrations/accuweather/ +[acmeda docs]: /integrations/acmeda/ +[airly docs]: /integrations/airly/ +[airvisual docs]: /integrations/airvisual/ +[alexa docs]: /integrations/alexa/ +[ambient_station docs]: /integrations/ambient_station/ +[api docs]: /integrations/api/ +[apple_tv docs]: /integrations/apple_tv/ +[asuswrt docs]: /integrations/asuswrt/ +[aurora docs]: /integrations/aurora/ +[automation docs]: /integrations/automation/ +[awair docs]: /integrations/awair/ +[beewi_smartclim docs]: /integrations/beewi_smartclim/ +[blink docs]: /integrations/blink/ +[blueprint docs]: /integrations/blueprint/ +[broadlink docs]: /integrations/broadlink/ +[brother docs]: /integrations/brother/ +[bsblan docs]: /integrations/bsblan/ +[cert_expiry docs]: /integrations/cert_expiry/ +[cloud docs]: /integrations/cloud/ +[config docs]: /integrations/config/ +[debugpy docs]: /integrations/debugpy/ +[deconz docs]: /integrations/deconz/ +[default_config docs]: /integrations/default_config/ +[demo docs]: /integrations/demo/ +[denonavr docs]: /integrations/denonavr/ +[derivative docs]: /integrations/derivative/ +[device_tracker docs]: /integrations/device_tracker/ +[directv docs]: /integrations/directv/ +[doorbird docs]: /integrations/doorbird/ +[dsmr docs]: /integrations/dsmr/ +[dsmr_reader docs]: /integrations/dsmr_reader/ +[dyson docs]: /integrations/dyson/ +[ecobee docs]: /integrations/ecobee/ +[eddystone_temperature docs]: /integrations/eddystone_temperature/ +[edl21 docs]: /integrations/edl21/ +[elgato docs]: /integrations/elgato/ +[enphase_envoy docs]: /integrations/enphase_envoy/ +[eq3btsmart docs]: /integrations/eq3btsmart/ +[esphome docs]: /integrations/esphome/ +[essent docs]: /integrations/essent/ +[evohome docs]: /integrations/evohome/ +[fan docs]: /integrations/fan/ +[fireservicerota docs]: /integrations/fireservicerota/ +[fitbit docs]: /integrations/fitbit/ +[flo docs]: /integrations/flo/ +[foobot docs]: /integrations/foobot/ +[foscam docs]: /integrations/foscam/ +[frontend docs]: /integrations/frontend/ +[google_assistant docs]: /integrations/google_assistant/ +[google_translate docs]: /integrations/google_translate/ +[google_wifi docs]: /integrations/google_wifi/ +[group docs]: /integrations/group/ +[hassio docs]: /integrations/hassio/ +[heos docs]: /integrations/heos/ +[history_stats docs]: /integrations/history_stats/ +[homeassistant docs]: /integrations/homeassistant/ +[homekit_controller docs]: /integrations/homekit_controller/ +[http docs]: /integrations/http/ +[hyperion docs]: /integrations/hyperion/ +[input_boolean docs]: /integrations/input_boolean/ +[input_datetime docs]: /integrations/input_datetime/ +[input_number docs]: /integrations/input_number/ +[ios docs]: /integrations/ios/ +[ipma docs]: /integrations/ipma/ +[knx docs]: /integrations/knx/ +[kodi docs]: /integrations/kodi/ +[lastfm docs]: /integrations/lastfm/ +[lcn docs]: /integrations/lcn/ +[local_ip docs]: /integrations/local_ip/ +[luftdaten docs]: /integrations/luftdaten/ +[media_extractor docs]: /integrations/media_extractor/ +[media_player docs]: /integrations/media_player/ +[meraki docs]: /integrations/meraki/ +[met docs]: /integrations/met/ +[mill docs]: /integrations/mill/ +[mobile_app docs]: /integrations/mobile_app/ +[modbus docs]: /integrations/modbus/ +[motion_blinds docs]: /integrations/motion_blinds/ +[mqtt docs]: /integrations/mqtt/ +[myq docs]: /integrations/myq/ +[neato docs]: /integrations/neato/ +[nello docs]: /integrations/nello/ +[nest docs]: /integrations/nest/ +[notify docs]: /integrations/notify/ +[notion docs]: /integrations/notion/ +[number docs]: /integrations/number/ +[onewire docs]: /integrations/onewire/ +[onvif docs]: /integrations/onvif/ +[openuv docs]: /integrations/openuv/ +[openweathermap docs]: /integrations/openweathermap/ +[ovo_energy docs]: /integrations/ovo_energy/ +[ozw docs]: /integrations/ozw/ +[plex docs]: /integrations/plex/ +[plugwise docs]: /integrations/plugwise/ +[point docs]: /integrations/point/ +[pvoutput docs]: /integrations/pvoutput/ +[rainmachine docs]: /integrations/rainmachine/ +[recollect_waste docs]: /integrations/recollect_waste/ +[recorder docs]: /integrations/recorder/ +[remote docs]: /integrations/remote/ +[rest docs]: /integrations/rest/ +[rflink docs]: /integrations/rflink/ +[roomba docs]: /integrations/roomba/ +[rpi_power docs]: /integrations/rpi_power/ +[salt docs]: /integrations/salt/ +[scrape docs]: /integrations/scrape/ +[sensehat docs]: /integrations/sensehat/ +[sentry docs]: /integrations/sentry/ +[seventeentrack docs]: /integrations/seventeentrack/ +[shelly docs]: /integrations/shelly/ +[simplisafe docs]: /integrations/simplisafe/ +[smartthings docs]: /integrations/smartthings/ +[solaredge docs]: /integrations/solaredge/ +[solarlog docs]: /integrations/solarlog/ +[solax docs]: /integrations/solax/ +[somfy docs]: /integrations/somfy/ +[sonos docs]: /integrations/sonos/ +[spotify docs]: /integrations/spotify/ +[srp_energy docs]: /integrations/srp_energy/ +[surepetcare docs]: /integrations/surepetcare/ +[synology_dsm docs]: /integrations/synology_dsm/ +[tag docs]: /integrations/tag/ +[tasmota docs]: /integrations/tasmota/ +[telegram_bot docs]: /integrations/telegram_bot/ +[tellduslive docs]: /integrations/tellduslive/ +[template docs]: /integrations/template/ +[tesla docs]: /integrations/tesla/ +[threshold docs]: /integrations/threshold/ +[time_date docs]: /integrations/time_date/ +[toon docs]: /integrations/toon/ +[tplink docs]: /integrations/tplink/ +[tuya docs]: /integrations/tuya/ +[twinkly docs]: /integrations/twinkly/ +[twitter docs]: /integrations/twitter/ +[ubee docs]: /integrations/ubee/ +[unifi docs]: /integrations/unifi/ +[uptime docs]: /integrations/uptime/ +[utility_meter docs]: /integrations/utility_meter/ +[vasttrafik docs]: /integrations/vasttrafik/ +[watson_tts docs]: /integrations/watson_tts/ +[websocket_api docs]: /integrations/websocket_api/ +[wemo docs]: /integrations/wemo/ +[wolflink docs]: /integrations/wolflink/ +[xiaomi docs]: /integrations/xiaomi/ +[xiaomi_miio docs]: /integrations/xiaomi_miio/ +[yeelight docs]: /integrations/yeelight/ +[yessssms docs]: /integrations/yessssms/ +[zha docs]: /integrations/zha/ +[zone docs]: /integrations/zone/ diff --git a/source/images/blog/2020-12-1.0/social.png b/source/images/blog/2020-12-1.0/social.png new file mode 100644 index 0000000000000000000000000000000000000000..48a46a388732d1cd521de8722f649dbfc75b87a3 GIT binary patch literal 120822 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

c~x4G1z-EDLSh@j+U%vt|u6canBn+L_) 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 a7uUcDNt@@h3~vDd{zF4mTcr|e6Y*cj#crhl literal 0 HcmV?d00001 From 3407705f98b9982040700ce38796213a51ff7c51 Mon Sep 17 00:00:00 2001 From: Emily Mills Date: Wed, 2 Dec 2020 17:04:32 -0600 Subject: [PATCH 47/67] Add docs for the new Kuler Sky integration (#15410) Co-authored-by: Paulus Schoutsen --- source/_integrations/kulersky.markdown | 46 ++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 source/_integrations/kulersky.markdown diff --git a/source/_integrations/kulersky.markdown b/source/_integrations/kulersky.markdown new file mode 100644 index 00000000000..5ac71d6e9f8 --- /dev/null +++ b/source/_integrations/kulersky.markdown @@ -0,0 +1,46 @@ +--- +title: Kuler Sky +description: Instructions for integrating Brightech Kuler Sky Bluetooth floor lamps with Home Assistant. +ha_category: + - Light +ha_iot_class: Local Polling +ha_release: '1.0.0' +ha_domain: kulersky +ha_codeowners: + - '@emlove' +ha_config_flow: true +--- + +This integration connects Brightech Kuler Sky floor lamps to Home Assistant. + +## Configuration + +This integration can be configured using the integrations page in Home Assistant. + +Menu: **Configuration** -> **Integrations**. + +Click on the `+` sign to add an integration and search for **Kuler Sky**. + +The integration will scan for nearby Bluetooth devices, and ask you to select your lamp. + +## Additional information for Home Assistant Core on Python environments + +This integration requires `pybluez` to be installed. On Debian based installs, run: + +```bash +sudo apt install bluetooth +``` + +Before you get started with this integration, please note that: + +- Requires access to the Bluetooth stack, see [Rootless Setup section](#rootless-setup) for further information + +## Rootless Setup + +Normally accessing the Bluetooth stack is reserved for `root`, but running programs that are networked as `root` is a bad security wise. To allow non-root access to the Bluetooth stack we can give Python 3 and `hcitool` the missing capabilities to access the Bluetooth stack. Quite like setting the setuid bit (see [Stack Exchange](https://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root) for more information). + +```bash +sudo apt-get install libcap2-bin +sudo setcap 'cap_net_raw,cap_net_admin+eip' `readlink -f \`which python3\`` +sudo setcap 'cap_net_raw+ep' `readlink -f \`which hcitool\`` +``` From b9c063cb7f7d196f7e399f52f905e1814695f419 Mon Sep 17 00:00:00 2001 From: Matthias Alphart Date: Wed, 2 Dec 2020 21:25:23 +0100 Subject: [PATCH 48/67] knx - cover: add device_class configuration (#15807) --- source/_integrations/knx.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown index 9eef63b5d98..732b07c26d9 100644 --- a/source/_integrations/knx.markdown +++ b/source/_integrations/knx.markdown @@ -666,6 +666,10 @@ invert_angle: required: false default: false type: boolean +device_class: + description: Sets the [class of the device](/integrations/cover/), changing the device state and icon that is displayed on the frontend. + required: false + type: string {% endconfiguration %} ## Light From 48af733066e8a534d13b842eff0d4e5eb9da4b92 Mon Sep 17 00:00:00 2001 From: Shulyaka Date: Wed, 2 Dec 2020 23:21:20 +0300 Subject: [PATCH 49/67] Add number entity to demo platform (#15809) --- source/_integrations/demo.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/demo.markdown b/source/_integrations/demo.markdown index 824323274a8..f47d63d3d38 100644 --- a/source/_integrations/demo.markdown +++ b/source/_integrations/demo.markdown @@ -30,6 +30,7 @@ Available demo platforms: - [Mailbox](/integrations/mailbox/) (`mailbox`) - [Media Player](/integrations/media_player/) (`media_player`) - [Notification](/integrations/notify/) (`notify`) +- [Number](/integrations/number/) (`number`) - [Remote](/integrations/remote/) (`remote`) - [Sensor](/integrations/sensor/) (`sensor`) - [Switch](/integrations/switch/) (`switch`) From f4cc86387788db5f46ad1351cc444e0c4295b70f Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 4 Dec 2020 10:26:04 +0100 Subject: [PATCH 50/67] Reorg automation docs and add a using blueprints section (#15811) Co-authored-by: Franck Nijhof Co-authored-by: Zack Barett --- source/_docs/automation.markdown | 40 +---- source/_docs/automation/basics.markdown | 46 ++++++ source/_docs/automation/editor.markdown | 72 +-------- source/_docs/automation/examples.markdown | 77 ---------- source/_docs/automation/modes.markdown | 53 +++++++ source/_docs/automation/services.markdown | 46 ++++++ .../automation/using_blueprints.markdown | 45 ++++++ source/_docs/automation/yaml.markdown | 145 ++++++++++++++++++ source/_includes/asides/docs_navigation.html | 6 +- source/_integrations/automation.markdown | 110 +------------ source/_redirects | 1 + 11 files changed, 350 insertions(+), 291 deletions(-) create mode 100644 source/_docs/automation/basics.markdown delete mode 100644 source/_docs/automation/examples.markdown create mode 100644 source/_docs/automation/modes.markdown create mode 100644 source/_docs/automation/services.markdown create mode 100644 source/_docs/automation/using_blueprints.markdown create mode 100644 source/_docs/automation/yaml.markdown diff --git a/source/_docs/automation.markdown b/source/_docs/automation.markdown index 6294c48f783..85a9b72a15e 100644 --- a/source/_docs/automation.markdown +++ b/source/_docs/automation.markdown @@ -3,42 +3,14 @@ title: "Automating Home Assistant" description: "Steps to help you get automation setup in Home Assistant." --- -Home Assistant offers a wide range of automation configurations. In this section, we'll try to guide you through all the different possibilities and options. Besides this documentation, there are also a couple of people who have made their automations [publicly available](/cookbook/#example-configurationyaml). +Home Assistant contains information about all your devices and services. This information is not only available for the user in the dashboard, it can also be used to trigger automations. And that's fun! -Please see [Automation Integration](/integrations/automation/) for configuration options and services. +Automations in Home Assistant allow you to automatically respond to things that happen. You can turn the lights on at sunset or pause the music when you receive a call. -### Automation basics +If you are just starting out, we strongly suggest you start with blueprint automations. These are ready-made automations by the community that you only need to configure. -Before you can go ahead and create your own automations, it's important to learn the basics. To explore these, let's have a look at the following example home automation rule: +### [Learn about automation blueprints »](/docs/automation/using_blueprints/) -```text -(trigger) When Paulus arrives home -(condition) and it is after sunset: -(action) Turn the lights in the living room on -``` +If you got the hang of blueprints and need more, it's time for the next step. But before we can start creating automations, you will need to learn about the automation basics. -The example consists of three different parts: a [trigger](/docs/automation/trigger/), a [condition](/docs/automation/condition/) and an [action](/docs/automation/action/). - -The first line is the **trigger** of the automation rule. Triggers describe events that should trigger the automation rule. In this case, it is a person arriving home, which can be observed in Home Assistant by observing the state of Paulus changing from 'not_home' to 'home'. - -The second line is the **condition**. Conditions are optional tests that can limit an automation rule to only work in your specific use cases. A condition will test against the current state of the system. This includes the current time, devices, people and other things like the sun. In this case, we only want to act when the sun has set. - -The third part is the **action**, which will be performed when a rule is triggered and all conditions are met. For example, it can turn a light on, set the temperature on your thermostat or activate a scene. - -

-The difference between a condition and a trigger can be confusing as they are very similar. Triggers look at the actions, while conditions look at the results: turning a light on versus a light being on. -
- -### Exploring the internal state - -Automation rules interact directly with the internal state of Home Assistant, so you'll need to familiarize yourself with it. Home Assistant exposes its current state via the developer tools. These are available at the bottom of the sidebar in the frontend. **Developer Tools** -> **States** will show all currently available states. An entity can be anything. A light, a switch, a person and even the sun. A state consists of the following parts: - -| Name | Description | Example | -| ---- | ----- | ---- | -| Entity ID | Unique identifier for the entity. | `light.kitchen` -| State | The current state of the device. | `home` -| Attributes | Extra data related to the device and/or current state. | `brightness` - -State changes can be used as the source of triggers and the current state can be used in conditions. - -Actions are all about calling services. To explore the available services open the **Developer Tools** -> **Services**. Services allow to change anything. For example turn on a light, run a script or enable a scene. Each service has a domain and a name. For example the service `light.turn_on` is capable of turning on any light in your system. Services can be passed parameters to for example tell which device to turn on or what color to use. +### [Learn about automation basics »](/docs/automation/basics/) diff --git a/source/_docs/automation/basics.markdown b/source/_docs/automation/basics.markdown new file mode 100644 index 00000000000..fb46acb9a40 --- /dev/null +++ b/source/_docs/automation/basics.markdown @@ -0,0 +1,46 @@ +--- +title: "Understanding Automations" +description: "A breakdown of what an automation consists of." +--- + +All automations are made up of a trigger and an action. Optionally combined with a condition. Take for example the automation: + +> When Paulus arrives home and it is after sunset: Turn the lights on in the living room.". + +We can break up this automation into the following three parts: + +```text +(trigger) When Paulus arrives home +(condition) and it is after sunset: +(action) Turn the lights on in the living room +``` + +The first part is the [trigger](/docs/automation/trigger/) of the automation rule. Triggers describe events that should trigger the automation rule. In this case, it is a person arriving home, which can be observed in Home Assistant by observing the state of Paulus changing from 'not_home' to 'home'. + +The second part is the [condition](/docs/automation/condition/). Conditions are optional tests that can limit an automation rule to only work in your specific use cases. A condition will test against the current state of the system. This includes the current time, devices, people and other things like the sun. In this case, we only want to act when the sun has set. + +The third part is the [action](/docs/automation/action/), which will be performed when a rule is triggered and all conditions are met. For example, it can turn a light on, set the temperature on your thermostat or activate a scene. + +
+The difference between a condition and a trigger can be confusing as they are very similar. Triggers look at the actions, while conditions look at the results: turning a light on versus a light being on. +
+ +## Exploring the internal state + +Automation rules interact directly with the internal state of Home Assistant, so you'll need to familiarize yourself with it. Home Assistant exposes its current state via the developer tools. These are available at the bottom of the sidebar in the frontend. **Developer Tools** -> **States** will show all currently available states. An entity can be anything. A light, a switch, a person and even the sun. A state consists of the following parts: + +| Name | Description | Example | +| ---- | ----- | ---- | +| Entity ID | Unique identifier for the entity. | `light.kitchen` +| State | The current state of the device. | `home` +| Attributes | Extra data related to the device and/or current state. | `brightness` + +State changes can be used as the source of triggers and the current state can be used in conditions. + +Actions are all about calling services. To explore the available services open the **Developer Tools** -> **Services**. Services allow changing anything. For example turn on a light, run a script or enable a scene. Each service has a domain and a name. For example the service `light.turn_on` is capable of turning on any light in your system. Services can be passed parameters to for example tell which device to turn on or what color to use. + +## Creating automations + +Now that you've got a sneak peek of what is possible, it's time to get your feet wet and create your first automation. + +### [Using the automation editor »](/docs/automation/editor/) diff --git a/source/_docs/automation/editor.markdown b/source/_docs/automation/editor.markdown index a1ad5f128a3..6e3b2e3b0da 100644 --- a/source/_docs/automation/editor.markdown +++ b/source/_docs/automation/editor.markdown @@ -3,8 +3,6 @@ title: "Automation Editor" description: "Instructions on how to use the automation editor." --- -In Home Assistant 0.45 we introduced the first version of our automation editor. If you just created a new configuration with Home Assistant, then you're all set! Go to the UI and enjoy. - From the UI choose **Configuration** which is located in the sidebar, then click on **Automation** to go to the automation editor. Press the **+** sign in the lower right corner to get started. This example is based on the manual steps described in the [Getting started section](/getting-started/automation/) for a [`random` sensor](/integrations/random#sensor). Choose a meaningful name for your automation rules. @@ -27,75 +25,9 @@ Firing a [persistent notification](/integrations/persistent_notification/) is th As "Service Data" we want a simple text that is shown as part of the notification. -```json -{ - "message": "Sensor value greater than 10" -} +```yaml +message: Sensor value greater than 10 ``` Don't forget to save your new automation rule. For your saved automation rule to come into effect, you will need to go to the **Configuration** page and click on **Reload Automation**. -## Updating your configuration to use the editor - -First, check that you have activated the configuration editor. - -```yaml -# Activate the configuration editor -config: -``` - -The automation editor reads and writes to the file `automations.yaml` in the root of your [configuration](/docs/configuration/) folder. -Currently, both the name of this file and its location are fixed. -Make sure that you have set up the automation integration to read from it: - -```yaml -# Configuration.yaml example -automation: !include automations.yaml -``` - -If you still want to use your old automation section, add a label to the old entry: - -```yaml -automation old: -- trigger: - platform: ... -``` - -You can use the `automation:` and `automation old:` sections at the same time: - - `automation old:` to keep your manual designed automations - - `automation:` to save the automation created by the online editor - -```yaml -automation: !include automations.yaml -automation old: !include_dir_merge_list automations -``` - - -## Migrating your automations to `automations.yaml` - -If you want to migrate your old automations to use the editor, you'll have to copy them to `automations.yaml`. Make sure that `automations.yaml` remains a list! For each automation that you copy over, you'll have to add an `id`. This can be any string as long as it's unique. - -For example, the below automation will be triggered when the sun goes from below the horizon to above the horizon. Then, if the temperature is between 17 and 25 degrees, a light will be turned on. - -```yaml -# Example automations.yaml entry -- id: my_unique_id # <-- Required for editor to work, for automations created with the editor the id will be automatically generated. - alias: Hello world - trigger: - - platform: state - entity_id: sun.sun - from: below_horizon - to: above_horizon - condition: - - condition: numeric_state - entity_id: sensor.temperature - above: 17 - below: 25 - value_template: '{% raw %}{{ float(state.state) + 2 }}{% endraw %}' - action: - - service: light.turn_on -``` - -
-Any comments in the YAML file will be lost and templates will be reformatted when you update an automation via the editor. -
diff --git a/source/_docs/automation/examples.markdown b/source/_docs/automation/examples.markdown deleted file mode 100644 index 2a9e33309b2..00000000000 --- a/source/_docs/automation/examples.markdown +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: "Automation Examples" -description: "Some automation examples to get you started." ---- - -Just some sample automation rules to get you started. - -{% raw %} -```yaml -# Example of entry in configuration.yaml -automation: -# Turns on lights 1 hour before sunset if people are home -# and if people get home between 16:00-23:00 - - alias: 'Rule 1 Light on in the evening' - trigger: - # Prefix the first line of each trigger configuration - # with a '-' to enter multiple - - platform: sun - event: sunset - offset: '-01:00:00' - - platform: state - entity_id: all - to: 'home' - condition: - # Prefix the first line of each condition configuration - # with a '-'' to enter multiple - - condition: state - entity_id: all - state: 'home' - - condition: time - after: '16:00:00' - before: '23:00:00' - action: - # With a single service call, we don't need a '-' before service - though you can if you want to - service: homeassistant.turn_on - entity_id: group.living_room - -# Turn off lights when everybody leaves the house - - alias: 'Rule 2 - Away Mode' - trigger: - platform: state - entity_id: all - to: 'not_home' - action: - service: light.turn_off - entity_id: all - -# Notify when Paulus leaves the house in the evening - - alias: 'Leave Home notification' - trigger: - platform: zone - event: leave - zone: zone.home - entity_id: device_tracker.paulus - condition: - condition: time - after: '20:00' - action: - service: notify.notify - data: - message: 'Paulus left the house' - -# Send a notification via Pushover with the event of a Xiaomi cube. Custom event from the Xiaomi component. - - alias: 'Xiaomi Cube Action' - initial_state: false - trigger: - platform: event - event_type: cube_action - event_data: - entity_id: binary_sensor.cube_158d000103a3de - action: - service: notify.pushover - data: - title: "Cube event detected" - message: "Cube has triggered this event: {{ trigger.event }}" -``` -{% endraw %} diff --git a/source/_docs/automation/modes.markdown b/source/_docs/automation/modes.markdown new file mode 100644 index 00000000000..70b083f3f07 --- /dev/null +++ b/source/_docs/automation/modes.markdown @@ -0,0 +1,53 @@ +--- +title: "Automation Modes" +description: "How to use and configure automation modes." +--- + +An automation can be triggered while it is already running. + +The automation's `mode` configuration option controls what happens when the automation is triggered while the actions are still running from a previous trigger. + +Mode | Description +-|- +`single` | (Default) Do not start a new run. Issue a warning. +`restart` | Start a new run after first stopping previous run. +`queued` | Start a new run after all previous runs complete. Runs are guaranteed to execute in the order they were queued. +`parallel` | Start a new, independent run in parallel with previous runs. + +

+ +

+ +For both `queued` and `parallel` modes, configuration option `max` controls the maximum +number of runs that can be executing and/or queued up at a time. The default is 10. + +When `max` is exceeded (which is effectively 1 for `single` mode) a log message will be emitted to indicate this has happened. Configuration option `max_exceeded` controls the severity level of that log message. Set it to `silent` to ignore warnings or set it to a [log level](/integrations/logger/#log-levels). The default is `warning`. + +## Example throttled automation + +Some automations you only want to run every 5 minutes. This can be achieved using the `single` mode and silencing the warnings when the automation is triggered while it's running. + +```yaml +automation: + - mode: single + max_exceeded: silent + trigger: + - ... + action: + - ... + - delay: 300 # seconds (=5 minutes) +``` + +## Example Queued + +Sometimes an automation is doing an action on a device that does not support multiple simultaneous actions. In such cases, a queue can be used. In that case, the automation will be executed once it's current invocation and queue are done. + +```yaml +automation: + - mode: queued + max: 25 + trigger: + - ... + action: + - ... +``` diff --git a/source/_docs/automation/services.markdown b/source/_docs/automation/services.markdown new file mode 100644 index 00000000000..57525889bde --- /dev/null +++ b/source/_docs/automation/services.markdown @@ -0,0 +1,46 @@ +--- +title: "Automation Services" +description: "How to use the various automation services." +--- + +The automation integration has services to control automations, like turning automations on and off. This can be useful if you want to disable an automation from another automation. + +## Service `automation.turn_on` + +This service enables the automation's triggers. + +Service data attribute | Optional | Description +-|-|- +`entity_id` | no | Entity ID of automation to turn on. Can be a list. `none` or `all` are also accepted. + +## Service `automation.turn_off` + +This service disables the automation's triggers, and optionally stops any currently active actions. + +Service data attribute | Optional | Description +-|-|- +`entity_id` | no | Entity ID of automation to turn on. Can be a list. `none` or `all` are also accepted. +`stop_actions` | yes | Stop any currently active actions (defaults to true). + +## Service `automation.toggle` + +This service enables the automation's triggers if they were disabled, or disables the automation's triggers, and stops any currently active actions, if the triggers were enabled. + +Service data attribute | Optional | Description +-|-|- +`entity_id` | no | Entity ID of automation to turn on. Can be a list. `none` or `all` are also accepted. + +## Service `automation.trigger` + +This service will trigger the action of an automation. By default it bypasses any conditions, though that can be changed via the `skip_condition` attribute. + +Service data attribute | Optional | Description +-|-|- +`entity_id` | no | Entity ID of automation to trigger. Can be a list. `none` or `all` are also accepted. +`skip_condition` | yes | Whether or not the condition will be skipped (defaults to true). + +## Service `automation.reload` + +_This service is only required if you create/edit automations in YAML. Automations via the UI do this automatically._ + +This service reloads all automations, stopping all currently active automation actions. diff --git a/source/_docs/automation/using_blueprints.markdown b/source/_docs/automation/using_blueprints.markdown new file mode 100644 index 00000000000..4721b796b84 --- /dev/null +++ b/source/_docs/automation/using_blueprints.markdown @@ -0,0 +1,45 @@ +--- +title: "Using Automation Blueprints" +description: "How to crete automations based off blueprints." +--- + +Automation blueprints are pre-made automations that you can easily add to your Home Assistant instance. Each blueprint can be added as many times as you want. + +Quick links: + - [Blueprints in the Home Assistant forums][blueprint-tag] + +## Blueprint Automations + +Automations based on a blueprint only need to be configured to be used. What needs to be configured differs on each blueprint. + +To create your first automation based on a blueprint, go to **Configuration** and then **Blueprints**. Find the blueprint that you want to use and click on "Create Automation". + +This will open the automation editor with the blueprint selected. Give it a name and configure the blueprint and click on the blue button "Save Automation" in the bottom right. + +Done! If you want to revisit the configuration values, you can find it by going to **Configuration** and then **Automations**. + +## Importing blueprints + +Home Assistant can import blueprints from the Home Assistant forums, GitHub and GitHub gists. + +To do this, first [find a blueprint you want to import][blueprint-tag]. If you just want to practice importing, you can use this URL: + +```text +https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/motion_light.yaml +``` + +Go to **Configuration** and then **Blueprints**. Click on the blue "Import Blueprint" button in the bottom right. + +A new dialog will pop-up asking you for the URL. Enter the URL and click on "preview blueprint". + +This will load the blueprint and show a preview in the import dialog. You can change the name and finish the import. + +The blueprint can now be used for creating automations. + +## Finding new blueprints + +The Home Assistant Community forums have a specific tag for blueprints. This tag is used to collect all blueprints. + +[Visit the Home Assistant forums][blueprint-tag] + +[blueprint-tag]: https://community.home-assistant.io/tag/blueprint diff --git a/source/_docs/automation/yaml.markdown b/source/_docs/automation/yaml.markdown new file mode 100644 index 00000000000..7ab5a71d95f --- /dev/null +++ b/source/_docs/automation/yaml.markdown @@ -0,0 +1,145 @@ +--- +title: "Automation YAML" +description: "How to use the automation integration with YAML." +--- + +Automations are created in Home Assistant via the UI, but are stored in a YAML format. If you want to edit the YAML of an automation, go to edit the automation, click on the menu button in the top right and turn on YAML mode. + +The UI will write your automations to `automations.yaml`. This file is managed by the UI and should not be edited manually. + +It is also possible to write your automations directly inside `configuration.yaml` or other YAML files. You can do this by adding a labeled `automation` block to your `configuration.yaml`: + +```yaml +# The configuration required for the UI to work +automation: !include automations.yaml + +# Labeled automation block +automation kitchen: +- trigger: + platform: ... +``` + +You can add as many labeled `automation` blocks as you want. + +## YAML Example + +Example of a YAML based automation that you can add to `configuration.yaml`. + +{% raw %} +```yaml +# Example of entry in configuration.yaml +automation my_lights: +# Turns on lights 1 hour before sunset if people are home +# and if people get home between 16:00-23:00 + - alias: 'Rule 1 Light on in the evening' + trigger: + # Prefix the first line of each trigger configuration + # with a '-' to enter multiple + - platform: sun + event: sunset + offset: '-01:00:00' + - platform: state + entity_id: all + to: 'home' + condition: + # Prefix the first line of each condition configuration + # with a '-'' to enter multiple + - condition: state + entity_id: all + state: 'home' + - condition: time + after: '16:00:00' + before: '23:00:00' + action: + # With a single service call, we don't need a '-' before service - though you can if you want to + service: homeassistant.turn_on + entity_id: group.living_room + +# Turn off lights when everybody leaves the house + - alias: 'Rule 2 - Away Mode' + trigger: + platform: state + entity_id: all + to: 'not_home' + action: + service: light.turn_off + entity_id: all + +# Notify when Paulus leaves the house in the evening + - alias: 'Leave Home notification' + trigger: + platform: zone + event: leave + zone: zone.home + entity_id: device_tracker.paulus + condition: + condition: time + after: '20:00' + action: + service: notify.notify + data: + message: 'Paulus left the house' + +# Send a notification via Pushover with the event of a Xiaomi cube. Custom event from the Xiaomi component. + - alias: 'Xiaomi Cube Action' + initial_state: false + trigger: + platform: event + event_type: cube_action + event_data: + entity_id: binary_sensor.cube_158d000103a3de + action: + service: notify.pushover + data: + title: "Cube event detected" + message: "Cube has triggered this event: {{ trigger.event }}" +``` +{% endraw %} + + +## Extra options + +When writing automations directly in YAML, you will have access to advanced options that are not available in the user interface. + +### Automation initial state + +At startup, automations by default restore their last state of when Home Assistant ran. This can be controlled with the `initial_state` option. Set it to `false` or `true` to force initial state to be off or on. + +```yaml +automation: +- alias: Automation Name + initial_state: false + trigger: + - platform: ... +``` + +## Migrating your YAML automations to `automations.yaml` + +If you want to migrate your manual automations to use the editor, you'll have to copy them to `automations.yaml`. Make sure that `automations.yaml` remains a list! For each automation that you copy over, you'll have to add an `id`. This can be any string as long as it's unique. + +```yaml +# Example automations.yaml entry. Note, automations.yaml is always a list! +- id: my_unique_id # <-- Required for editor to work, for automations created with the editor the id will be automatically generated. + alias: Hello world + trigger: + - platform: state + entity_id: sun.sun + from: below_horizon + to: above_horizon + condition: + - condition: numeric_state + entity_id: sensor.temperature + above: 17 + below: 25 + value_template: '{% raw %}{{ float(state.state) + 2 }}{% endraw %}' + action: + - service: light.turn_on +``` + +### Deleting Automations + +When automations remain visible in the Home Assistant Dashboard, even after having deleted in the YAML file, you have to delete them in the UI. + +To delete them completely, go to UI **Configuration** -> **Entities** and find the automation in the search field or by scrolling down. + +Check the square box aside of the automation you wish to delete and from the top-right of your screen, select 'REMOVE SELECTED'. diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html index 5ccf656b2e8..416eaae3fb8 100644 --- a/source/_includes/asides/docs_navigation.html +++ b/source/_includes/asides/docs_navigation.html @@ -85,12 +85,16 @@
  • {% active_link /docs/automation/ Automation %}
      -
    • {% active_link /docs/automation/examples/ Examples %}
    • +
    • {% active_link /docs/automation/using_blueprints/ Using Automation Blueprints %}
    • +
    • {% active_link /docs/automation/basics/ Automation Basics %}
    • {% active_link /docs/automation/editor/ Editor %}
    • {% active_link /docs/automation/trigger/ Triggers %}
    • {% active_link /docs/automation/condition/ Conditions %}
    • {% active_link /docs/automation/action/ Actions %}
    • +
    • {% active_link /docs/automation/modes/ Run Modes %}
    • +
    • {% active_link /docs/automation/services/ Services %}
    • {% active_link /docs/automation/templating/ Templates %}
    • +
    • {% active_link /docs/automation/yaml/ YAML %}
    • {% active_link /docs/automation/troubleshooting/ Troubleshooting %}
    • diff --git a/source/_integrations/automation.markdown b/source/_integrations/automation.markdown index 1882d98d6ae..b5a19fd579b 100644 --- a/source/_integrations/automation.markdown +++ b/source/_integrations/automation.markdown @@ -11,112 +11,4 @@ ha_iot_class: ha_domain: automation --- -Please see [Automating Home Assistant](/docs/automation/) for in-depth -documentation on how to use the automation integration. - -

      - -

      - -## Configuration - -This integration is by default enabled, unless you've disabled or removed the [`default_config:`](https://www.home-assistant.io/integrations/default_config/) line from your configuration. If that is the case, the following example shows you how to enable this integration manually: - -```yaml -# Example configuration.yaml entry -automation: -``` - -### Automation initial state - -When you create a new automation, it will be enabled unless you explicitly add `initial_state: false` to it or turn it off manually via UI/another automation/developer tools. In case automations need to be always enabled or disabled when Home Assistant starts, then you can set the `initial_state` in your automations. Otherwise, the previous state will be restored. - -Please note that if for some reason Home Assistant cannot restore the previous state, it will result in the automation being enabled. - -```yaml -automation: -- alias: Automation Name - initial_state: false - trigger: - ... -``` - -### Automation Modes - -The automation's `mode` configuration option controls what happens when the automation is triggered while the actions are still running from a previous trigger. - -Mode | Description --|- -`single` | (Default) Do not start a new run. Issue a warning. -`restart` | Start a new run after first stopping previous run. -`queued` | Start a new run after all previous runs complete. Runs are guaranteed to execute in the order they were queued. -`parallel` | Start a new, independent run in parallel with previous runs. - -

      - -

      - -For both `queued` and `parallel` modes, configuration option `max` controls the maximum -number of runs that can be executing and/or queued up at a time. The default is 10. - -When `max` is exceeded (which is effectively 1 for `single` mode) a log message will be emitted to indicate this has happened. Configuration option `max_exceeded` controls the severity level of that log message. See [Log Levels](/integrations/logger/#log-levels) for a list of valid options. Or `silent` may be specified to suppress the message from being emitted. The default is `warning`. - -#### Example Setting Automation Mode - -```yaml -automation: - - trigger: - - ... - mode: queued - max: 25 - action: - - ... -``` - -### Deleting Automations - -When automations remain visible in the Home Assistant Dashboard, even after having deleted in the YAML file, you have to delete them in the UI. - -To delete them completely, go to UI **Configuration** -> **Entities** and find the automation in the search field or by scrolling down. - -Check the square box aside of the automation you wish to delete and from the top-right of your screen, select 'REMOVE SELECTED'. - -## Services - -### `automation.turn_on` - -This service enables the automation's triggers. - -Service data attribute | Optional | Description --|-|- -`entity_id` | no | Entity ID of automation to turn on. Can be a list. `none` or `all` are also accepted. - -### `automation.turn_off` - -This service disables the automation's triggers, and optionally stops any currently active actions. - -Service data attribute | Optional | Description --|-|- -`entity_id` | no | Entity ID of automation to turn on. Can be a list. `none` or `all` are also accepted. -`stop_actions` | yes | Stop any currently active actions (defaults to true). - -### `automation.toggle` - -This service enables the automation's triggers if they were disabled, or disables the automation's triggers, and stops any currently active actions, if the triggers were enabled. - -Service data attribute | Optional | Description --|-|- -`entity_id` | no | Entity ID of automation to turn on. Can be a list. `none` or `all` are also accepted. - -### `automation.reload` - -This service reloads all automations, stopping any currently active actions in all of them. - -### `automation.trigger` - -This service will trigger the action of an automation. By default it bypasses any conditions, though that can be changed via the `skip_condition` attribute. - -Service data attribute | Optional | Description --|-|- -`entity_id` | no | Entity ID of automation to trigger. Can be a list. `none` or `all` are also accepted. -`skip_condition` | yes | Whether or not the condition will be skipped (defaults to true). + diff --git a/source/_redirects b/source/_redirects index 8b4cb598139..21022fb4287 100644 --- a/source/_redirects +++ b/source/_redirects @@ -2050,6 +2050,7 @@ /ecosystem/notebooks/stats https://data.home-assistant.io /ios/whats-new https://companion.home-assistant.io/docs/getting_started/getting-started /integrations/auth /docs/authentication +/integrations/automation /docs/automation /integrations/binary_sensor.knx /integrations/knx#binary-sensor /integrations/climate.knx /integrations/knx#climate /integrations/cover.knx /integrations/knx#cover From a34a0083185f1e0252f83ec67835c88026569227 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 4 Dec 2020 11:13:58 +0100 Subject: [PATCH 51/67] Initial creating blueprint docs (#15816) Co-authored-by: Philip Allgaier Co-authored-by: Franck Nijhof --- source/_docs/blueprint.markdown | 22 ++ source/_docs/blueprint/schema.markdown | 83 +++++++ source/_docs/blueprint/selectors.markdown | 114 ++++++++++ source/_docs/blueprint/tutorial.markdown | 223 +++++++++++++++++++ source/_includes/asides/docs_navigation.html | 8 + source/images/blueprints/tutorial-ui.png | Bin 0 -> 17498 bytes 6 files changed, 450 insertions(+) create mode 100644 source/_docs/blueprint.markdown create mode 100644 source/_docs/blueprint/schema.markdown create mode 100644 source/_docs/blueprint/selectors.markdown create mode 100644 source/_docs/blueprint/tutorial.markdown create mode 100644 source/images/blueprints/tutorial-ui.png diff --git a/source/_docs/blueprint.markdown b/source/_docs/blueprint.markdown new file mode 100644 index 00000000000..d97d4f95c24 --- /dev/null +++ b/source/_docs/blueprint.markdown @@ -0,0 +1,22 @@ +--- +title: "Creating blueprints" +description: "Documentation on how to get started creating blueprints." +--- + +
      + +If you're looking on how to use blueprints, see the [automation documentation](/docs/automation/using_blueprints/). + +
      + +An automation blueprint is an automation configuration with certain parts marked as configurable. This allows users to create multiple automations based on the same blueprint, with each having its own configuration. + +Imagine a blueprint that controls a light based on motion, that allows you to configure the motion sensor to trigger on, and the light to control. It is now possible to create two automations that each have their own configuration for this blueprint and that act completely independent, yet are based on the same automation configuration. + +
      + +This is an advanced feature and requires knowledge of writing [automations in YAML](/docs/automation/yaml/). + +
      + +### [Tutorial: Create a blueprint »](/docs/blueprint/tutorial/) diff --git a/source/_docs/blueprint/schema.markdown b/source/_docs/blueprint/schema.markdown new file mode 100644 index 00000000000..9bc993f26b1 --- /dev/null +++ b/source/_docs/blueprint/schema.markdown @@ -0,0 +1,83 @@ +--- +title: "Blueprint schema" +description: "The schema for a valid blueprint." +--- + +Schema of the blueprint metadata: + +```ts +interface BlueprintInput { + name?: string; + description?: string; + selector?: Selector; + default?: any; +} + +interface Blueprint { + blueprint: { + domain: string; + name: string; + input?: Record; + description?: string; + source_url?: string; + } +} +``` + +The [built-in blueprints](https://github.com/home-assistant/core/tree/dev/homeassistant/components/automation/blueprints) are great examples. + +Here is the built-in motion light blueprint: + +```yaml +blueprint: + name: Motion-activated Light + description: Turn on a light when motion is detected. + domain: automation + source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/motion_light.yaml + input: + motion_entity: + name: Motion Sensor + selector: + entity: + domain: binary_sensor + device_class: motion + light_target: + name: Light + selector: + target: + entity: + domain: light + no_motion_wait: + name: Wait time + description: Time to leave the light on after last motion is detected. + default: 120 + selector: + number: + min: 0 + max: 3600 + unit_of_measurement: seconds + +# If motion is detected within the delay, +# we restart the script. +mode: restart +max_exceeded: silent + +trigger: + platform: state + entity_id: !input motion_entity + from: "off" + to: "on" + +action: + - service: light.turn_on + target: !input light_target + - wait_for_trigger: + platform: state + entity_id: !input motion_entity + from: "on" + to: "off" + - delay: !input no_motion_wait + - service: light.turn_off + target: !input light_target + +``` diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown new file mode 100644 index 00000000000..1e26730569a --- /dev/null +++ b/source/_docs/blueprint/selectors.markdown @@ -0,0 +1,114 @@ +--- +title: "Selectors" +description: "Documentation on available selectors." +--- + +Selectors can be used to specify what values are accepted for an input. + +## Entity Selector + +Pick an entity. The chosen value will be an entity ID. + +```yaml +entity: + # All fields are optional + integration: zha + domain: binary_sensor + device_class: motion +``` + +## Device Selector + +Pick a device. The chosen value will be a device ID. + +```yaml +device: + # All fields are optional + integration: zha + manufacturer: Philips + model: Remote X1 + entity: +``` + +The `entity` option will limit devices that have an entity matching the entity selector. + + +## Target Selector + +Pick a target for service calls. Will be a dictionary containing optionally `entity_id`, `device_id` or `area_id` keys with the picked values. + +Meant to be specified as the `target` property in a call service step in a script sequence. + +```yaml +target: + # All fields are optional + entity: + integration: zha + domain: binary_sensor + device_class: motion + + device: + integration: zha + manufacturer: Philips + model: Remote X1 +``` + +## Number Selector + +Pick a number. + +```yaml +number: + # Required + min: 0 + max: 100 + # Optional + step: 5 + unit_of_measurement: seconds + mode: slider # other valid value 'box' +``` + +## Boolean Selector + +Pick true or false. + +```yaml +boolean: +``` + +## Time Selector + +Pick a time. + +```yaml +time: +``` + +## Action Selector + +Enter a script action. Will be a list of action steps. + +Meant to be specified as the `action` of an automation or any syntax that accepts actions, like `choose`. + +```yaml +action: +``` + + +## Area Selector + +Pick an area. The chosen value will be an area ID. + +```yaml +area: + # All fields are optional + entity: + integration: zha + domain: binary_sensor + device_class: motion + + device: + integration: zha + manufacturer: Philips + model: Remote X1 +``` diff --git a/source/_docs/blueprint/tutorial.markdown b/source/_docs/blueprint/tutorial.markdown new file mode 100644 index 00000000000..318d763f1a8 --- /dev/null +++ b/source/_docs/blueprint/tutorial.markdown @@ -0,0 +1,223 @@ +--- +title: "Blueprint tutorial" +description: "Tutorial on creating a blueprint." +--- + +In this tutorial, we're going to create a blueprint that controls a light based on a motion sensor. We will do this by taking an existing automation and converting it to a blueprint. + +For this tutorial, we use a simple automation. The process for converting a complex automation is not any different. + +## Our automation + +To create a blueprint, we first need to have a working automation. The automation we're going to use in this tutorial, which controls a light based on a motion sensor, looks like this: + +{% raw %} +```yaml +trigger: + platform: state + entity_id: binary_sensor.motion_kitchen + +action: + service: > + {% if trigger.to_state.state == "on" %} + light.turn_on + {% else %} + light.turn_off + {% endif %} + target: + entity_id: light.kitchen +``` +{% endraw %} + +## Create the blueprint file + +Automation blueprints are YAML files (with the `.yaml` extension) and live in the `/blueprints/automation/` folder. You can create as many subdirectories in this folder as you want. + +To get started with our blueprint, we're going to copy the above automation YAML and save it in that directory with the name `motion_light_tutorial.yaml`. + +## Add basic blueprint metadata + +Home Assistant needs to know about the blueprint. This is achieved by adding a `blueprint:` section. It should contain the `domain` of the integration it is for (`automation`) and `name`, the name of your blueprint. Optionally, you can also include a `description` for your blueprint. + +Add this to the top of the file: + +```yaml +blueprint: + name: Motion Light Tutorial + description: Turn a light on based on detected motion + domain: automation +``` + +## Define the configurable parts as inputs + +Now we have to decide what steps we want to make configurable. We want to make it as re-usable as possible, without losing its original intent of turning on a light-based on a motion sensor. + +Configurable parts in blueprints are called inputs. To make the motion sensor entity configurable, we're replacing the entity ID with a custom YAML tag `!input`. This YAML tag has to be combined with the name of the input: + +```yaml +trigger: + platform: state + entity_id: !input motion_sensor +``` + +For the light, we can offer some more flexibility. We want to allow the user to be able to define any device or area as the target. The `target` property in the service action can contain references to areas, devices and/or entities, so that's what we will use. + +Inputs are not limited to strings. They can contain complex objects too. So in this case, we're going to mark the whole `target` as input: + +{% raw %} +```yaml +action: + service: > + {% if trigger.to_state.state == "on" %} + light.turn_on + {% else %} + light.turn_off + {% endif %} + target: !input target_light +``` +{% endraw %} + +## Add the inputs to the metadata + +All parts that are marked as inputs need to be added to the metadata. The minimum is that we add their names as used in the automation: + +```yaml +blueprint: + name: Motion Light Tutorial + description: Turn a light on based on detected motion + domain: automation + input: + motion_sensor: + target_light: +``` + +## Use it via `configuration.yaml` + +With the bare minimum metadata added, your blueprint is ready to use. + +Open your `configuration.yaml` and add the following: + +```yaml +automation tutorial: + use_blueprint: + path: motion_light_tutorial.yaml + input: + motion_sensor: binary_sensor.kitchen + target_light: + entity_id: light.kitchen +``` + +Reload automations and your new automation should popup. Because we configured the exact values as the original automation, they should work exactly the same. + +## Adding user friendly names to the inputs + +Blueprints are easier to use if it's easy to see what each field is used for. We can improve this experience by adding names and descriptions to our inputs: + +```yaml +blueprint: + name: Motion Light Tutorial + domain: automation + input: + motion_sensor: + name: Motion Sensor + description: This sensor will be synchronized with the light. + target_light: + name: Lights + description: The lights to keep in sync. +``` + +## Describing the inputs + +Our blueprint doesn't currently describe what the inputs should contain. Without this information, Home Assistant will offer the user an empty text box. + +To instead allow Home Assistant to offer more assistance, we will use [selectors](/docs/blueprint/selectors/). Selectors describe a type and can be used to help the user pick a matching value. + +The selector for the motion sensor entity should describe that we want entities from the binary sensor domain that have the device class `motion`. + +The selector for the target light should describe that we want to target light entities. + +```yaml +blueprint: + name: Motion Light Tutorial + domain: automation + input: + motion_sensor: + name: Motion Sensor + description: This sensor will be synchronized with the light. + selector: + entity: + domain: binary_sensor + device_class: motion + target_light: + name: Lights + description: The lights to keep in sync. + selector: + target: + entity: + domain: light +``` + +By limiting our blueprint to working with lights and motion sensors, we unlock a couple of benefits: the UI will be able to limit suggested values to lights and motion sensors instead of all devices. It will also allow the user to pick an area to control the lights in. + +## The final blueprint + +After we have added all the steps, our blueprint will look like this: + +{% raw %} +```yaml +blueprint: + name: Motion Light Tutorial + description: Turn a light on based on detected motion + domain: automation + input: + motion_sensor: + name: Motion Sensor + description: This sensor will be synchronized with the light. + selector: + entity: + domain: binary_sensor + device_class: motion + target_light: + name: Lights + description: The lights to keep in sync. + selector: + target: + entity: + domain: light + +trigger: + platform: state + entity_id: !input motion_sensor + +action: + service: > + {% if trigger.to_state.state == "on" %} + light.turn_on + {% else %} + light.turn_off + {% endif %} + target: !input target_light +``` +{% endraw %} + +## Use it via the UI + +To configure it via the UI, go to **Configuration** and then **Blueprints**. Find the "Motion Light Tutorial" blueprint and click on "Create Automation". + +
      +Don't forget to reload automations after you make changes to your blueprint to have the UI and the automation integration pick up the latest blueprint changes. +
      + +![Screenshot of the blueprint UI](/images/blueprints/tutorial-ui.png) + +## Share the love + +The final step is to share this blueprint with others. For this tutorial we're going to share it on GitHub Gists. + +- Go to [GitHub Gists](https://gist.github.com/) +- Gist description: blueprint tutorial +- Filename including extension: `motion_light_tutorial.yaml` +- Content is the content of the blueprint file. +- Click the "Create Gist" button + +You can now copy the URL of your new Gist and share it with other people. They can import it by going to **Configuration**, **Blueprints** and clicking on the blue "Import Blueprint" button. diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html index 416eaae3fb8..f70674aa17c 100644 --- a/source/_includes/asides/docs_navigation.html +++ b/source/_includes/asides/docs_navigation.html @@ -100,6 +100,14 @@
  • +
  • + {% active_link /docs/blueprint/ Blueprints %} +
      +
    • {% active_link /docs/blueprint/tutorial/ Tutorial %}
    • +
    • {% active_link /docs/blueprint/schema/ Schema %}
    • +
    • {% active_link /docs/blueprint/selectors/ Selectors %}
    • +
    +
  • {% active_link /docs/frontend/ Frontend %}
  • + +
    +

    Recent Blog Posts

    + + {% for post in site.posts limit: 4 %} +
  • + {{ post.title }} + {{ post.date_formatted }} +
  • + {% endfor %} +
    +

    Join The Community

    We love to help with & talk about home automation. @@ -37,13 +49,12 @@ description:
    + class="material-card highlight-blog-post" + href="/blog/2016/01/19/perfect-home-automation/" + > + Read our founder's vision for the perfect home automation + +

    Alexa, turn on the lights

    @@ -62,63 +73,63 @@ description:
    - - Read our founder's vision for the perfect home automation - - -
    -
    -

    Recent Blog Posts

    - - {% for post in site.posts limit: 4 %} -
  • - {{ post.title }} - {{ post.date_formatted }} -
  • - {% endfor %} -
    -
    State of the Union 2019
    -
    - Learn why we do what we do and what is next. +
    + Home Assistant Blue! +
    + Where style and performance meet privacy +
    +
    - Learn how our OS can turn your Raspberry Pi into the ultimate home - automation hub - +
    +
    + December 13, 2020 +
    + It's all about Home Assistant! +
    +
    + +
    -
    Home Assistant Tags
    -
    - Use NFC to bring music to your life or automate the mundane. +
    + Home Assistant Tags +
    + Use NFC to bring music to your life or automate the mundane. +
    +
    @@ -142,10 +156,13 @@ description: style="background-image: url(/images/merchandise/shirt-frontpage.png)" >
    -
    Join the Home Assistant t-shirt revolution!
    -
    - Look sharp in blue, black or gray. Wearing a HA t-shirt is okay. +
    + Join the Home Assistant t-shirt revolution! +
    + Look sharp in blue, black or gray. Wearing a HA t-shirt is okay. +
    +