From a66d57c490121d6def5e4a415fa1aa383b275548 Mon Sep 17 00:00:00 2001 From: Zach Date: Wed, 11 Sep 2019 16:55:05 -0400 Subject: [PATCH 01/76] Added doods component documentation (#10228) * Added doods component documentation * Update ha_release Co-Authored-By: Klaas Schoute * Update for recommendations * Removed redirect_from option --- source/_components/doods.markdown | 151 ++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 source/_components/doods.markdown diff --git a/source/_components/doods.markdown b/source/_components/doods.markdown new file mode 100644 index 00000000000..80cc6ec6fff --- /dev/null +++ b/source/_components/doods.markdown @@ -0,0 +1,151 @@ +--- +title: "DOODS" +description: "Detect and recognize objects with DOODS." +ha_category: + - Image Processing +ha_iot_class: Local Polling +ha_release: 0.99 +--- + +The `doods` image processing platform allows you to detect and recognize objects in a camera image using [DOODS](https://github.com/snowzach/doods/). The state of the entity is the number of objects detected, and recognized objects are listed in the `summary` attribute along with quantity. The `matches` attribute provides the confidence `score` for recognition and the bounding `box` of the object for each detection category. + +## Setup + +You need to have DOODS running somewhere. It's easiest to run as a docker container and deployment is described on docker hub +[DOODS - Docker](https://hub.docker.com/r/snowzach/doods) + +## Configuration + +The configuration loosely follows the tensorflow configuration. To enable this platform in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +image_processing: + - platform: doods + url: "http://:8080" + source: + - entity_id: camera.front_yard +``` + +{% configuration %} +source: + description: The list of image sources. + required: true + type: map + keys: + entity_id: + description: A camera entity id to get picture from. + required: true + type: string + name: + description: This parameter allows you to override the name of your `image_processing` entity. + required: false + type: string +url: + description: The URL of the DOODS server + required: true + type: string +detector: + description: The DOODS detector to use + required: false + type: string +confidence: + description: The default confidence for any detected objects where not explicitly set + required: false + type: float +file_out: + description: A [template](/docs/configuration/templating/#processing-incoming-data) for the integration to save processed images including bounding boxes. `camera_entity` is available as the `entity_id` string of the triggered source camera. + required: false + type: list +labels: + description: Information about the selected labels model. + required: false + type: map + keys: + name: + description: The label of the object to select for detection. + required: true + type: string + confidence: + description: The minimum confidence for the selected label + required: false + type: float + area: + description: Custom detection area. Only objects fully in this box will be reported. Top of image is 0, bottom is 1. Same left to right. + required: false + type: map + keys: + top: + description: Top line defined as % from top of image. + required: false + type: float + default: 0 + left: + description: Left line defined as % from left of image. + required: false + type: float + default: 0 + bottom: + description: Bottom line defined as % from top of image. + required: false + type: float + default: 1 + right: + description: Right line defined as % from left of image. + required: false + type: float + default: 1 + +{% endconfiguration %} + +```yaml +# Example advanced configuration.yaml entry +# Example configuration.yaml entry +image_processing: + - platform: doods + scan_interval: 1000 + url: "http://:8080" + detector: default + source: + - entity_id: camera.front_yard + file_out: + - "/tmp/{% raw %}{{ camera_entity.split('.')[1] }}{% endraw %}_latest.jpg" + - "/tmp/{% raw %}{{ camera_entity.split('.')[1] }}_{{ now().strftime('%Y%m%d_%H%M%S') }}{% endraw %}.jpg" + confidence: 50 + labels: + - name: person + confidence: 40 + area: + # Exclude top 10% of image + top: 0.1 + # Exclude right 15% of image + right: 0.85 + - car + - truck +``` + +## Optimising resources + +[Image processing components](/components/image_processing/) process the image from a camera at a fixed period given by the `scan_interval`. This leads to excessive processing if the image on the camera hasn't changed, as the default `scan_interval` is 10 seconds. You can override this by adding to your config `scan_interval: 10000` (setting the interval to 10,000 seconds), and then call the `image_processing.scan` service when you actually want to perform processing. + +```yaml +# Example advanced configuration.yaml entry +image_processing: + - platform: doods + scan_interval: 10000 + source: + - entity_id: camera.driveway + - entity_id: camera.backyard +``` + +```yaml +# Example advanced automations.yaml entry +- alias: Doods scanning + trigger: + - platform: state + entity_id: + - binary_sensor.driveway + action: + - service: image_processing.scan + entity_id: camera.driveway +``` From fa670efa13fc52f567f115b2b409e9af73ddedb4 Mon Sep 17 00:00:00 2001 From: Alok Saboo Date: Thu, 12 Sep 2019 03:23:49 -0400 Subject: [PATCH 02/76] Update ha_release (#10346) --- source/_components/doods.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/doods.markdown b/source/_components/doods.markdown index 80cc6ec6fff..76dc5ead0b7 100644 --- a/source/_components/doods.markdown +++ b/source/_components/doods.markdown @@ -4,7 +4,7 @@ description: "Detect and recognize objects with DOODS." ha_category: - Image Processing ha_iot_class: Local Polling -ha_release: 0.99 +ha_release: 0.100 --- The `doods` image processing platform allows you to detect and recognize objects in a camera image using [DOODS](https://github.com/snowzach/doods/). The state of the entity is the number of objects detected, and recognized objects are listed in the `summary` attribute along with quantity. The `matches` attribute provides the confidence `score` for recognition and the bounding `box` of the object for each detection category. From 50055a9815d3212328077ce3382567d8015816b0 Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Thu, 12 Sep 2019 09:34:59 +0200 Subject: [PATCH 03/76] Remove references to legacy configuration method (#10345) --- source/_components/unifi.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/unifi.markdown b/source/_components/unifi.markdown index 735ce44cd6d..a10cb1a4050 100644 --- a/source/_components/unifi.markdown +++ b/source/_components/unifi.markdown @@ -23,7 +23,7 @@ There is currently support for the following device types within Home Assistant: ## Configuration -Home Assistant offers UniFi integration through **Configuration** -> **Integrations** -> **UniFi Controller**. For legacy support old device_tracker configurations are imported and set up as new integrations. +Home Assistant offers UniFi integration through **Configuration** -> **Integrations** -> **UniFi Controller**. Enter `host address`, `user name` and `password` and then continue to select which `site` you want to connect to Home Assistant. The user needs administrator privileges in order to control POE switches. From 9e67b0c8c47a6257261c0486a871abb31e7c0467 Mon Sep 17 00:00:00 2001 From: Florent Thoumie Date: Fri, 13 Sep 2019 22:06:27 -0700 Subject: [PATCH 04/76] Document binary_sensor platfor for iaqualink integration (#10354) --- source/_components/iaqualink.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/iaqualink.markdown b/source/_components/iaqualink.markdown index ec86af8a3e4..22c2c062077 100644 --- a/source/_components/iaqualink.markdown +++ b/source/_components/iaqualink.markdown @@ -3,6 +3,7 @@ title: "Jandy iAqualink" description: "Instructions on how to configure Jandy iAqualink integration." logo: iaqualink.png ha_category: + - Binary Sensor - Climate - Light - Sensor @@ -15,6 +16,7 @@ ha_iot_class: Cloud Polling There is currently support for the following device types within Home Assistant: +- Binary Sensor - Climate - Light - Sensor From 2fd7f4a5aa2da920460268d0215a6574e2920d60 Mon Sep 17 00:00:00 2001 From: jjlawren Date: Sat, 14 Sep 2019 13:37:02 -0500 Subject: [PATCH 05/76] Clarify Plex config options (#10352) * Clarifying text * Use a note box instead * :pencil2: Tweak --- source/_components/plex.markdown | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/_components/plex.markdown b/source/_components/plex.markdown index c0d05f6d890..44594ef2f77 100644 --- a/source/_components/plex.markdown +++ b/source/_components/plex.markdown @@ -33,7 +33,7 @@ If your server enforces SSL connections, write "`on`" or "`true`" in the _"Use S

-You can also enable the plex platform directly by adding the following lines to your `configuration.yaml`: +You can also enable the `plex` platform directly by adding the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry @@ -41,6 +41,12 @@ plex: token: MYSECRETTOKEN ``` +
+ +At least one of `host` or `token` must be provided. + +
+ {% configuration %} host: description: The IP address or hostname of your Plex server. From 69c00eec32c71b132f50c5d6d7d3606966be1286 Mon Sep 17 00:00:00 2001 From: chriscla Date: Sat, 14 Sep 2019 17:46:51 -0700 Subject: [PATCH 06/76] Change nzbget to full component (#10300) * Change nzbget to full component * Document creating nzbget sensors by default. --- source/_components/nzbget.markdown | 50 ++++++++++++------------------ 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/source/_components/nzbget.markdown b/source/_components/nzbget.markdown index 375928a39cb..91bffb6aedb 100644 --- a/source/_components/nzbget.markdown +++ b/source/_components/nzbget.markdown @@ -12,17 +12,16 @@ redirect_from: The `nzbget` platform will allow you to monitor your downloads with [NZBGet](http://NZBGet.net) from within Home Assistant and setup automation based on the information. -To use NZBGet with your installation, add the following to your `configuration.yaml` file: +## Configuration + +To enable this component, add the following to your `configuration.yaml`: ```yaml # Example configuration.yaml entry -sensor: - platform: nzbget +nzbget: host: YOUR_NZBGET_HOST - monitored_variables: - - article_cache - - download_rate - - download_paused + username: YOUR_NZBGET_USERNAME + password: YOUR_NZBGET_PASSWORD ``` {% configuration %} @@ -53,27 +52,18 @@ password: required: false type: string description: The password to access your NZBGet installation. -monitored_variables: - required: true - type: list - description: List of monitored details. - keys: - article_cache: - description: Number of cached articles. - average_download_rate: - description: Average download rate - download_paused: - description: Paused downloads - download_rate: - description: Current download rate - download_size: - description: The size to download - free_disk_space: - description: Free disk space at the storage location of NZBGet - post_paused: - description: Paused posts - remaining_size: - description: Remaining size to download - uptime: - description: Uptime of NZBGet {% endconfiguration %} + +## Sensor + +This component will create these sensors: + +- `article_cache`: Number of cached articles. +- `average_download_rate`: Average download rate +- `download_paused`: Paused downloads +- `download_rate`: Current download rate +- `download_size`: The size to download +- `free_disk_space`: Free disk space at the storage location of NZBGet +- `post_paused`: Paused posts +- `remaining_size`: Remaining size to download +- `uptime`: Uptime of NZBGet From f4ea2f070b563b92d4c4d8c89b4abcd6e183ee4f Mon Sep 17 00:00:00 2001 From: Jesse Rizzo <32472573+jesserizzo@users.noreply.github.com> Date: Tue, 17 Sep 2019 14:16:15 -0500 Subject: [PATCH 07/76] Enphase envoy Add optional name field (#10378) * Add optional name field * :pencil2: Tweak * :pencil2: Tweak --- source/_components/enphase_envoy.markdown | 33 ++++++++++++++--------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/source/_components/enphase_envoy.markdown b/source/_components/enphase_envoy.markdown index 18d346c8cb8..46d59a6a7aa 100644 --- a/source/_components/enphase_envoy.markdown +++ b/source/_components/enphase_envoy.markdown @@ -12,7 +12,7 @@ redirect_from: A sensor platform for the [Enphase Envoy](https://enphase.com/en-us/products-and-services/envoy-and-combiner) solar energy gateway. Works with older models that only have production metrics (ie. Envoy-C) and newer models that offer both production and consumption metrics (ie. Envoy-S). -### Configuration +## Configuration To enable this sensor, add the following lines to your `configuration.yaml` file: @@ -22,19 +22,11 @@ sensor: - platform: enphase_envoy ``` -```yaml -# Example configuration.yaml entry, limiting the metrics to production only -sensor: - - platform: enphase_envoy - ip_address: LOCAL_IP_FOR_ENVOY - monitored_conditions: - - production - - daily_production - - seven_days_production - - lifetime_production -``` - {% configuration %} +name: + required: false + type: string + description: An optional name that will be prepended to the sensor type ip_address: description: The local IP address of your Envoy. Leave blank to use the default host name 'envoy', but this may not always be reliable. You should be able to just browse to this IP address. required: false @@ -63,3 +55,18 @@ monitored_conditions: inverters: description: The power in W being produced by each micro-inverter. This will create a separate sensor for each micro-inverter you have installed. These sensors will only update about every 15 minutes, this is a limitation of the Enphase Envoy API. {% endconfiguration %} + +### Full example + +```yaml +# Example configuration.yaml entry, limiting the metrics to production only +sensor: + - platform: enphase_envoy + name: Optional_name + ip_address: LOCAL_IP_FOR_ENVOY + monitored_conditions: + - production + - daily_production + - seven_days_production + - lifetime_production +``` From 3208679acd5b91a8fbe9bbda2014e7517605aca3 Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Wed, 18 Sep 2019 03:14:30 -0700 Subject: [PATCH 08/76] List of expected sensors and their states (#10361) --- source/_components/obihai.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_components/obihai.markdown b/source/_components/obihai.markdown index 5c464b3bdf2..2feb5751ff4 100644 --- a/source/_components/obihai.markdown +++ b/source/_components/obihai.markdown @@ -35,3 +35,12 @@ password: type: string default: admin {% endconfiguration %} + +The following is a list of expected sensors and their expected states: + +- Obihai service status (`Normal`, `Down` or other states from Obihais network) +- Sensors for each phone port in use (`On Hook`, `Off Hook` and `Ringing`) +- Sensors for last caller name and number (this is also the current incoming call, will also show `--` if no data provided) +- Sensor if the device requires a reboot (`True` or `False`) +- Sensor for each configured service (`0` for no calls, `1` for a call and `2` for call waiting/3way calling) +- Sensor for the last reboot date From 729ba9f0816d6e232aa7d28d344978acfcf8014d Mon Sep 17 00:00:00 2001 From: michaeldavie Date: Wed, 18 Sep 2019 06:29:01 -0400 Subject: [PATCH 09/76] Add icon_code sensor (#10365) --- source/_components/environment_canada.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/environment_canada.markdown b/source/_components/environment_canada.markdown index 8ec9178bbeb..daaf3397cfd 100644 --- a/source/_components/environment_canada.markdown +++ b/source/_components/environment_canada.markdown @@ -99,6 +99,7 @@ sensor: - `humidity` - The current humidity, in %. - `visibility` - The current visibility, in km. - `condition` - A brief text statement of the current weather conditions, e.g. "Sunny". + - `icon_code` - A two-digit number corresponding to a condition icon, as specified in these [image to description](https://dd.weather.gc.ca/citypage_weather/docs/Current_Conditions_Icons-Icones_conditions_actuelles.pdf) and [code to description](https://dd.weather.gc.ca/citypage_weather/docs/current_conditions_icon_code_descriptions_e.csv) mappings. - `wind_speed` - The current sustained wind speed, in km/h. - `wind_gust` - The current wind gust, in km/h. - `wind_dir` - The current cardinal wind direction, e.g. "SSW". From 7eea0a9a4db450ea81731fb64581c206bd877df5 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Wed, 18 Sep 2019 06:16:45 -0500 Subject: [PATCH 10/76] Add options to badges (#10286) * Update views.markdown https://github.com/home-assistant/home-assistant-polymer/pull/3552 * :ambulance: Fixed build --- source/lovelace/views.markdown | 40 +++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/source/lovelace/views.markdown b/source/lovelace/views.markdown index 90521bd346b..0e16aff7c1a 100644 --- a/source/lovelace/views.markdown +++ b/source/lovelace/views.markdown @@ -22,7 +22,7 @@ views: type: string badges: required: false - description: List of entities IDs to display as badge. + description: List of entities IDs or `badge` objects to display as badges. type: list cards: required: false @@ -52,6 +52,44 @@ views: type: string {% endconfiguration %} +## Options For Badges + +If you define badges as objects instead of strings (by adding `entity:` before entity ID), allowing you to add more customizations: + +{% configuration badges %} +entity: + required: true + description: Home Assistant entity ID. + type: string +name: + required: false + description: Overwrites friendly name. + type: string +icon: + required: false + description: Overwrites icon or entity picture. + type: string +image: + required: false + description: The URL of an image. + type: string +{% endconfiguration %} + +### Example + +View config: + +```yaml +- title: Living room + badges: + - device_tracker.demo_paulus + - entity: light.ceiling_lights + name: Ceiling Lights + icon: mdi:bulb + - entity: switch.decorative_lights + image: /local/lights.png +``` + ## Paths You can link to one view from another view by its path. For this use cards that support navigation (`navigation_path`). Do not use special characters in paths. From b93b68e9a6629710dfffcf9950e676b65c73cc52 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Wed, 18 Sep 2019 15:09:55 -0500 Subject: [PATCH 11/76] Update changelog.markdown (#10344) * Update changelog.markdown * Update changelog.markdown * Update changelog.markdown * Update changelog.markdown --- source/lovelace/changelog.markdown | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/source/lovelace/changelog.markdown b/source/lovelace/changelog.markdown index 0a10fbe3828..a9392581543 100644 --- a/source/lovelace/changelog.markdown +++ b/source/lovelace/changelog.markdown @@ -2,6 +2,31 @@ title: "Lovelace Changelog" description: "Changelog of the Lovelace UI." --- +## Changes in 0.99.0 +- πŸ“£ [glance card]: New config `show_last_changed` for `entities` +- πŸ“£ [glance card]: New config `image` for `entities` +- πŸ“£ [views]: New config `image` for `badges` +- πŸ“£ [views]: New config `icon` for `badges` +- πŸ“£ [views]: New config `name` for `badges` +- πŸ“£ Unused entities: Rewritten into a table view +- πŸ“£ Unused entities: Add entities to Lovelace cards +- πŸ“£ Lovelace background settings moved to theme `--lovelace-background` +- πŸ“£ Haptic feedback support added +- πŸ“£ Vibrate support added +- πŸ“£ MDI icons updated to [4.3.95](https://cdn.materialdesignicons.com/4.3.95/) +- ⚠️ Only allow admins to edit UI config +- πŸ”§ [alarm panel card]: Handle keyboard input +- πŸ”§ [alarm panel card]: Show `friendly_name` if set +- πŸ”§ [entities card]: Properly show "unavailable" timestamps +- πŸ”§ [entity filter card]: Throttle updates for performance +- πŸ”§ [light card]: Replace jQuery sliders +- πŸ”§ [light card]: Move brightness below icon +- πŸ”§ [map card]: Update preview when config changes +- πŸ”§ [markdown card]: Don't allow SVG by default +- πŸ”§ Filter null badges +- πŸ”§ Render an overlay on light cards when the light is unavailable +- πŸ”§ Break long strings in notifications + ## Changes in 0.88.0 - πŸ“£ Disable toast notifications for successful operations ([#2700](https://github.com/home-assistant/home-assistant-polymer/pull/2822)) - πŸ“£ Color Picker: Toggleable between segmented and continuous ([#2806](https://github.com/home-assistant/home-assistant-polymer/pull/2806)) @@ -21,7 +46,7 @@ description: "Changelog of the Lovelace UI." - πŸ“£ [thermostat card]: more-info button added - πŸ“£ [light card]: more-info button added - πŸ”§ [thermostat card]: Fix slider -- πŸ”§ groups are now togglable +- πŸ”§ Groups are now togglable ## Changes in 0.86.0 - πŸ“£ Lovelace is now the default UI for Home Assistant! From 48f38a5683d2d0d4310dadf887e88a7825b99bb5 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 18 Sep 2019 13:13:26 -0700 Subject: [PATCH 12/76] Add Home Assistant Cast service docs (#10339) * Add Home Assistant Cast service docs * Add link in hass cast announcement * Update source/_components/cast.markdown * :ambulance: Fixes indents --- source/_components/cast.markdown | 11 +++++++++++ source/_posts/2019-08-06-home-assistant-cast.markdown | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/source/_components/cast.markdown b/source/_components/cast.markdown index 59ac474f86e..a7f8c7b0f89 100644 --- a/source/_components/cast.markdown +++ b/source/_components/cast.markdown @@ -15,6 +15,17 @@ discovered if you enable [the discovery integration](/components/discovery/). If you don't have the discovery integration enabled, you can enable the Cast integration by going to the Integrations page inside the config panel. +## Home Assistant Cast + +The Cast integration allows you to start Home Assistant Cast on any Chromecast device, using the `cast.show_lovelace_view` service. The service takes the path of a Lovelace view and an entity ID of a Cast device to show the view on. + +```json +{ + "entity_id": "media_player.office_display_4", + "view_path": "lights" +} +``` + ## Advanced use The Cast integration has some extra configuration options available for advanced diff --git a/source/_posts/2019-08-06-home-assistant-cast.markdown b/source/_posts/2019-08-06-home-assistant-cast.markdown index 64c38bb15b6..e73a70353a3 100644 --- a/source/_posts/2019-08-06-home-assistant-cast.markdown +++ b/source/_posts/2019-08-06-home-assistant-cast.markdown @@ -59,5 +59,5 @@ entities: This is the first release of Home Assistant Cast, and so we focused on the minimum that was worthy of a release. We still have some more things planned: -- Allow starting Home Assistant Cast from Home Assistant itself (not a browser), as part of an automation or script. +- Allow starting Home Assistant Cast from Home Assistant itself (not a browser), as part of an automation or script. [This is live now since Home Assistant 0.99.](/components/cast/#home-assistant-cast) - Use Home Assistant Cast as a text-to-speech target (inspired by [lovelace-browser-commander by @thomasloven](https://github.com/thomasloven/lovelace-browser-commander)). From 2efaae91a0d41fa003cd11c04ed5e21aa9729771 Mon Sep 17 00:00:00 2001 From: jjlawren Date: Sat, 21 Sep 2019 01:19:58 -0500 Subject: [PATCH 13/76] Update Plex for config flow (#10389) * Update for config flow * component -> integration * :pencil2: Tweak * Update header with config flow support --- source/_components/plex.markdown | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/source/_components/plex.markdown b/source/_components/plex.markdown index 44594ef2f77..467c1b8b4ac 100644 --- a/source/_components/plex.markdown +++ b/source/_components/plex.markdown @@ -8,13 +8,14 @@ ha_category: featured: true ha_release: 0.7.4 ha_iot_class: Local Polling +ha_config_flow: true redirect_from: - /components/media_player.plex/ - /components/sensor.plex/ --- -The `plex` platform allows you to connect to a [Plex Media Server](https://plex.tv). Once connected, [Plex Clients](https://www.plex.tv/apps-devices/) playing media from the connected Plex Media Server will show up as [Media Players](/components/media_player/) and report playback status via a [Sensor](/components/sensor/) in Home Assistant. The Media Players will allow you to control media playback and see the current playing item. +The `plex` integration allows you to connect to a [Plex Media Server](https://plex.tv). Once connected, [Plex Clients](https://www.plex.tv/apps-devices/) playing media from the connected Plex Media Server will show up as [Media Players](/components/media_player/) and report playback status via a [Sensor](/components/sensor/) in Home Assistant. The Media Players will allow you to control media playback and see the current playing item. There is currently support for the following device types within Home Assistant: @@ -23,17 +24,17 @@ There is currently support for the following device types within Home Assistant: If your Plex server has been claimed by a Plex account via the [claim interface](https://plex.tv/claim), Home Assistant will require an authentication token to connect. If you don't know your token, see [Finding your account token / X-Plex-Token](https://support.plex.tv/hc/en-us/articles/204059436). -The preferred way to setup the Plex platform is by enabling the [discovery component](/components/discovery/) which requires GDM enabled on your Plex server. This can be found on your Plex Web App under Settings > (server Name) > settings > Network and choose "Enable local network discovery (GDM)". +The preferred way to enable the Plex integration is via **Configuration** -> **Integrations**. You will be prompted to enter a Plex token which will query a Plex service to find a server linked to the associated account. If multiple Plex servers are available, you will be prompted to complete the configuration by selecting the desired server on the Integrations page. -If your Plex server has local authentication enabled or multiple users defined, Home Assistant requires an authentication token to be entered in the frontend. You will be prompted with a notification to complete configuration if discovery is enabled. +
-If your server enforces SSL connections, write "`on`" or "`true`" in the _"Use SSL"_ field. If it does not have a valid SSL certificate available but you still want to use SSL, write "`off`" or "`false`" in the _"Verify SSL"_ field as well. +Local and secure connections are preferred when setting up an Integration. After the initial configuration, all connections to your Plex servers are made directly without connecting to Plex's services. -

- -

+
-You can also enable the `plex` platform directly by adding the following lines to your `configuration.yaml`: +If [discovery](/components/discovery/) is enabled and a local Plex server is found, the server will automatically import an available legacy `media_player` configuration. GDM can be enabled via the Plex Web App under **Settings** -> **(Server Name)** -> **Settings** -> **Network** and choosing **Enable local network discovery (GDM)**. + +The `plex` integration can also be configured via `configuration.yaml`: ```yaml # Example configuration.yaml entry @@ -42,9 +43,14 @@ plex: ```
- + At least one of `host` or `token` must be provided. +
+
+ +Only one Plex server can be configured when using `configuration.yaml`. To add more servers, set up via **Configuration** -> **Integrations**. +
{% configuration %} @@ -160,15 +166,15 @@ Plays a song, playlist, TV episode, or video on a connected client. ### Notes -* At this moment, the Plex platform only supports one Plex Media Server. -* It is possible to get errors that look like the following. +* The `plex` integration supports multiple Plex servers. Additional connections can be configured under Configuration > Integrations. +* When setting up a server via `configuration.yaml`, it is possible to get errors that look like the following. ``` ERROR:plexapi:http://192.168.1.10:32400: ('Connection aborted.', BadStatusLine("''",)) INFO:homeassistant.components.media_player.plex:No server found at: http://192.168.1.10:32400 ``` - If this occurs, check the setting `Server`>`Network`>`Secure connections` on your Plex Media Server: if it is set to `Preferred` or `Required`, you may need to manually set the `ssl` and `verify` booleans to, respectively, `true` and `false`. + If this occurs, check the setting `Server`>`Network`>`Secure connections` on your Plex Media Server: if it is set to `Preferred` or `Required`, you may need to manually set the `ssl` and `verify_ssl` configuration options to, respectively, `true` and `false`. * Movies must be located under 'Movies' section in the Plex library to properly get 'playing' state. ## Sensor From df6584a1a4f5bde473b67a5cecc5d98cf0f62e12 Mon Sep 17 00:00:00 2001 From: Robin Wohlers-Reichel Date: Sat, 21 Sep 2019 22:32:10 +1000 Subject: [PATCH 14/76] Document port number (#10385) --- source/_components/solax.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_components/solax.markdown b/source/_components/solax.markdown index e4419d5d2bf..83a79f6ee18 100644 --- a/source/_components/solax.markdown +++ b/source/_components/solax.markdown @@ -27,6 +27,11 @@ ip_address: description: The IP address of your Solax system. required: true type: string +port: + required: false + type: integer + default: 80 + description: The port number {% endconfiguration %} ### Optional template sensor From ae529bec9c062ebe1238f359bd03b82c4858fd71 Mon Sep 17 00:00:00 2001 From: Albert Gouws Date: Sun, 22 Sep 2019 06:58:26 +1200 Subject: [PATCH 15/76] Add documentation for expire_after configuration (#10203) * Add documentation for expire_after configuration * Update binary_sensor.mqtt.markdown --- source/_components/binary_sensor.mqtt.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/binary_sensor.mqtt.markdown b/source/_components/binary_sensor.mqtt.markdown index 2e66c2e9778..bf67d140ada 100644 --- a/source/_components/binary_sensor.mqtt.markdown +++ b/source/_components/binary_sensor.mqtt.markdown @@ -84,6 +84,10 @@ device_class: description: Sets the [class of the device](/components/binary_sensor/), changing the device state and icon that is displayed on the frontend. required: false type: string +expire_after: + description: "Defines the number of seconds after the value expires if it's not updated. After expiry, the value is cleared, and the availability is set to false" + required: false + type: integer value_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. Available variables: `entity_id`. Remove this option when 'payload_on' and 'payload_off' are sufficient to match your payloads." required: false From adc0976be80daadf3865a174a38e09866b5274c5 Mon Sep 17 00:00:00 2001 From: Askarov Rishat Date: Sat, 21 Sep 2019 23:13:41 +0300 Subject: [PATCH 16/76] adding documentation for the yandex_transport component (#10375) * adding documentation for the yandex_transport component https://github.com/home-assistant/home-assistant/pull/26252#discussion_r321543743 * fixing comments, add some configuration information * removing redirect_from section * :pencil2: Tweak * fixed information about the tracking of the specific routes * :pencil2: Tweaks --- source/_components/yandex_transport.markdown | 84 ++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 source/_components/yandex_transport.markdown diff --git a/source/_components/yandex_transport.markdown b/source/_components/yandex_transport.markdown new file mode 100644 index 00000000000..f3e5c207196 --- /dev/null +++ b/source/_components/yandex_transport.markdown @@ -0,0 +1,84 @@ +--- +title: "Yandex transport" +description: "Instructions on how to set up Yandex transport with Home Assistant." +logo: yandex.png +ha_category: + - Sensor + - Transport +ha_release: "0.100" +--- + +The `yandex_tranport` sensor platform uses [Yandex Maps](https://maps.yandex.ru/) it will give you the time until the next departure time from a bus/tramway/etc stop. + +The [Yandex Maps](https://maps.yandex.ru/) website can help to determine the id of your bus stop. You can select a bus stop by clicking on the map, and look to the URL: + +`https://yandex.ru/maps/213/moscow/?ll=37.722565%2C55.806662&masstransit%5BstopId%5D=stop__9642962&mode=masstransit&z=16.52` + +Where stop id is: **9642962** + +If you want to track only specific routes, you can add them in the routes section. + +## Configuration + +To activate Yandex Transport, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: yandex_tranport + stop_id: YOUR_STOP_ID +``` + +{% configuration %} +stop_id: + description: The ID of the transport stop to get the information for. + required: true + type: string +routes: + description: "A list of a specific bus, tramway, etc routes at the stop. This is the same as the bus number, e.g., `83`. If the routes with letters contain Cyrillic symbols, so write them to `configuration.yaml` in Cyrillic." + required: false + type: list +name: + description: A friendly name for this sensor. + required: false + default: Yandex Transport + type: string +{% endconfiguration %} + +## Full configuration example + +The configuration sample below shows how an entry can look like: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: yandex_transport + name: Bus_to_subway + stop_id: 9639579 + routes: + - 63 + - 179 + - 179ΠΊ + - 154 + - 591 + - 677ΠΊ +``` + +## Options For Entities + +You can configure view information about the next bus using Lovelace card. +To enable displaying the relative time in your `default_vew` add the following lines: + +```yaml +# Example default_view entry +title: Home Assistant +views: + cards: + - entities: + - entity: sensor.yandex_transport + format: relative + type: entities + path: default_view +``` + +Data provided by https://maps.yandex.ru From 15c4bc2d63031933b7de9793d30b4c7f21d7a6fc Mon Sep 17 00:00:00 2001 From: Penny Wood Date: Sun, 22 Sep 2019 04:24:12 +0800 Subject: [PATCH 17/76] Docs for iZone component. (#9635) * Docs for iZone component. * Changes as requested * Change version Co-Authored-By: Klaas Schoute * :pencil2: Tweak * :pencil2: Tweaks * :pencil2: Tweaks --- source/_components/pizone.markdown | 67 ++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 source/_components/pizone.markdown diff --git a/source/_components/pizone.markdown b/source/_components/pizone.markdown new file mode 100644 index 00000000000..ace8b1bff1b --- /dev/null +++ b/source/_components/pizone.markdown @@ -0,0 +1,67 @@ +--- +title: "iZone climate control" +description: "Instructions on how to integrate iZone climate control devices with Home Assistant." +ha_category: + - Climate +ha_release: "0.100" +ha_iot_class: Local Push +--- + +The `iZone` integration allows access of control of a local [iZone](https://izone.com.au/) ducted reverse-cycle climate control devices. These are largely available in Australia. + +## Supported hardware + +Any current iZone unit with ducted reverse cycle airconditioning and the CB wired or wireless bridge device installed should currently work. There is currently no support for the iZone lights, reticulation, or other devices. + +## Configuration + +The iZone component can be configured in two ways. + +- Via the integrations configuration of the Home Assistant user interface. +- Or via the `configuration.yaml` file by adding the following: + +If you load the integration from the integrations window, all local iZone instances are added. The integration will discover any new instances added to the local area later on as well. + +Alternately if there is more than one iZone system on the local network and one or more must be excluded use manual configuration: + +```yaml +# Full manual example configuration.yaml entry +izone: + exclude: + - "000013170" +``` + +{% configuration %} +exclude: + description: Exclude particular units from integration with Home Assistant. + required: false + type: list +{% endconfiguration %} + +## Network settings + +The iZone system uses UDP broadcasts over the local network to find and communicate with iZone devices. For this to work properly, UDP port 12107 must be able to be broadcasted on, 7005 needs to be listened to for broadcasted messages, and TCP port 80 for HTTP data to the bridge. The integration currently listens on `0.0.0.0` and broadcasts to all broadcast IPv4 local addresses, which is not configurable. + +## Master controller + +Unit modes off, heat, cool, dry, and fan only are supported. For units fitted with the 'iSave' system, which vents in external air into the house, this is available as 'eco' mode. + +## Zones + +Zones have three modes available, closed, open, and auto. These are mapped to Home Assistant modes off, fan only, and auto, respectively. Only the auto mode supports setting the temperature. + +## Debugging + +If you're trying to track down issues with the component, set up logging for it: + + +```yaml +# Example configuration.yaml with logging for iZone +logger: + default: warning + logs: + homeassistant.components.izone: debug + pizone: debug +``` + +This will help you to find network connection issues etc. From 23c16298279dd9c2e6a2a5250f56ac4cf1a7b090 Mon Sep 17 00:00:00 2001 From: bouni Date: Sun, 22 Sep 2019 01:23:27 +0200 Subject: [PATCH 18/76] Fix spaceapi (#10296) * fixed error in configuration description * location / address is not required by spec * add all fields to documentation --- source/_components/spaceapi.markdown | 176 ++++++++++++++++++++++++--- 1 file changed, 162 insertions(+), 14 deletions(-) diff --git a/source/_components/spaceapi.markdown b/source/_components/spaceapi.markdown index a0e7e2bed7d..03bc1835b8c 100644 --- a/source/_components/spaceapi.markdown +++ b/source/_components/spaceapi.markdown @@ -38,13 +38,13 @@ logo: description: URL which is publicly accessible of the logo. required: true type: string -logo: +url: description: URL of the hackerspace's web site. required: true type: string location: description: Location of the Hackerspace. - required: true + required: false type: map keys: address: @@ -52,28 +52,81 @@ location: required: true type: string contact: - description: Contact information of the Hackerspace. + description: Contact information of the Hackerspace. At least one entry is mandatory. required: true type: map keys: - email: - description: The email address of the Hackerspace. - required: true - type: string - irc: - description: The IRC channel of the Hackerspace + phone: + description: The phone number of the Hackerspace. required: false type: string - mailing_list: - description: The mailing list of the Hackerspace. + sip: + description: The SIP URI for Voice-over-IP of the Hackerspace. + required: false + type: string + keymasters: + description: Persons who carry a key and are able to open the space upon request. One of the fields must be specified. + required: false + type: list + keys: + name: + description: Real Name of the keymaster. + required: false + type: string + irc_nick: + description: Contact the person with this nickname directly in irc if available. The irc channel to be used is defined in the contact/irc field. + required: false + type: string + phone: + description: Phone number of the keymaster. + required: false + type: string + email: + description: Email address of the keymaster. + required: false + type: string + twitter: + description: Twitter username of the keymaster. + required: false + type: string + irc: + description: The IRC channel of the Hackerspace required: false type: string twitter: description: The Twitter account of the Hackerspace. required: false type: string + facebook: + description: The facebook URL of the Hackerspace. + required: false + type: string + identica: + description: The Identi.ca or StatusNet account of the Hackerspace. + required: false + type: string + foursquare: + description: The Foursquare ID of the Hackerspace. + required: false + type: string + email: + description: The email address of the Hackerspace. + required: true + type: string + ml: + description: The mailing list of the Hackerspace. + required: false + type: string + jabber: + description: The public Jabber/XMPP multi-user chatroom of the Hackerspace. + required: false + type: string + issue_mail: + description: A separate email address for issue reports. + required: false + type: string issue_report_channels: - description: "The reporting channel for issues. Pick an entity from `contact:`." + description: "The reporting channel for issues. Valid values are email, issue_mail, twitter or ml" required: true type: list state: @@ -93,6 +146,101 @@ state: description: The URL which is publicly accessible of the icon for the closed Hackerspace. required: false type: string +feeds: + description: Feeds where users can get updates of your space. + required: false + type: map + keys: + blog: + description: The blog of your Hackerspace. + required: false + type: map + keys: + type: + description: Type of the feed, for example rss, atom, ical + required: false + type: string + url: + description: Feed URL + required: true + type: string + wiki: + description: The wiki of your Hackerspace. + required: false + type: map + keys: + type: + description: Type of the feed, for example rss, atom, ical + required: false + type: string + url: + description: Feed URL + required: true + type: string + calendar: + description: The calendar of your Hackerspace. + required: false + type: map + keys: + type: + description: Type of the feed, for example rss, atom, ical + required: false + type: string + url: + description: Feed URL + required: true + type: string + flicker: + description: The Flicker stream of your Hackerspace. + required: false + type: map + keys: + type: + description: Type of the feed, for example rss, atom, ical + required: false + type: string + url: + description: Feed URL + required: true + type: string +cache: + description: Specifies options about caching of your SpaceAPI endpoint. Use this if you want to avoid hundreds/thousands of application instances crawling your status. + required: false + type: map + keys: + schedule: + description: Cache update cycle. Valid values are m.02 | m.05 | m.10 | m.15 | m.30 | h.01 | h.02 | h.04 | h.08 | h.12 | d.01 | + required: true + type: string +projects: + description: Your project sites (links to GitHub, wikis or wherever your projects are hosted). + required: false + type: list +radio_show: + description: A list of radio shows that your hackerspace might broadcast. + required: false + type: list + keys: + name: + description: The name of the radio show. + required: true + type: string + url: + description: The stream URL of the radio show. + required: true + type: string + type: + description: The stream encoder. Valid values are mp3 or ogg + required: true + type: string + start: + description: Specify the start time by using the ISO 8601 standard. + required: true + type: string + end: + description: Specify the end time by using the ISO 8601 standard. + required: true + type: string sensors: description: List of sensors to expose. required: false @@ -112,8 +260,8 @@ The list of sensors can be any sensor, not just temperature or humidity. ## Sensor specific location -The [SpaceAPI specification](https://spaceapi.io/pages/docs.html) requires every sensor to provide a location. -In order to set a sensor specific location do the following steps: +The [SpaceAPI specification](https://spaceapi.io/pages/docs.html) requires every sensor to provide a location. +In order to set a sensor specific location do the following steps: 1. Go to Configuration -> Customization 2. Select the sensor entity From f548238a807856fb9576c6c354f26397de6ebfd5 Mon Sep 17 00:00:00 2001 From: Patrik <21142447+ggravlingen@users.noreply.github.com> Date: Sun, 22 Sep 2019 23:02:20 +0200 Subject: [PATCH 19/76] Update tradfri.markdown (#10373) --- source/_components/tradfri.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/tradfri.markdown b/source/_components/tradfri.markdown index 23c995cdebd..10bb09ac82d 100644 --- a/source/_components/tradfri.markdown +++ b/source/_components/tradfri.markdown @@ -7,6 +7,7 @@ ha_iot_class: Local Polling ha_config_flow: true ha_release: 0.43 ha_category: + - Cover - Light - Sensor - Switch From 7ad405dca4ff88d5242ad04b56c002e89ecb68b1 Mon Sep 17 00:00:00 2001 From: jjlawren Date: Sun, 22 Sep 2019 17:24:51 -0500 Subject: [PATCH 20/76] Describe plex manual config flow (#10412) --- source/_components/plex.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/plex.markdown b/source/_components/plex.markdown index 467c1b8b4ac..6a7662f9e13 100644 --- a/source/_components/plex.markdown +++ b/source/_components/plex.markdown @@ -32,6 +32,8 @@ Local and secure connections are preferred when setting up an Integration. After +Alternatively, you can manually configure a Plex server connection by selecting the "Manual setup" option when configuring a Plex integration. This will allow you to specify the server connection options which will be validated before setup is completed. The available options are similar to the **Configuration Variables** section below. + If [discovery](/components/discovery/) is enabled and a local Plex server is found, the server will automatically import an available legacy `media_player` configuration. GDM can be enabled via the Plex Web App under **Settings** -> **(Server Name)** -> **Settings** -> **Network** and choosing **Enable local network discovery (GDM)**. The `plex` integration can also be configured via `configuration.yaml`: From acf4db1d21b11e9969ba0646da16d6f1f1160d89 Mon Sep 17 00:00:00 2001 From: Tommy Larsson <45052383+larssont@users.noreply.github.com> Date: Mon, 23 Sep 2019 10:13:35 +0200 Subject: [PATCH 21/76] Add Ombi integration (#10400) * Add Ombi integration * Replace path with urlbase * Update source/_components/ombi.markdown Co-Authored-By: Klaas Schoute * Update source/_components/ombi.markdown Co-Authored-By: Klaas Schoute * Remove monitored_conditions and scan_interval * Adjust config and syntax, add services --- source/_components/ombi.markdown | 100 ++++++++++++++++++++++++ source/images/supported_brands/ombi.png | Bin 0 -> 20298 bytes 2 files changed, 100 insertions(+) create mode 100644 source/_components/ombi.markdown create mode 100644 source/images/supported_brands/ombi.png diff --git a/source/_components/ombi.markdown b/source/_components/ombi.markdown new file mode 100644 index 00000000000..8f3742b96a0 --- /dev/null +++ b/source/_components/ombi.markdown @@ -0,0 +1,100 @@ +--- +title: "Ombi" +description: "Instructions on how to set up the Ombi integration in Home Assistant." +logo: ombi.png +ha_category: + - Sensor +ha_release: "0.100" +ha_iot_class: Local Polling +--- + +The `Ombi` integration monitors data from your [Ombi](https://ombi.io) instance. + +## Setup + +To find your `api_key` open the Ombi web interface. Navigate to **Settings** and then to **Ombi**, you should then be able to see your `api_key`. + +## Configuration + +If you want to enable this sensor, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +ombi: + api_key: OMBI_API_KEY + host: OMBI_HOST + username: OMBI_USERNAME +``` + +{% configuration %} +api_key: + description: Your Ombi API key. + required: true + type: string +host: + description: The hostname or IP Address Ombi is running on. + required: true + type: string +username: + description: Your Ombi username. + required: true + type: string +port: + description: The port Ombi is running on. + required: false + default: 5000 + type: integer +urlbase: + description: The Base URL path of your Ombi instance. + required: false + type: string +ssl: + description: Whether or not to use SSL when connecting to Ombi. + required: false + default: false + type: boolean +{% endconfiguration %} + +## Full example for the configuration + +```yaml +# Example configuration.yaml entry +ombi: + api_key: OMBI_API_KEY + host: OMBI_HOST + username: OMBI_USERNAME + port: OMBI_PORT + urlbase: ombi/ + ssl: true +``` + +## Services + +### Submit request services + +Available services: `submit_movie_request`, `submit_music_request`, `submit_tv_request` + +#### Service `submit_movie_request` + +Searches and requests the closest matching movie. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ------------------------------------------------ | +| `name` | no | Search parameter. | + +#### Service `submit_music_request` + +Searches and requests the closest matching music album. + +| Service data attribute | Optional | Description | +|------------------------|----------|--------------------------------------------------| +| `name` | no | Search parameter. | + +#### Service `submit_tv_request` + +Searches and requests the closest matching TV show. + +| Service data attribute | Optional | Description | +|------------------------|----------|-----------------------------------------------------------------------------------------------| +| `name` | no | Search parameter. | +| `season` | yes | Which season(s) to request. Must be one of `first`, `latest` or `all`. Defaults to latest. | diff --git a/source/images/supported_brands/ombi.png b/source/images/supported_brands/ombi.png new file mode 100644 index 0000000000000000000000000000000000000000..d52f82417974f17cb54c2857a4ccd15670f4e390 GIT binary patch literal 20298 zcmd>l?rCFf@__gD?#F z9Q^+7zvAHy^EoqT@4eQ!R$nLPjfN6F4iyd>8XCTevb;7L8afOO?SU^gCUB*l`GN`! zO_Nwf{*|uZ;=wYymx(`h*P5>jw8_O-c}^(K#&!P28Txvr3b+EEkpEUQa3fH5m6dhg zBshGUb2=;gS3G11Sm^(YztGpnqZuA9uem^f zm%nHFgn`dC4%3z9l#CEyJ%*Wdc=gK(sy(0y8HO z3Be5ieUU4@a$rwJ59_G@-?EF4ruFL6-()nf)(abii@7-;aLX4HvTqxN{mGTThS^Sr zp*wv6|IW^t-}fgr3I6T`9}P{0l52DQ;r%BxN=_D!+6w?Ep?F)K9*RT$ zy1&;Lu@1eXsK;JWk>+QF!RQHGYEk=a#k$Bh>+d{je<`FF9QOzfjlZRYxSs6&N#RA* zo$E5#DrPTXeRVr%!#*j8h)~MI%B$1U2Xs9lnsOd=TkWY)Y&{u6m@n~Mj80UF&S8Zu z*sMc^=Ert;tu7!_gld5Nn3nSTvlINgmEG(?jpqEPAqQXM&STV5&V}R`^`OEk#i*sb zyr$xdjk25e^-1{GxCwEM_zWH4q-6jbPidyB`*Khw?c9(x`rppffe-<1*K7%a>7&a@ z^V#<^(qNm#YW-_(b2=(yPO}aT5gJ-o*Ljb=)e(r-j10yJK%rA-kb z+U8iD;5Fi(vJ&#zBBbW6({)ORWxxO5-(i2EgQvCDd(Qp%Y0npMFJHdxm(y4a7r6u&8qv&l0 zm426+ZvM7WNvjuoZyR4hw2iegj1+G80~Z6aNGS7qO4W3)_!SyGvD^8Ls6HWp*}Ah| zgR+2%1V61)&nA7kN+9+){afv4PrvG>KbUIFM~90A*pW(~u!*nNwU-H|eS7_x{bjqt{pgeg5` zI}@7b--?Sm^t+Lzo$B_c#fOc8M@aTt|3E6M9y6!GclToDHGj9B0`cNRFhbT!H`X&H z1ufeAodjIOFIomJ{%jST{CcZ2_$mL08g{oUbtd;E@*+er7oKXE)6Y-APO zzD6?J_dNraOXE7hFLQfBtwu*luQrGCcV}`f_&e*$?aZr_l5gJDy&pc^NSp4>B5$&h zH!W_YA)u2TvQoh=Hlcp|GM6Xf7=ZMNeZot@R`GjTiO_MV6EiK02yV{L0)gE2)cXCE zI~hdYw5M!PTgxgfdsPI_DO?^qdZ^zc!`4}cTTi*rn_*D+pzd|Wq9KJ2j*1FJp1OE% zZl6zm_(s>Dp(Q7sUe?$6xWSI_?#ywExqfFj@XeCeiJpJ8w#) zw!C4Ur%Jc;#f!X^_b3AnyHM|p4`4GoD&fCrPgggnm?S$nA;kAyh8V_w^}Tn!wrO#i zS8w0tgKv}ZOT8FMhqx`PTgaEr&Z4RY=x=jc@=2w>oO>Oi14yfWvhO`NsDvtx#GRnp z*!X;Cg{)}mLH<(G5k?M)vVm`t<53b$tN1%kJd~zT@YK+n$9J6DMi?jKDqSj+1$Zm@Esmx1h58 z@30xOBd0>^Ed{IE`(Fb-BEM0(QMW+s2jb<8)P8Q_JSRbX*6LWL)sD)ur9LUh^J#10 zSRTMCKBe~wx95kv9|w7ZlB;)N-`*>^s4anp4S4Os6Z8`M#oiUwcN$N!2`d1 zpZ-qScDnRkxr(yhnD`XqD#pvZTLljR%{kKt-mCF;g@$-^GxZNSOpO^5M+`bW@dz4| z7pA8eFX{6=6RI@_tOFL0hIVbdPJQpWlO<2^?_1HG8Xx0E1VjdzEcO?Dv0xU~4{n@k_rDu4cY4BwKlZ_VxqM_EHX|+Ld4JmI#k*9fyr}5g-J2ur^I9~H_39>tCo(9XB-6+Q9x#DMU1N{mj!%<>FY~RLYA)1` z2dvZ(hO3HCb7O4SY!ynj4bCbnp^tL*h**P#jTivC|NL)Bvng41B``R&2lIm~W5PblPdplcZSoMI@#Z<}K=$`t_m* zlk{N^{EGilrT)bkbhtFK?+_iz#6&XsO1RQJLFo9c%ae_mP}M;RImO|vC0FNuL~{T) zc{hi^LrqjEC|k=5b$FK@=J@z3=QXLGShKlEtL!bj#uUoWbtZiHkP#+#jByX^p#X8_ zMVXXTO>fqWJE49-C9zt_VUEhq?d_+qBZfw+Y?!O?T?}qinprI}-HtP_BJ1`VoE4St zRQiVR{gLqzsKaRGR9+#^yp(?b1-H9vrn- z$VEZxmL#^Z*fpy6LWH*FBl~$BDUQ4ih{N+WVkbT#pBp?nZgP-nf>1~0y$#(qviw?d z42i>a$=hy@3&rG(*;++QzOyYkv&G`u44gBqJ<|$w4qjagbX(Z?6x4K7cULu^f>6h1 zEPnOLe_ow>=xf$%h}hTM7nR3NYSb^7=cza8bvuQ=>7P8R@otLC!VQk=IsAaW&l%!i zgn9$R;|hn{$p0ESxq;slPpkZO8*$;nGNYRFO5}63vd=5N4lC!>42MKwGl*kBA`8F?|2b0j)0Y$KO~zxyttO zV1XHhcj&B4IMvz2G!d{rz6QP4JqdLfy78>wF7@!!~6`gc&1~ z?-XW}jBrwmA87V~oJu!9f$#S0u!YjxkVR%lF++;F$x{lkSh-ckXT%5ZC|gu#i`cpq z+G^|TrXGexB09Vlbxd5zAt2=19?wjWkJ zg4f^aMTZ(E5Cee%r)~7B`9)b~8!UKeq&xCcmp>=uS^Y ztPiL(-ashSxW$a@-E<4?ocU+(SNPH$`K+4qf{$sMwzDi|9kFE#s!ul*7Uc z(E)0vN&HqnHe;&a@0}Ib-d|vjG~0ej&L6##cGKXk4NG`q&kjQud)blv&$wORejv+> zQSBYqir~woiS3d>3E>y3*q=@gKIa?yfebi^`Z=S`zT8zy33g_o0hU^g#ixtNB3gC) z^DiFU_G*hL##Z(fvBTXRPNNOk>YrV?o0(Wgnct0 zAPC)g1K~k0TBeW7*RTAEb&n{T?eDlCK)($=FY{h39W=CW=Q{?bx#=^n&=i=`3c7Q@ z>*nnl(BAnHJZRq#rfF|yiR<@pD^QVGD6{jynG{`pkG4oA;2eSHzW$IhrjeBHxM9kU z?dtnSb|W1K2@QCE^$Xeb{1LG^2~>;%CX+#=r#VqSF)AY4n^Z* zsj)wmNoi2G$+^du3OL`o3%Fw?xxwWp;zC7aQuRO@@Nq=A_uEYxTtl4?H{~B*9DS#| zPZc7@x#JbwX|}Q-FOK1t|E$Enp2r@vFI2|=3=)jjYe7rE-3r7$BK&lJ3-UOlqb%r` zg&@wUwdfy3l-<+q$vA58Jg)^}oc}vj5L6-&1fw9j*PpgYBu`@x6yn^F^@;RBAxIGK zR7pL&Ygo9KT^9(RDgi(c1y-yjr9*fWjkBxqP4x4kvBU6s$5O0(!cyI$v@R6v7M@jt zbRdrzBMmSWv5MC0YM*gLDFM4Ga>=7}!0?Lr4RNrdOd;m<;rbnEaFvJ?<&MoZY7I=r zNTNwG^&ng6iO?5|@jWbtOv!(N6Q;qlG@5X}f&{Ox%}9Ju!KXB!%@R|LjobPw%XR*={0-c61s0^?zYph@daKuxnLI{`yoe_4K?c=&7 z&e}-H^eOjac%{TgcmhPTSHDEd7a_?-z>T_D|P%85HWphI=WR8AK z^1S-^;j3QDeCv3uf_rSq&sRzw#Rn-aia%L1A`)LB3Fk0lbCwFp28=Nw$?JR%j=b`7 z?**Wd1ikD+j31wVx3?{N1e$p7c`0Qll+l{vhPvTI)a)JWIUIsP^o@Ml-`>|MQ&*W4 z+3enq*HY}ocs!lR&jM3Qi&D-}fEgl*5a!Mn%$3I`T~vEks%t7PtFqeC<3T8phFjNmEfjSQ0G zvk7E`&Cy1OAwWj0sc=!u*Ne?vLSM1IQS%zS32oeJtr;z>(Ko>phr8zx04d{LpFr}) z{(u2h3*Nk)5Vy;!6jv+>jn>L+L@eBt2i-cHXkGSdQSL2@aMqX}23`G`$os@HsNxXa4-fP;!t@)eH*0%f93b#wie5tW$9veo?TU%-wg;#VnScCrss zDvJO|6L3p_r{hd+C4TVGhC}sMb$$ zIs)o_%E8_0)&+d1icX@OrIh@REB|6SDL8X;wJfMvsb29OT$5emwo{j;PoH|TTy{T7 zsS<(T^+8+RyfuXJ{s~%B_y&?Alm$k9AGAk?CvhZM*{iOJNl#EEpIxbN1IEQ3kKF=1 zz&gO6^_J1ppnv|1lVRJEx#a(-hK-=R=p-2qp}pmRCFK%Whe6{WK0)_+OPBF?1&c>Z zN!J&Tc=%TOL@(MB8=EomTEUPs&;WBARZ*MZ2rkgR#(U5mUl>=yzu-ojX@GG9*vZB# zgS#-qc;u>VUEs>o@GGwU=Vwb59FTLXkZX>K2(g#cyLu3qnv0{o7wqW$ujCp0LGgzj zb=ym=W^hSw5!OMu_N~BsC2Demqp$VWbYuTwG#a&+Bp=pSj>ML*n`#3tjo((V{wMb; zV*CwcE<^FU&F*5!N2Ja!t<}ts{ox9s^{Ts3Hf!&S2M6pvLle&Zaa!`y7Qn4`S0QzU&IXp%yE9Y<9xTdkM41{BvDaO?KkSrD{OJt zLHk+w-ySIgV{C8zLw;$|ge%II);NJHIZuB!Fwv^pNFNVWU~o?s;4kf`YK%TyI2Go& zH@YdtWVfi_S98N)mWwp5M1?yr_$SL~0-O3tqs?dX09_TI0g-LbF zOHUOx7@i!e$!0(kdoz2@-oG(D?);cTQJALfYfTtJvTpdJ{7`fJqPZ{4M0dcOXv?l} z*^2iZD?pUA!qhnL{(uzR(sGUnV3PihkM|3wTC6#ay6tq&Mh4xUD#wMR;x822-~v#% zh-veS@QDII=~^w+QrnH)e(q+kYBmF1=?*5N*0wHVeT%6l9spitk?Z}a?mmVuCjEVM z4Jr{Q?^ae_6R*bYF~p&z5_uHlP{=hvo+Lk43Cd4$Y(Vq7w>}Rbez!3 z#IrKGxQ;Rl!W_`&SQ`)?RCJnRKx7(0Rw|=yX&qFMajv7<_~RWJ@TFL9_-XV^LrXH& z+)x>F`svZX>-a?872wtw+Va|^E8eR{+Z;um*`;`TWq|1us=CPuq;i(@YQAj*`0|R^ zJYbc_`wj7ZJt#NxS|x43|Gt612;zXO;8#V8A?WxyINEx(N6TQx9%UwhbG~8EfWBYg z?c{7m3@%UTjPYfhebfG!v6vuDeo9OW+-bAebP!^iBw61!OnQn*uE{lv33=}-T|>$$ z-s~pQOg|C?WVR*z<~Sc+YJRGcDlroPHRia$v8U`xG~PT=wdbg!G%T2Eye~UHE_|IF z=C8L2R4^YFuK!X>`vVp$+mHA6CH~)!3yv>$Y2&`+3ne>oNEDMvUDZP#Zv`g&Wn1;k zgC{jSE3!0}N^|3=Ik%FI?~Yoy7*vZlmZ0+SX58G-Q~I$k0i>S`{25`?B=ZIYRZ8i{ z_1x&Vrcz0}OHzj{gRzBW>CrbpB>;GJ%G>@iZf8cPA;5u;X#e4?o*Mqmw4*U{>$4L!KF=WCv6ze; z6(*@CrQ>H7QIDPKem1SAa-ykfSz&8o_A!5yiwNyV>T!9xf8EQ>kj=m;cBOVK3%ot$ zEAsj6?UkXR11|~wI>AIN0Lu6}DT%B=t@ii{+<1?1rPsEhwTc4n;7JV^jUH(lJ4*rNjA&mDa0f zervcsF?=OcOPcrB1iRj1vUTexlmnLV6b#RaclguKAQ&EDYYgd393T2+%)!9glYq$} zXx`Anzy@RK^-pyiPjhq2ycklWn2`x-!=~=VKWbhcQ*JV(omS#6`V$_SJp1@CWVn0h z6t_LoZARs-)IqFC+S6r`_kexoG3fA-{FJHUO!yKFE#LO0I??k}nXO@79nzBsQS(3w zY-5jA`5`A*)8H3z1)j$2v{rq@S-%+@aScT9sy`7oyrSVy@1F%4MAscSs7D3Z5{ile zJYYoeWzKe&kYH`g-pPZa*Kt0}i=$2Qb_*;Eu!uNf1|xVR>&Df(;zE;?Mir2P6&==@ zT`ixU7$7s|@d1ZNMK6dCb$rD2fayJ-$(JG#`O;*!)t1p>k{BXOpb~EdmGxEyT=uM_ z!CSVCDa&2^a2?vj{e>w@+U#a099}SKuZ{@tv-Kf@Y-Km0GKK;PK7%-))eI5+g1IRS zHmVw`1us-4P*~Uu<B_CY}~836!pyC`VfT{Tcbc*DZL=kha?F{B4i1D&jSm4Ij#!z^KU$y zi6xVzD^{mRF$2K^1~hXn()4HiR0ob1=sJ zB0@=byP({5HI9Yqj1H5qJS(i8Kav@y3H*Sq?yW_?izIIZuEeGIbH;<6l`(m9jGT@0 zfnedkie8FTQdud#ZMsi)noV}}AZ4~Mj9+q5n@a?d^NJp#HOMi4{7n||9k+HYW+*s< zc`z$AqLr|?362gNPVBq|lKn>wwCfQeqRA=VMl{Jt-SWef5&V|Os(7SvPS&>6`s^b| zl2QpP!KFqLceAU|ggU$_8G@)>;c3(QF?_<%GZ)s8=1$K`gN(1#3MsA(4 z7;SNV%~G{-+^~=tHTzJ#?DtKBY8D+QNpqy+dAsw7@6Gqa5j`(uBA}X&GHLHjIqXel z;6~Sst~8+C62E<3?@kPgzoxGvWd-}qcI%e2CMCNoUX?Du@9fZ7~U@h9WCDx!{Fl)n8N0RYGZ6IUVkXdrcc7qe$sEom>n!dOvh||_*?rrZvRh5Fg@NF_HKVte=Rk% zL0(y;-lcx*atMiEcHl)RvA#C*{M}Z64F#zfhlAgy2(G7PCzVSG0X8GcpR~kxx1Y#P zc77>x#pW$`eLkasKVqTG2z#D4;>#LrSeCyWi#QBcea`VN5`#HCK~8M%rb)ASYnG@I zm4}hUG11**$zx&9(azT|KulC&(lCb;*K;m4v?|-LUSP=8zFRW*vTfq5;k1C`eExyB z1h;WkH*=2nmQsG5^kpsxZQ`AS29*9Lx6nx`lt{KGbYeg$15w2ouke%5Tc$Kd1uIaJ zHe1_JHI7B@oVPj6cNAkR#o+nfS>bt_Tc(!ZkW%AAyGVEW6E7CJl)(s_T~%dXhjs;2 zB6O$zH813myW`9U{t;vjwYW(nn&20nMd<*{fw8fkW|-YeLoo>5?}^Sa2fIv#=T6f^ zOX;3Z6EP+7V>PiE`>H-o$?wP*kF;^@*lHbU%}ILO!dK3euljO zetyHs6=(0&ElqLr9l-i?!dtqt^-L-$-bZ<^DW3b5*6c9eC*8h4@FLYa|FCN|Su+FKR`=o*xq)sg66gb?*FMc0cBGO^7CZ5m)6gEDp79}N)L|XaLtA~G?(gu8>~#-=zva99G3@hM z993CQEf)0iX-zs2QYluTACpG{ew$7Rtsu50+`O6`8wTr=^U(%jXvj&nG_heW`3k(( zT)?^t2Zkkg%)fgiozW=z@EZCsKV^aKjMmB)&($*;SJ7%okN&E$3qEf~{LpCAf(X+X z4%GS~whmVXw-cy8yOnx&_*xg>gQy;=WXYmj4JxrJ-AO@-P#39QB2SisJr#wBRh>L3 z68}>~ZPN=Q=HAE2ZZSFE`-^IiP!M+cxVZe%SNu6ZIAFZfQD5qs zqe~3vj1^k6RnQV?VwxAuUD0^1Kog^qB$AK|`KF9=RXB>pkJyYC9h?I^DTk zWBnBd>0 zOC^l#wHFBw?D$ZnXExG|`v4wiTw^IzKGd(4;#&ER%pDM2kM8{ReTY$|yP{lak1AvK zGgNzu(Br)o7AR0rk z=U{VLcP)ojy*1Ljwae;y62wA%i8>S_@q zhe-BA;yRI`++m7eb;8ycY9Sc~vCjsW!BtyNrInTNH#ND@>HTIsTFb44_8uxhV9|tz z!aGoMvG7*LWVk9w3=yO^JtDkiEYOcBBs=thQbdRwnvkBjc+Pc!@tc-S%&JX~D`d3U zX4hd}|EzCe9&H1QA<%N|4%<&kZ<_|k)m9OZo>VDtzTDV(+bUn|kk9DK;aZ2`E(2cH z@ev-o58W)}1!|$cB_RFVpSn9=SpFbfIOIW`u)#=+zdmAnxJnS9^yUBxyhWL}%1zYS zE}0t3RF6yTaeVSKleCFv7>1h9+GO-|7YG8a(bfJWN#KYuM*a#vP}uuD)LilgnClLT zsd4)Am;7xQK$G!@*RPJUbpaD(W#%rfP z)Q0Oxqvm|#4KQ}XuF)%#cYmjK7+B8iXi>CmU-4X!a)p;Oe)5sRlPYG3oju~S(}vvl z%`5o@{}{*j<9XrKf~2W%P!ruBx32a;SZKAwZo5j?<wf#ys<~~fwUWLL(dW8$}FNTIUZDPs3mm6!15s|j3;=aPq<_XbHvvuwIn9lO*F~# z^b4UI`0x#u8CB?WQUJ=Re2$eo`L)b-CTGLwIbB`j5>M3vuA$B?=yBDee{}RiK3E!D zSgvOK%H)Cw7`9Owko%#I;?&t;RXW`Lvi>P^JBVETz~Oj(ai&)$!K4!ul$Fibv%2(m zLiNKRPk6Ti+nHhJ_ClV)kZqG+f~U9^Ns=T*3~#y~GxpKeon>a`k}OO%5+H)SdD18J z#YIUsVa!h+t-KY7|Fr@dehAv`{jf|p`$QNakQC%;8wflGE><4rjy=Ub0bh1oe)Z#Z zQ9Uc3dc3RDfGL!}5US-yJo^pA-Fk>&V=`U8`kp*PaO_9!-%gKlY2Y% z_3n?aKWVMxXKSb!?uCqrc6O*eU6dfuj8=K^ZgI3X3J(1d4>HCa_!YF7-N*EFckMI0 z?4K_5*

ZP~?yEKF5x)G6I1y-Gv36*9R8WUj0*=8`1G6;kjfony&s|!x!IfdyIh| zL+kPsH9=XkO9pBJ+ZVx;Bwb`$KjrS8I8*zBNH6FS=+%RRLhB`-JAePxI|@tVJ(Sl2}Im(b@8@wZ)J3i3gcFF$fL~Y)7&Uy zqN0bC+u~cWOb+anUriAufe7&uK%ItOB2T)UBKVsiWD^vLJ)gCrH=KX*f6=M0Xf_>b zmI$^0W@H6X*Ht23W_0AnXBD7ZlzTgFcWx-fEbD47bWImH$UJe@nY+=-f#D+uvuMTO z`GCad7@PD4IK-2)AlNTaDnHcr5YlhNx5#CAep>sh#%o}HamP)ODaQ@#?O}r9vYAce z(|KCx99Ssw&wU$IK5YlhlU#0SU*jtk3Q}{zdhk2=8_b-3+TwtCGw5fYT(yuNKX`+C z_Yz&EbbU~u)?%LH5DApHk(7e5ymUT$;x9rPP1Iwo@|Bt)uIi~O|j=O_MXbhnuz_Y2YRug zqY6>2#Pe=jzE2+j>3s)?iyP^#Yl|ins-~VvVBtb5hmsn~2gerwO!8%h(F)ujhCY6R zAROxrL^8c?_f@8NRwFpsit^J_98{vk@7Q@^tS;*nn)v3O78+AtUpnbVJ5z7#k>=x* zM}8}Z`y`fmDT#bjp+;E#%N~2z57Tbbz$p6M2z{M4uLZnFq9=B-p0#m8{B!jaF=5}S z1wM0;O{$|uM_l_C$Z{Fv4I}XnHBZ8T;S>i9{r)U4g#t82`Pn*SOgpg6W?O*a?k~OL zWbez=N;_Mt3^EVV$~L0&gbt4a3Iy$L;>XX|<$M$eNk!*R|AQ{6IbT!%L0j`yGJ@C%!V|`jpW?N8$nF zy>Aw%lwx6qmF!#T_#Ep(tY?gk7QW6B`&x+$6OI;t$)Z3kLmv554fRWmx+AGn$@H3+ z$*_Q=>jPI9^}embJc7Ncyw_>(2VMEKza9DK2l8A?2U*89RvP_hmA(als2g;^p3ts2 z#^g2xKX2SLj@%X!Hv;6;IIP(u=`H9t6kF$rl_hGhp$M^_PLw~krmzs?+iWX6UQ82h zJyP0HqKmBp+WG6>EIUSeHBOBvD=RmQw)x&=1wbZZ*BwF~z|E2*Bi!-Pz%%8zm(bUu z$lVGXnsq{#Bkq==VG6sn_8WV>KT05m)kKY|8j85t7WKmlS3=w@TEu&{5w<$(*m?EV z{%?=2jYLm7T66t|ChI=DoOl)`J0fMJh2F%`xBrya<})U7U`P2$31B>x@V_Jtw_mMI zZWI(Z#yRa}f_b_+Nb_PNc%EEeTBsQ$fs($KfhfL^vl0ySo~6KZdfguaGmsXl%3a=~ zVLG29Gq0&XlehU3<0e3_O!>W)=pWWceDhKJokh6Va=NR;V5xRBOdqPnhg`fxe1lAuG);S zd04PdN{KtK%>9HL$Cfp*2w46m`BNCgftwvx&ow<2iCF$Z8fC*Zn$Y_fqTHr^6A)}< zu^EVMhW(Eukd+1IkuZ0o=okIU43uY<9P#}4Pwx!)COCHLB|(#VS-TE$fOolK!m$U& z&um5o#R7!tBtU4K`59lsY0xh^PyRq@wt5s!!iqAxK7T10!30ah>->)^!L z{1d-aQ59mi08$eo$2xS^=lRXcfH*&e2`H>~qd>jFY4vdBc z=8lqr8YRbQ8LG0<6Ug&?kBbuKTD1Q|5YW&@XY=_~NM?rr4t&}LkVd#4Tvbe@26?pbf~-C!KI~@;Dj(ZQ8lvVYw65Sr~>F9q!Lh|CvD* zO3zONyeyPfW7i%VjL5tbgviV z#FwdwnJ;v2xwaJ=dJ5{cG6!i-8WHUP_?s#2&AFEst+W7Smk7Gd_pQi4Qk*8 zvR#M!pd@U^4qGZRqV^LUL%1kd4B|BBLO=ucS3UN9?|-Uu=|-ZivkhC=)et-;K|P6c zoo@%H;KSt{=e;+^5>aRTj{I~;v-`6nf~>-0r$MG|n<)ku%p|{vI|*g|HnS1A5j#M! z{sk2H_7GG^B7X4DHBo-Jr@8tMLB0i*$ZvrfhF|prcop^U-3{h91L221ulrAZ^2Hqe zMgsZ+*K0_xz@EO@3;u(ZzNXb6!fq0}QGhK)L~JqIRe|CC6^?--tkZWc6#M%eeK1ND zK#(5BGSVMH1!|x%DVbEk5 zJtJ6CQW9ux0%iIc*>M$5&L`!2RBihVT-1!-wMBsAHo48JtGxA7?gE_U6KDyG*58d@4$RbAV=JN~(ve zR45`=fH1xFh6ao_s~Vv}o$K*^Txap1y^kJe+{-Mf}yI+w0rIKr8VKZ{zhjfK7j ztCC9cfZKA@*bYVCwmeyp{YT}Yqn=mhYUfJOpMUf-8Vd1hAbm|TZ)oVcRVevS)jmr8 zq~dddqpTX@AsL99e56&W&~c=ma%TCAHpml*g`x{RygjA&qkQZi?dH$XuLhY!CbU2N z${DrFldE{WDj;;v?;%3YbChxccde(h+pp21Gq9{ukYNg(&n zxG6E!6-Np@pXn;ceo%K4SIv3Nxs)I;^G`I4P_v z!RM>I5gTd+B>0+vRqwzf7>D~j|BLL%2vQ|hjr=v$HJ<;(Ns%?q2y;XK)ph&D(_QRg zU&X^0&7`hBF=yRlSMvY6>F6}boW@LA?xczxsH`CwKn4Wpypq35`xE`pfDrD+w&ss^ zIkbrrN}z>BA3L^F=f?d{8?H|Qo}&?*78j^z=|-4mR@vjjk#Fw(Op6gL$hM2x7&_K7 z9SaRu(m9izcqPSc;@co}{8@7n2GGoYtO2da{}KikVsTXi9A9m^tf*igTc0ex`_%zz zj|fGZ0S+IybZtD+RN#r~NUV`$`*APy2dm%Zu25%!7qwsS&dwnY%hUfE*ep)7&~c++ z8oc0`G0hEVQ`VCHFv5fo+M?&+L&v%n4UX*K4&X6>qXF$wbg(&q%=g8wTBxqQX9GB; z5|kHxY%}Bk@*`oO&rm2MfImdqhMiq_`v!uwaiW;~pCLYEi|gq;-=Bo0Ym~kNJ8*|@ zSYe)L?w)@@Pn?I73A)$mwJZ#0^5T>~d%=WVOGASu{oe!SfMHgZ$q1ZXk5&EFqKUzL zh4RURuZjHAbt@-#deg@APs*okfsU9BwPvhEkUH8JfXe$EeOaNqUx{TrJ)K z1GFj&pa^pvIBgYnP<9j74YufFHj~n&SQ}uHW7O4KSuk9q{~uPJ*gvXCo-$njBTOqN z$U~@-TqGL8W}L)Sm12gX)<;^y`lolj1ZHApF}KCa>qx)lLQAwiamyEB%ylXKU$Q8P z8zP{#P~qGVYW~lnp5xO1zBzXAGpAs<(A^@Pok1v-qvD!^VKza?tAF6-fMvD@RpJ$q zVRrNV!-IiV@yJ(K8nL#dUrpd>+tmTI7t`@Qx>?$Uo&Vi&5BF!TW^BC<=#xyrZy?dD z1(!q3Q}}EVM6w@g%dK1}TbK!GYkzALQX8pOk(r&iF^>;<1sKi|g#70U4BcHC;^v0= zpQG-`u~Dl0rS)`|V`mzqtBQO9EAHQ}`we+D8v!EZ<(|u5_H_DzSwu=_> zpQ|)HlrYMi8|1HRWVuHB`|WpdCqvUBi7caNPQ?Cw58 z;DB+rkeB!FTenPH6#?Co7_{0#=fzic1hXyaaN(#`Nxz}}h!ek{P4Q`bwlF{gYCoE% zF^^*8qJ2tIu}v6^K?azt7ZqW4q}!_Lff(rj@IRgcA3K8xMQO1M1BCGh*8V8{z|W!v z2SCw)dGL|u`WMwa4c!S)rP*s#iKEPPu>sB)4KDCj1bH!I9bP*{G(jd1x1d|3$X;%A z*wyziyW&&6Q9>f3|0{~fyNAx&d7}(%ss4b`tboqj)X1w=YE%Zy-<4D~X%RiJ2c2M< zZhQnk%_vG7m6uN#=q~OBjI>zLr-@=-3>Gk7L9*h4Of-lk^treZrs(P?LOkFqZ1R6j zAp6l=)bGn5PZcdO9>%(KwmGVh2mc~Q>iobBSjF>`(bK1SYr1-LHhcxpXT0vn=W&5j z(x(DD&DKJJhN_`WRj2ml-q0^yXFJN4mFNV)qT^P8P(UQ{-`SNQli#;qJ|BCEkuw}| z(gfvLPWP`drwbiieNau%CzH5Rve3fvh zQmQ!SJC?dY%{miY2#d}@sTH*Q9Sktf=dvzD2oelyOWfnX?@R#iMjWTwzA(Amm}eJ! zPprTgYw;hxL=nq;t076FR+yI)>^<8VJ-HsDtbClXq-6dd;uF5&mB!lXgje9(7TSal zp4V;P0NQnvKdL5Q3^x-1j_i*RJD&2$T*s00d@}1(`ok(DYh>gHAVsRemmrUh za*lz%E+|=Wu;oxol#AX}Sio)1h}|{KRrB^$b7dw^{#KplmS4#1*8@akpatcd&p+I3 z!6C7FDMAX5Bi44^OZX5^?zAPPU2zC~0SW@;G|`Fs2{+`d(P$=qe|uA!BkfOK1&}-< zA65R;_@+Ntz?ki*=#F8+5GZeqQ@`<(vUM70b=J@orHqG=9Bbkv}6O&*2{F+?UOSHPuoxODppUS)qJ^YLx<_4};*&gJ;h6&>A_+-u)~ z^3!qi2LFgkA24bEM4S_q{GY$%fW1!tREZ~c)Jq;b@I<2kX<{bQf$9|o*=0^ZnA*Rhpx=;--fqsfx zie#&n(mOG1-vR4vGN9dtZ-^{=tFC~w(L5@Z9>8g);&6f!Tm8?U7-uj(GKV<1nKy>n zFI2TYWx?iPmEA5O_QJ z!W{xog+C_x-C5Z&XrBe>39?}QpZ5_1>q726htqX;h<)Ea8RK+WeNyg_$g;6p&u_$H z@I9*kTZ+4((ygk{>#~F{ad>XhpxYnt70p8MpYOzeTRYriIp!Z;rlYi5D%U0rv#taLI9$(6)Vs8^A zl*|Y|PgeU6A><};g)V-ZZ9dy8D;rM)P3iJ~?YDJ)blg_fKA%T7zRiiLe#eN7@~-C)=-QR_S!Fy{lIg5wc~!a!8aq!M}4^b4;Ig!`Ls z>x_po%wLRcw=WP(YLGrj@iE6!eD#geNBs}KFrURKc0(?d@8@b5#98m2{qEZEB163^ z=RC5LUl2I9pvm+746q!RU)7W1nCONhokkkMu1bc8J~Si7gCO+B+5aMAU1|jBl^Q0B zoIL3K&Hnt?!Vj1pW}gg0lWyS0IfZ24htomuL*eO3zIzfS~1#++eoGubda5EawF3Wu+rJcK^pQ&C8%hw$M|0t~3&B*DAD1&& zF4rcr)XFLOtQM8Yd|Zg#V&2~-0=)5+^#0!wwBC(&g^Rp+$2S2~e3{HETB??|==se{ z!23*~2{B3QtA6;hmm2Erm6_wVMIn$N+gc>1k|oSrni|&&Uts|)Aq~ud_wHyP?tprx z5-?8qS+PMR2cvlK(+}X+kYyzCL?a%E{`f9?rcrhqpy;5NlXMtaWakT<)Ttc`1+lI? z6TR5|lrfJ5z@5d$W>&j}S0e#R=GwHKOpNEUIwcan9?ZF4Ni1X2>ACQ5e55y6k5p12 z9;khDp-^sc<~zkQd)2aq;m=fAW<33Waw;koAeGatFM;WlcKL7ZPY0XC3!MExm8Dt` zA%UeFQJ&|e!si*uO^@w5rrW;1!IVUSVG1dE^9=MMD|*>x&#Q||>kfFAvfG-*5ZWWa z&($@JvTXN3{lwXQ_3`+#tUpN!PYy8sdSz0NRkO7paXjDC)2G_JE3dd7=Xng)SpaF? zyOZP;qVj3l=%^rw?zK;A2=Y}%7>CE7cuA`By<)_bBY1fno51J)m2>X@Ot*g=cj&B} zTL)3>{`%f!)m;-J=P9Bh=VNN4n`tp(a%gM`b&DLDNW(he#++_BhEYkv+`r?*R!8~nIOFl7}f`~uJkv%c}m{I_3fLa z>vpopvnu51_C5q&{ z;Y=FfB%*~SXvq`AVctU}f&bBnVYTPS^pDR*?&=rl59qWvBn)>iDWJ7rqkds*~tN4RjU4WIt2D*hhuocm4CVFsGh#{Kt#WOo8&60#EG~2|yL%?77Doi8yH#EOmYncg& z3?p;dHhF9_uV^?i;14#N+r<5mOrdI>Wg#n zMFusfpjnBR{lz2MW`hAmk1@jKncPQ~C)q1#5*p%w#ujPXJLgU4Op8(vZG~dS?u@?f088gzz*>(VF(Ol_N+O}in19f9bOLNksc7n@#1@Go zuxzubNiq?>aX(s#9}LvSmXB8zKohMm&~Q0F+^eBH+P2g?6=hzZ@4i_cI9+|vVmh@? zzWLn;{!rq0YD8~O{IYV(0!Qzq#V*bBmPb?>exd50gkEZ)i3+z1T`Q2c{DZ-txk~bZbA?ga zHon@RUxYIXI=&V=-vN5+ZMz%xkq!nwagnXCosugqM5#rcRQw>x2)Yc&y)+Xx_Id3n zuz6jEmt|Z^(HU56!aL;QvJLB!uUOx#K?hQ^o}MM4gFTGvxVhcoAV~|i+QIO|Akxq* zD{gDQN#oVcy0-Id_2J*t=Os|Pk(&`81b(!o8TNdm7N^1vrV50lQsA4N=hO5-M^TdXqb zg)chH@2%dSqbxscCz^ko$eFq`^|Tjscry^gKXA+zZ!No?B1JdRYe&A2s(!v1nEYOj zDlWteof$vs`I>Kjo+LvYh2G#5+*4ruk!*<{A_$fFHC(58}$ zP$PE~cTib0!!O7#1;7(BDuf)4cTHztAVI7i07s(ZaYFuLAVDc*l1_vTF@gXf$o+Q2 zkQKy{5K~jT*lYWOw4#O1uq$o8{;F0mva3ZPnn;=3_CL3!xCSJu8ezO8utRc7`)6}% zdU%@b47R6!4hCSS$f&%z+uIyoaipuw>A>Qv7M&=Lc&?ig{WHsJ!ga1`0mgB&=A5fw zOg|5Uiixs!r^Wc?C-ZG284Vr&5TkU zL`+U^Jz$SPJGvx}n1;(p^esi$B?*$+BGay9lGZ z#flS%e*>l4N~bZaqzoQ2WmLo>y2+b1^5_zMZ%j!x`k4V-wIs^nEtzp5AiASAq=`2u zEwUh(`3OUWD1jDkZGdsSPwG&KpBsUhspVn`(u0ngolV;f#5@HijNi+yT1$^(;mH5R z4b>n6@mrSWq}p;qw-l5j)8)i(Z3=GvAbQ@VQIM`<47+^V5hHlVk(0$1GG~ zf52h7?CeK&MMmOzo_Oiwyp;QPrk<4)V8R`Yi@BQ&$)Tg5y59HMWv)G<2eV|~by z{2A%@Q++Zv5jE$ Date: Mon, 23 Sep 2019 10:31:14 +0200 Subject: [PATCH 22/76] Add Kaiterra integration (#10374) * add Kaiterra integration * fix: jekyll build * :pencil2: Tweaks * :pencil2: Tweaks * adjust configuration example and release * update logo * fix: ha_release version --- source/_components/kaiterra.markdown | 64 +++++++++++++++++++++ source/images/supported_brands/kaiterra.svg | 57 ++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 source/_components/kaiterra.markdown create mode 100644 source/images/supported_brands/kaiterra.svg diff --git a/source/_components/kaiterra.markdown b/source/_components/kaiterra.markdown new file mode 100644 index 00000000000..0ff306b1538 --- /dev/null +++ b/source/_components/kaiterra.markdown @@ -0,0 +1,64 @@ +--- +title: "Kaiterra" +description: "Instructions on how to integrate your Kaiterra device into Home Assistant." +logo: kaiterra.svg +ha_iot_class: Cloud Polling +ha_category: + - Health +ha_release: "0.100" +--- + +The `kaiterra` integration allows you to view the readings from your Laser Egg or Sensedge device using the [Kaiterra REST API](https://www.kaiterra.com/dev/). + +To use the integration, you need to get the API key by signing up at [Kaiterra dashboard](https://dashboard.kaiterra.cn/), registring the device and create the key under `Settings -> Profile -> Developer`. + +## Configuration + +To enable `kaiterra` in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +kaiterra: + api_key: YOUR_API_KEY + devices: + - device_id: YOUR_DEVICE_ID + type: YOUR_DEVICE_TYPE +``` + +{% configuration %} +api_key: + description: Your personal API key from Kaiterra Dashboard. + required: true + type: string +aqi_standard: + description: The standard of Air Quality Index. Available values `us`, `in`, `cn`. + required: false + type: string + default: us +scan_interval: + description: The interval to scan for sensor state changes in seconds. + required: false + type: integer + default: 30 +preferred_units: + description: The list of preferred units. Available values in the list `x`, `%`, `C`, `F`, `mg/mΒ³`, `Β΅g/mΒ³`, `ppm`, `ppb`. + required: false + type: list +devices: + description: The devices you want to get reading from. + required: true + type: list + keys: + device_id: + description: The UUID of the device you want to monitor. You can take it from Kaiterra Dashboard. + required: true + type: string + type: + description: The device type. Available values `laseregg` and `sensedge`. + required: true + type: string + name: + description: The custom name of your device. + required: false + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/kaiterra.svg b/source/images/supported_brands/kaiterra.svg new file mode 100644 index 00000000000..fe12292c09f --- /dev/null +++ b/source/images/supported_brands/kaiterra.svg @@ -0,0 +1,57 @@ + + + + + +kaiterra-logo-2019-white + + From 3a4ca3ac423bfcd1999ad1fa2f8889160d5023b7 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Mon, 23 Sep 2019 12:25:14 +0200 Subject: [PATCH 23/76] Remove deprecated srp_energy integration (ADR-0004) (#10425) --- source/_components/srp_energy.markdown | 52 -------------------- source/_posts/2018-11-28-release-83.markdown | 5 +- source/_posts/2019-04-03-release-91.markdown | 3 +- source/_posts/2019-08-28-release-98.markdown | 5 +- 4 files changed, 5 insertions(+), 60 deletions(-) delete mode 100644 source/_components/srp_energy.markdown diff --git a/source/_components/srp_energy.markdown b/source/_components/srp_energy.markdown deleted file mode 100644 index c204277e9aa..00000000000 --- a/source/_components/srp_energy.markdown +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "SRP Energy Sensor" -description: "How to integrate SRP Energy within Home Assistant." -ha_category: - - Energy -ha_release: 0.83 -ha_iot_class: Cloud Polling -redirect_from: - - /components/sensor.srp_energy/ ---- - -

- - This integration is deprecated and will be removed in Home Assistant 0.100.0. - - For more information see [Architecture Decision Record: 0004](https://github.com/home-assistant/architecture/blob/master/adr/0004-webscraping.md). - -
- -The `srp_energy` integration shows information from Srp hourly energy usage report for their customers. The srpenergy module fetches the data found on the website. - -You need a Username, Password, and AccountId which you can create at [Srp](https://www.srpnet.com). - -## Configuration - -To add Srp Energy to your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: srp_energy - username: YOUR_USERNAME - password: YOUR_PASSWORD - id: YOUR_ACCOUNT_ID -``` - -{% configuration %} -username: - description: Your username for SRP. - required: true - type: string -password: - description: Your password for SRP. - required: true - type: string -id: - description: Your account id for SRP. - required: true - type: string -{% endconfiguration %} - -Details about the API are available in the [SRP Energy Developers API documentation](https://srpenergy-api-client-python.readthedocs.io/en/latest/?badge=latest). diff --git a/source/_posts/2018-11-28-release-83.markdown b/source/_posts/2018-11-28-release-83.markdown index 94980f1f677..9d2bb6f6303 100644 --- a/source/_posts/2018-11-28-release-83.markdown +++ b/source/_posts/2018-11-28-release-83.markdown @@ -45,7 +45,7 @@ Note, this release includes a migration to add an index to speed up the logbook - Add support for 17track.net package sensors ([@bachya] - [#18038]) ([sensor.seventeentrack docs]) (new-platform) - Add new launch sensor to keep track of space launches. ([@ludeeus] - [#18274]) ([sensor.launch_library docs]) (new-platform) - W800rf32 ([@horga83] - [#17920]) ([w800rf32 docs]) ([binary_sensor.w800rf32 docs]) (new-platform) -- Srpenergy ([@briglx] - [#18036]) ([sensor.srp_energy docs]) (new-platform) +- Srpenergy ([@briglx] - [#18036]) (new-platform) - Add support for sensors from Flu Near You ([@bachya] - [#18136]) ([sensor.flunearyou docs]) (new-platform) - Add niko-home-control support ([@legovaer] - [#18019]) ([light.niko_home_control docs]) (new-platform) - Readded climate.velbus ([@Cereal2nd] - [#18434]) ([velbus docs]) ([climate.velbus docs]) (new-platform) @@ -273,7 +273,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Doc fix: a circular dependency does not raise an error. ([@smurfix] - [#18298]) - Add new launch sensor to keep track of space launches. ([@ludeeus] - [#18274]) ([sensor.launch_library docs]) (new-platform) - W800rf32 ([@horga83] - [#17920]) ([w800rf32 docs]) ([binary_sensor.w800rf32 docs]) (new-platform) -- Srpenergy ([@briglx] - [#18036]) ([sensor.srp_energy docs]) (new-platform) +- Srpenergy ([@briglx] - [#18036]) (new-platform) - Restrict recorder query to include max age ([@ehendrix23] - [#18231]) ([sensor.statistics docs]) - Add support for sensors from Flu Near You ([@bachya] - [#18136]) ([sensor.flunearyou docs]) (new-platform) - Rename sensor.launch to sensor.launch_library ([@ludeeus] - [#18337]) ([sensor.launch_library docs]) (beta fix) @@ -785,7 +785,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.season docs]: /components/sensor.season/ [sensor.seventeentrack docs]: /components/sensor.seventeentrack/ [sensor.sql docs]: /components/sensor.sql/ -[sensor.srp_energy docs]: /components/sensor.srp_energy/ [sensor.statistics docs]: /components/sensor.statistics/ [sensor.swiss_hydrological_data docs]: /components/sensor.swiss_hydrological_data/ [sensor.tautulli docs]: /components/sensor.tautulli/ diff --git a/source/_posts/2019-04-03-release-91.markdown b/source/_posts/2019-04-03-release-91.markdown index 67cfd9b308e..1fa82cab295 100644 --- a/source/_posts/2019-04-03-release-91.markdown +++ b/source/_posts/2019-04-03-release-91.markdown @@ -315,7 +315,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Fix Prometheus casting issues ([@robbiet480] - [#22282]) ([prometheus docs]) - Update trait to support auto without ranges. ([@Swamp-Ig] - [#21847]) ([google_assistant docs]) - Sort code owners alphabetically ([@cgtobi] - [#22304]) -- Update srpenergy library ([@robbiet480] - [#22307]) ([srp_energy docs]) +- Update srpenergy library ([@robbiet480] - [#22307]) - Switch from using Google Maps API for elevation to Open Elevation API ([@robbiet480] - [#22306]) - Fix for embedded MQTT server configuration ([@robbiet480] - [#22305]) ([mqtt docs]) - Upgrade pylast to 3.1.0 ([@fabaff] - [#22302]) ([lastfm docs]) @@ -827,7 +827,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [smartthings docs]: /components/smartthings/ [solaredge docs]: /components/solaredge/ [sql docs]: /components/sql/ -[srp_energy docs]: /components/srp_energy/ [stream docs]: /components/stream/ [switch docs]: /components/switch/ [switchbot docs]: /components/switchbot/ diff --git a/source/_posts/2019-08-28-release-98.markdown b/source/_posts/2019-08-28-release-98.markdown index f1e72510242..13743825644 100644 --- a/source/_posts/2019-08-28-release-98.markdown +++ b/source/_posts/2019-08-28-release-98.markdown @@ -222,7 +222,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - **SYTADIN** - ([@frenck] - [#25742]) ([sytadin docs]) - **UPS** - ([@frenck] - [#25746]) ([ups docs]) - **FEDEX** - ([@frenck] - [#25745]) ([fedex docs]) - - **SRP Energy** - ([@frenck] - [#25754]) ([srp_energy docs]) + - **SRP Energy** - ([@frenck] - [#25754]) - **Linksys AP** - ([@frenck] - [#25804]) ([linksys_ap docs]) - **Ruter** - *Removed* - Ruter Labs which hosted the API has shut down the service. As an alternative, see the Entur public transport integration. - ([@ludeeus] - [#26041]) @@ -351,7 +351,7 @@ anymore. - ([@abmantis] - [#25971]) - Deprecates sytadin integration (ADR-0004) ([@frenck] - [#25742]) ([sytadin docs]) (breaking change) - Deprecates ups integration (ADR-0004) ([@frenck] - [#25746]) ([ups docs]) (breaking change) - Deprecates fedex integration (ADR-0004) ([@frenck] - [#25745]) ([fedex docs]) (breaking change) -- Deprecates srp_energy integration (ADR-0004) ([@frenck] - [#25754]) ([srp_energy docs]) (breaking change) +- Deprecates srp_energy integration (ADR-0004) ([@frenck] - [#25754]) (breaking change) - Updater component is always available and shows on/off depending on whether an update is available or not ([@Santobert] - [#25418]) ([updater docs]) (breaking change) - Integration requirement check refactor ([@elupus] - [#25626]) - Add Mikrotik hub and rework device tracker ([@slackr31337] - [#25664]) ([mikrotik docs]) (breaking change) @@ -863,7 +863,6 @@ anymore. - ([@abmantis] - [#25971]) [snmp docs]: /components/snmp/ [sonos docs]: /components/sonos/ [sql docs]: /components/sql/ -[srp_energy docs]: /components/srp_energy/ [statistics docs]: /components/statistics/ [stream docs]: /components/stream/ [syncthru docs]: /components/syncthru/ From 40f21c049390a275160e4901e564c589e50c3b28 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Mon, 23 Sep 2019 12:26:47 +0200 Subject: [PATCH 24/76] Remove deprecated sytadin integration (ADR-0004) (#10419) * Remove deprecated sytadin integration (ADR-0004) * Removes unused sytadin logo --- source/_components/sytadin.markdown | 53 ------------------- source/_posts/2017-11-04-release-57.markdown | 7 ++- source/_posts/2018-08-03-release-75.markdown | 3 +- source/_posts/2018-08-29-release-77.markdown | 3 +- source/_posts/2019-07-17-release-96.markdown | 3 +- source/_posts/2019-08-28-release-98.markdown | 7 ++- source/images/supported_brands/sytadin.png | Bin 8897 -> 0 bytes 7 files changed, 9 insertions(+), 67 deletions(-) delete mode 100644 source/_components/sytadin.markdown delete mode 100644 source/images/supported_brands/sytadin.png diff --git a/source/_components/sytadin.markdown b/source/_components/sytadin.markdown deleted file mode 100644 index 164a64fec34..00000000000 --- a/source/_components/sytadin.markdown +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "Sytadin Sensor" -description: "Instructions on how to integrate Sytadin sensors into Home Assistant." -logo: sytadin.png -ha_release: 0.57 -ha_category: - - Transport -ha_iot_class: Cloud Polling -redirect_from: - - /components/sensor.sytadin/ ---- - -The `sytadin` sensor platform allows you to monitor traffic details from [Sytadin](http://www.sytadin.fr). - -
- -This integration is deprecated and will be removed in Home Assistant 0.100.0. - -For more information see [Architecture Decision Record: 0004](https://github.com/home-assistant/architecture/blob/master/adr/0004-webscraping.md). - -
- -## Configuration - -To add Sytadin to your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: sytadin -``` - -{% configuration %} -name: - description: Additional name for the sensors. - required: false - default: Sytadin - type: string -monitored_conditions: - description: Conditions to display in the frontend. - required: false - default: traffic_jam - type: list - keys: - traffic_jam: - description: Amount of kilometers in traffic jam (km). - mean_velocity: - description: Mean velocity (km/h). - congestion: - description: Index of congestion (n/a). -{% endconfiguration %} - -The data is coming from the [Direction des routes Île-de-France (DiRIF)](http://www.sytadin.fr). diff --git a/source/_posts/2017-11-04-release-57.markdown b/source/_posts/2017-11-04-release-57.markdown index 88a67f7c6c7..db2ac97f1fa 100644 --- a/source/_posts/2017-11-04-release-57.markdown +++ b/source/_posts/2017-11-04-release-57.markdown @@ -73,7 +73,7 @@ Okay, one more highlight before we'll let you check out the changelog. Contribut - 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) -- Add Sytadin Traffic component ([@gautric] - [#9524]) ([sensor.sytadin docs]) (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) - Add gc100 platforms and component ([@davegravy] - [#10159]) ([gc100 docs]) ([binary_sensor.gc100 docs]) ([switch.gc100 docs]) (new-platform) @@ -210,7 +210,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - 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) -- Add Sytadin Traffic component ([@gautric] - [#9524]) ([sensor.sytadin docs]) (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) - update boto3 to 1.4.7 and botocore to 1.7.34 ([@TopdRob] - [#10121]) (notify.aws_lambda docs) ([notify.aws_sns docs]) ([notify.aws_sqs docs]) ([tts.amazon_polly docs]) @@ -236,7 +236,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Update services.yaml files ([@fabaff] - [#10229]) - Add priority attribute for hyperion ([@ImEmJay] - [#10102]) ([light.hyperion docs]) - OwnTracks work. Beacon logic and testcases ([@ehagan] - [#10183]) ([device_tracker.owntracks docs]) -- Sytadin default value must be a list #10233 ([@gautric] - [#10234]) ([sensor.sytadin docs]) +- Sytadin default value must be a list #10233 ([@gautric] - [#10234]) - Use theme color in loading screen. ([@andrey-git] - [#10248]) - Move constant to 'const.py' ([@fabaff] - [#10249]) ([sensor.hddtemp docs]) ([sensor.synologydsm docs]) - Add support for odhcpd DHCP server ([@chemicalstorm] - [#9858]) ([device_tracker.ubus docs]) @@ -619,7 +619,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.speedtest docs]: /components/sensor.speedtest/ [sensor.swiss_public_transport docs]: /components/sensor.swiss_public_transport/ [sensor.synologydsm docs]: /components/sensor.synologydsm/ -[sensor.sytadin docs]: /components/sensor.sytadin/ [sensor.toon docs]: /components/sensor.toon/ [sensor.uk_transport docs]: /components/sensor.uk_transport/ [sensor.whois docs]: /components/sensor.whois/ diff --git a/source/_posts/2018-08-03-release-75.markdown b/source/_posts/2018-08-03-release-75.markdown index 7007ee01c1a..0e2a81f7a81 100644 --- a/source/_posts/2018-08-03-release-75.markdown +++ b/source/_posts/2018-08-03-release-75.markdown @@ -152,7 +152,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Upgrade youtube_dl to 2018.07.21 ([@fabaff] - [#15718]) ([media_extractor docs]) - Upgrade numpy to 1.15.0 ([@fabaff] - [#15722]) ([binary_sensor.trend docs]) ([image_processing.opencv docs]) - Upgrade spiderpy to 1.2.0 ([@peternijssen] - [#15729]) ([spider docs]) -- Upgrade beautifulsoup4 to 4.6.1 ([@fabaff] - [#15727]) ([device_tracker docs]) ([sensor.geizhals docs]) ([sensor.scrape docs]) ([sensor.sytadin docs]) +- Upgrade beautifulsoup4 to 4.6.1 ([@fabaff] - [#15727]) ([device_tracker docs]) ([sensor.geizhals docs]) ([sensor.scrape docs]) - Upgrade mutagen to 1.41.0 ([@fabaff] - [#15739]) ([tts docs]) - Upgrade sqlalchemy to 1.2.10 ([@fabaff] - [#15737]) ([sensor.sql docs]) - Upgrade voluptuous to 0.11.3 ([@fabaff] - [#15735]) @@ -391,7 +391,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.scrape docs]: /components/sensor.scrape/ [sensor.sql docs]: /components/sensor.sql/ [sensor.strings.moon.json docs]: /components/sensor.strings.moon.json/ -[sensor.sytadin docs]: /components/sensor.sytadin/ [sensor.waze_travel_time docs]: /components/sensor.waze_travel_time/ [sisyphus docs]: /components/sisyphus/ [smappee docs]: /components/smappee/ diff --git a/source/_posts/2018-08-29-release-77.markdown b/source/_posts/2018-08-29-release-77.markdown index c6b4c57c317..645ff5a17c6 100644 --- a/source/_posts/2018-08-29-release-77.markdown +++ b/source/_posts/2018-08-29-release-77.markdown @@ -149,7 +149,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Eph ember support operation modes ([@ttroy50] - [#15820]) ([climate.ephember docs]) - Fixed race condition in Generic Thermostat ([@aronsky] - [#15784]) ([climate.generic_thermostat docs]) - Fix magic cube support of the Aqara LAN Protocol V2 ([@syssi] - [#15940]) ([binary_sensor.xiaomi_aqara docs]) -- Upgrade beautifulsoup4 to 4.6.3 ([@fabaff] - [#15946]) ([device_tracker docs]) ([sensor.geizhals docs]) ([sensor.scrape docs]) ([sensor.sytadin docs]) +- Upgrade beautifulsoup4 to 4.6.3 ([@fabaff] - [#15946]) ([device_tracker docs]) ([sensor.geizhals docs]) ([sensor.scrape docs]) - Allow wait template to run the remainder of the script ([@lhovo] - [#15836]) (breaking change) - Add trusted networks auth provider ([@awarecan] - [#15812]) ([auth docs]) ([http docs]) ([websocket_api docs]) (breaking change) - Add monitored conditions for Unifi device_tracker ([@cgarwood] - [#15888]) ([device_tracker docs]) @@ -475,7 +475,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.scrape docs]: /components/sensor.scrape/ [sensor.shodan docs]: /components/sensor.shodan/ [sensor.systemmonitor docs]: /components/sensor.systemmonitor/ -[sensor.sytadin docs]: /components/sensor.sytadin/ [sensor.worldtidesinfo docs]: /components/sensor.worldtidesinfo/ [sensor.xiaomi_miio docs]: /components/sensor.xiaomi_miio/ [sonos docs]: /components/sonos/ diff --git a/source/_posts/2019-07-17-release-96.markdown b/source/_posts/2019-07-17-release-96.markdown index de8aeb95b01..0eb013ae135 100644 --- a/source/_posts/2019-07-17-release-96.markdown +++ b/source/_posts/2019-07-17-release-96.markdown @@ -345,7 +345,7 @@ Experiencing issues introduced by this release? Please report them in our [issue ## All changes -- Fix AttributeError: 'NoneType' object has no attribute 'group' with sytadin component ([@foreign-sub] - [#24652]) ([sytadin docs]) +- Fix AttributeError: 'NoneType' object has no attribute 'group' with sytadin component ([@foreign-sub] - [#24652]) - braviatv, nmap_tracker: use getmac for getting MAC addresses ([@scop] - [#24628]) ([braviatv docs]) ([braviatv docs]) ([braviatv docs]) ([nmap_tracker docs]) - Fix downloader_download_failed event not firing for HTTP response errors ([@sfjes] - [#24640]) ([downloader docs]) - Multiple devices support for opentherm_gw ([@mvn23] - [#22932]) ([opentherm_gw docs]) (breaking change) @@ -869,7 +869,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [switchmate docs]: /components/switchmate/ [syncthru docs]: /components/syncthru/ [systemmonitor docs]: /components/systemmonitor/ -[sytadin docs]: /components/sytadin/ [tado docs]: /components/tado/ [tahoma docs]: /components/tahoma/ [template docs]: /components/template/ diff --git a/source/_posts/2019-08-28-release-98.markdown b/source/_posts/2019-08-28-release-98.markdown index 13743825644..793f629618d 100644 --- a/source/_posts/2019-08-28-release-98.markdown +++ b/source/_posts/2019-08-28-release-98.markdown @@ -219,7 +219,7 @@ Experiencing issues introduced by this release? Please report them in our [issue Integrations which make use of web scraping and are pending for removal in Home Assistant 0.100.0 [ADR-004](https://github.com/home-assistant/architecture/blob/master/adr/0004-webscraping.md): - **USPS** - ([@frenck] - [#25743]) ([usps docs]) - - **SYTADIN** - ([@frenck] - [#25742]) ([sytadin docs]) + - **SYTADIN** - ([@frenck] - [#25742]) - **UPS** - ([@frenck] - [#25746]) ([ups docs]) - **FEDEX** - ([@frenck] - [#25745]) ([fedex docs]) - **SRP Energy** - ([@frenck] - [#25754]) @@ -348,7 +348,7 @@ anymore. - ([@abmantis] - [#25971]) - Add test case to identify missing MQTT configuration abbreviations ([@emontnemery] - [#25616]) ([mqtt docs]) - Manufacturer specific channel for SmartThings. ([@Adminiuga] - [#25739]) ([zha docs]) - Deprecates usps integration (ADR-0004) ([@frenck] - [#25743]) ([usps docs]) (breaking change) -- Deprecates sytadin integration (ADR-0004) ([@frenck] - [#25742]) ([sytadin docs]) (breaking change) +- Deprecates sytadin integration (ADR-0004) ([@frenck] - [#25742]) (breaking change) - Deprecates ups integration (ADR-0004) ([@frenck] - [#25746]) ([ups docs]) (breaking change) - Deprecates fedex integration (ADR-0004) ([@frenck] - [#25745]) ([fedex docs]) (breaking change) - Deprecates srp_energy integration (ADR-0004) ([@frenck] - [#25754]) (breaking change) @@ -418,7 +418,7 @@ anymore. - ([@abmantis] - [#25971]) - Fix bmw_connected_drive and eq3btsmart components by updating their dependencies ([@OliverRepo] - [#26012]) ([bmw_connected_drive docs]) ([eq3btsmart docs]) - Upgrade luftdaten to 0.6.3 ([@fabaff] - [#26009]) ([luftdaten docs]) - Upgrade pysnmp to 4.4.11 ([@fabaff] - [#26010]) ([snmp docs]) -- Upgrade beautifulsoup4 to 4.8.0 ([@fabaff] - [#26006]) ([linksys_ap docs]) ([scrape docs]) ([sytadin docs]) +- Upgrade beautifulsoup4 to 4.8.0 ([@fabaff] - [#26006]) ([linksys_ap docs]) ([scrape docs]) - Allow entities to indicate they should be disabled by default ([@balloob] - [#26011]) - Hue tweak registered device type + discovery exception ([@balloob] - [#25977]) ([hue docs]) - Fix config entry has options check ([@balloob] - [#25976]) ([config docs]) @@ -866,7 +866,6 @@ anymore. - ([@abmantis] - [#25971]) [statistics docs]: /components/statistics/ [stream docs]: /components/stream/ [syncthru docs]: /components/syncthru/ -[sytadin docs]: /components/sytadin/ [tado docs]: /components/tado/ [tellduslive docs]: /components/tellduslive/ [template docs]: /components/template/ diff --git a/source/images/supported_brands/sytadin.png b/source/images/supported_brands/sytadin.png deleted file mode 100644 index 739fdeba02ae039c46e81d4ab2871b8bdb966f88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8897 zcmV;yB0k-TP)Px#v`|b`MMrQ<{r&y&^78NR@7LGY>+9j6BAZeR*j8~U|?W4I5-#>7&9|78yg!a zC@2*b7B4R^F)=YLEG#1?7Ct;0e|!{{kq=Hw63NNQDJT>&F&9ovDz>(^SXfwme0*|pay&Fq zQUCw|7j#liQvlN0{@D_OBntS_`Y@go377mS;i zn_;{f;~B>5@bC5I_K~pMegew9f^qfo{Nv5xBK(QNm4p5-#vi%v9)`D<|MB*ohwnU> zIdAXJw-O6L`ItLYP~ASi@i1h*?{hiS^ogMt@bRA>0S-0{K_fJ=A*Lh=ogc4{2<6M} z`Xla;FkXK6q3|6X^y+XmapSGk$gM`7qebFDKmnoAKuk0){tjpW%iFVrvfU}WzYxab zyCdMw$Q^J!(YDm&2Wqk!ebYF)hVvkhNEnkyaQ}hC09X)%1cK2gA?TR%0LrUm{YE4^ zWXIJrz;N*E;*Okr+y-vI;r?_&qpys!Yla12=dfKhAp!|N`or{vJ499}5m0ymb-YBp z-y&0Xn{hn8g>15qpARI^Km?lt5uw5{2C{d-D{nVX+mJ{cFK=P67#WM9#Xk^Q+#Xu^ zI)oPag+j}fT82oR=S@B#91i0dmHn^UJ{bbD~MY=ZlQL{zm?oDJ)-;-w#~lQ-rC! zGzKyVu;~$Z<`JL^dj_7|t>lxhcarC96yh}L_%}Z_jrME!n-{bjfI3V%f6;fJ$6&~@r ztXz`m@61q7Zc)#vk()+;!vdP@Q~5Py%MHi+JLZTCu4R|pU!h|8Ynr+$t*i1oO)`f5 zO4XVql5@>JR$uUsLL#1*Tp}6r&K5Rc#q$ZH=@BE31h#74ogf*2EV~3H>k&eM+thO! z8J25SjcQpw)Gq{tDIkOVqDR7UXocqlVuaRy9|B9h*m@E>l&pY6RFj>P&|)xi65P== zGAceV8ixfKm6B9DT5BzF&Lc9B><6-&;Z< z{4(E^UnbNEcvO?PX9S*-UmVV@HMX$IdZEH}<`KvI(ie@6;Sp}Si{w`&O}22bGBW$b zBZmBXM0ZPUp=Ld^X{4`mWL18r1aeFQnH&j*5@pU2yZj>E->tf}Q<}A|o*Rsxl;0KA z8q3z8T6TS_Iv$QO)bL2ztj$0~SQ1XKBIAv^dWw3A(ClG&-`8bs@s zs?`IG;5}M~xpNEnSpN9^uwT;X3;1mj6)i_&k=LTnVz@>)c~N9lIOGx44w4S>PHkD{ zbuyOUi$KmX6;$y9jI1wlD*7C!LlunUF6ayVwCsIb6T7DcY6>l1EzqPerEL}A+ZoeOdb(u`3?1Lg-?4#>uyIO-VsMSi7T3Lq$7^hR*sNSafGu8 zN95{xha7^?r{>Z|@yRwY;dR_u}5^vwNd0Qvj@(6x+QW+0TfZwr9%$SDN#2RgsK~!f%9N&`J z11a2T&V8NW5h4C!E|yq*3)kD#*!2rG-g1vGK40+iQySP*%)bK;1(WXv`pSjBmY#Lbp%k zNGhx-yF@h~j;P;_r^n?oUVv=EpOE{Rby1k;s_w{?5hS&$q$sy};|xOEgHHBL8HWX^ zd#xTq5s+3OEe)M4Ho6N6T3oeF?e3Ff*X+Qe=n;7|WDb-*Y1}Z2M}&LIqeE0yz>UP) zkGd!cyiJa99EeGUFUT*^psZIs|%>1d4@mLyOn(IAbs!o7~c%)1lSiX#})+ z6k00pGv)UL zGM*OIM1FPs4t$O>NQClH6y5u!GdqyI08u_Am*tn88W2D1Z!}F0(JLnwI89Rp?5w4# zPc1vsqHEgf#F$ex73i2$Phki*Q#TI-sdBJs$O>8IvT65P;_!}5rn(JOkhr>gf+`Hg z_IO!-Ri=eM-^%X{zHK;>wn0_mNscev)upnp$7`})Ef9<|YM^c&>PG?nHpXlz=8w){ zB59$n%4^T;#;Y!h+m>)nI$oAvMT3ACTr@KN4-Hjdjla^Trc-*FFF)qQxe8I%Ak~3K zYF+$&Wa$(3mB4LnJM6p7pIO>EUWDCo>y9LCKDYlB)J%ZqxcwLLt?><6S;hl-tV zRSnN>9P_hknevOf->h0@6GXR9>|GRdud3q{*Gt!&AIl!e@A=;0e_6S-Wa5q^}p3FRX61OEw7)R3Bko$4OA1zLT zpQh#WGK6XGDM4LMW0W_S$NmW6E=#a8itMjpwxn;^I}})maM~Ljt(09P$z5c>E_I8b zjD4A`)BC$x^vDfFLSK z5xJVF!;>{PH%V;p!O1}BzhuY&=v4^SL+KA$;HEZg19;_fa1m<6)ZFQq`5wlptUAE& z+Sj8>MIhZ^)&b$SSxnc%qvmp&Aa87vX_A1q`8omYHY+XOBC##gPJcfT&E;&Wq`P z+e54(&oQSeQ!Z{DM|xCZyQ4*IDpw&E(U^jxPgIRgVxYKvB5g)w$~b8(;D=caSjp@B zf9oMWqMH2(zcnvD&Yj)Ok5H3}sKwV)y%pfsE2cSE?@hBSPOaU^>eU?coOvNdqTsJogkY|l9I<0i-b~---NIg&@ScK|khAY-=kZ%+G%DJltvm8iL%U&Z~0X`wnB6y{`>&)8Zsz==A z#ar;Jx?$8sw$HJI1hpPpY9$^P$&i8!$*Ry0PTwtk!VDJ0k+~m`lo#Aah7$M_7}C$TNbEKQ(PQv#0}}hVXkPnbC@&)3#O5ZnF_qZ(Xk{^d!oz$C z;qIWhA%Y>Dhx(XZv`6b2ey5nkj-CDS#o1l8?=s{!+@;QX#R`G`)wbyDB22RESYm33 zy&l)F#C4Q!e%sl9L1M?BLPgncd7v8t!5kRUQLn94BI;M>E=|67T90$-Ops))PaLq-Rq8Iw0E8u&+)@Y!gy(K1F$i z^ob4^k&O)Wq)bd!l~hl#nr(S&DltovBU2P?%Kg`g5Q==OT^fV zr;8CbfZw3q=D6Pr_$_zX{52iqg3R!UM-BIZZ`R5YZ_+zMtPw))(!Yffc9>2KNfR4K z)=NX2JmZ|8tG*~mi_T+naHcXYr7{~pn8*?u?Ra&o3n0R&{?JDdVX^J$j#d(;C`8bq z#O5k#^n(#hnF^##Yc16HVxIcbluQY^Ink=q8~j=?Cq!i01Zs}DZAT~CuxW3STH2Z^ z)5de9NdUhoR*aXFY2oM&_&4ROHNdc#v__wtlvc}5V*9=z5!8GUE8WBV0`m-h)+IZ% z3zJ!?CAD;eOM4Ti{hQUC?y?g%`NHtq_{GZ|v9$*LdlU%;b`9~8y|)!gD|F|U0p7C@ ze-=f&BUR<->Wl<(sf<+cl2q`ly~b`~o}cbW4vWooSNEfk`rABMRi5;6$VZ%Wu$Lb? z>c`xKppw=sb(*~jI5WDs^R#)jp|@X^~N{suPTXWMNX8y@u&Ge8}fKh z*aPC{fVLKeeML~Z7GWX%o&eT8g9?6xI z=S|p=O zJ2I06sIsP>Gt2zEJcFa)G~kZ3y?8SNb_5wYuteuKarbgZFoX#bNw*q~80<*Dl0n@{ zo-@oD-cn`}HY2%1;uDR+_gawz8@z!H5!|><^^;1%G_z-FCwpa@>pB=nNTP{D@{0V; zRlYkr^UDgE*F}*2cojIkVJ5NYZtRg5bSS}&Q8>RkS}rg%b=p0UGbw!VX1~_% zOxZX>->8tpeqr;(y+bD$F3f~M7a3F<%ow_v$&}gNaSDCJAFae#k^kMJ^#^x^X=XIY zIAw0Yg_MuMO8AQ4WlS!sVut-S7T(K)ByqORo`rO^dpnyIC!73`qR_DS%sn@q-$gAn zr1B4EMHWA(l`cF?ZBN4FdaH`JPqi`b4yB_?0!zeYwVWaRj9G8hBGvv&2W)mb68zNf$ZU6Hub_h3!|lit7a-}rBLUkR8j|ylJazNC z9jRQ_I@i<*Uu{Ff_Wm>t7U|40(tZ)@Tto2?aW|N}wLSFI;D(To$Q^gNCL}k&{$L)3 z^gQ6-5u0!N$lrhd{M(ic6{GOj;*g7@Zuzoc4-tEq?j1(qtBe*>K1dP3m2mlPibCp6 zCA;EB?oFJA2VwI39JN^aK>WjvL72b){Od2LLLfw)3;?Z5Uj1e607Qj*n_oDN4i8PC z!dW1KJQpJeL>Du`#q?%=d*h$#vF-UjGl`d`NmH}{zG)@cmxl1EW?!8;+vW4+5pIdX z1BZeIJH73uKPZOlr=OJC`4Z--MXKu-llysO6i$N|fH zV-2aCA%;`GEen058d<{kr~*d85etuz^TME_-4m;6Bzd)Ac}C}liDfWSaWdHEd6WEP z5ay$g{KYabek`7K1i$8oWkaT#epqkrr@JALsn^sO913Sd$T4814mOMfkLj#wD!tG; znF(M${GNPp5T-s3!Ze=^v8ih2x_nM6?SA(UM%ZBrf0|ja1^7jT9oH87(Cf%q{(Le(!664FE(Y7;g#(S=3WCp*8|NSbw-5tM7V2XS{W)I1#e<#G_l z8^Y&AVk?FOtuABQJ58^?$PWA`eW;)IG9s?Zd3)?oh_*a6_i|jDkfF6!_Goc0r>7(f ztfj?4aUV;Yt7!!?MEs|{YvD~C2f~$ZZ?6bW;?dpUx>6!Al^}sY0ugQh|NlDA!;VAZ z5NIp9r+T#;Z5>j7c;@qX9&tG=a^FCXo1@RuHB#An`&e(rF5DEM+b9Ps$}tJR44pDc z=5sF1v-C@f&Y?HHCt=>*IG45*4geAoXX3C7kkB10yAV!*u>Kezhbj=V*cnKI^+r)6 zka@xtRV_ef@#b7G6oG^$nfOuDFUZN-WVEutv1nCgitvYr1c79tl&LcI5mBPzj*3EL zMYN<5E#-s>=OkM5M$wv`5iK47`2xZ5xh`{zNuRed>a(ai7Kpq=PS%hxalz2+X7xpZ zKF`^l((4B*JJc8=&62V+{c>SjF0Ha_R^PF*3*FgX2m?SkQo-T-9pvLh5!a|tfJqh! zGpwl_49ibI<{K;#06~-+a(>_NRx_+n#!s!O6-o4v=Le==Y3Y|cRSqnyc{knVkb;d5 zP_hI4hGuYZh3^B3<*A~XllC-@**YnVE84*WHL1{<9Rw#-myQyMIrD;O_p!Lxsho;G zxAg^4*>zF!f|$U9i0&b?;Y(Y5x5wo$EIFXF0^<*C-yB&ZpgWat8X_E&H}RD z(c;kHC@BYRHdd;`jI5Au$mkQeDrl1;;#e7~grJ>je!5iPMM6 zi)pBCaDZQut{FBf{R?z~^y(yqvX30K+h zB|;~5Buowoy}!@M68WhE>*{geg(sknCAWb=6CYG&uYn$)YMAiE9mGl5!FeDnVPzYI z2n7BRxzYnsju{IanIAUu4OUPrR!bd6yM4`~kQr?PRb{#i-{NZ!(0+3Gmak}fop!d0 z7S4zr6_%bo&vVY;;oTDHb6gls3QL9(#fA)Ai^1KO7tEfb?x!}4)J(rEPVAN$5hW1v z+sslC8B1LMrLjJ5wjzp7PrKolP0Th?0}l4!&f`N+4|IyE8DH_97$^2D>l#D+p@9UV zbj$9X8R3&OBA{P)MudA2oC=-<6&yijMlw-Ji>oYl^GvnPi0U{aKQwCv#x#QOHwJCU zTw;o%0P47&=U_`#T+uiQ6bW4CvKB1|ZNSbA>By-XNGt@4w~h20a3M@r9ibT^mN`UF zxtKr=orG5^;aEbrVDVfk1J?%)ABhfn!wpH&nwvF49fS;=DsD_b#!hvbm%%K&t98n1 z=&k4+dIKO5{YZHhCn>(eF4o2-JVxUQAQO8FZ^6JpRv9*e&O)2!2}AbEs8?wUV$U$QM$P{mxZD=@rS#O<)pbemD z`fUK>r{60wA1o01LO1A+)w@B=cY(T0_-|qthmv8-SSA;3+L{~Jy}KoEPSW_@ngvl^ z2BdvPOc_d!Lr;pB!h6}wP%8xeY(6N31*n=f-y!A{t7&U>EE#PARm1L2QkalR5Nalh zKh4QABMV|JDZwt(c514PMs3T&>+bZf`jFwSIyiaJcIktTQ|o3<=>g2UbfL~vp6Ih- z*aXZ?)uikfC!P@ydTd_6&i{~arPB6up2I~IIU3=1ZLn*Eo@2R%PQC{ppiUF1O{dRN z$Lwn9N&0g#vCq@5nGsD9;AX}Ph3pl@jFj0Aovzy4DRF7z6)q@W17h;vIK8@=VZEIf zCubs%;B=6p`O@~&8cI8k))cIB`B}0vYZ)No;?@r9^P1`cBnUnNNbsrc6444eNsp)V z413nZMs^S_*>Of}?9nNDs0Sv?PT}eFkf=|e<=K0he(Il*Q#;wi;$1pBuxIB^?_--z zQu+Je<>D9yqHRV*hZ$-A(y!|D-V-(*5^+CVF7{7>pG42?07!o- zJ!@X;igCVT<&#Kj+HU}I_pn$jUX&=8rwf+8n>0Gw=AnMrP=B#_RVTg}YZv-tD!5_u z95(b%Z?RZ~t(J~BV+IA6nMxOS*6xAhpL+G=&?-RHv|gn|5{QyC1--$bQgp)*Hx{=B?llX%aYV*m$zz zLm$*#{vkNpQQzhkp9%pAbDIzcg|63E9zd0004eNkl`}ULO2cte9nX0d9qNpk0=(j0|gJjuzIZsU2cfRKVFTG_a z9C!Bvl&=2kBYI;$#tIKU;sG!nkFR}{tMfQuP9~u7i{neEK7R3j&&EoHFGm+lR_xYy5OG`DH+>-Wdu==YT{Xi*veoQy`p)v Date: Mon, 23 Sep 2019 12:56:33 -0500 Subject: [PATCH 25/76] add url action (#10413) --- source/_lovelace/entity-button.markdown | 14 +++++- source/_lovelace/glance.markdown | 14 +++++- source/_lovelace/picture-elements.markdown | 56 ++++++++++++++++++---- source/_lovelace/picture-entity.markdown | 14 +++++- source/_lovelace/picture-glance.markdown | 14 +++++- source/_lovelace/picture.markdown | 14 +++++- 6 files changed, 108 insertions(+), 18 deletions(-) diff --git a/source/_lovelace/entity-button.markdown b/source/_lovelace/entity-button.markdown index 505584bdecb..ee3ed4a6b4e 100644 --- a/source/_lovelace/entity-button.markdown +++ b/source/_lovelace/entity-button.markdown @@ -57,7 +57,7 @@ tap_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `none`)" type: string default: "`toggle`" navigation_path: @@ -65,6 +65,11 @@ tap_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" @@ -82,7 +87,7 @@ hold_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `none`)" type: string default: "`more-info`" navigation_path: @@ -90,6 +95,11 @@ hold_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" diff --git a/source/_lovelace/glance.markdown b/source/_lovelace/glance.markdown index 1fba596dda4..c69af02b1e1 100644 --- a/source/_lovelace/glance.markdown +++ b/source/_lovelace/glance.markdown @@ -82,7 +82,7 @@ tap_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `none`)" type: string default: "`more-info`" navigation_path: @@ -90,6 +90,11 @@ tap_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" @@ -107,7 +112,7 @@ hold_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `none`)" type: string default: "`more-info`" navigation_path: @@ -115,6 +120,11 @@ hold_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" diff --git a/source/_lovelace/picture-elements.markdown b/source/_lovelace/picture-elements.markdown index 0b4ca1a0760..e5514720696 100644 --- a/source/_lovelace/picture-elements.markdown +++ b/source/_lovelace/picture-elements.markdown @@ -82,7 +82,7 @@ tap_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `none`)" type: string default: "`more-info`" navigation_path: @@ -90,6 +90,11 @@ tap_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" @@ -107,7 +112,7 @@ hold_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `none`)" type: string default: "`more-info`" navigation_path: @@ -115,6 +120,11 @@ hold_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" @@ -162,7 +172,7 @@ tap_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `none`)" type: string default: "`more-info`" navigation_path: @@ -170,6 +180,11 @@ tap_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" @@ -187,7 +202,7 @@ hold_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`,, `none`)" type: string default: "`more-info`" navigation_path: @@ -195,6 +210,11 @@ hold_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" @@ -264,7 +284,7 @@ tap_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `none`)" type: string default: "`more-info`" navigation_path: @@ -272,6 +292,11 @@ tap_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" @@ -289,7 +314,7 @@ hold_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `none`)" type: string default: "`more-info`" navigation_path: @@ -297,6 +322,11 @@ hold_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" @@ -336,7 +366,7 @@ tap_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `none`)" type: string default: "`more-info`" navigation_path: @@ -344,6 +374,11 @@ tap_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" @@ -361,7 +396,7 @@ hold_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `none`)" type: string default: "`more-info`" navigation_path: @@ -369,6 +404,11 @@ hold_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" diff --git a/source/_lovelace/picture-entity.markdown b/source/_lovelace/picture-entity.markdown index f5d70a8c936..e1e5ff31e04 100644 --- a/source/_lovelace/picture-entity.markdown +++ b/source/_lovelace/picture-entity.markdown @@ -62,7 +62,7 @@ tap_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `none`)" type: string default: "`more-info`" navigation_path: @@ -70,6 +70,11 @@ tap_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" @@ -87,7 +92,7 @@ hold_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `none`)" type: string default: "`more-info`" navigation_path: @@ -95,6 +100,11 @@ hold_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" diff --git a/source/_lovelace/picture-glance.markdown b/source/_lovelace/picture-glance.markdown index 33dc065843e..f1fc699bf35 100644 --- a/source/_lovelace/picture-glance.markdown +++ b/source/_lovelace/picture-glance.markdown @@ -61,7 +61,7 @@ tap_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `none`)" type: string default: "`more-info`" navigation_path: @@ -69,6 +69,11 @@ tap_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" @@ -86,7 +91,7 @@ hold_action: keys: action: required: true - description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `url`, `none`)" type: string default: "`more-info`" navigation_path: @@ -94,6 +99,11 @@ hold_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" diff --git a/source/_lovelace/picture.markdown b/source/_lovelace/picture.markdown index 65c9befd801..6170f9fe43a 100644 --- a/source/_lovelace/picture.markdown +++ b/source/_lovelace/picture.markdown @@ -27,7 +27,7 @@ tap_action: keys: action: required: true - description: "Action to perform (`call-service`, `navigate`, `none`)" + description: "Action to perform (`call-service`, `navigate`, `url`, `none`)" type: string default: "`none`" navigation_path: @@ -35,6 +35,11 @@ tap_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" @@ -52,7 +57,7 @@ hold_action: keys: action: required: true - description: "Action to perform (`call-service`, `navigate`, `none`)" + description: "Action to perform (`call-service`, `navigate`, `url`, `none`)" type: string default: "`none`" navigation_path: @@ -60,6 +65,11 @@ hold_action: description: "Path to navigate to (e.g. `/lovelace/0/`) when `action` defined as `navigate`" type: string default: none + url_path: + required: false + description: "Path to navigate to (e.g. `https://www.home-assistant.io`) when `action` defined as `url`" + type: string + default: none service: required: false description: "Service to call (e.g. `media_player.media_play_pause`) when `action` defined as `call-service`" From e1143553d1de33fe3cf25c5da7dfe87e624babd9 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 25 Sep 2019 20:21:13 +0200 Subject: [PATCH 26/76] Remove deprecated linksys_ap integration (ADR-0004) (#10434) --- source/_components/linksys_ap.markdown | 73 ------------------- .../2017-01-28-face-coffee-wink.markdown | 3 +- ...automation-editor-zwave-panel-ocr.markdown | 3 +- source/_posts/2017-12-03-release-59.markdown | 3 +- source/_posts/2019-08-28-release-98.markdown | 7 +- 5 files changed, 6 insertions(+), 83 deletions(-) delete mode 100644 source/_components/linksys_ap.markdown diff --git a/source/_components/linksys_ap.markdown b/source/_components/linksys_ap.markdown deleted file mode 100644 index 05285897853..00000000000 --- a/source/_components/linksys_ap.markdown +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: "Linksys Access Points" -description: "Instructions on how to integrate Linksys Access Points into Home Assistant." -ha_category: - - Presence Detection -logo: linksys.png -ha_release: 0.37 -redirect_from: - - /components/device_tracker.linksys_ap/ ---- - -
- -This integration is deprecated and will be removed in Home Assistant 0.100.0. - -For more information see [Architecture Decision Record: 0004](https://github.com/home-assistant/architecture/blob/master/adr/0004-webscraping.md). - -
- -The `linksys_ap` platform offers presence detection by looking at connected devices to a Linksys based access point. - -It was tested with a LAPAC1750 AC1750 Dual Band Access Point. - -## Configuration - -To use a Linksys Access Point in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -device_tracker: - - platform: linksys_ap - host: 192.168.1.1 - username: YOUR_USERNAME - password: YOUR_PASSWORD -``` - -{% configuration %} -host: - description: The hostname or IP address of your access point, e.g., `192.168.1.1`. - required: true - type: string -username: - description: The username of an user with administrative privileges (read-only is sufficient). - required: true - type: string -password: - description: The password for your given admin account. - required: true - type: string -verify_ssl: - description: Verify SSL certificate for HTTPS request. - required: false - default: true - type: boolean -{% endconfiguration %} - -## Example - -Example for all configuration options: - -```yaml -# Example configuration.yaml entry -device_tracker: - - platform: linksys_ap - host: 192.168.1.1 - username: YOUR_USERNAME - password: YOUR_PASSWORD - verify_ssl: true - scan_interval: 6 - consider_home: 12 -``` - -See the [device tracker integration page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_posts/2017-01-28-face-coffee-wink.markdown b/source/_posts/2017-01-28-face-coffee-wink.markdown index 2f638bc440c..accbc45bdea 100644 --- a/source/_posts/2017-01-28-face-coffee-wink.markdown +++ b/source/_posts/2017-01-28-face-coffee-wink.markdown @@ -58,7 +58,7 @@ Thanks to [@konikvranik] the [HDMI CEC][cec] integration got a huge update with - Device tracker: [Sky hub][sky] support ([@alexmogavero]) - Support for [Lutron][lutron] RadioRA 2 ([@thecynic]) - TTS: Amazon [Polly TTS][polly] platform ([@robbiet480]) -- Device tracker: Support for [Linksys][linksys] Access Points ([@lukas-hetzenecker]) +- Device tracker: Support for Linksys Access Points ([@lukas-hetzenecker]) - Notify: Make calls with [Twilio][twilio] ([@fakezeta]) #### Improvements @@ -239,7 +239,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [skybeacon]: /components/sensor.skybeacon/ [lutron]: /components/lutron/ [polly]: /components/tts.amazon_polly/ -[linksys]: /components/device_tracker.linksys_ap/ [emul-hue]: /components/emulated_hue/ [netatmo]: /components/netatmo/ [face]: /components/microsoft_face/ diff --git a/source/_posts/2017-05-20-automation-editor-zwave-panel-ocr.markdown b/source/_posts/2017-05-20-automation-editor-zwave-panel-ocr.markdown index c7e0936af09..d88039e6f5c 100644 --- a/source/_posts/2017-05-20-automation-editor-zwave-panel-ocr.markdown +++ b/source/_posts/2017-05-20-automation-editor-zwave-panel-ocr.markdown @@ -115,7 +115,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - LIFX: avoid out-of-bounds hue aborting the colorloop effect ([@amelchio] - [#7495]) - Upgrade async_timeout to 1.2.1 ([@fabaff] - [#7490]) - Prevent printing of packets. ([@aequitas] - [#7492]) ([rflink docs]) -- Upgrade beautifulsoup4 to 4.6.0 ([@fabaff] - [#7491]) ([device_tracker.linksys_ap docs]) ([sensor.scrape docs]) +- Upgrade beautifulsoup4 to 4.6.0 ([@fabaff] - [#7491]) ([sensor.scrape docs]) - Switch onkyo to pypi ([@andrey-git] - [#7497]) ([media_player.onkyo docs]) - Fixed potential AttributeError when checking for deleted sources ([@scarface-4711] - [#7502]) ([media_player.denonavr docs]) - Refactor sun component for correctness ([@armills] - [#7295]) @@ -353,7 +353,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [cover.lutron_caseta docs]: /components/cover.lutron_caseta/ [datadog docs]: /components/datadog/ [device_tracker.automatic docs]: /components/device_tracker.automatic/ -[device_tracker.linksys_ap docs]: /components/device_tracker.linksys_ap/ [device_tracker.unifi docs]: /components/device_tracker.unifi/ [dweet docs]: /components/dweet/ [eight_sleep docs]: /components/eight_sleep/ diff --git a/source/_posts/2017-12-03-release-59.markdown b/source/_posts/2017-12-03-release-59.markdown index 4a11ec81f81..7cbf3b7f210 100644 --- a/source/_posts/2017-12-03-release-59.markdown +++ b/source/_posts/2017-12-03-release-59.markdown @@ -61,7 +61,7 @@ If you follow our [twitter feed](https://twitter.com/home_assistant) then you ma ## Release 0.59.2 - December 6 - Require FF43 for latest js ([@andrey-git] - [#10941]) -- Fix linksys_ap.py by inheriting DeviceScanner ([@mateuszdrab] - [#10947]) ([device_tracker.linksys_ap docs]) +- Fix linksys_ap.py by inheriting DeviceScanner ([@mateuszdrab] - [#10947]) - Upgrade tellduslive library version (closes https://github.com/home-assistant/home-assistant/issues/10922) ([@molobrakos] - [#10950]) ([tellduslive docs]) - Allow chime to work for wink siren/chime ([@w1ll1am23] - [#10961]) ([wink docs]) - Reload closest store on api menu request ([@craigjmidwinter] - [#10962]) ([dominos docs]) @@ -420,7 +420,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [@molobrakos]: https://github.com/molobrakos [@w1ll1am23]: https://github.com/w1ll1am23 [@craigjmidwinter]: https://github.com/craigjmidwinter -[device_tracker.linksys_ap docs]: /components/device_tracker.linksys_ap/ [dominos docs]: /components/dominos/ [media_player.cast docs]: /components/media_player.cast/ [tellduslive docs]: /components/tellduslive/ diff --git a/source/_posts/2019-08-28-release-98.markdown b/source/_posts/2019-08-28-release-98.markdown index 793f629618d..fa2c075c2ae 100644 --- a/source/_posts/2019-08-28-release-98.markdown +++ b/source/_posts/2019-08-28-release-98.markdown @@ -223,7 +223,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - **UPS** - ([@frenck] - [#25746]) ([ups docs]) - **FEDEX** - ([@frenck] - [#25745]) ([fedex docs]) - **SRP Energy** - ([@frenck] - [#25754]) - - **Linksys AP** - ([@frenck] - [#25804]) ([linksys_ap docs]) + - **Linksys AP** - ([@frenck] - [#25804]) - **Ruter** - *Removed* - Ruter Labs which hosted the API has shut down the service. As an alternative, see the Entur public transport integration. - ([@ludeeus] - [#26041]) - **Googlehome** - *Removed* - In recent months this integration was broken when Google changed the port they serve this information on, in addition to requiring a token header in the request. That method requires the user to have a rooted android device, and even then then the "result" was not the best, since you often need to get that token. As an alternative to the device tracker, users can look into https://community.home-assistant.io/t/monitor-reliable-multi-user-distributed-bluetooth-occupancy-presence-detection/68505 - ([@ludeeus] - [#26035]) @@ -355,7 +355,7 @@ anymore. - ([@abmantis] - [#25971]) - Updater component is always available and shows on/off depending on whether an update is available or not ([@Santobert] - [#25418]) ([updater docs]) (breaking change) - Integration requirement check refactor ([@elupus] - [#25626]) - Add Mikrotik hub and rework device tracker ([@slackr31337] - [#25664]) ([mikrotik docs]) (breaking change) -- Deprecates linksys_ap integration (ADR-0004) ([@frenck] - [#25804]) ([linksys_ap docs]) (breaking change) +- Deprecates linksys_ap integration (ADR-0004) ([@frenck] - [#25804]) (breaking change) - Fix Broadlink MP1 unavailable error ([@miroslawkrol] - [#25806]) ([broadlink docs]) - Add arcus trigonometry functions to templates ([@tomilehto] - [#25510]) - Add error handling to !include command in yaml ([@thomasloven] - [#25801]) @@ -418,7 +418,7 @@ anymore. - ([@abmantis] - [#25971]) - Fix bmw_connected_drive and eq3btsmart components by updating their dependencies ([@OliverRepo] - [#26012]) ([bmw_connected_drive docs]) ([eq3btsmart docs]) - Upgrade luftdaten to 0.6.3 ([@fabaff] - [#26009]) ([luftdaten docs]) - Upgrade pysnmp to 4.4.11 ([@fabaff] - [#26010]) ([snmp docs]) -- Upgrade beautifulsoup4 to 4.8.0 ([@fabaff] - [#26006]) ([linksys_ap docs]) ([scrape docs]) +- Upgrade beautifulsoup4 to 4.8.0 ([@fabaff] - [#26006]) ([scrape docs]) - Allow entities to indicate they should be disabled by default ([@balloob] - [#26011]) - Hue tweak registered device type + discovery exception ([@balloob] - [#25977]) ([hue docs]) - Fix config entry has options check ([@balloob] - [#25976]) ([config docs]) @@ -821,7 +821,6 @@ anymore. - ([@abmantis] - [#25971]) [kodi docs]: /components/kodi/ [lacrosse docs]: /components/lacrosse/ [life360 docs]: /components/life360/ -[linksys_ap docs]: /components/linksys_ap/ [luci docs]: /components/luci/ [luftdaten docs]: /components/luftdaten/ [lutron docs]: /components/lutron/ From 52416cc248c204a4d447baf363092633d355c0e1 Mon Sep 17 00:00:00 2001 From: Rami Mosleh Date: Wed, 25 Sep 2019 21:26:17 +0300 Subject: [PATCH 27/76] Add Alarm Control Panel to secure devices (#10250) * Add Alarm Control Panel to secure devices * :pencil2: Tweak --- source/_components/google_assistant.markdown | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index e5ea5ff9143..89054e23769 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -200,6 +200,7 @@ Currently, the following domains are available to be used with Google Assistant, - climate (temperature setting, hvac_mode) - vacuum (dock/start/stop/pause) - sensor (temperature setting, only for temperature sensor) +- Alarm Control Panel (Arm/Disarm)
The domain groups contains groups containing all items, by example group.all_automations. When telling Google Assistant to shut down everything, this will lead in this example to disabling all automations @@ -207,10 +208,12 @@ Currently, the following domains are available to be used with Google Assistant, ### Secure Devices -Certain devices are considered secure, including anything in the `lock` domain, and `covers` with device types `garage` and `door`. +Certain devices are considered secure, including anything in the `lock` domain, `alarm_control_panel` domain and `covers` with device types `garage` and `door`. By default these cannot be opened by Google Assistant unless a `secure_devices_pin` is set up. To allow opening, set the `secure_devices_pin` to something and you will be prompted to speak the pin when opening the device. Closing and locking these devices does not require a pin. +For the Alarm Control Panel if a code is set it must be the same as the `secure_devices_pin`. If `code_arm_required` is set to `false` the system will arm without prompting for the pin. + ### Media Player Sources Media Player sources are sent via the Modes trait in Google Assistant. From 7e0af7d2b047488ac07a7615962bab51bf9ff450 Mon Sep 17 00:00:00 2001 From: Kevin Eifinger Date: Wed, 25 Sep 2019 20:29:34 +0200 Subject: [PATCH 28/76] Add documentation for here_travel_time (#9648) * Add documentation for here_travel_time * Add suggested changes to here_travel_time.markdown * Update configuration options to latest fit parent * Mention scan_interval explicitly * :pencil2: Tweak * add mode: bicycle * Add mode: publicTransportTimeTable * Update to latest origin/destination options * Remove reference to zone friendly name * Update ha_release to 0.100 * floats are bad and I should feel bad * :pencil2: Tweaks --- source/_components/here_travel_time.markdown | 172 +++++++++++++++++++ source/images/supported_brands/HERE_logo.svg | 14 ++ 2 files changed, 186 insertions(+) create mode 100644 source/_components/here_travel_time.markdown create mode 100644 source/images/supported_brands/HERE_logo.svg diff --git a/source/_components/here_travel_time.markdown b/source/_components/here_travel_time.markdown new file mode 100644 index 00000000000..e93da66fa16 --- /dev/null +++ b/source/_components/here_travel_time.markdown @@ -0,0 +1,172 @@ +--- +title: "HERE Travel Time" +description: "Instructions on how to add HERE travel time to Home Assistant." +logo: HERE_logo.svg +ha_category: + - Transport + - Sensor +ha_iot_class: Cloud Polling +ha_release: "0.100" +--- + +The `here_travel_time` sensor provides travel time from the [HERE Routing API](https://developer.here.com/documentation/routing/topics/introduction.html). + +## Setup + +You need to register for an API key by following the instructions [here](https://developer.here.com/documentation/routing/topics/introduction.html?create=Freemium-Basic&keepState=true&step=account). + +HERE offers a Freemium Plan which includes 250.000 free Transactions per month. For the Routing API, one transaction equals one request with one starting point (no multi stop). More information can be found [here](https://developer.here.com/faqs#payment-subscription) + +By default HERE will deactivate your account if you exceed the free Transaction limit for the month. You can add payment details to reenable your account as described [here](https://developer.here.com/faqs) + +## Configuration + +To enable the sensor, add the following lines to your `configuration.yaml` file: + +```yaml +# Example entry for configuration.yaml +sensor: + - platform: here_travel_time + app_id: "YOUR_APP_ID" + app_code: "YOUR_APP_CODE" + origin_latitude: "51.222975" + origin_longitude: "9.267577" + destination_latitude: "51.257430" + destination_longitude: "9.335892" +``` + +{% configuration %} +app_id: + description: "Your application's API id (get one by following the instructions above)." + required: true + type: string +app_code: + description: "Your application's API code (get one by following the instructions above)." + required: true + type: string +origin_latitude: + description: "The starting latitude for calculating travel distance and time. Must be used in combination with origin_longitude. Cannot be used in combination with `origin_entity_id`." + required: exclusive + type: float +origin_longitude: + description: "The starting longitude for calculating travel distance and time. Must be used in combination with origin_latitude. Cannot be used in combination with `origin_entity_id`." + required: exclusive + type: float +destination_latitude: + description: "The finishing latitude for calculating travel distance and time. Must be used in combination with destination_longitude. Cannot be used in combination with `destination_entity_id`." + required: exclusive + type: float +destination_longitude: + description: "The finishing longitude for calculating travel distance and time. Must be used in combination with destination_latitude. Cannot be used in combination with `destination_entity_id`." + required: exclusive + type: float +origin_entity_id: + description: "The entity_id holding the starting point for calculating travel distance and time. Cannot be used in combination with `origin_latitude`/`origin_longitude`." + required: exclusive + type: string +destination_entity_id: + description: "The entity_id holding the finishing point for calculating travel distance and time. Cannot be used in combination with `destination_latitude`/`destination_longitude`." + required: exclusive + type: string +name: + description: A name to display on the sensor. The default is "HERE Travel Time". + required: false + type: string + default: "HERE Travel Time" +mode: + description: "You can choose between: `bicycle`, `car`, `pedestrian`, `publicTransport`, `publicTransportTimeTable` or `truck`. The default is `car`. For public transport `publicTransportTimetable` is recommended. You can find more information on the modes [here](https://developer.here.com/documentation/routing/topics/transport-modes.html) and on the public modes [here](https://developer.here.com/documentation/routing/topics/public-transport-routing.html)" + required: false + type: string + default: "car" +route_mode: + description: "You can choose between: `fastest`, or `shortest`. This will determine whether the route is optimized to be the shortest and completely disregard traffic and speed limits or the fastest route according to the current traffic information. The default is `fastest`" + required: false + type: string + default: "fastest" +traffic_mode: + description: "You can choose between: `true`, or `false`. Decide whether you want to take the current traffic condition into account. Default is `false`." + required: false + type: boolean + default: false +unit_system: + description: "You can choose between `metric` or `imperial`." + required: false + default: Defaults to `metric` or `imperial` based on the Home Assistant configuration. + type: string +scan_interval: + description: "Defines the update interval of the sensor in seconds. Defaults to 300 (5 minutes)." + required: false + type: integer + default: 300 +{% endconfiguration %} + +## Dynamic Configuration + +Tracking can be set up to track entities of type `device_tracker`, `zone`, `sensor` and `person`. If an entity is placed in the origin or destination then every 5 minutes when the platform updates, it will use the latest location of that entity. + +```yaml +# Example entry for configuration.yaml +sensor: + # Tracking entity to entity + - platform: here_travel_time + app_id: "YOUR_APP_ID" + app_code: "YOUR_APP_CODE" + name: Phone To Home + origin_entity_id: device_tracker.mobile_phone + destination_entity_id: zone.home + # Full config + - platform: here_travel_time + app_id: "YOUR_APP_ID" + app_code: "YOUR_APP_CODE" + name: Work to Home By Bike + origin_entity_id: zone.work + destination_latitude: 59.2842 + destination_longitude: 59.2642 + mode: bicycle + route_mode: fastest + traffic_mode: false + unit_system: imperial + scan_interval: 2678400 # 1 month + + +``` + +## Entity Tracking + +- **device_tracker** + - If the state is a zone, then the zone location will be used + - If the state is not a zone, it will look for the longitude and latitude attributes +- **zone** + - Uses the longitude and latitude attributes +- **sensor** + - If the state is a zone, then will use the zone location + - All other states will be passed directly into the HERE API + - This includes all valid locations listed in the *Configuration Variables* + +## Updating sensors on-demand using Automation + +You can also use the `homeassistant.update_entity` service to update the sensor on-demand. For example, if you want to update `sensor.morning_commute` every 2 minutes on weekday mornings, you can use the following automation: + +```yaml +automation: +- id: update_morning_commute_sensor + alias: "Commute - Update morning commute sensor" + initial_state: 'on' + trigger: + - platform: time_pattern + minutes: '/2' + condition: + - condition: time + after: '08:00:00' + before: '11:00:00' + - condition: time + weekday: + - mon + - tue + - wed + - thu + - fri + action: + - service: homeassistant.update_entity + entity_id: sensor.morning_commute +``` diff --git a/source/images/supported_brands/HERE_logo.svg b/source/images/supported_brands/HERE_logo.svg new file mode 100644 index 00000000000..3604dac7874 --- /dev/null +++ b/source/images/supported_brands/HERE_logo.svg @@ -0,0 +1,14 @@ + + + + + From 0e10540dadcab881696aab4e02e50646bf5c6aad Mon Sep 17 00:00:00 2001 From: Gil Peeters Date: Thu, 26 Sep 2019 04:31:38 +1000 Subject: [PATCH 29/76] Added 'availability_template' to Template Sensor platform (#10308) * Added 'availability_template' to Template Sensor platform * Fixed Syntax and default * Removed optional parameter from example config * Apply suggestions from code review Co-Authored-By: Franck Nijhof * Added accidentally removed attribute_template doco * Add missing default: * The Bain of editing in GitHub! Aaargh!! --- source/_components/template.markdown | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/source/_components/template.markdown b/source/_components/template.markdown index 159972592b7..ebda7f158cf 100644 --- a/source/_components/template.markdown +++ b/source/_components/template.markdown @@ -18,6 +18,7 @@ The `template` platform supports sensors which get their values from other entit The configuration of Template Sensors depends on what you want them to be. Adding the following to your `configuration.yaml` file will create two sensors, one for the current sun angle and one for the time of the next sunrise: {% raw %} + ```yaml # Example configuration.yaml entry sensor: @@ -31,6 +32,7 @@ sensor: sunrise: value_template: "{{ state_attr('sun.sun', 'next_rising') }}" ``` + {% endraw %} {% configuration %} @@ -76,7 +78,12 @@ sensor: "attribute: template": description: The attribute and corresponding template. required: true - type: template + type: template + availability_template: + description: Defines a template to get the `available` state of the component. If the template returns `true`, the device is `available`. If the template returns any other value, the device will be `unavailable`. If `availability_template` is not configured, the component will always be `available`. + required: false + type: template + default: true device_class: description: Sets the class of the device, changing the device state and icon that is displayed on the UI (see below). It does not set the `unit_of_measurement`. required: false @@ -105,6 +112,7 @@ In this section, you find some real-life examples of how to use this sensor. This example shows the sun angle in the frontend. {% raw %} + ```yaml sensor: - platform: template @@ -114,6 +122,7 @@ sensor: unit_of_measurement: 'Β°' value_template: "{{ '%+.1f'|format(state_attr('sun.sun', 'elevation')) }}" ``` + {% endraw %} ### Renaming Sensor Output @@ -122,6 +131,7 @@ If you don't like the wording of a sensor output, then the Template Sensor can h a simple example: {% raw %} + ```yaml sensor: - platform: template @@ -135,6 +145,7 @@ sensor: down {% endif %} ``` + {% endraw %} ### Multiline Example With an `if` Test @@ -142,6 +153,7 @@ sensor: This example shows a multiple line template with an `if` test. It looks at a sensing switch and shows `on`/`off` in the frontend. {% raw %} + ```yaml sensor: - platform: template @@ -159,6 +171,7 @@ sensor: failed {% endif %} ``` + {% endraw %} ### Change The Unit of Measurement @@ -166,6 +179,7 @@ sensor: With a Template Sensor, it's easy to convert given values into others if the unit of measurement doesn't fit your needs. {% raw %} + ```yaml sensor: - platform: template @@ -180,6 +194,7 @@ sensor: unit_of_measurement: 'kB/s' value_template: "{{ states('sensor.transmission_up_speed')|float * 1024 }}" ``` + {% endraw %} ### Change The Icon @@ -187,6 +202,7 @@ sensor: This example shows how to change the icon based on the day/night cycle. {% raw %} + ```yaml sensor: - platform: template @@ -206,6 +222,7 @@ sensor: mdi:weather-night {% endif %} ``` + {% endraw %} ### Change The Entity Picture @@ -213,6 +230,7 @@ sensor: This example shows how to change the entity picture based on the day/night cycle. {% raw %} + ```yaml sensor: - platform: template @@ -232,6 +250,7 @@ sensor: /local/nighttime.png {% endif %} ``` + {% endraw %} ### Change the Friendly Name Used in the Frontend @@ -239,6 +258,7 @@ sensor: This example shows how to change the `friendly_name` based on a state. {% raw %} + ```yaml sensor: - platform: template @@ -253,6 +273,7 @@ sensor: value_template: "{{ states('sensor.power_consumption') }}" unit_of_measurement: 'kW' ``` + {% endraw %} ### Add Custom Attributes @@ -285,6 +306,7 @@ sensor: {{ state_attr('device_tracker.my_device_gps','longitude') }} {% endif %} ``` + {% endraw %} ### Working without entities @@ -294,6 +316,7 @@ The `template` sensors are not limited to use attributes from other entities but This template contains no entities that will trigger an update, so we add an `entity_id:` line with an entity that will force an update - here we're using a [date sensor](/components/sensor.time_date/) to get a daily update: {% raw %} + ```yaml sensor: - platform: template @@ -304,6 +327,7 @@ sensor: friendly_name: 'Not smoking' unit_of_measurement: "Days" ``` + {% endraw %} Useful entities to choose might be `sensor.date` which update once per day or `sensor.time` which updates once per minute. @@ -311,6 +335,7 @@ Useful entities to choose might be `sensor.date` which update once per day or `s An alternative to this is to create an interval-based automation that calls the service `homeassistant.update_entity` for the entities requiring updates. This modified example updates every 5 minutes: {% raw %} + ```yaml sensor: - platform: template @@ -330,4 +355,5 @@ automation: - service: homeassistant.update_entity entity_id: sensor.nonsmoker ``` + {% endraw %} From fbc7dfb14a23477df521c6519e821f9295a553c2 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 25 Sep 2019 20:32:11 +0200 Subject: [PATCH 30/76] Remove deprecated ups integration (ADR-0004) (#10423) --- source/_components/ups.markdown | 59 ------------------ ...onfig-panel-and-state-restoration.markdown | 3 +- .../2017-04-22-ikea-tradfri--spotify.markdown | 3 +- source/_posts/2017-06-17-release-47.markdown | 3 +- source/_posts/2017-07-02-release-48.markdown | 3 +- source/_posts/2017-10-07-release-55.markdown | 3 +- source/_posts/2019-08-28-release-98.markdown | 5 +- source/images/supported_brands/ups.png | Bin 8184 -> 0 bytes 8 files changed, 7 insertions(+), 72 deletions(-) delete mode 100644 source/_components/ups.markdown delete mode 100644 source/images/supported_brands/ups.png diff --git a/source/_components/ups.markdown b/source/_components/ups.markdown deleted file mode 100644 index 9a1c385bcd6..00000000000 --- a/source/_components/ups.markdown +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: UPS Sensor -description: "Instructions on how to set up UPS sensors within Home Assistant." -logo: ups.png -ha_category: - - Postal Service -ha_release: 0.39 -ha_iot_class: Cloud Polling -redirect_from: - - /components/sensor.ups/ ---- - -
- -This integration is deprecated and will be removed in Home Assistant 0.100.0. - -For more information see [Architecture Decision Record: 0004](https://github.com/home-assistant/architecture/blob/master/adr/0004-webscraping.md). - -
- -The `ups` platform allows one to track deliveries by the [UPS](https://www.ups.com/). To use this sensor, you need a [My UPS Account](https://www.ups.com/mychoice). - -## Configuration - -To enable this sensor, add the following lines to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: ups - username: YOUR_USERNAME - password: YOUR_PASSWORD -``` - -Configuration options for the UPS Sensor: - -- **username** (*Required*): The username to access the UPS My Choice service. -- **password** (*Required*): The password for the given username. -- **name** (*Optional*): Name the sensor. -- **scan_inverval** (*Optional*): Minimum time interval between updates. Default is 1 hour. Supported formats: - - `scan_interval: 'HH:MM:SS'` - - `scan_interval: 'HH:MM'` - - Time period dictionary, e.g.: -
scan_interval:
-        # At least one of these must be specified:
-        days: 0
-        hours: 0
-        minutes: 3
-        seconds: 30
-        milliseconds: 0
-    
- -
-The UPS sensor logs into the UPS My Choice website to scrape package data. It does not use an API. Use at your own risk. -
- -
-If the UPS sensor is throwing an error about not being able to login to the UPS My Choice website, it's likely because there is a new UPS Technology Agreement (UTA) preventing the scraper from accessing the package data. Login to UPS My Choice manually and accept the UTA to resolve this. -
diff --git a/source/_posts/2017-02-25-config-panel-and-state-restoration.markdown b/source/_posts/2017-02-25-config-panel-and-state-restoration.markdown index a71496711bd..06a3b70afcd 100644 --- a/source/_posts/2017-02-25-config-panel-and-state-restoration.markdown +++ b/source/_posts/2017-02-25-config-panel-and-state-restoration.markdown @@ -115,7 +115,7 @@ And a final shout out to [Pascal][@pvizeli]. He keeps improving the performance - [Telegram] webhooks ([@scipioni]) - Added [Openhome][openhome] support ([@bazwilliams]) -- [UPS][ups] sensor ([@happyleavesaoc]) +- UPS sensor ([@happyleavesaoc]) - [FEDex][fedex] sensor ([@happyleavesaoc]) - [Gstreamer][gstreamer] media player ([@happyleavesaoc]) - [iTach Remote][itach] Platform ([@alanfischer]) @@ -286,7 +286,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [telegram]: /components/webhooks/ [pushsafer]: /components/notify.pushsafer/ [openhome]: /components/media_player.openhome/ -[ups]: /components/sensor.ups/ [fedex]: /components/sensor.fedex/ [fido]: /components/sensor.fido/ [gstreamer]: /components/media_player.gstreamer/ diff --git a/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown b/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown index d2721040083..55451d8171f 100644 --- a/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown +++ b/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown @@ -138,7 +138,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Replace 'vendor_id' with 'arch' (fixes #7003) ([@fabaff] - [#7023]) - more tests for slugify ([@micw] - [#7027]) - Additional ZWave coverage ([@armills] - [#7024]) ([zwave docs]) -- bump ups version ([@happyleavesaoc] - [#7033]) ([sensor.ups docs]) +- bump ups version ([@happyleavesaoc] - [#7033]) - update usps version ([@happyleavesaoc] - [#7035]) ([sensor.usps docs]) - update fedex ([@happyleavesaoc] - [#7034]) ([sensor.fedex docs]) - Google TTS can't read percent sign (#6971) ([@pezinek] - [#7030]) ([tts.google docs]) @@ -467,7 +467,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.qnap docs]: /components/sensor.qnap/ [sensor.speedtest docs]: /components/sensor.speedtest/ [sensor.systemmonitor docs]: /components/sensor.systemmonitor/ -[sensor.ups docs]: /components/sensor.ups/ [sensor.usps docs]: /components/sensor.usps/ [sensor.vera docs]: /components/sensor.vera/ [sun docs]: /components/sun/ diff --git a/source/_posts/2017-06-17-release-47.markdown b/source/_posts/2017-06-17-release-47.markdown index 88e66b3c131..aa7410a1fe8 100644 --- a/source/_posts/2017-06-17-release-47.markdown +++ b/source/_posts/2017-06-17-release-47.markdown @@ -272,7 +272,7 @@ automation: - Fix EntityComponent handle entities without a name ([@balloob] - [#8065]) - Update pyunifi component to use APIError passed from pyunifi 2.13. Better accommodate login failures with wrapper in pyunifi 2.13. ([@finish06] - [#7899]) ([device_tracker.unifi docs]) - bump usps version ([@happyleavesaoc] - [#8074]) ([sensor.usps docs]) -- bump ups ([@happyleavesaoc] - [#8075]) ([sensor.ups docs]) +- bump ups ([@happyleavesaoc] - [#8075]) [#7152]: https://github.com/home-assistant/home-assistant/pull/7152 [#7318]: https://github.com/home-assistant/home-assistant/pull/7318 @@ -538,7 +538,6 @@ automation: [sensor.snmp docs]: /components/sensor.snmp/ [sensor.statistics docs]: /components/sensor.statistics/ [sensor.template docs]: /components/sensor.template/ -[sensor.ups docs]: /components/sensor.ups/ [sensor.usps docs]: /components/sensor.usps/ [sensor.waqi docs]: /components/sensor.waqi/ [sensor.wunderground docs]: /components/sensor.wunderground/ diff --git a/source/_posts/2017-07-02-release-48.markdown b/source/_posts/2017-07-02-release-48.markdown index ac9cc2897b6..b79e876f515 100644 --- a/source/_posts/2017-07-02-release-48.markdown +++ b/source/_posts/2017-07-02-release-48.markdown @@ -131,7 +131,7 @@ light: - Add initial support for Shiftr.io ([@fabaff] - [#7974]) ([shiftr docs]) (new-platform) - Add option to set language of openweathermap sensor, and handle updating errors ([@azogue] - [#8046]) ([sensor.openweathermap docs]) - Bump pyEmby version to account for API changes ([@mezz64] - [#8070]) ([media_player.emby docs]) -- bump ups ([@happyleavesaoc] - [#8075]) ([sensor.ups docs]) +- bump ups ([@happyleavesaoc] - [#8075]) - bump usps version ([@happyleavesaoc] - [#8074]) ([sensor.usps docs]) - Add to zwave services descriptions ([@andrey-git] - [#8072]) - Fix attribute entity ([@pvizeli] - [#8066]) (breaking change) @@ -496,7 +496,6 @@ light: [sensor.openweathermap docs]: /components/sensor.openweathermap/ [sensor.pi_hole docs]: /components/sensor.pi_hole/ [sensor.upnp docs]: /components/sensor.upnp/ -[sensor.ups docs]: /components/sensor.ups/ [sensor.usps docs]: /components/sensor.usps/ [sensor.verisure docs]: /components/sensor.verisure/ [sensor.wunderground docs]: /components/sensor.wunderground/ diff --git a/source/_posts/2017-10-07-release-55.markdown b/source/_posts/2017-10-07-release-55.markdown index c36885896ab..67ef95a5833 100644 --- a/source/_posts/2017-10-07-release-55.markdown +++ b/source/_posts/2017-10-07-release-55.markdown @@ -105,7 +105,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Upgrade Sphinx to 1.6.4 ([@fabaff] - [#9584]) - Bump pyatv to 0.3.5 ([@postlund] - [#9586]) ([apple_tv docs]) ([media_player.apple_tv docs]) - New Wink services. pair new device, rename, and delete, add new lock key code. Add water heater support ([@w1ll1am23] - [#9303]) ([wink docs]) ([binary_sensor.wink docs]) ([lock.wink docs]) (breaking change) -- Fixes UPS MyChoice exception ([@bachya] - [#9587]) ([sensor.ups docs]) +- Fixes UPS MyChoice exception ([@bachya] - [#9587]) - FedEx: Adds "packages" as a unit ([@bachya] - [#9588]) ([sensor.fedex docs]) - Cleanup entity & remove warning ([@pvizeli] - [#9606]) - Add OwnTracks over HTTP ([@balloob] - [#9582]) ([http docs]) ([device_tracker.owntracks docs]) ([device_tracker.owntracks_http docs]) (new-platform) @@ -369,7 +369,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.systemmonitor docs]: /components/sensor.systemmonitor/ [sensor.thethingsnetwork docs]: /components/sensor.thethingsnetwork/ [sensor.tibber docs]: /components/sensor.tibber/ -[sensor.ups docs]: /components/sensor.ups/ [sensor.usps docs]: /components/sensor.usps/ [sensor.vera docs]: /components/sensor.vera/ [sensor.wunderground docs]: /components/sensor.wunderground/ diff --git a/source/_posts/2019-08-28-release-98.markdown b/source/_posts/2019-08-28-release-98.markdown index fa2c075c2ae..3afa6a8cabd 100644 --- a/source/_posts/2019-08-28-release-98.markdown +++ b/source/_posts/2019-08-28-release-98.markdown @@ -220,7 +220,7 @@ Experiencing issues introduced by this release? Please report them in our [issue Integrations which make use of web scraping and are pending for removal in Home Assistant 0.100.0 [ADR-004](https://github.com/home-assistant/architecture/blob/master/adr/0004-webscraping.md): - **USPS** - ([@frenck] - [#25743]) ([usps docs]) - **SYTADIN** - ([@frenck] - [#25742]) - - **UPS** - ([@frenck] - [#25746]) ([ups docs]) + - **UPS** - ([@frenck] - [#25746]) - **FEDEX** - ([@frenck] - [#25745]) ([fedex docs]) - **SRP Energy** - ([@frenck] - [#25754]) - **Linksys AP** - ([@frenck] - [#25804]) @@ -349,7 +349,7 @@ anymore. - ([@abmantis] - [#25971]) - Manufacturer specific channel for SmartThings. ([@Adminiuga] - [#25739]) ([zha docs]) - Deprecates usps integration (ADR-0004) ([@frenck] - [#25743]) ([usps docs]) (breaking change) - Deprecates sytadin integration (ADR-0004) ([@frenck] - [#25742]) (breaking change) -- Deprecates ups integration (ADR-0004) ([@frenck] - [#25746]) ([ups docs]) (breaking change) +- Deprecates ups integration (ADR-0004) ([@frenck] - [#25746]) (breaking change) - Deprecates fedex integration (ADR-0004) ([@frenck] - [#25745]) ([fedex docs]) (breaking change) - Deprecates srp_energy integration (ADR-0004) ([@frenck] - [#25754]) (breaking change) - Updater component is always available and shows on/off depending on whether an update is available or not ([@Santobert] - [#25418]) ([updater docs]) (breaking change) @@ -877,7 +877,6 @@ anymore. - ([@abmantis] - [#25971]) [unifi docs]: /components/unifi/ [updater docs]: /components/updater/ [upnp docs]: /components/upnp/ -[ups docs]: /components/ups/ [usps docs]: /components/usps/ [vacuum docs]: /components/vacuum/ [velbus docs]: /components/velbus/ diff --git a/source/images/supported_brands/ups.png b/source/images/supported_brands/ups.png deleted file mode 100644 index 83a19d196b06a3806652ff09c7b613fec6e37c16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8184 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 Date: Wed, 25 Sep 2019 13:32:54 -0500 Subject: [PATCH 31/76] Expand entity-filter options (#10349) * Update entity-filter.markdown * filter should be array --- source/_lovelace/entity-filter.markdown | 78 ++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 3 deletions(-) diff --git a/source/_lovelace/entity-filter.markdown b/source/_lovelace/entity-filter.markdown index 869ad2b3135..488c32f59a2 100644 --- a/source/_lovelace/entity-filter.markdown +++ b/source/_lovelace/entity-filter.markdown @@ -20,11 +20,11 @@ type: type: string entities: required: true - description: "List of entities to filter." + description: A list of entity IDs or `entity` objects, see below. type: list state_filter: - required: true - description: List of strings representing states. + required: false + description: List of strings representing states or `filter` objects, see below. type: list card: required: false @@ -38,6 +38,60 @@ show_empty: default: true {% endconfiguration %} +## Options For Entities + +If you define entities as objects instead of strings (by adding `entity:` before entity ID), you can add more customization and configurations: + +{% configuration %} +entity: + required: true + description: Home Assistant entity ID. + type: string +type: + required: false + description: "Sets a custom card type: `custom:my-custom-card`" + type: string +name: + required: false + description: Overwrites friendly name. + type: string +icon: + required: false + description: Overwrites icon or entity picture. + type: string +secondary_info: + required: false + description: "Show additional info. Values: `entity-id`, `last-changed`." + type: string +format: + required: false + description: "How the state should be formatted. Currently only used for timestamp sensors. Valid values are: `relative`, `total`, `date`, `time` and `datetime`." + type: string +state_filter: + required: false + description: List of strings representing states or `filter` objects, see below. + type: list +{% endconfiguration %} + +## Options For state_filter + +If you define state_filter as objects instead of strings (by adding `value:` before your state value), you can add more customization to your filter: + +{% configuration %} +value: + required: true + description: String representing the state. + type: string +operator: + required: false + description: Operator to use in the comparison. + type: string +attribute: + required: false + description: Attribute of the entity to use instead of the state. + type: string +{% endconfiguration %} + ### Examples Show only active switches or lights in the house @@ -67,6 +121,24 @@ card: title: People at home ``` +Specify filter for a single entity + +```yaml +type: entity-filter +state_filter: + - "on" + - operator: ">" + value: 90 +entities: + - sensor.water_leak + - sensor.outside_temp + - entity: sensor.humidity_and_temp + state_filter: + - operator: ">" + value: 50 + attribute: humidity +``` +

Entity filter combined with glance card Entity filter combined with glance card. From 2120fb7fcb087842ddb14586a618798220b16e2f Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 25 Sep 2019 20:49:14 +0200 Subject: [PATCH 32/76] Remove deprecated usps integration (ADR-0004) (#10422) --- source/_components/usps.markdown | 124 ------------------ ...17-01-14-iss-usps-images-packages.markdown | 3 +- .../2017-04-22-ikea-tradfri--spotify.markdown | 3 +- source/_posts/2017-06-04-release-46.markdown | 5 +- source/_posts/2017-06-17-release-47.markdown | 3 +- source/_posts/2017-07-02-release-48.markdown | 3 +- .../_posts/2017-08-26-release-0-52.markdown | 9 +- source/_posts/2017-10-07-release-55.markdown | 7 +- source/_posts/2018-02-26-release-64.markdown | 5 +- source/_posts/2019-08-28-release-98.markdown | 5 +- source/images/supported_brands/usps.png | Bin 2513 -> 0 bytes 11 files changed, 15 insertions(+), 152 deletions(-) delete mode 100644 source/_components/usps.markdown delete mode 100644 source/images/supported_brands/usps.png diff --git a/source/_components/usps.markdown b/source/_components/usps.markdown deleted file mode 100644 index cb23482db1d..00000000000 --- a/source/_components/usps.markdown +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: USPS -description: "Interface USPS mail and package information to Home Assistant." -logo: usps.png -ha_category: - - Postal Service - - Camera - - Sensor -ha_release: 0.52 -ha_iot_class: Cloud Polling -redirect_from: - - /components/camera.usps/ - - /components/sensor.usps/ ---- - -

- - This integration is deprecated and will be removed in Home Assistant 0.100.0. - - For more information see [Architecture Decision Record: 0004](https://github.com/home-assistant/architecture/blob/master/adr/0004-webscraping.md). - -
- -The `usps` platform allows one to track deliveries and inbound mail from the [US Postal Service (USPS)](https://www.usps.com/). -In addition to having a USPS account, you will need to complete the "Opt-In" process for packages by clicking "Get Started Now" on [this page](https://my.usps.com/mobileWeb/pages/intro/start.action). You must also "Opt-In" to [Informed Delivery](https://informeddelivery.usps.com/box/pages/intro/start.action) to see inbound mail. - -There is currently support for the following device types within Home Assistant: - -- [Camera](#camera) -- [Sensor](#sensor) - -## Prerequisites - -This integration requires that a headless-capable web browser is installed on your system - either PhantomJS or Google Chrome. Preferably use Chrome if your operating system supports it, since PhantomJS is deprecated. - -
-If you are using a Raspberry Pi, you must use PhantomJS. -
- -
-Hass.io containers are based on Alpine Linux. PhantomJS is not available for Alpine Linux. Therefore it is currently not possible to use this integration on Hass.io. -
- -### PhantomJS - -Install the latest version of [PhantomJS](http://phantomjs.org/download.html). Ensure the executable is on your `PATH`. `phantomjs --version` should work and report the correct version. This is the default option and requires no further configuration. - -
- Don't use apt-get to install PhantomJS. This version is not compatible. -
- -If you use the PhantomJS option, specify `driver: phantomjs` in your `usps` configuration. - -### Chrome - -Install Chrome 59 or greater (preferably the most recent). Install the latest [Chromedriver](https://sites.google.com/a/chromium.org/chromedriver/downloads). Ensure both executables are on your `PATH`. `google-chrome --version` and `chromedriver --version` should work and report the correct version. - -OS-specific instructions: - -- [Ubuntu 16](https://gist.github.com/ziadoz/3e8ab7e944d02fe872c3454d17af31a5) (Selenium server portion *not* necessary) -- [RHEL/Centos 7](https://stackoverflow.com/a/46686621) - -If you use the Chrome option, specify `driver: chrome` in your `usps` configuration. - -## Configuration - -To enable this component, add the following lines to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -usps: - username: YOUR_USERNAME - password: YOUR_PASSWORD -``` - -You will see two new sensors, one for packages and one for mail and a camera to rotate through images of incoming mail for the current day. - -{% configuration %} -username: - description: The username to access the MyUSPS service. - required: true - type: string -password: - description: The password for the given username. - required: true - type: string -driver: - description: Specify if you're using `phantomjs` or `chrome`. - required: false - type: string - default: phantomjs -name: - description: The prefix for sensor names. - required: false - type: string - default: usps -{% endconfiguration %} - -
-The USPS sensor logs into the MyUSPS website to scrape package data. It does not use an API. -
- -## Camera - -The `usps` camera integration allows you to view the mail piece images made available through USPS via the Informed Delivery service. You must "Opt-In" to [Informed Delivery](https://informeddelivery.usps.com/box/pages/intro/start.action) to see mail images. This works in concert with [USPS sensors](#sensor). - -### Configuration - -To customize the interval that mail images are rotated in the mail camera you can edit your `configuration.yaml` file with the following settings: - -```yaml -# Example configuration.yaml entry -camera: - - platform: usps - scan_interval: 5 -``` - -To enable this camera in your installation, set up the USPS integration first. - -## Sensor - -The `usps` sensor integration allows you to view statistics on incoming mail and packages made available through USPS via the Informed Delivery service. You must "Opt-In" to [Informed Delivery](https://informeddelivery.usps.com/box/pages/intro/start.action) to see mail images. This works in concert with [USPS camera](#camera). - -To enable this sensor in your installation, set up the USPS integration first. diff --git a/source/_posts/2017-01-14-iss-usps-images-packages.markdown b/source/_posts/2017-01-14-iss-usps-images-packages.markdown index 7988c5e2e22..23b86366753 100644 --- a/source/_posts/2017-01-14-iss-usps-images-packages.markdown +++ b/source/_posts/2017-01-14-iss-usps-images-packages.markdown @@ -36,7 +36,7 @@ The new [image processing component][image] currently works with [number plates] - Sensor: Support for [HydroQuebec][quebec] ([@titilambert]) - Sensor: Tracking the [ISS][iss] ([@HydrelioxGitHub]) -- Sensor: [USPS][usps] deliveries tracking ([@happyleavesaoc]) +- Sensor: USPS deliveries tracking ([@happyleavesaoc]) - Device tracker: New [ping-based][ping] tracker ([@michaelarnauts]) - TTS: Support for [Pico][pico] ([@doudz]) - Switch: [BeagleBone Black][beaglebone] GPIO are supported now ([@MatoKafkac]) @@ -184,7 +184,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [tik]: /components/light.tikteck/ [trackr]: /components/device_tracker.trackr/ [upc]: /components/device_tracker.upc_connect/ -[usps]: /components/sensor.usps/ [wink-fan]: /components/fan.wink/ [xiaomi]: /components/device_tracker.xiaomi/ [yandex]: /components/tts.yandextts/ diff --git a/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown b/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown index 55451d8171f..587bde9f422 100644 --- a/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown +++ b/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown @@ -139,7 +139,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - more tests for slugify ([@micw] - [#7027]) - Additional ZWave coverage ([@armills] - [#7024]) ([zwave docs]) - bump ups version ([@happyleavesaoc] - [#7033]) -- update usps version ([@happyleavesaoc] - [#7035]) ([sensor.usps docs]) +- update usps version ([@happyleavesaoc] - [#7035]) - update fedex ([@happyleavesaoc] - [#7034]) ([sensor.fedex docs]) - Google TTS can't read percent sign (#6971) ([@pezinek] - [#7030]) ([tts.google docs]) - Feature/min max improvements ([@micw] - [#6786]) (breaking change) @@ -467,7 +467,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.qnap docs]: /components/sensor.qnap/ [sensor.speedtest docs]: /components/sensor.speedtest/ [sensor.systemmonitor docs]: /components/sensor.systemmonitor/ -[sensor.usps docs]: /components/sensor.usps/ [sensor.vera docs]: /components/sensor.vera/ [sun docs]: /components/sun/ [switch.tplink docs]: /components/switch.tplink/ diff --git a/source/_posts/2017-06-04-release-46.markdown b/source/_posts/2017-06-04-release-46.markdown index 6574aaef863..3cd25bdc957 100644 --- a/source/_posts/2017-06-04-release-46.markdown +++ b/source/_posts/2017-06-04-release-46.markdown @@ -32,7 +32,7 @@ It's time for 0.46! This release does not have too many new integrations, instea ## Breaking changes -- The USPS sensor entity names have changed as there are now two. One for packages and one for mail. Config will now also use `scan_interval` instead of `update_interval` ([@happyleavesaoc] - [#7655]) ([sensor.usps docs]) (breaking change) +- The USPS sensor entity names have changed as there are now two. One for packages and one for mail. Config will now also use `scan_interval` instead of `update_interval` ([@happyleavesaoc] - [#7655]) (breaking change) - Automation state trigger: From/to checks will now ignore state changes that are just attribute changess ([@amelchio] - [#7651]) ([automation.state docs]) (breaking change) - Redesign monitored variables for hp_ilo sensor. `monitored_variables` is now a list of `name` and `sensor_type` values ([@Juggels] - [#7534]) ([sensor.hp_ilo docs]) (breaking change) @@ -65,7 +65,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Added support to Amcrest camera to feed using RTSP via ffmpeg ([@tchellomello] - [#7646]) ([camera.amcrest docs]) ([sensor.amcrest docs]) - bump fedex version ([@happyleavesaoc] - [#7653]) ([sensor.fedex docs]) - bump ups version ([@happyleavesaoc] - [#7654]) -- update usps ([@happyleavesaoc] - [#7655]) ([sensor.usps docs]) (breaking change) +- update usps ([@happyleavesaoc] - [#7655]) (breaking change) - Final tweaks for Zwave panel ([@turbokongen] - [#7652]) ([zwave docs]) - Add network_key as a config option ([@robbiet480] - [#7637]) ([zwave docs]) - Bugfix #7586 ([@turbokongen] - [#7661]) ([lock.zwave docs]) @@ -368,7 +368,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.snmp docs]: /components/sensor.snmp/ [sensor.synologydsm docs]: /components/sensor.synologydsm/ [sensor.time_date docs]: /components/sensor.time_date/ -[sensor.usps docs]: /components/sensor.usps/ [switch.broadlink docs]: /components/switch.broadlink/ [switch.rachio docs]: /components/switch.rachio/ [switch.rflink docs]: /components/switch.rflink/ diff --git a/source/_posts/2017-06-17-release-47.markdown b/source/_posts/2017-06-17-release-47.markdown index aa7410a1fe8..84843659407 100644 --- a/source/_posts/2017-06-17-release-47.markdown +++ b/source/_posts/2017-06-17-release-47.markdown @@ -271,7 +271,7 @@ automation: - Added 'all_plants' group and support for plant groups state. ([@aronsky] - [#8063]) ([group docs]) ([plant docs]) - Fix EntityComponent handle entities without a name ([@balloob] - [#8065]) - Update pyunifi component to use APIError passed from pyunifi 2.13. Better accommodate login failures with wrapper in pyunifi 2.13. ([@finish06] - [#7899]) ([device_tracker.unifi docs]) -- bump usps version ([@happyleavesaoc] - [#8074]) ([sensor.usps docs]) +- bump usps version ([@happyleavesaoc] - [#8074]) - bump ups ([@happyleavesaoc] - [#8075]) [#7152]: https://github.com/home-assistant/home-assistant/pull/7152 @@ -538,7 +538,6 @@ automation: [sensor.snmp docs]: /components/sensor.snmp/ [sensor.statistics docs]: /components/sensor.statistics/ [sensor.template docs]: /components/sensor.template/ -[sensor.usps docs]: /components/sensor.usps/ [sensor.waqi docs]: /components/sensor.waqi/ [sensor.wunderground docs]: /components/sensor.wunderground/ [sensor.yweather docs]: /components/sensor.yweather/ diff --git a/source/_posts/2017-07-02-release-48.markdown b/source/_posts/2017-07-02-release-48.markdown index b79e876f515..b15cc502dac 100644 --- a/source/_posts/2017-07-02-release-48.markdown +++ b/source/_posts/2017-07-02-release-48.markdown @@ -132,7 +132,7 @@ light: - Add option to set language of openweathermap sensor, and handle updating errors ([@azogue] - [#8046]) ([sensor.openweathermap docs]) - Bump pyEmby version to account for API changes ([@mezz64] - [#8070]) ([media_player.emby docs]) - bump ups ([@happyleavesaoc] - [#8075]) -- bump usps version ([@happyleavesaoc] - [#8074]) ([sensor.usps docs]) +- bump usps version ([@happyleavesaoc] - [#8074]) - Add to zwave services descriptions ([@andrey-git] - [#8072]) - Fix attribute entity ([@pvizeli] - [#8066]) (breaking change) - Added 'all_plants' group and support for plant groups state. ([@aronsky] - [#8063]) ([group docs]) ([plant docs]) @@ -496,7 +496,6 @@ light: [sensor.openweathermap docs]: /components/sensor.openweathermap/ [sensor.pi_hole docs]: /components/sensor.pi_hole/ [sensor.upnp docs]: /components/sensor.upnp/ -[sensor.usps docs]: /components/sensor.usps/ [sensor.verisure docs]: /components/sensor.verisure/ [sensor.wunderground docs]: /components/sensor.wunderground/ [shiftr docs]: /components/shiftr/ diff --git a/source/_posts/2017-08-26-release-0-52.markdown b/source/_posts/2017-08-26-release-0-52.markdown index a6eb571d0cd..36c6465b736 100644 --- a/source/_posts/2017-08-26-release-0-52.markdown +++ b/source/_posts/2017-08-26-release-0-52.markdown @@ -40,7 +40,7 @@ script: !include scripts.yaml - Add version sensor ([@fabaff] - [#8912]) ([sensor.version docs]) (new-platform) - Nello.io lock support ([@pschmitt] - [#8957]) ([lock.nello docs]) (new-platform) - Add HipChat notify service. ([@BioSehnsucht] - [#8918]) ([notify.hipchat docs]) (new-platform) -- Refactor USPS into component with Sensors+Camera ([@mezz64] - [#8679]) ([usps docs]) ([camera.usps docs]) ([sensor.usps docs]) (breaking change) (new-platform) +- Refactor USPS into component with Sensors+Camera ([@mezz64] - [#8679]) (breaking change) (new-platform) - Adds London_air component ([@robmarkcole] - [#9020]) ([sensor.london_air docs]) (new-platform) - Add Abode home security component ([@arsaboo] - [#9030]) ([abode docs]) ([alarm_control_panel.abode docs]) ([binary_sensor.abode docs]) (new-platform) - Add support for Prowl notifications. ([@mbrrg] - [#9028]) ([notify.prowl docs]) (new-platform) @@ -80,7 +80,7 @@ Experiencing issues introduced by this release? Please report them in our [issue retain: true ``` -- Refactor USPS into component with Sensors+Camera ([@mezz64] - [#8679]) ([usps docs]) ([camera.usps docs]) ([sensor.usps docs]) (breaking change) (new-platform) +- Refactor USPS into component with Sensors+Camera ([@mezz64] - [#8679]) (breaking change) (new-platform) ```yaml usps: @@ -123,7 +123,7 @@ usps: - Update ffmpeg to 1.7 to fix severals problems ([@pvizeli] - [#9029]) - Add state_with_unit property to state objects in templates ([@balloob] - [#9014]) - Fix Geizhals index issue when not 4 prices available ([@celeroll] - [#9035]) ([sensor.geizhals docs]) -- Refactor USPS into component with Sensors+Camera ([@mezz64] - [#8679]) ([usps docs]) ([camera.usps docs]) ([sensor.usps docs]) (breaking change) (new-platform) +- Refactor USPS into component with Sensors+Camera ([@mezz64] - [#8679]) (breaking change) (new-platform) - Set password after connecting. Fixes #8983 ([@StevenLooman] - [#9039]) ([media_player.mpd docs]) - Update iOS sensor (battery icon fix and format updates) ([@schmittx] - [#9032]) - Adds London_air component ([@robmarkcole] - [#9020]) ([sensor.london_air docs]) (new-platform) @@ -310,7 +310,6 @@ usps: [binary_sensor.abode docs]: /components/binary_sensor.abode/ [binary_sensor.mysensors docs]: /components/binary_sensor.mysensors/ [binary_sensor.workday docs]: /components/binary_sensor.workday/ -[camera.usps docs]: /components/camera.usps/ [climate.mysensors docs]: /components/climate.mysensors/ [config docs]: /components/config/ [configurator docs]: /components/configurator/ @@ -368,7 +367,6 @@ usps: [sensor.snmp docs]: /components/sensor.snmp/ [sensor.swiss_public_transport docs]: /components/sensor.swiss_public_transport/ [sensor.uk_transport docs]: /components/sensor.uk_transport/ -[sensor.usps docs]: /components/sensor.usps/ [sensor.version docs]: /components/sensor.version/ [sensor.worldtidesinfo docs]: /components/sensor.worldtidesinfo/ [switch.mqtt docs]: /components/switch.mqtt/ @@ -376,7 +374,6 @@ usps: [switch.pilight docs]: /components/switch.pilight/ [switch.rainmachine docs]: /components/switch.rainmachine/ [switch.xiaomi docs]: /components/switch.xiaomi_aqara/ -[usps docs]: /components/usps/ [weather.buienradar docs]: /components/weather.buienradar/ [xiaomi docs]: /components/xiaomi/ [forum]: https://community.home-assistant.io/ diff --git a/source/_posts/2017-10-07-release-55.markdown b/source/_posts/2017-10-07-release-55.markdown index 67ef95a5833..f3e5e41a38f 100644 --- a/source/_posts/2017-10-07-release-55.markdown +++ b/source/_posts/2017-10-07-release-55.markdown @@ -75,7 +75,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - flux led lib 0.20 ([@danielhiversen] - [#9533]) ([light.flux_led docs]) - Update AbodePy to 0.11.8 ([@MisterWil] - [#9537]) ([abode docs]) - Bump python_openzwave to 0.4.0.35 ([@arsaboo] - [#9542]) ([zwave docs]) -- update usps ([@happyleavesaoc] - [#9540]) ([usps docs]) ([camera.usps docs]) ([sensor.usps docs]) +- update usps ([@happyleavesaoc] - [#9540]) - Bugfix Homematic hub object ([@pvizeli] - [#9544]) ([homematic docs]) - Fix a bunch of typos ([@mika] - [#9545]) - Catch no longer existing process in systemmonitor ([@Tommatheussen] - [#9535]) ([sensor.systemmonitor docs]) @@ -83,7 +83,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add history_graph component ([@andrey-git] - [#9472]) (breaking change) - GeoRSS sensor ([@exxamalte] - [#9331]) ([sensor.geo_rss_events docs]) (new-platform) - Fixed bug with all switch devices being excluded ([@MisterWil] - [#9555]) ([switch.abode docs]) -- fix usps? ([@happyleavesaoc] - [#9557]) ([usps docs]) ([sensor.usps docs]) +- fix usps? ([@happyleavesaoc] - [#9557]) - Added support for ARM_NIGHT for manual_mqtt alarm ([@snjoetw] - [#9358]) ([alarm_control_panel.manual_mqtt docs]) - Various AirVisual bugfixes ([@bachya] - [#9554]) ([sensor.airvisual docs]) - Updated Arlo cameras with new attributes ([@bachya] - [#9565]) ([arlo docs]) ([camera.arlo docs]) @@ -314,7 +314,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [binary_sensor.wink docs]: /components/binary_sensor.wink/ [camera.arlo docs]: /components/camera.arlo/ [camera.synology docs]: /components/camera.synology/ -[camera.usps docs]: /components/camera.usps/ [climate.ecobee docs]: /components/climate.ecobee/ [climate.mqtt docs]: /components/climate.mqtt/ [cover.mqtt docs]: /components/cover.mqtt/ @@ -369,7 +368,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.systemmonitor docs]: /components/sensor.systemmonitor/ [sensor.thethingsnetwork docs]: /components/sensor.thethingsnetwork/ [sensor.tibber docs]: /components/sensor.tibber/ -[sensor.usps docs]: /components/sensor.usps/ [sensor.vera docs]: /components/sensor.vera/ [sensor.wunderground docs]: /components/sensor.wunderground/ [splunk docs]: /components/splunk/ @@ -380,7 +378,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [thethingsnetwork docs]: /components/thethingsnetwork/ [tradfri docs]: /components/tradfri/ [upnp docs]: /components/upnp/ -[usps docs]: /components/usps/ [vacuum.xiaomi docs]: /components/vacuum.xiaomi_miio/ [wink docs]: /components/wink/ [zwave docs]: /components/zwave/ diff --git a/source/_posts/2018-02-26-release-64.markdown b/source/_posts/2018-02-26-release-64.markdown index 6460dba5321..f9e9080d68f 100644 --- a/source/_posts/2018-02-26-release-64.markdown +++ b/source/_posts/2018-02-26-release-64.markdown @@ -128,7 +128,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Updated AirVisual unique IDs to play better with the entity registry. If AirVisual had been configured previously, new entries will be placed into the entity registry, causing there to be two of each sensor type defined. To address, simply alter the `entity_registry.yaml` as desired. ([@bachya] - [#12319]) ([sensor.airvisual docs]) (breaking change) - Custom component devs only: voluptuous now requires default values for config keys to be valid values. ([@balloob] - [#12463]) (breaking change) - Fixes `usps` platform. Dependency `myusps` now leverages Selenium webdriver to overcome login issues. This is a breaking change since the user must now have additional dependencies installed - either `google-chrome` and `chromedriver`, or `phantomjs`. There is a new config option `driver` that allows the user to specify their preference, though `phantomjs` is the default. Doc PR forthcoming that will outline choices and make suggestions based on user's OS. - ([@happyleavesaoc] - [#12465]) ([usps docs]) (breaking change) + ([@happyleavesaoc] - [#12465]) (breaking change) - LimitlessLED has been converted to assumed state. Will no longer turn the lights off when restarting Home Assistant. Will no longer revert changes made by other controllers. ([@amelchio] - [#12475]) ([light.limitlessled docs]) (breaking change) ## All changes @@ -209,7 +209,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Added doorbird_last_motion to DoorBird camera platform ([@sjvc] - [#12457]) ([camera.doorbird docs]) - Fail gracefully with unreachable LaMetric ([@PhilRW] - [#12451]) ([notify.lametric docs]) - Enable compression when sending json to client ([@elupus] - [#11165]) ([http docs]) -- bump usps version ([@happyleavesaoc] - [#12465]) ([usps docs]) (breaking change) +- bump usps version ([@happyleavesaoc] - [#12465]) (breaking change) - Try deflaking recorder tests ([@balloob] - [#12492]) - Support for August doorbell ([@snjoetw] - [#11124]) ([august docs]) ([binary_sensor.august docs]) ([camera.august docs]) ([lock.august docs]) (new-platform) - Avoid warnings when purging an empty database ([@amelchio] - [#12494]) @@ -578,7 +578,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [switch.xiaomi_miio docs]: /components/switch.xiaomi_miio/ [tahoma docs]: /components/tahoma/ [telegram_bot docs]: /components/telegram_bot/ -[usps docs]: /components/usps/ [vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ [vera docs]: /components/vera/ [weather.buienradar docs]: /components/weather.buienradar/ diff --git a/source/_posts/2019-08-28-release-98.markdown b/source/_posts/2019-08-28-release-98.markdown index 3afa6a8cabd..d44b22566db 100644 --- a/source/_posts/2019-08-28-release-98.markdown +++ b/source/_posts/2019-08-28-release-98.markdown @@ -218,7 +218,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - **Deprecated** Integrations which make use of web scraping and are pending for removal in Home Assistant 0.100.0 [ADR-004](https://github.com/home-assistant/architecture/blob/master/adr/0004-webscraping.md): - - **USPS** - ([@frenck] - [#25743]) ([usps docs]) + - **USPS** - ([@frenck] - [#25743]) - **SYTADIN** - ([@frenck] - [#25742]) - **UPS** - ([@frenck] - [#25746]) - **FEDEX** - ([@frenck] - [#25745]) ([fedex docs]) @@ -347,7 +347,7 @@ anymore. - ([@abmantis] - [#25971]) - Implement "Aux Heat" support for Zwave Climate ([@eyager1] - [#25694]) ([zwave docs]) - Add test case to identify missing MQTT configuration abbreviations ([@emontnemery] - [#25616]) ([mqtt docs]) - Manufacturer specific channel for SmartThings. ([@Adminiuga] - [#25739]) ([zha docs]) -- Deprecates usps integration (ADR-0004) ([@frenck] - [#25743]) ([usps docs]) (breaking change) +- Deprecates usps integration (ADR-0004) ([@frenck] - [#25743]) (breaking change) - Deprecates sytadin integration (ADR-0004) ([@frenck] - [#25742]) (breaking change) - Deprecates ups integration (ADR-0004) ([@frenck] - [#25746]) (breaking change) - Deprecates fedex integration (ADR-0004) ([@frenck] - [#25745]) ([fedex docs]) (breaking change) @@ -877,7 +877,6 @@ anymore. - ([@abmantis] - [#25971]) [unifi docs]: /components/unifi/ [updater docs]: /components/updater/ [upnp docs]: /components/upnp/ -[usps docs]: /components/usps/ [vacuum docs]: /components/vacuum/ [velbus docs]: /components/velbus/ [vera docs]: /components/vera/ diff --git a/source/images/supported_brands/usps.png b/source/images/supported_brands/usps.png deleted file mode 100644 index 1399b643ed1a3f25ba2b8bc7b1408abc4594d346..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2513 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 Date: Wed, 25 Sep 2019 20:57:21 +0200 Subject: [PATCH 33/76] Remove deprecated fedex integration (ADR-0004) (#10420) --- source/_components/fedex.markdown | 55 ------------------ ...onfig-panel-and-state-restoration.markdown | 3 +- .../2017-04-22-ikea-tradfri--spotify.markdown | 3 +- source/_posts/2017-06-04-release-46.markdown | 3 +- .../_posts/2017-08-26-release-0-52.markdown | 3 +- source/_posts/2017-10-07-release-55.markdown | 3 +- source/_posts/2018-02-26-release-64.markdown | 6 +- source/_posts/2019-08-28-release-98.markdown | 5 +- source/images/supported_brands/fedex.png | Bin 1548 -> 0 bytes 9 files changed, 9 insertions(+), 72 deletions(-) delete mode 100644 source/_components/fedex.markdown delete mode 100644 source/images/supported_brands/fedex.png diff --git a/source/_components/fedex.markdown b/source/_components/fedex.markdown deleted file mode 100644 index 384656d9c82..00000000000 --- a/source/_components/fedex.markdown +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Fedex Sensor -description: "Instructions on how to set up FedEx sensors within Home Assistant." -logo: fedex.png -ha_category: - - Postal Service -ha_release: 0.39 -ha_iot_class: Cloud Polling -redirect_from: - - /components/sensor.fedex/ ---- - -
- -This integration is deprecated and will be removed in Home Assistant 0.100.0. - -For more information see [Architecture Decision Record: 0004](https://github.com/home-assistant/architecture/blob/master/adr/0004-webscraping.md). - -
- -The `fedex` platform allows one to track deliveries by [FedEx](http://www.fedex.com/). To use this sensor, you need a [FedEx Delivery Manager](https://www.fedex.com/us/delivery/) account. - -## Configuration - -To enable this sensor, add the following lines to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: fedex - username: YOUR_USERNAME - password: YOUR_PASSWORD -``` - -Configuration options for the FedEx Sensor: - -- **username** (*Required*): The username to access the FedEx Delivery Manager service. -- **password** (*Required*): The password for the given username. -- **name** (*Optional*): Name the sensor. -- **scan_inverval** (*Optional*): Minimum time interval between updates. Default is 1 hour. Supported formats: - - `scan_interval: 'HH:MM:SS'` - - `scan_interval: 'HH:MM'` - - Time period dictionary, e.g.: -
scan_interval:
-        # At least one of these must be specified:
-        days: 0
-        hours: 0
-        minutes: 3
-        seconds: 30
-        milliseconds: 0
-    
- -
-The FedEx sensor logs into the FedEx Delivery Manager website to scrape package data. It does not use an API. Use at your own risk. -
diff --git a/source/_posts/2017-02-25-config-panel-and-state-restoration.markdown b/source/_posts/2017-02-25-config-panel-and-state-restoration.markdown index 06a3b70afcd..871c6e17bb3 100644 --- a/source/_posts/2017-02-25-config-panel-and-state-restoration.markdown +++ b/source/_posts/2017-02-25-config-panel-and-state-restoration.markdown @@ -116,7 +116,7 @@ And a final shout out to [Pascal][@pvizeli]. He keeps improving the performance - [Telegram] webhooks ([@scipioni]) - Added [Openhome][openhome] support ([@bazwilliams]) - UPS sensor ([@happyleavesaoc]) -- [FEDex][fedex] sensor ([@happyleavesaoc]) +- FEDex sensor ([@happyleavesaoc]) - [Gstreamer][gstreamer] media player ([@happyleavesaoc]) - [iTach Remote][itach] Platform ([@alanfischer]) - [myq] cover component ([@arraylabs]) @@ -286,7 +286,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [telegram]: /components/webhooks/ [pushsafer]: /components/notify.pushsafer/ [openhome]: /components/media_player.openhome/ -[fedex]: /components/sensor.fedex/ [fido]: /components/sensor.fido/ [gstreamer]: /components/media_player.gstreamer/ [clementine]: /components/media_player.clementine/ diff --git a/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown b/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown index 587bde9f422..d3f3defdcc2 100644 --- a/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown +++ b/source/_posts/2017-04-22-ikea-tradfri--spotify.markdown @@ -140,7 +140,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Additional ZWave coverage ([@armills] - [#7024]) ([zwave docs]) - bump ups version ([@happyleavesaoc] - [#7033]) - update usps version ([@happyleavesaoc] - [#7035]) -- update fedex ([@happyleavesaoc] - [#7034]) ([sensor.fedex docs]) +- update fedex ([@happyleavesaoc] - [#7034]) - Google TTS can't read percent sign (#6971) ([@pezinek] - [#7030]) ([tts.google docs]) - Feature/min max improvements ([@micw] - [#6786]) (breaking change) - Upgrade psutil to 5.2.2 ([@fabaff] - [#7037]) ([sensor.systemmonitor docs]) @@ -458,7 +458,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [scene.lifx_cloud docs]: /components/scene.lifx_cloud/ [sensor.cpuspeed docs]: /components/sensor.cpuspeed/ [sensor.crimereports docs]: /components/sensor.crimereports/ -[sensor.fedex docs]: /components/sensor.fedex/ [sensor.fido docs]: /components/sensor.fido/ [sensor.modbus docs]: /components/sensor.modbus/ [sensor.mvglive docs]: /components/sensor.mvglive/ diff --git a/source/_posts/2017-06-04-release-46.markdown b/source/_posts/2017-06-04-release-46.markdown index 3cd25bdc957..8acd22372c4 100644 --- a/source/_posts/2017-06-04-release-46.markdown +++ b/source/_posts/2017-06-04-release-46.markdown @@ -63,7 +63,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Align with OpenALPR platform for naming conf variables ([@fabaff] - [#7650]) ([image_processing.seven_segments docs]) - Added support to Amcrest camera to feed using RTSP via ffmpeg ([@tchellomello] - [#7646]) ([camera.amcrest docs]) ([sensor.amcrest docs]) -- bump fedex version ([@happyleavesaoc] - [#7653]) ([sensor.fedex docs]) +- bump fedex version ([@happyleavesaoc] - [#7653]) - bump ups version ([@happyleavesaoc] - [#7654]) - update usps ([@happyleavesaoc] - [#7655]) (breaking change) - Final tweaks for Zwave panel ([@turbokongen] - [#7652]) ([zwave docs]) @@ -360,7 +360,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.amcrest docs]: /components/sensor.amcrest/ [sensor.arlo docs]: /components/sensor.arlo/ [sensor.dsmr docs]: /components/sensor.dsmr/ -[sensor.fedex docs]: /components/sensor.fedex/ [sensor.history_stats docs]: /components/sensor.history_stats/ [sensor.hp_ilo docs]: /components/sensor.hp_ilo/ [sensor.influxdb docs]: /components/sensor.influxdb/ diff --git a/source/_posts/2017-08-26-release-0-52.markdown b/source/_posts/2017-08-26-release-0-52.markdown index 36c6465b736..83016a7350e 100644 --- a/source/_posts/2017-08-26-release-0-52.markdown +++ b/source/_posts/2017-08-26-release-0-52.markdown @@ -163,7 +163,7 @@ usps: - Add worldtidesinfo sensor component ([@aetolus] - [#8860]) ([sensor.worldtidesinfo docs]) (new-platform) - Support changing the bulb color for tplink smartbulbs, fixes #8766 ([@rytilahti] - [#8780]) ([light.tplink docs]) - bump snapcast version ([@happyleavesaoc] - [#9100]) ([media_player.snapcast docs]) -- bump fedex version ([@happyleavesaoc] - [#9099]) ([sensor.fedex docs]) +- bump fedex version ([@happyleavesaoc] - [#9099]) - Yeelight fix updates on hsv mode ([@rytilahti] - [#9093]) ([light.yeelight docs]) - Catch exceptions ([@fabaff] - [#9085]) ([notify.discord docs]) - Fix issue 8894 with uk_transport component if no next_buses or next_trains ([@robmarkcole] - [#9046]) ([sensor.uk_transport docs]) @@ -355,7 +355,6 @@ usps: [sensor.buienradar docs]: /components/sensor.buienradar/ [sensor.cert_expiry docs]: /components/sensor.cert_expiry/ [sensor.eliqonline docs]: /components/sensor.eliqonline/ -[sensor.fedex docs]: /components/sensor.fedex/ [sensor.fitbit docs]: /components/sensor.fitbit/ [sensor.fritzbox_callmonitor docs]: /components/sensor.fritzbox_callmonitor/ [sensor.geizhals docs]: /components/sensor.geizhals/ diff --git a/source/_posts/2017-10-07-release-55.markdown b/source/_posts/2017-10-07-release-55.markdown index f3e5e41a38f..9fffcee77de 100644 --- a/source/_posts/2017-10-07-release-55.markdown +++ b/source/_posts/2017-10-07-release-55.markdown @@ -106,7 +106,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Bump pyatv to 0.3.5 ([@postlund] - [#9586]) ([apple_tv docs]) ([media_player.apple_tv docs]) - New Wink services. pair new device, rename, and delete, add new lock key code. Add water heater support ([@w1ll1am23] - [#9303]) ([wink docs]) ([binary_sensor.wink docs]) ([lock.wink docs]) (breaking change) - Fixes UPS MyChoice exception ([@bachya] - [#9587]) -- FedEx: Adds "packages" as a unit ([@bachya] - [#9588]) ([sensor.fedex docs]) +- FedEx: Adds "packages" as a unit ([@bachya] - [#9588]) - Cleanup entity & remove warning ([@pvizeli] - [#9606]) - Add OwnTracks over HTTP ([@balloob] - [#9582]) ([http docs]) ([device_tracker.owntracks docs]) ([device_tracker.owntracks_http docs]) (new-platform) - upgrade python-ecobee-api ([@nkgilley] - [#9612]) ([ecobee docs]) @@ -357,7 +357,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.arlo docs]: /components/sensor.arlo/ [sensor.comed_hourly_pricing docs]: /components/sensor.comed_hourly_pricing/ [sensor.dsmr docs]: /components/sensor.dsmr/ -[sensor.fedex docs]: /components/sensor.fedex/ [sensor.geo_rss_events docs]: /components/sensor.geo_rss_events/ [sensor.google_travel_time docs]: /components/sensor.google_travel_time/ [sensor.imap docs]: /components/sensor.imap/ diff --git a/source/_posts/2018-02-26-release-64.markdown b/source/_posts/2018-02-26-release-64.markdown index f9e9080d68f..de77a2c006a 100644 --- a/source/_posts/2018-02-26-release-64.markdown +++ b/source/_posts/2018-02-26-release-64.markdown @@ -84,7 +84,7 @@ Major new integration by [@snjoetw]: August locks and door bells! Lock and unloc - updated to bimmer_connected 0.4.1 ([@ChristianKuehnel] - [#12759]) ([bmw_connected_drive docs]) - Revert optimized logbook SQL ([@amelchio] - [#12762]) ([logbook docs]) -- bump fedex version ([@happyleavesaoc] - [#12764]) ([sensor.fedex docs]) +- bump fedex version ([@happyleavesaoc] - [#12764]) - Silence harmless sonos data structure warnings ([@amelchio] - [#12767]) ([media_player.sonos docs]) - Update samsungctl library to latest version ([@uchagani] - [#12769]) ([media_player.samsungtv docs]) - Fixed missing optional keyerror data_bits ([@basschipper] - [#12789]) ([binary_sensor.rfxtrx docs]) @@ -164,7 +164,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Use the speedometer icon in the fastdotcom sensor ([@d0ugal] - [#12348]) ([sensor.fastdotcom docs]) - Communication reduced. Setting brightness and/or color temperature will turn on the device. ([@syssi] - [#12343]) ([light.xiaomi_miio docs]) - Add New Sensor for ISP Start.ca ([@mikeodr] - [#12356]) ([sensor.startca docs]) (new-platform) -- bump fedex version ([@happyleavesaoc] - [#12362]) ([sensor.fedex docs]) +- bump fedex version ([@happyleavesaoc] - [#12362]) - Upgrade alpha_vantage to 1.9.0 ([@fabaff] - [#12352]) ([sensor.alpha_vantage docs]) - Eq3btsmart more reliable ([@karlkar] - [#11555]) ([climate.eq3btsmart docs]) - Allow disabling entities in the registry ([@balloob] - [#12360]) @@ -554,7 +554,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [sensor.buienradar docs]: /components/sensor.buienradar/ [sensor.deconz docs]: /components/sensor.deconz/ [sensor.fastdotcom docs]: /components/sensor.fastdotcom/ -[sensor.fedex docs]: /components/sensor.fedex/ [sensor.filesize docs]: /components/sensor.filesize/ [sensor.folder docs]: /components/sensor.folder/ [sensor.knx docs]: /components/sensor.knx/ @@ -643,7 +642,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [media_player.plex docs]: /components/media_player.plex/ [media_player.samsungtv docs]: /components/media_player.samsungtv/ [media_player.sonos docs]: /components/media_player.sonos/ -[sensor.fedex docs]: /components/sensor.fedex/ [sensor.pollen docs]: /components/sensor.pollen/ [#12810]: https://github.com/home-assistant/home-assistant/pull/12810 [#12837]: https://github.com/home-assistant/home-assistant/pull/12837 diff --git a/source/_posts/2019-08-28-release-98.markdown b/source/_posts/2019-08-28-release-98.markdown index d44b22566db..049f0935021 100644 --- a/source/_posts/2019-08-28-release-98.markdown +++ b/source/_posts/2019-08-28-release-98.markdown @@ -221,7 +221,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - **USPS** - ([@frenck] - [#25743]) - **SYTADIN** - ([@frenck] - [#25742]) - **UPS** - ([@frenck] - [#25746]) - - **FEDEX** - ([@frenck] - [#25745]) ([fedex docs]) + - **FEDEX** - ([@frenck] - [#25745]) - **SRP Energy** - ([@frenck] - [#25754]) - **Linksys AP** - ([@frenck] - [#25804]) @@ -350,7 +350,7 @@ anymore. - ([@abmantis] - [#25971]) - Deprecates usps integration (ADR-0004) ([@frenck] - [#25743]) (breaking change) - Deprecates sytadin integration (ADR-0004) ([@frenck] - [#25742]) (breaking change) - Deprecates ups integration (ADR-0004) ([@frenck] - [#25746]) (breaking change) -- Deprecates fedex integration (ADR-0004) ([@frenck] - [#25745]) ([fedex docs]) (breaking change) +- Deprecates fedex integration (ADR-0004) ([@frenck] - [#25745]) (breaking change) - Deprecates srp_energy integration (ADR-0004) ([@frenck] - [#25754]) (breaking change) - Updater component is always available and shows on/off depending on whether an update is available or not ([@Santobert] - [#25418]) ([updater docs]) (breaking change) - Integration requirement check refactor ([@elupus] - [#25626]) @@ -799,7 +799,6 @@ anymore. - ([@abmantis] - [#25971]) [eq3btsmart docs]: /components/eq3btsmart/ [essent docs]: /components/essent/ [evohome docs]: /components/evohome/ -[fedex docs]: /components/fedex/ [filter docs]: /components/filter/ [fritz docs]: /components/fritz/ [fronius docs]: /components/fronius/ diff --git a/source/images/supported_brands/fedex.png b/source/images/supported_brands/fedex.png deleted file mode 100644 index f428ba39a7a00505d01b45f01a986eb7b6f98f77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1548 zcmV+n2J`ueP)Px#PEbr#MMrQW&lhRj7<}ad@5%4 z#x92d000(rQchCOaI!Q!9RA}DqT7j0M zDh!nhioof!>KWMo|Iw#bAVg5Kc6MjC>FG|3=z0ywy$LOfkA3W8|Bey1W#sgAYj~Oa zhLzXgs2gqcY{nRE<}Y?&e2eoB$V^w9P5<|mwp)7@5VK{k0C70J3&`RPt$|0(;*%?Y z{52l=E+Bf#UIJnR?R!0^Z9ZPEo z_S(H%wbxKMORcfMDdX`pvvZuL%F8`6{*P2P)63Zt7n2LIxrwwP2!=FXtc}M-oeK6F zM^>S)5Lnr#k3~h}N~Sz(EjryUX`J=~8eqIta1mwI^K;txQY=@Z41G8N?>0R2XwTLo z6A(rd2Yq57666bO5)5riloBIxH&=x?hSL?|2!zq(QHz8~vu%4?tK{K`MRLCd!}sC^ zAR9Q0Q8l`PJ_n@e9$%4L9**EZga}$V(?>doxwge4rIH3!lLg`fU-CVLeu5 z5n{N+jUAwFp-&lYOu988iu(Ce3=s-tzt%x-EJBEJ89zL5ICRHwAVN%=p*G=;tIZ86 zd%nd$8zDqPK_<>@K7{e`^|*&|)0f8xF}liZ+*@OCl!WpBoJE>rF%m%%e&gjqLJXcG z92=iK>gg@*A_X0y>hP*2LWs!j{OhAzof zzla!NEnO`tT|I5BJzNGCQ-0E;Urbu z=<~eUIcoKQY?+k}WVo%#u*~;}TUwFyyBt!9)0JCp_~aAm7fZ)nnH3|%I&mn~Ct|3c z1ni$8#4_13Z68rWtg?ZmTBgDmA2hMy9&imn8|I$A!&Iv3~gK9 z0g}ybJPU4;tZ#CxM?xJV1tUyIbGRNsI3ACU21?1Rg7cpDBa$*oh-hgoiqdu6lwd+h zNQh#RxsWM+|I2TLWz{1U5{kI?Z3Fr*3w|H}bS1y%?T_r}#%X$nM$Q0ItvV*S_65XP z^+my}wi?|reFPqHk8;(-Wiq^iK7-t~&qT(TtogFKY>a9?lZ0pz* z(`2_yF%jB3E>lQ`DMp6rPY@%nm4&sI%eH~WwI9HSFGytCz7zxd-P=IAN8-t+n!;1o z>W7g)yD)3*ZH5vR33(MzJ;M<{Z7cX-|Fs1Kb+DjF#2i_99%;vE9psUM31EqBbqs|z z3?UAjVkDbJfK?lI55ESoy+m^@$aZG-o)5)QBTUJuK{URlivH4(u!hnnN^#vzWU@~& yV6AmvZ>yerL>s>$m_-;N?}zcRkA3VPwf_OmoxzrxvCW780000 Date: Wed, 25 Sep 2019 16:42:47 -0400 Subject: [PATCH 34/76] Update ecobee to include config flow instructions (#10428) * Change to Cloud Poll * Update ecobee.markdown Changes required to documentation as a result of addition of config flow to ecobee. * Finish documentation clean up * Update ecobee.markdown * :pencil2: Tweaks * Remove hold_temp instructions hold_temp parameter has been removed from HA. --- source/_components/ecobee.markdown | 71 ++++++++++++++++-------------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/source/_components/ecobee.markdown b/source/_components/ecobee.markdown index 2f02b20e83d..710ba68cd82 100644 --- a/source/_components/ecobee.markdown +++ b/source/_components/ecobee.markdown @@ -10,7 +10,7 @@ ha_category: - Weather featured: true ha_release: 0.9 -ha_iot_class: Cloud Push +ha_iot_class: Cloud Poll redirect_from: - /components/sensor.ecobee/ - /components/binary_sensor.ecobee/ @@ -19,30 +19,43 @@ redirect_from: - /components/weather.ecobee/ --- -The `ecobee` integration lets you control a thermostats and view sensor data from [ecobee](https://ecobee.com) thermostats. +The `ecobee` integration lets you control thermostats and view sensor data from [ecobee](https://ecobee.com) thermostats and remote sensors. -## Configuration +## Preliminary Step -You will need to obtain an API key from ecobee's [developer site](https://www.ecobee.com/developers/) to use this component. To get the key, first you need to register your thermostat which should be done as part of the ecobee installation. Once you have done that perform the following steps. +You will need to obtain an API key from ecobee's [developer site](https://www.ecobee.com/developers/) to use this integration. To get the key, first, you need to register your thermostat which should be done as part of the ecobee installation. Once you have done that, perform the following steps. 1. Click on the **Become a developer** link on the [developer site](https://www.ecobee.com/developers/). -2. Login with your ecobee credentials. +2. Log in with your ecobee credentials. 3. Accept the SDK agreement. 4. Fill in the fields. 5. Click **save**. -Now login to the regular consumer portal, and in the hamburger menu there will be a new option **Developer**. Now we can create the Application to hook up to Home Assistant. +Now login to the regular consumer portal and in the hamburger menu, there will be a new option **Developer**. Now we can create an Application to link to Home Assistant. -1. Select the Developer option. +1. Select the **Developer** option from the hamburger menu. 2. Select **Create New**. -3. Give your app a name (it appears to need to be unique across all users, as I tried 'home-assistant' and it said it was already in use. Try -home-assistant) and a summary (neither of these are important as they are not used anywhere). -4. For Authorization method select **ecobee PIN**. +3. Give your App a name (it must be unique across all ecobee users; try your-name-or-alias-home-assistant) and a summary (which need not be unique). Neither of these are important as they are not used anywhere in Home Assistant. +4. For authorization method select **ecobee PIN**. 5. You don't need an Application Icon or Detailed Description. 6. Click **Create**. -Now under the Name and Summary Section you will have an API key. Copy this key and use it in you configuration section below. Click the **X** to close the Developer section. +Now under the Name and Summary Section, you will have an API key. Copy this key as you will need it in the steps that follow. Click the **X** to close the Developer section. -To add the Ecobee integration to Home Assistant, add the following information to your [`configuration.yaml`](/docs/configuration/) file: +## Configuring the Integration + +To configure the ecobee integration in Home Assistant, you can either use the **Configuration** -> **Integrations** menu, or add an entry to `configuration.yaml`. + +### Setup via the Integrations menu + +1. In the **Configuration** -> **Integrations** menu, click **+** and then select `ecobee` from the pop-up menu. +2. In the pop-up box, enter the API key you obtained from ecobee.com. +3. In the next pop-up box, you will be presented with a unique four-character PIN code which you will need to authorize in the [ecobee consumer portal](https://www.ecobee.com/consumerportal/index.html). You can do this by logging in, selecting **My Apps** from the hamburger menu, clicking **Add Application** on the left, entering the PIN code from Home Assistant, and clicking **Validate** and then **Add Application** in the bottom right. +4. After authorizing the App on ecobee.com, return to Home Assistant and hit **Submit**. If the authorization was successful, a config entry will be created and your thermostats and sensors will be available in Home Assistant. + +### Setup via configuration.yaml + +If you prefer to initially set up this integration in [`configuration.yaml`](/docs/configuration/), you may do so by adding your API key (and optional parameters) as follows (however, you must still complete authorization via the **Integrations** menu): ```yaml # Example configuration.yaml entry @@ -50,26 +63,13 @@ ecobee: api_key: YOUR_API_KEY ``` -[Restart Home Assistant](/docs/configuration/#reloading-changes) for the changes to take effect. - -The first time you (re)run Home Assistant with this integration it will give you a PIN code that you need to authorize in the [ecobee consumer portal](https://www.ecobee.com/consumerportal/index.html). You can do this by clicking **Add Application** in the **My Apps** section in the sidebar. - -The PIN can be found from the Home Assistant portal on the Ecobee card or from the **configurator.ecobee** entity in states in the portal. - -- If you do not have an ecobee card, you may be using groups with `default_view` that don't show the card. To get around this you can temporarily comment out the `default_view` section or add the `configurator.ecobee` integration to your `default_view` and restart Home Assistant. - -Once you enter the PIN on the ecobee site, wait approximately 5 minutes and then click on the **I have authorized the app** link at the bottom of the ecobee pop-up window. If everything worked correctly, you should now be able to restart Home Assistant again to see the full ecobee card with all of the sensors populated or see the list of sensors in the developer tools. Now you can re-enable your `default_view` (if you had to disable it) and add the ecobee sensors to a group and/or view. +[Restart Home Assistant](/docs/configuration/#reloading-changes) for the changes to take effect. In the **Configuration** -> **Integrations** menu, hit **Configure** next to the discovered `ecobee` entry, and continue to authorize the App per the Integration menu instructions above. {% configuration %} api_key: - description: Your ecobee API key. This is only needed for the initial setup of the component. Once registered it can be removed. If you revoke the key in the ecobee portal you will need to update this again and remove the ecobee.conf file in the `.homeassistant` configuration path. - required: true - type: string -hold_temp: - description: Whether or not to hold changes indefinitely (`true`) or until the next scheduled event. + description: Your ecobee API key. This is only needed for the initial setup of the integration. Once registered it can be removed. If you revoke the key in the ecobee portal, you will need to remove the existing `ecobee` configuration in the **Integrations** menu, update this, and then configure the Integration again. required: false - default: false - type: boolean + type: string {% endconfiguration %}

@@ -77,11 +77,9 @@ hold_temp:

-If for whatever reason you delete and re-create your ecobee app at ecobee.com such that your developer API key changes, you will need to delete your `/conf/ecobee.conf file`. You will also need to update the `api_key:` in the `configuration.yaml` or `secrets.yaml` file. - ## Notifications -To get your Ecobee notifications working with Home Assistant, you must first have the main Ecobee integration loaded and running. Once you have that configured, you can setup this integration to send messages to your Ecobee device. +To get your Ecobee notifications working with Home Assistant, you must first have the main Ecobee integration loaded and running. Once you have that configured, you can set up this integration to send messages to your Ecobee device. To use this notification platform in your installation, add the following to your `configuration.yaml` file: @@ -153,9 +151,9 @@ The Ecobee climate entity has some extra attributes to represent the state of th ## Services -Besides the standard services provided by the Home Assistant [Climate](https://www.home-assistant.io/components/climate/) integration, the following extra service is provided by the Ecobee Thermostat: `resume_program`. +Besides the standard services provided by the Home Assistant [Climate](https://www.home-assistant.io/components/climate/) integration, the following extra services are provided by the Ecobee Thermostat: `ecobee.resume_program` and `ecobee.set_fan_min_on_time`. -### Service `resume_program` +### Service `ecobee.resume_program` Resumes the currently active schedule. @@ -163,3 +161,12 @@ Resumes the currently active schedule. | ---------------------- | -------- | ----------- | | `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Else targets all. | `resume_all` | no | true or false + +### Service `ecobee.set_fan_min_on_time` + +Sets the minimum amount of time that the fan will run. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Else targets all. +| `fan_min_on_time` | no | integer (e.g. 5) From 96f6ce0be5812037df14d8e92181f76cb883a162 Mon Sep 17 00:00:00 2001 From: jjlawren Date: Thu, 26 Sep 2019 04:23:02 -0500 Subject: [PATCH 35/76] Describe config options (#10450) --- source/_components/plex.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/plex.markdown b/source/_components/plex.markdown index 4bf24e9b34e..a5da8407f01 100644 --- a/source/_components/plex.markdown +++ b/source/_components/plex.markdown @@ -79,7 +79,7 @@ verify_ssl: default: true type: boolean media_player: - description: Options to customize behavior of `media_player` entities. + description: Options to set the default behavior of `media_player` entities for new Integrations. **NOTE:** These options are exposed as Configuration Options (**Integrations** -> **Configured** --> **Plex** --> **Gear Icon**). Configuration Options will take precedence. required: false type: map keys: From 114e4960550ff6d7973e8570f4be7d6d7f5ce628 Mon Sep 17 00:00:00 2001 From: Oleksandr Omelchuk <25319+sashao@users.noreply.github.com> Date: Fri, 27 Sep 2019 19:22:36 +0300 Subject: [PATCH 36/76] Added more ebusd sensors. (#10398) * Added more ebusd sensors. * Fixed review item. Removed link to sources. * Fixed spelling --- source/_components/ebusd.markdown | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/source/_components/ebusd.markdown b/source/_components/ebusd.markdown index 7e430da574c..28c893f6a11 100644 --- a/source/_components/ebusd.markdown +++ b/source/_components/ebusd.markdown @@ -28,7 +28,7 @@ host: required: true type: string circuit: - description: The heating circuit name to monitor, e.g., 700. + description: The heating circuit name to monitor, e.g., '700', 'ehp' or 'bai'. required: true type: string port: @@ -42,7 +42,7 @@ name: required: false default: ebusd monitored_conditions: - description: List of condition to monitor. + description: List of conditions to monitor. Note that not all monitored_conditions listed here can be supported by your circuit. This integration maps limited set of keys to circuit specific ebusd values. type: list required: false keys: @@ -112,4 +112,24 @@ monitored_conditions: description: Power energy consumption from last month. PowerEnergyConsumptionThisMonth: description: Power energy consumption from the actual month. + HotWaterTemperature: + description: Hot water circuit temperature. + StorageTemperature: + description: Boiler temperature. + DesiredStorageTemperature: + description: Target boiler temperature. + OutdoorsTemperature: + description: Temperature used for weather dependent calculations. + AverageIgnitionTime: + description: Average flame ignition time (seconds). + MaximumIgnitionTime: + description: Maximum flame ignition time (seconds). + MinimumIgnitionTime: + description: Minimum flame ignition time (seconds). + ReturnTemperature: + description: Temperature returned into heater from water circuit. + DesiredFlowTemperature: + description: Target heat temperature. + FlowTemperature: + description: Out temperature. {% endconfiguration %} From 822a45b6d4fed01fec99dfe1ff72050ed191d354 Mon Sep 17 00:00:00 2001 From: Gil Peeters Date: Sat, 28 Sep 2019 21:53:01 +1000 Subject: [PATCH 37/76] Added 'availability_template' to Template Cover platform (#10314) * Added 'availability_template' to all Template Cover platform * Fixed Syntax and default * Apply suggestions from code review Co-Authored-By: Franck Nijhof * Removed optional values from example configuration --- source/_components/cover.template.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/_components/cover.template.markdown b/source/_components/cover.template.markdown index 6d130751268..cf5e96224c2 100644 --- a/source/_components/cover.template.markdown +++ b/source/_components/cover.template.markdown @@ -19,6 +19,7 @@ To enable Template Covers in your installation, add the following to your `configuration.yaml` file: {% raw %} + ```yaml # Example configuration.yaml entry cover: @@ -34,6 +35,7 @@ cover: stop_cover: service: script.stop_garage_door ``` + {% endraw %} {% configuration %} @@ -62,6 +64,11 @@ cover: description: Defines a template to specify which icon to use. required: false type: template + availability_template: + description: Defines a template to get the `available` state of the component. If the template returns `true`, the device is `available`. If the template returns any other value, the device will be `unavailable`. If `availability_template` is not configured, the component will always be `available`. + required: false + type: template + default: true device_class: description: Sets the [class of the device](/components/cover/), changing the device state and icon that is displayed on the frontend. required: false @@ -136,6 +143,7 @@ This example converts a garage door with a controllable switch and position sensor into a cover. {% raw %} + ```yaml cover: - platform: template @@ -162,6 +170,7 @@ cover: mdi:garage {% endif %} ``` + {% endraw %} ### Multiple Covers @@ -169,6 +178,7 @@ cover: This example allows you to control two or more covers at once. {% raw %} + ```yaml homeassistant: customize: @@ -249,6 +259,7 @@ automation: entity_id: cover.cover_group position: 25 ``` + {% endraw %} ### Change The Icon @@ -256,6 +267,7 @@ automation: This example shows how to change the icon based on the cover state. {% raw %} + ```yaml cover: - platform: template @@ -282,6 +294,7 @@ cover: mdi:window-closed {% endif %} ``` + {% endraw %} ### Change The Entity Picture @@ -289,6 +302,7 @@ cover: This example shows how to change the entity picture based on the cover state. {% raw %} + ```yaml cover: - platform: template @@ -315,4 +329,5 @@ cover: /local/cover-closed.png {% endif %} ``` + {% endraw %} From c752427e1b8b3ebaf09e69d0fb38e1349b02589e Mon Sep 17 00:00:00 2001 From: Gil Peeters Date: Sat, 28 Sep 2019 21:57:25 +1000 Subject: [PATCH 38/76] Added 'availability_template' to Template Binary Sensor platform (#10313) * Added 'availability_template' to all Template Binary Sensor platform * Fixed as requested. * Update source/_components/binary_sensor.template.markdown Co-Authored-By: Franck Nijhof * Added Accidentally remove d 'attribute_tempalte' * Removed optional parameter from example config --- .../binary_sensor.template.markdown | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/source/_components/binary_sensor.template.markdown b/source/_components/binary_sensor.template.markdown index e59acefa2a4..30fed11e5d9 100644 --- a/source/_components/binary_sensor.template.markdown +++ b/source/_components/binary_sensor.template.markdown @@ -18,6 +18,7 @@ other entities. The state of a Template Binary Sensor can only be `on` or Here is an example of adding a Template Binary Sensor to the `configuration.yaml` file: {% raw %} + ```yaml # Example configuration.yaml entry binary_sensor: @@ -28,6 +29,7 @@ binary_sensor: value_template: >- {{ state_attr('sun.sun', 'elevation')|float > 0 }} ``` + {% endraw %} {% configuration %} @@ -58,6 +60,11 @@ sensors: description: The sensor is `on` if the template evaluates as `True` and `off` otherwise. The actual appearance in the frontend (`Open`/`Closed`, `Detected`/`Clear` etc) depends on the sensor’s device_class value required: true type: template + availability_template: + description: Defines a template to get the `available` state of the component. If the template returns `true`, the device is `available`. If the template returns any other value, the device will be `unavailable`. If `availability_template` is not configured, the component will always be `available`. + required: false + type: template + default: true icon_template: description: Defines a template for the icon of the sensor. required: false @@ -118,6 +125,7 @@ sensor of `furnace` that provides a current reading for the fan motor, we can determine if the furnace is running by checking that it is over some threshold: {% raw %} + ```yaml binary_sensor: - platform: template @@ -127,6 +135,7 @@ binary_sensor: device_class: heat value_template: "{{ states('sensor.furnace')|float > 2.5 }}" ``` + {% endraw %} ### Switch as Sensor @@ -137,6 +146,7 @@ original switch can then be hidden by [customizing](/getting-started/customizing-devices/). {% raw %} + ```yaml binary_sensor: - platform: template @@ -148,6 +158,7 @@ binary_sensor: device_class: opening value_template: "{{ is_state('switch.door', 'on') }}" ``` + {% endraw %} ### Combining Multiple Sensors @@ -157,6 +168,7 @@ status. When using templates with binary sensors, you need to return `true` or `false` explicitly. {% raw %} + ```yaml binary_sensor: - platform: template @@ -169,6 +181,7 @@ binary_sensor: and is_state('sensor.kitchen_co_status', 'Ok') and is_state('sensor.wardrobe_co_status', 'Ok') }} ``` + {% endraw %} ### Washing Machine Running @@ -180,6 +193,7 @@ finished. By utilizing `delay_off`, we can have this sensor only turn off if there has been no washer activity for 5 minutes. {% raw %} + ```yaml # Determine when the washing machine has a load running. binary_sensor: @@ -192,9 +206,10 @@ binary_sensor: value_template: >- {{ states('sensor.washing_machine_power')|float > 0 }} ``` + {% endraw %} -### Is Anyone Home? +### Is Anyone Home This example is determining if anyone is home based on the combination of device tracking and motion sensors. It's extremely useful if you have kids/baby sitter/ @@ -203,6 +218,7 @@ trackable device in Home Assistant. This is providing a composite of WiFi based device tracking and Z-Wave multisensor presence sensors. {% raw %} + ```yaml binary_sensor: - platform: template @@ -217,6 +233,7 @@ binary_sensor: or is_state('binary_sensor.porch_ms6_1_129', 'on') or is_state('binary_sensor.family_room_144', 'on') }} ``` + {% endraw %} ### Device Tracker sensor with Latitude and Longitude Attributes @@ -251,11 +268,11 @@ binary_sensor: ### Change the icon when state changes This example demonstrates how to use `icon_template` to change the entity's -icon as its state changes, it evaluates the state of its own sensor and uses a -conditional statement to output the appropriate icon. - +icon as its state changes, it evaluates the state of its own sensor and uses a +conditional statement to output the appropriate icon. {% raw %} + ```yaml sun: binary_sensor: @@ -273,4 +290,5 @@ binary_sensor: mdi:weather-sunset-down {% endif %} ``` + {% endraw %} From acb0557228bf8fd47cf5d467aa02e5d2238041f9 Mon Sep 17 00:00:00 2001 From: Gil Peeters Date: Sat, 28 Sep 2019 21:59:32 +1000 Subject: [PATCH 39/76] Added 'availability_template' to all Template Fan platform (#10312) * Added 'availability_template' to all Template Fan platform * Fixed Syntax and default * Removed optional parameter from example config * Apply suggestions from code review Co-Authored-By: Franck Nijhof --- source/_components/fan.template.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_components/fan.template.markdown b/source/_components/fan.template.markdown index 077030cd16f..9f1cef8b046 100644 --- a/source/_components/fan.template.markdown +++ b/source/_components/fan.template.markdown @@ -17,6 +17,7 @@ To enable Template Fans in your installation, add the following to your `configuration.yaml` file: {% raw %} + ```yaml # Example configuration.yaml entry fan: @@ -49,6 +50,7 @@ fan: - '2' - '3' ``` + {% endraw %} {% configuration %} @@ -77,6 +79,11 @@ fan: description: "Defines a template to get the direction of the fan. Valid value: 'forward'/'reverse'" required: false type: template + availability_template: + description: Defines a template to get the `available` state of the component. If the template returns `true`, the device is `available`. If the template returns any other value, the device will be `unavailable`. If `availability_template` is not configured, the component will always be `available`. + required: false + type: template + default: true turn_on: description: Defines an action to run when the fan is turned on. required: true From 90d24a1a1e878ba1882af6e3b8d9672cbc1f5288 Mon Sep 17 00:00:00 2001 From: Gil Peeters Date: Sat, 28 Sep 2019 22:00:57 +1000 Subject: [PATCH 40/76] Added 'availability_template' to all Template Light platform (#10311) * Added 'availability_template' to all Template Light platform * Fixed Syntax and default * Removed optional parameter from example config * Update source/_components/light.template.markdown Co-Authored-By: Franck Nijhof --- source/_components/light.template.markdown | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/source/_components/light.template.markdown b/source/_components/light.template.markdown index f375aa0f1c9..7851264bf2a 100644 --- a/source/_components/light.template.markdown +++ b/source/_components/light.template.markdown @@ -17,6 +17,7 @@ To enable Template Lights in your installation, add the following to your `configuration.yaml` file: {% raw %} + ```yaml # Example configuration.yaml entry light: @@ -35,6 +36,7 @@ light: data_template: brightness: "{{ brightness }}" ``` + {% endraw %} {% configuration %} @@ -64,7 +66,12 @@ light: icon_template: description: Defines a template for an icon or picture, e.g. showing a different icon for different states. required: false - type: template + type: template + availability_template: + description: Defines a template to get the `available` state of the component. If the template returns `true`, the device is `available`. If the template returns any other value, the device will be `unavailable`. If `availability_template` is not configured, the component will always be `available`. + required: false + type: template + default: true turn_on: description: Defines an action to run when the light is turned on. required: true @@ -104,6 +111,7 @@ make; the [Media Player component](/components/media_player/) needs a floating point percentage value from `0.0` to `1.0`. {% raw %} + ```yaml light: - platform: template @@ -142,6 +150,7 @@ light: 0 {% endif %} ``` + {% endraw %} ### Change The Icon @@ -149,6 +158,7 @@ light: This example shows how to change the icon based on the light state. {% raw %} + ```yaml light: - platform: template @@ -186,6 +196,7 @@ light: entity_id: media_player.receiver is_volume_muted: true ``` + {% endraw %} ### Change The Entity Picture @@ -193,6 +204,7 @@ light: This example shows how to change the entity picture based on the light state. {% raw %} + ```yaml light: - platform: template @@ -230,4 +242,5 @@ light: entity_id: media_player.receiver is_volume_muted: true ``` + {% endraw %} From 75505dbfb8b5fdc630e91290cc3122ee3e719131 Mon Sep 17 00:00:00 2001 From: Gil Peeters Date: Sat, 28 Sep 2019 22:02:37 +1000 Subject: [PATCH 41/76] Added 'availability_template' to Template Vacuum platform (#10309) * Added 'availability_template' to Template Vacuum platform * Fixed Syntax and default * Removed optional parameter from example config * Apply suggestions from code review Co-Authored-By: Franck Nijhof --- source/_components/vacuum.template.markdown | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/source/_components/vacuum.template.markdown b/source/_components/vacuum.template.markdown index 0b705d7f27c..bb5c7bad34a 100644 --- a/source/_components/vacuum.template.markdown +++ b/source/_components/vacuum.template.markdown @@ -15,6 +15,8 @@ return_to_base, clean_spot, locate and set_fan_speed commands of a vacuum. To enable Template Vacuums in your installation, add the following to your `configuration.yaml` file: +{% raw %} + ```yaml # Example configuration.yaml entry vacuum: @@ -22,9 +24,11 @@ vacuum: vacuums: living_room_vacuum: start: - service: script.vacuum_start + service: script.vacuum_start ``` +{% endraw %} + {% configuration %} vacuums: description: List of your vacuums. @@ -47,6 +51,11 @@ vacuum: description: Defines a template to get the fan speed of the vacuum. required: false type: template + availability_template: + description: Defines a template to get the `available` state of the component. If the template returns `true`, the device is `available`. If the template returns any other value, the device will be `unavailable`. If `availability_template` is not configured, the component will always be `available`. + required: false + type: template + default: true start: description: Defines an action to run when the vacuum is started. required: true @@ -117,6 +126,7 @@ vacuum: This example shows how to use templates to specify the state of the vacuum. {% raw %} + ```yaml vacuum: - platform: template @@ -144,4 +154,5 @@ vacuum: - Medium - High ``` + {% endraw %} From 049713c68e0864a5e40382323624fcc816643062 Mon Sep 17 00:00:00 2001 From: SukramJ Date: Sat, 28 Sep 2019 22:34:47 +0200 Subject: [PATCH 42/76] Add hint about Homematic IP device create and remove (#10470) --- source/_components/homematicip_cloud.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_components/homematicip_cloud.markdown b/source/_components/homematicip_cloud.markdown index 19124cec67d..e7203b2dca3 100644 --- a/source/_components/homematicip_cloud.markdown +++ b/source/_components/homematicip_cloud.markdown @@ -79,6 +79,13 @@ authtoken: type: string {% endconfiguration %} +## Adding and removing devices and group via native HomematicIP APP +Devices and groups are instantly removed from Homeassistant when removed in the native HomematicIP APP. +Groups are instantly created in Homeassistant when created in the native HomematicIP APP. +Devices are created with a delay of 30 seconds in Homeassistant when created in the native HomematicIP APP. +Within this delay the device registration should be completed in the App, otherwise the device name will be a default one based on the device type. This can easily be fixed in the Homeassistant entity registry afterwards. + + ## Implemented and tested devices * homematicip_cloud.alarm_control_panel From 26d1f36c000e775ceabc7d54ef23d43f4b9d1670 Mon Sep 17 00:00:00 2001 From: SukramJ Date: Sun, 29 Sep 2019 14:42:47 +0200 Subject: [PATCH 43/76] Add white line to comply with markdown rules. (#10479) --- source/_components/homematicip_cloud.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/homematicip_cloud.markdown b/source/_components/homematicip_cloud.markdown index e7203b2dca3..cacc16ef301 100644 --- a/source/_components/homematicip_cloud.markdown +++ b/source/_components/homematicip_cloud.markdown @@ -80,12 +80,12 @@ authtoken: {% endconfiguration %} ## Adding and removing devices and group via native HomematicIP APP + Devices and groups are instantly removed from Homeassistant when removed in the native HomematicIP APP. Groups are instantly created in Homeassistant when created in the native HomematicIP APP. Devices are created with a delay of 30 seconds in Homeassistant when created in the native HomematicIP APP. Within this delay the device registration should be completed in the App, otherwise the device name will be a default one based on the device type. This can easily be fixed in the Homeassistant entity registry afterwards. - ## Implemented and tested devices * homematicip_cloud.alarm_control_panel From 4702acb88d66e2f9e2828d27bbd5ec76f42f85d9 Mon Sep 17 00:00:00 2001 From: John Luetke Date: Mon, 30 Sep 2019 05:22:48 -0700 Subject: [PATCH 44/76] Update pihole docs to describe services (#10485) * Update pihole docs to describe services * :pencil2: Tweaks --- source/_components/pi_hole.markdown | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/source/_components/pi_hole.markdown b/source/_components/pi_hole.markdown index 5c7ac1b2c68..753e2c24184 100644 --- a/source/_components/pi_hole.markdown +++ b/source/_components/pi_hole.markdown @@ -47,6 +47,11 @@ verify_ssl: required: false type: boolean default: true +api_key: + description: API Key for interacting with the Pi-hole. This is not required if you want to just query the Pi-hole for usage statistics. + required: false + type: string + default: None {% endconfiguration %} ### Full example @@ -59,4 +64,24 @@ pi_hole: verify_ssl: false ``` +## Services + +The platform provides the following services to interact with your Pi-hole. + +### Service `pi_hole.disable` + +Disable your Pi-hole for the specified amount of time. + +| Service data attribute | Required | Type | Description | +| ---------------------- | -------- | -------- | ----------- | +| `duration` | `True` | timedelta | Time for which Pi-hole should be disabled | + +_Note: This service requires `api_key` to be specified in the configuration._ + +### Service `pi.hole_enable` + +Enable your Pi-hole. + +_Note: This service requires `api_key` to be specified in the configuration._ + This integration was not made by Pi-hole LLC or the Pi-hole community. They did not provide support, feedback, testing, or any other help during its creation. This is a third party platform which may break if Pi-hole changes their API in a later release. It is not official, not developed, not supported, and not endorsed Pi-hole LLC or the Pi-hole community. The trademark `Pi-hole` and the logo is used here to describe the platform. `Pi-hole` is a registered trademark of Pi-hole LLC. From a70c84a42a45e1d81c3aec901910a5a7b3fd37d8 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Mon, 30 Sep 2019 18:51:26 -0500 Subject: [PATCH 45/76] add image option to entities card (#10500) --- source/_lovelace/entities.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_lovelace/entities.markdown b/source/_lovelace/entities.markdown index 0a841e93ce7..10b6fdd2752 100644 --- a/source/_lovelace/entities.markdown +++ b/source/_lovelace/entities.markdown @@ -51,6 +51,10 @@ icon: required: false description: Overwrites icon or entity picture. type: string +image: + required: false + description: Overwrites entity picture. + type: string secondary_info: required: false description: "Show additional info. Values: `entity-id`, `last-changed`." From a0d2949e4b643f4561b42253f812cb072ac276e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiit=20R=C3=A4tsep?= Date: Tue, 1 Oct 2019 12:24:42 +0300 Subject: [PATCH 46/76] Added documentation page for Soma (#10460) * Added documentation page for Soma * Update source/_components/soma.markdown Co-Authored-By: Klaas Schoute * Update source/_components/soma.markdown Co-Authored-By: Klaas Schoute * Added paragraphs --- source/_components/soma.markdown | 40 ++++++++++++++++++++++++ source/images/supported_brands/soma.png | Bin 0 -> 6255 bytes 2 files changed, 40 insertions(+) create mode 100644 source/_components/soma.markdown create mode 100644 source/images/supported_brands/soma.png diff --git a/source/_components/soma.markdown b/source/_components/soma.markdown new file mode 100644 index 00000000000..390e45540c0 --- /dev/null +++ b/source/_components/soma.markdown @@ -0,0 +1,40 @@ +--- +title: "Soma" +description: "Instructions on how to set up the Soma Connect within Home Assistant." +logo: soma.png +ha_category: + - Cover +ha_iot_class: Local Polling +ha_config_flow: true +ha_release: "0.100" +--- + +The Soma integration will allow users to integrate their Soma Smarthome devices into Home Assistant using the Soma Connect hub. + +You can build a Soma Connect yourself if you have a spare Raspberry Pi. You just need to follow the [ official instructions](https://somasmarthome.zendesk.com/hc/en-us/articles/360035521234-Install-SOMA-Connect-software-on-SOMA-Connect-Raspberry-Pi). After you have the SD card plug in the Pi and use an ethernet cable or [set up WiFI](https://somasmarthome.zendesk.com/hc/en-us/articles/360026210333-Configuring-Wi-Fi-access). Then find the IP address by checking your routers DHCP table (we will work on this step). + +The Connect will automatically find all your Smartshade devices in range and expose them through this integration and through Home Kit. This integration will only enumerate new shades when it is first set up. If you add shades after that you just need to restart Home Assistant or reconfigure this integration. Soma Connect will automatically discover new shades as they appear and expose them. + +To actually move the shades you have to first set them up according to the instructions that come with them. + +## Configuration + +```yaml +# Example configuration.yaml entry +soma: + host: CONNECT_IP_ADDR + port: CONNECT_PORT +``` + +{% configuration %} +host: + description: Your Soma Connect IP address. + required: true + type: string +port: + description: Your Soma Connect port. + required: true + default: 3000 + type: string +{% endconfiguration %} + diff --git a/source/images/supported_brands/soma.png b/source/images/supported_brands/soma.png new file mode 100644 index 0000000000000000000000000000000000000000..9ad8a13d5d6253d8282e6770e3ffc930fc91e294 GIT binary patch literal 6255 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 Dj5xY? literal 0 HcmV?d00001 From 3f86c56a20504afc611556f241201c591b0ab5b6 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Tue, 1 Oct 2019 05:05:08 -0500 Subject: [PATCH 47/76] state_filter for picture cards (#10442) --- source/_lovelace/picture-elements.markdown | 4 ++++ source/_lovelace/picture-entity.markdown | 14 ++++++++++++++ source/_lovelace/picture-glance.markdown | 14 ++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/source/_lovelace/picture-elements.markdown b/source/_lovelace/picture-elements.markdown index e5514720696..f5112d3619b 100644 --- a/source/_lovelace/picture-elements.markdown +++ b/source/_lovelace/picture-elements.markdown @@ -30,6 +30,10 @@ title: required: false description: Card title type: string +state_filter: + required: false + description: '[State-based CSS filters](#how-to-use-state_filter)' + type: map {% endconfiguration %} ## Elements diff --git a/source/_lovelace/picture-entity.markdown b/source/_lovelace/picture-entity.markdown index e1e5ff31e04..925449dde05 100644 --- a/source/_lovelace/picture-entity.markdown +++ b/source/_lovelace/picture-entity.markdown @@ -37,6 +37,10 @@ state_image: required: false description: "Map entity states to images (`state: image URL`, check the example below)." type: map +state_filter: + required: false + description: '[State-based CSS filters](#how-to-use-state_filter)' + type: map aspect_ratio: required: false description: "Forces the height of the image to be a ratio of the width. You may enter a value such as: `16x9`, `16:9`, `1.78`." @@ -117,6 +121,16 @@ hold_action: default: none {% endconfiguration %} +## How to use state_filter + +Specify different [CSS filters](https://developer.mozilla.org/en-US/docs/Web/CSS/filter) + +```yaml +state_filter: + "on": brightness(110%) saturate(1.2) + "off": brightness(50%) hue-rotate(45deg) +``` + ## Examples Basic example: diff --git a/source/_lovelace/picture-glance.markdown b/source/_lovelace/picture-glance.markdown index f1fc699bf35..4071c3b436c 100644 --- a/source/_lovelace/picture-glance.markdown +++ b/source/_lovelace/picture-glance.markdown @@ -46,6 +46,10 @@ state_image: type: string required: false description: "`state: image-url`, check the example below." +state_filter: + required: false + description: '[State-based CSS filters](#how-to-use-state_filter)' + type: map aspect_ratio: required: false description: "Forces the height of the image to be a ratio of the width. You may enter a value such as: `16x9`, `16:9`, `1.78`." @@ -131,6 +135,16 @@ icon: type: string {% endconfiguration %} +## How to use state_filter + +Specify different [CSS filters](https://developer.mozilla.org/en-US/docs/Web/CSS/filter) + +```yaml +state_filter: + "on": brightness(110%) saturate(1.2) + "off": brightness(50%) hue-rotate(45deg) +``` + ## Examples ```yaml From 3c40e6beba68a69f5fcca0f9b90118730bda80ad Mon Sep 17 00:00:00 2001 From: Florian Klien Date: Tue, 1 Oct 2019 12:06:51 +0200 Subject: [PATCH 48/76] add more providers, update yessssms docs for YesssSMS v0.4.1 (#10447) * update yessssms docs for YesssSMS v0.4.0 * no oxford comma * :pencil2: Tweak * removed optional parameter from config example * yessssms config example --- source/_components/yessssms.markdown | 47 +++++++++++++++--- source/images/screenshots/yessssms_brands.png | Bin 0 -> 51870 bytes 2 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 source/images/screenshots/yessssms_brands.png diff --git a/source/_components/yessssms.markdown b/source/_components/yessssms.markdown index 03b85e6cfd2..4b770bb57cd 100644 --- a/source/_components/yessssms.markdown +++ b/source/_components/yessssms.markdown @@ -1,6 +1,6 @@ --- title: "Yesss SMS" -description: "Instructions on how to add user notifications to Home Assistant." +description: "Instructions on how to add Yesss-SMS notifications to Home Assistant." logo: yesssat.png ha_category: - Notifications @@ -9,7 +9,23 @@ redirect_from: - /components/notify.yessssms/ --- -The `yessssms` platform is using the Austrian mobile operator [Yesss.at](https://yesss.at) to send SMS via its web-site. +The `yessssms` platform is using the Austrian mobile operator [Yesss.at](https://yesss.at) and others to send SMS via their web-site. + +Currenty 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. @@ -46,12 +62,29 @@ 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: 06641234567 + password: tops3cr3tpass0rd + recipient: 06641234567 + provider: educom +``` +
- -Verify that your credentials work on [Yesss.at's website](https://yesss.at). Using the wrong credentials three times in a row will get you suspended for one hour. -Home Assistant will not try to login after the account has been suspended. -Re-check the credentials and restart Home Assistant. - +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/images/screenshots/yessssms_brands.png b/source/images/screenshots/yessssms_brands.png new file mode 100644 index 0000000000000000000000000000000000000000..c59ebd985780f7d3017d7d2763e16cd37965bdf7 GIT binary patch literal 51870 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 xfEpx0HU#IVm6RtIr7}3C Date: Tue, 1 Oct 2019 13:08:12 +0300 Subject: [PATCH 49/76] Transmission config flow (#10293) * Transmission config flow Configure Transmission using config flow. * :pencil2: Tweak * Update transmission.markdown Removed monitored conditions and updated list of entities added by the integration --- source/_components/transmission.markdown | 48 +++++++++++------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/source/_components/transmission.markdown b/source/_components/transmission.markdown index 9d4c4ff6ccb..b0e43f3d3f7 100644 --- a/source/_components/transmission.markdown +++ b/source/_components/transmission.markdown @@ -31,6 +31,8 @@ If everything is set up correctly, the details will show up in the frontend. ## Configuration +Set up the integration through **Configuration** -> **Integrations** -> **Transmission**. For legacy support old transmission configuration is imported and set up as new integration. Make sure to remove `monitored_condiditions` as they are now automatically added to Home Assistant + To enable this sensor, add the following lines to your `configuration.yaml`: ```yaml @@ -60,38 +62,30 @@ password: description: Your Transmission password, if you use authentication. required: false type: string -turtle_mode: - description: If enabled, it creates a switch entity to control the 'Alternative Speed Limits' (aka 'Turtle mode') setting. - required: false - type: boolean - default: false scan_interval: description: How frequently to query for new data. Defaults to 120 seconds. required: false type: integer -monitored_conditions: - type: integer - description: "List of monitored conditions. Possible values are:" - required: false - type: list - keys: - current_status: - description: The status of your Transmission daemon. - download_speed: - description: The current download speed [MB/s]. - upload_speed: - description: The current upload speed [MB/s]. - active_torrents: - description: The current number of active torrents. - paused_torrents: - description: The current number of paused torrents. - total_torrents: - description: The total number of torrents present in the client. - started_torrents: - description: The current number of started torrents (downloading). - completed_torrents: - description: The current number of completed torrents (seeding) {% endconfiguration %} + +## Integration Entities + +The Transmission Integration will add the following sensors and switches. + +Sensors: +- current_status: The status of your Transmission daemon. +- download_speed: The current download speed [MB/s]. +- upload_speed: The current upload speed [MB/s]. +- active_torrents: The current number of active torrents. +- paused_torrents: The current number of paused torrents. +- total_torrents: The total number of torrents present in the client. +- started_torrents: The current number of started torrents (downloading). +- completed_torrents: The current number of completed torrents (seeding) + +Switches: +- on_off: A switch to start/stop all torrents +- turtle_mode: A switch to enable turtle mode. + ## Event Automation From c09f29fc871221c21177cad6476fa4c2151007cd Mon Sep 17 00:00:00 2001 From: Mark Coombes Date: Tue, 1 Oct 2019 06:09:16 -0400 Subject: [PATCH 50/76] Add services to create and delete vacations (#10457) --- source/_components/ecobee.markdown | 33 +++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/source/_components/ecobee.markdown b/source/_components/ecobee.markdown index 710ba68cd82..5e761172f4d 100644 --- a/source/_components/ecobee.markdown +++ b/source/_components/ecobee.markdown @@ -151,7 +151,38 @@ The Ecobee climate entity has some extra attributes to represent the state of th ## Services -Besides the standard services provided by the Home Assistant [Climate](https://www.home-assistant.io/components/climate/) integration, the following extra services are provided by the Ecobee Thermostat: `ecobee.resume_program` and `ecobee.set_fan_min_on_time`. +Besides the standard services provided by the Home Assistant [Climate](https://www.home-assistant.io/components/climate/) integration, the following extra services are provided by the Ecobee integration: + +- `ecobee.create_vacation` +- `ecobee.delete_vacation` +- `ecobee.resume_program` +- `ecobee.set_fan_min_on_time` + +### Service `ecobee.create_vacation` + +Creates a vacation on the selected ecobee thermostat. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | ecobee thermostat on which to create the vacation | +| `vacation_name` | no | Name of the vacation to create; must be unique on the thermostat | +| `cool_temp` | no | Cooling temperature during the vacation | +| `heat_temp` | no | Heating temperature during the vacation | +| `start_date` | yes | Date the vacation starts in YYYY-MM-DD format | +| `start_time` | yes | Time the vacation starts, in the local time of the thermostat, in the 24-hour format HH:MM:SS | +| `end_date` | yes | Date the vacation ends in YYYY-MM-DD format (14 days from now if not provided) | +| `end_time` | yes | Time the vacation ends, in the local time of the thermostat, in the 24-hour format HH:MM:SS | +| `fan_mode` | yes | Fan mode of the thermostat during the vacation (auto or on) (auto if not provided) | +| `fan_min_on_time` | yes | Minimum number of minutes to run the fan each hour (0 to 60) during the vacation (0 if not provided) | + +### Service `ecobee.delete_vacation` + +Delete a vacation on the selected ecobee thermostat. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | ecobee thermostat on which to delete the vacation | +| `vacation_name` | no | Name of the vacation to delete | ### Service `ecobee.resume_program` From d2f652085d5470d456940969cf6c444996ab653c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Vran=C3=ADk?= Date: Tue, 1 Oct 2019 12:10:57 +0200 Subject: [PATCH 51/76] New version of rainbird component (#10326) * New version of rainbird component see https://github.com/home-assistant/home-assistant/pull/26393 * Update rainbird.markdown * Update rainbird.markdown * Update rainbird.markdown * Update rainbird.markdown * Update rainbird.markdown * Update rainbird.markdown * Update rainbird.markdown * Update rainbird.markdown * Update source/_components/rainbird.markdown Co-Authored-By: Martin Hjelmare * Update source/_components/rainbird.markdown Co-Authored-By: Martin Hjelmare * Update source/_components/rainbird.markdown Co-Authored-By: Martin Hjelmare --- source/_components/rainbird.markdown | 105 +++++++++++++-------------- 1 file changed, 52 insertions(+), 53 deletions(-) diff --git a/source/_components/rainbird.markdown b/source/_components/rainbird.markdown index 1b189adc420..4001713357f 100644 --- a/source/_components/rainbird.markdown +++ b/source/_components/rainbird.markdown @@ -29,6 +29,8 @@ To enable it, add the following to your `configuration.yaml` file: rainbird: host: IP_ADDRESS_OF_MODULE password: YOUR_PASSWORD + trigger_time: 360 + ``` {% configuration %} @@ -40,8 +42,56 @@ password: description: The password for accessing the module. required: true type: string +trigger_time: + description: Irrigation time. The time will be rounded down to whole minutes. + required: true + type: time +zones: + description: Dictionary of zone configurations + required: false + type: map + keys: + ZONE_NUMBER: + description: Zone ID + type: map + keys: + friendly_name: + description: Friendly name to see in GUI + required: false + type: string + trigger_time: + description: Irrigation time. Seconds are ignored. + required: false + type: time {% endconfiguration %} + +More complex configuration using all possible features could look like this example: +```yaml +# Example configuration.yaml entry +rainbird: + - host: IP_ADDRESS_OF_MODULE + password: YOUR_PASSWORD + trigger_time: 6 + zones: + 1: + friendly_name: My zone 1 + trigger_time: + minutes: 6 + 2: + friendly_name: My zone 2 + trigger_time: 2 + - host: IP_ADDRESS_OF_ANOTHER_MODULE + password: YOUR_ANOTHER_PASSWORD + trigger_time: 0:06 + zones: + 1: + friendly_name: My zone 1 + trigger_time: 0:06 + 3: + friendly_name: My zone 3 + trigger_time: 0:05 +```
Please note that due to the implementation of the API within the LNK Module, there is a concurrency issue. For example, the Rain Bird app will give connection issues (like already a connection active).
@@ -50,62 +100,11 @@ Please note that due to the implementation of the API within the LNK Module, the This `rainbird` sensor allows interacting with [LNK WiFi](http://www.rainbird.com/landscape/products/controllers/LNK-WiFi.htm) module of the Rain Bird Irrigation system in Home Assistant. -Add the following to your `configuration.yaml` file to enable the rain sensor: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: rainbird - monitored_conditions: - - rainsensor -``` - -{% configuration %} -monitored_conditions: - description: Conditions to be monitored. - type: list - keys: - rainsensor: - description: Returns the sensor level. -{% endconfiguration %} +The integration adds `rainsensor` and `raindelay` sensors and their `binary_sensor` alternatives. ## Switch This `rainbird` switch platform allows interacting with [LNK WiFi](http://www.rainbird.com/landscape/products/controllers/LNK-WiFi.htm) module of the Rain Bird Irrigation system in Home Assistant. -Add the following to your `configuration.yaml` file to use the switch platform: +Switches are automatically added for all available zones of configured controllers. -```yaml -switch: - - platform: rainbird - switches: - sprinkler_1: - zone: 1 - friendly_name: "Front sprinklers" - trigger_time: 10 - scan_interval: 10 - sprinkler_2: - friendly_name: "Back sprinklers" - zone: 2 - trigger_time: 20 - scan_interval: 10 -``` - -{% configuration %} -zone: - description: Station zone identifier. - required: true - type: string -friendly_name: - description: Just a friendly name for the station. - required: false - type: string -trigger_time: - description: The default duration to sprinkle the zone in minutes. - required: true - type: integer -scan_interval: - description: How fast to refresh the switch in minutes. - required: false - type: integer -{% endconfiguration %} From 464e2dd43c3ec8800bf2221e4b31dc67dc0e2df6 Mon Sep 17 00:00:00 2001 From: Khole Date: Tue, 1 Oct 2019 11:12:38 +0100 Subject: [PATCH 52/76] Add Hive Services (#10474) * Add Hive Services * Updated Description --- source/_components/hive.markdown | 93 ++++++++++++++++++++++++++------ 1 file changed, 78 insertions(+), 15 deletions(-) diff --git a/source/_components/hive.markdown b/source/_components/hive.markdown index f1532ff16f5..31b2c6df5c0 100644 --- a/source/_components/hive.markdown +++ b/source/_components/hive.markdown @@ -9,6 +9,7 @@ ha_category: - Light - Sensor - Switch + - Water Heater ha_release: 0.59 ha_iot_class: Cloud Polling redirect_from: @@ -19,18 +20,22 @@ redirect_from: - /components/switch.hive/ --- -The `hive` integration is the main integration to set up and integrate all supported Hive devices. Once configured with the minimum required details it will detect and add all your Hive devices into Home Assistant, including support for multizone heating. +The `hive` integration is the main integration to set up and integrate all supported Hive devices. Once configured with the minimum required details it will detect and add all Hive devices into Home Assistant, including support for multi-zone heating. This integration uses the unofficial API used in the official Hive website [https://my.hivehome.com](https://my.hivehome.com), and you will need to use the same Username and Password you use on the Hive website to configure this Hive integration in Home Assistant. -There is currently support for the following device types within Home Assistant: +There is currently support for the following services and platforms within Home Assistant: -- [Binary Sensor](#Binary-Sensor) -- [Climate](#Climate) -- [Light](#Light) -- [Sensor](#Sensor) -- [Switch](#Switch) -- [Water Heater](#Water-Heater) +- [Services](#services) + - [Service `hive.boost_heating`](#service-hiveboostheating) + - [Service `hive.boost_hot_water`](#service-hiveboosthotwater) +- [Platforms](#platforms) + - [Binary Sensor](#binary-sensor) + - [Climate](#climate) + - [Light](#light) + - [Sensor](#sensor) + - [Switch](#switch) + - [Water Heater](#water-heater) To add your Hive devices into your Home Assistant installation, add the following to your `configuration.yaml` file: @@ -57,7 +62,65 @@ scan_interval: default: 2 {% endconfiguration %} -## Binary Sensor +## Services + +### Service `hive.boost_heating` + +You can use the service `hive.boost_heating` to set your heating to boost for a period of time at a certain target temperature". + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ---------------------------------------------------------------------- | +| `entity_id` | no | String, Name of entity e.g., `climate.heating` | +| `time_period` | no | Time Period, Period of time the boost should last for e.g., `01:30:00` | +| `temperature` | yes | String, The required target temperature e.g., `20.5` | + +Examples: + +```yaml +# Example script to boost heating, boost period and target temperature specified. +script: + boost_heating: + sequence: + - service: hive.boost_heating + data: + entity_id: "climate.heating" + time_period: "01:30:00" + temperature: "20.5" +``` + +### Service `hive.boost_hot_water` + +You can use the service `hive.boost_hot_water` to set your hot water to boost for a period of time. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------------------------------------------------------------------- | +| `entity_id` | no | String, Name of entity e.g., `water_heater.hot_water` | +| `time_period` | yes | Time Period, Period of time the boost should last for e.g., `01:30:00`. | +| `on_off` | no | String, The mode to set the boost to on or odd e.g., `on` | + +Examples: + +```yaml +# Example script to boost hot water, boost period specified +script: + boost_hot_water: + sequence: + - service: "hive.boost_hot_water" + data: + entity_id: "water_heater.hot_water" + time_period: "01:30:00" + on_off: "on" +``` + +## Platforms + +
+ +You must have the [Hive integration](/components/hive/) configured to use the platforms below. + +
+ +### Binary Sensor The `hive` binary sensor integration integrates your Hive sensors into Home Assistant. @@ -66,7 +129,7 @@ The platform supports the following Hive products: - Hive Window or Door Sensor - Hive Motion Sensor -## Climate +### Climate The `hive` climate platform integrates your Hive thermostat into Home Assistant, enabling control of setting the **mode** and setting the **target temperature**. @@ -75,9 +138,9 @@ A short boost for Hive Heating can be set by using the **Boost** preset, this wi The platform supports the following Hive products: - Hive Active Heating -- Hive Multizone +- Hive Multi-zone -## Light +### Light The `hive` light platform integrates your Hive lights into Home Assistant, enabling control of various settings, depending on the model light. @@ -87,7 +150,7 @@ The platform supports the following Hive products: - Hive Active Light Cool to Warm White - Hive Active Light Color Changing -## Sensor +### Sensor The `hive` sensor integration exposes Hive data as a sensor. @@ -96,7 +159,7 @@ The platform exposes the following sensors: - Hive Hub Online Status - Hive Outside Temperature -## Switch +### Switch The `hive` switch platform integrates your Hive plugs into Home Assistant, enabling control of your devices. @@ -104,7 +167,7 @@ The platform supports the following Hive products: - Hive Active Plug -## Water Heater +### Water Heater The `hive` water heater platform integrates your Hive hot water into Home Assistant, enabling control of setting the **mode**. From 645b89dac776dc4bc6df2a81361ca00afcb2520e Mon Sep 17 00:00:00 2001 From: David Bonnes Date: Tue, 1 Oct 2019 14:22:24 +0100 Subject: [PATCH 53/76] small tweaks (#10494) --- source/_components/incomfort.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/incomfort.markdown b/source/_components/incomfort.markdown index 57748c30438..40b9743e5da 100644 --- a/source/_components/incomfort.markdown +++ b/source/_components/incomfort.markdown @@ -21,11 +21,11 @@ The boiler is represented as a **Water Heater** device. It will report the boile Note that the `current_temperature` will switch between the CV (circulating volume) and Tap temperatures according to the current operating mode of the boiler. If the boiler is neither pumping nor tapping, it will be reported as the higher of the two. -In addition, there is a **Sensor** for CV pressure, CV temperature, and Tap temperature, and a **Binary Sensor** that will be `on` if there is a fault with the boiler (the fault code will be a state attribute). +In addition, there is a **Sensor** for each of CV pressure, CV temperature, and Tap temperature, and a **Binary Sensor** that will be `on` if there is a fault with the boiler (the fault code will be a state attribute). ### Rooms -Any room thermostats (there can be 0, 1 or 2) are represented as **Climate** devices. They will report the thermostat's `temperature` (setpoint) and `current_temperature` and the setpoint can be changed. +Any room thermostats (there can be 0, 1 or 2) are represented as **Climate** devices. They will report the thermostat's `temperature` (setpoint, target temperature) and `current_temperature` and the setpoint can be changed. ## Automation @@ -52,9 +52,9 @@ Other properties are available via each device's attributes. ## Configuration -To set up this integration, add the following to your **configuration.yaml** file: +To set up this integration, add one of the following to your **configuration.yaml** file: -The hub does not have to be in the same network as HA. +The hub does not have to be in the same network as HA, but must be reachable via port 80/HTTP. ### Older gateways From ab4406d1c8396cd2b589a23257c50ebb4d424123 Mon Sep 17 00:00:00 2001 From: Jeff Irion Date: Tue, 1 Oct 2019 08:19:33 -0700 Subject: [PATCH 54/76] Minor corrections to Android TV documentation (#10527) --- source/_components/androidtv.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/androidtv.markdown b/source/_components/androidtv.markdown index 79c5013ec48..33ef900d4cd 100644 --- a/source/_components/androidtv.markdown +++ b/source/_components/androidtv.markdown @@ -162,7 +162,7 @@ For Hass.io users, you can install the [Android Debug Bridge](https://github.com ### 2. Python ADB Implementation -The second option is to connect to your device using the `adb` Python package. +The second option is to connect to your device using the `adb-shell` Python package. If your device requires ADB authentication, you will need to follow the instructions in the [ADB Authentication](#adb-authentication) section below. Once you have an authenticated key, this approach does not require any additional setup or addons. However, users with newer devices may find that the ADB connection is unstable. For a Fire TV device, you can try setting the `get_sources` configuration option to `false`. If the problem cannot be resolved, you should use the ADB server option. @@ -174,7 +174,7 @@ If you get a "Device authentication required, no keys available" error when tryi In the dialog appearing on your Android TV / Fire TV, you must check the box that says "always allow connections from this device." ADB authentication in Home Assistant will only work using a trusted key.
-Once you've successfully connected to your Android TV / Fire TV via the command `adb connect :5555`, the file `adbkey` will be created on your computer. The default locations for this file is (from [https://developer.android.com/studio/command-line/adb](https://developer.android.com/studio/command-line/adb)): +Once you've successfully connected to your Android TV / Fire TV via the command `adb connect :5555`, the file `adbkey` will be created on your computer. The default locations for this file are (from [https://developer.android.com/studio/command-line/adb](https://developer.android.com/studio/command-line/adb)): - Linux and Mac: `$HOME/.android.` - Windows: `%userprofile%\.android.` From 408fe86c1d567daa9ab42fa9fc6d020096e7a79f Mon Sep 17 00:00:00 2001 From: fredericvl <34839323+fredericvl@users.noreply.github.com> Date: Tue, 1 Oct 2019 20:31:07 +0200 Subject: [PATCH 55/76] Add saj component to docs (#10455) * Add saj component to docs * Adjust example + remove redirect_from * Update doc according to requested component change --- source/_components/saj.markdown | 47 +++++++++++++++++++++++++ source/images/supported_brands/saj.png | Bin 0 -> 7307 bytes 2 files changed, 47 insertions(+) create mode 100644 source/_components/saj.markdown create mode 100755 source/images/supported_brands/saj.png diff --git a/source/_components/saj.markdown b/source/_components/saj.markdown new file mode 100644 index 00000000000..20c397fca27 --- /dev/null +++ b/source/_components/saj.markdown @@ -0,0 +1,47 @@ +--- +title: "SAJ Solar Inverter" +description: "Instructions on how to connect your SAJ Solar Inverter to Home Assistant." +ha_category: + - Energy +logo: saj.png +ha_iot_class: Local Polling +ha_release: "0.100" +--- + +The `saj` sensor will poll a [SAJ](https://www.saj-electric.com/) solar inverter and present the values as sensors in Home Assistant. + +This sensor uses the web interface and to use it, you have to be able to connect to the solar inverter from your favorite web browser. + +## Configuration + +To enable this sensor, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: saj + host: IP_ADDRESS_OF_DEVICE +``` + +{% configuration %} +host: + description: The IP address of the SAJ Solar Inverter. + required: true + type: string +{% endconfiguration %} + +## Sensors + +Sensors available in the library: + +| name | Unit | Description | +|--------------------|------|:-------------------------------------------| +| current_power | W | Current power generated by the inverter. | +| today_yield | kWh | Power yield for today. | +| today_time | h | Inverter's running time for today. | +| today_max_current | W | Maximum current power for today. | +| total_yield | kWh | Total kWh generated to date. | +| total_time | h | Total running time of the inverter . | +| total_co2_reduced | kg | Total CO2 in kg reduced. | +| temperature | Β°C | Temperature of the inverter. | +| state | N/A | Live state of the inverter. | diff --git a/source/images/supported_brands/saj.png b/source/images/supported_brands/saj.png new file mode 100755 index 0000000000000000000000000000000000000000..4639329a3e0edc2b0de22935da7e9bd33397774b GIT binary patch literal 7307 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 Date: Tue, 1 Oct 2019 17:30:22 -0700 Subject: [PATCH 56/76] Adding NZBGet queue control services (#10454) * Adding NZBGet queue control services * :pencil2: Tweak --- source/_integrations/nzbget.markdown | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/source/_integrations/nzbget.markdown b/source/_integrations/nzbget.markdown index e862f4a1aa9..00f8ce07afb 100644 --- a/source/_integrations/nzbget.markdown +++ b/source/_integrations/nzbget.markdown @@ -8,7 +8,7 @@ ha_iot_class: Local Polling ha_release: 0.17 --- -The `nzbget` platform will allow you to monitor your downloads with [NZBGet](http://NZBGet.net) from within Home Assistant and setup automation based on the information. +The `nzbget` platform will allow you to monitor and control your downloads with [NZBGet](http://NZBGet.net) from within Home Assistant and setup automation based on the information. ## Configuration @@ -65,3 +65,17 @@ This component will create these sensors: - `post_paused`: Paused posts - `remaining_size`: Remaining size to download - `uptime`: Uptime of NZBGet + +## Services + +Available services: + + - `pause`: Pause the download queue. + - `resume`: Resume the download queue. + - `set_speed`: Set the download queue speed limit. + +### Service `nzbget/set_speed` + +| Service data attribute | Optional | Description | +|------------------------|----------|-------------------------------------------------------------------------------------------------| +| `speed` | yes | Sets the download speed limit, specified in Kb/s. 0 disables the speed limit. Defaults to 1000. | From 4688830ede6830048259ab33926fb26eb743bdcc Mon Sep 17 00:00:00 2001 From: Gil Peeters Date: Thu, 3 Oct 2019 00:15:54 +1000 Subject: [PATCH 57/76] Added 'availability_template' to all Template Lock platform (#10307) * Added 'availability_template' to all Template Lock platform * Fixed Syntax and default * Removed optional parameter from example config * Apply suggestions from code review Co-Authored-By: Franck Nijhof --- source/_integrations/lock.template.markdown | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/source/_integrations/lock.template.markdown b/source/_integrations/lock.template.markdown index e89cb65ab98..74e67c1a2ee 100644 --- a/source/_integrations/lock.template.markdown +++ b/source/_integrations/lock.template.markdown @@ -22,6 +22,7 @@ In optimistic mode, the lock will immediately change state after every command. To enable Template Locks in your installation, add the following to your `configuration.yaml` file: {% raw %} + ```yaml # Example configuration.yaml entry lock: @@ -37,6 +38,7 @@ lock: data: entity_id: switch.door ``` + {% endraw %} {% configuration %} @@ -49,7 +51,12 @@ lock: description: Defines a template to set the state of the lock. required: true type: template - lock: + availability_template: + description: Defines a template to get the `available` state of the component. If the template returns `true`, the device is `available`. If the template returns any other value, the device will be `unavailable`. If `availability_template` is not configured, the component will always be `available`. + required: false + type: template + default: true + lock: description: Defines an action to run when the lock is locked. required: true type: action @@ -77,6 +84,7 @@ In this section, you find some real-life examples of how to use this lock. This example shows a lock that copies data from a switch. {% raw %} + ```yaml lock: - platform: template @@ -91,6 +99,7 @@ lock: data: entity_id: switch.source ``` + {% endraw %} ### Optimistic Mode @@ -98,6 +107,7 @@ lock: This example shows a lock in optimistic mode. This lock will immediately change state after command and will not wait for state update from the sensor. {% raw %} + ```yaml lock: - platform: template @@ -113,6 +123,7 @@ lock: data: entity_id: switch.source ``` + {% endraw %} ### Sensor and Two Switches @@ -120,6 +131,7 @@ lock: This example shows a lock that takes its state from a sensor, and uses two momentary switches to control a device. {% raw %} + ```yaml lock: - platform: template @@ -134,4 +146,5 @@ lock: data: entity_id: switch.skylight_close ``` + {% endraw %} From 1fcc0050e021d595cf88fa605fc42a935246bf36 Mon Sep 17 00:00:00 2001 From: jjlawren Date: Wed, 2 Oct 2019 09:17:06 -0500 Subject: [PATCH 58/76] Plex external auth description (#10462) --- source/_integrations/plex.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_integrations/plex.markdown b/source/_integrations/plex.markdown index 431776dfd48..8620c3fa52c 100644 --- a/source/_integrations/plex.markdown +++ b/source/_integrations/plex.markdown @@ -19,9 +19,9 @@ There is currently support for the following device types within Home Assistant: - [Media Player](#media-player) - [Sensor](#sensor) -If your Plex server has been claimed by a Plex account via the [claim interface](https://plex.tv/claim), Home Assistant will require an authentication token to connect. If you don't know your token, see [Finding your account token / X-Plex-Token](https://support.plex.tv/hc/en-us/articles/204059436). +If your Plex server has been claimed by a Plex account via the [claim interface](https://plex.tv/claim), Home Assistant will require authentication to connect. -The preferred way to enable the Plex integration is via **Configuration** -> **Integrations**. You will be prompted to enter a Plex token which will query a Plex service to find a server linked to the associated account. If multiple Plex servers are available, you will be prompted to complete the configuration by selecting the desired server on the Integrations page. +The preferred way to enable the Plex integration is via **Configuration** -> **Integrations**. You will be redirected to the [plex.tv](https://plex.tv) website to sign in with your Plex account. Once access is granted, Home Assistant will connect to the server linked to the associated account. If multiple Plex servers are available on the account, you will be prompted to complete the configuration by selecting the desired server on the Integrations page. Home Assistant will show as an authorized device on the [Plex Web](https://app.plex.tv/web/app) interface under **Settings** -> **Authorized Devices**.
@@ -31,7 +31,7 @@ Local and secure connections are preferred when setting up an Integration. After Alternatively, you can manually configure a Plex server connection by selecting the "Manual setup" option when configuring a Plex integration. This will allow you to specify the server connection options which will be validated before setup is completed. The available options are similar to the **Configuration Variables** section below. -If [discovery](/components/discovery/) is enabled and a local Plex server is found, the server will automatically import an available legacy `media_player` configuration. GDM can be enabled via the Plex Web App under **Settings** -> **(Server Name)** -> **Settings** -> **Network** and choosing **Enable local network discovery (GDM)**. +If [discovery](/components/discovery/) is enabled and a local Plex server is found, a legacy `media_player` configuration (i.e., a `plex.conf` file) will be imported. GDM can be enabled via the Plex Web App under **Settings** -> **(Server Name)** -> **Settings** -> **Network** and choosing **Enable local network discovery (GDM)**. The `plex` integration can also be configured via `configuration.yaml`: From 6a2722daa7d8ab5b41d676210ad632a5b9cf3058 Mon Sep 17 00:00:00 2001 From: Brendon Baumgartner Date: Wed, 2 Oct 2019 07:19:38 -0700 Subject: [PATCH 59/76] neural engine to polly (#10548) --- source/_integrations/amazon_polly.markdown | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/_integrations/amazon_polly.markdown b/source/_integrations/amazon_polly.markdown index 70773d1b1c1..6307a57c604 100644 --- a/source/_integrations/amazon_polly.markdown +++ b/source/_integrations/amazon_polly.markdown @@ -65,10 +65,15 @@ output_format: type: string default: mp3 sample_rate: - description: "Override the default sample rate." + description: "Override the default sample rate. Possible values are: 8000, 16000, 22050, 24000." required: false type: string default: 22050 for MP3 and Ogg Vorbis, 16000 for pcm +engine: + description: "Override the default engine. Can be either of `standard` or `neural`. See Amazon documentation for compatible regions and voices." + required: false + type: string + default: standard {% endconfiguration %} ## Usage From b069d137a2137993dd3df8378d59cd2dcdbb3d2d Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Wed, 2 Oct 2019 09:20:54 -0500 Subject: [PATCH 60/76] add actions to picture-glance entities (#10498) * Update picture-glance.markdown * :pencil2: Tweaks --- source/_lovelace/picture-glance.markdown | 50 ++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/source/_lovelace/picture-glance.markdown b/source/_lovelace/picture-glance.markdown index 4071c3b436c..494d5d78fa3 100644 --- a/source/_lovelace/picture-glance.markdown +++ b/source/_lovelace/picture-glance.markdown @@ -133,6 +133,56 @@ icon: required: false description: Overwrites default icon. type: string +tap_action: + required: false + description: Action to take on tap + type: map + keys: + action: + required: true + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + type: string + default: "`more-info`" + navigation_path: + required: false + description: "Path to navigate to (e.g., `/lovelace/0/`) when `action` defined as `navigate`" + type: string + default: none + service: + required: false + description: "Service to call (e.g., `media_player.media_play_pause`) when `action` defined as `call-service`" + type: string + default: none + service_data: + required: false + description: "Service data to include (e.g., `entity_id: media_player.bedroom`) when `action` defined as `call-service`" + type: string + default: none +hold_action: + required: false + description: Action to take on tap-and-hold + type: map + keys: + action: + required: true + description: "Action to perform (`more-info`, `toggle`, `call-service`, `navigate`, `none`)" + type: string + default: "`more-info`" + navigation_path: + required: false + description: "Path to navigate to (e.g., `/lovelace/0/`) when `action` defined as `navigate`" + type: string + default: none + service: + required: false + description: "Service to call (e.g., `media_player.media_play_pause`) when `action` defined as `call-service`" + type: string + default: none + service_data: + required: false + description: "Service data to include (e.g., `entity_id: media_player.bedroom`) when `action` defined as `call-service`" + type: string + default: none {% endconfiguration %} ## How to use state_filter From a60ac0c9ab8c2944afe03999ca2e939d9a4220d2 Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Wed, 2 Oct 2019 08:18:10 -0700 Subject: [PATCH 61/76] Add info about call direction sensor (#10537) --- source/_integrations/obihai.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/obihai.markdown b/source/_integrations/obihai.markdown index 7943f353913..a96b92f0b43 100644 --- a/source/_integrations/obihai.markdown +++ b/source/_integrations/obihai.markdown @@ -41,6 +41,7 @@ The following is a list of expected sensors and their expected states when using - Sensor if the device requires a reboot (`True` or `False`) - Sensor for each configured service (`0` for no calls, `1` for a call and `2` for call waiting/3way calling) - Sensor for the last reboot date +- Sensor for call direction (`No Active Calls`, `Inbound Call` or `Outbound Call`) In addition to the above list the `admin` account can expect to see the following sensors: From 417c5fd425b808f2caf92ff2cf939be2192efb84 Mon Sep 17 00:00:00 2001 From: John Luetke Date: Wed, 2 Oct 2019 09:41:22 -0700 Subject: [PATCH 62/76] Fix typo from #10485 (#10564) --- source/_integrations/pi_hole.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/pi_hole.markdown b/source/_integrations/pi_hole.markdown index fd380e9277c..b6f622aa5a1 100644 --- a/source/_integrations/pi_hole.markdown +++ b/source/_integrations/pi_hole.markdown @@ -76,7 +76,7 @@ Disable your Pi-hole for the specified amount of time. _Note: This service requires `api_key` to be specified in the configuration._ -### Service `pi.hole_enable` +### Service `pi_hole.enable` Enable your Pi-hole. From c12e1cc164a99df457f1bebfcb252a3123ab2b43 Mon Sep 17 00:00:00 2001 From: John Luetke Date: Wed, 2 Oct 2019 13:05:57 -0700 Subject: [PATCH 63/76] Update to reflect that Pi-hole is now an integration, not just a sensor (#10565) * Update to reflect that this is now an intergration, not just a sensor * :pencil2: Tweak * :pencil2: Tweak --- source/_integrations/pi_hole.markdown | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/source/_integrations/pi_hole.markdown b/source/_integrations/pi_hole.markdown index b6f622aa5a1..bce2f73648d 100644 --- a/source/_integrations/pi_hole.markdown +++ b/source/_integrations/pi_hole.markdown @@ -1,6 +1,6 @@ --- -title: "Pi-hole Sensor" -description: "Instructions on how to integrate Pi-hole sensors into Home Assistant." +title: "Pi-hole" +description: "Instructions on how to integrate Pi-hole with Home Assistant." ha_category: - System Monitor ha_iot_class: Local Polling @@ -8,7 +8,7 @@ logo: pi_hole.png ha_release: 0.28 --- -The `pi_hole` integration allows you to retrieve and display statistics from a single [Pi-hole](https://pi-hole.net/) system. +The `pi_hole` integration allows you to retrieve statistics and interact with a single [Pi-hole](https://pi-hole.net/) system. ## Configuration @@ -22,10 +22,7 @@ pi_hole: {% configuration %} host: description: > - The hostname (and port), e.g. '192.168.0.3:4865' of the host where Pi-hole is running. - - - **Note:** If your Pi-Hole instance is the Hass.io add-on, you *must* specify port `4865`. + The hostname (and port), e.g., '192.168.0.3:4865' of the host where Pi-hole is running. If your Pi-Hole instance is the Hass.io add-on, you *must* specify port `4865`. required: false type: string default: pi.hole @@ -41,7 +38,8 @@ ssl: type: boolean default: false verify_ssl: - description: Verify the certification of the system. + description: > + Verify the SSL/TLS certificate of the system. If your Pi-Hole instance uses a self-signed certificate, you should specify `false`. required: false type: boolean default: true From 9353e56d81d17f27d4add2113661ee5bf43ce215 Mon Sep 17 00:00:00 2001 From: David Bonnes Date: Wed, 2 Oct 2019 21:49:09 +0100 Subject: [PATCH 64/76] update geniushub docs (#10443) * update geniushub docs * add another example automation * tweak * small tweak * small tweak * update to reality * small tweak * :pencil2: Tweaks --- source/_integrations/geniushub.markdown | 117 +++++++++++++++++------- 1 file changed, 82 insertions(+), 35 deletions(-) diff --git a/source/_integrations/geniushub.markdown b/source/_integrations/geniushub.markdown index 703ca7f966a..afea22c9b81 100644 --- a/source/_integrations/geniushub.markdown +++ b/source/_integrations/geniushub.markdown @@ -1,6 +1,6 @@ --- title: "Genius Hub" -description: "Instructions on how to integrate Genius Hub with Home Assistant." +description: "Instructions on how to integrate a Genius Hub with Home Assistant." logo: geniushub.png ha_category: - Climate @@ -11,22 +11,20 @@ ha_release: 0.92 ha_iot_class: Local Polling --- -The `geniushub` integration links Home Assistant with your Genius Hub CH/DHW system, including its Zones, Devices, and Issues. +The `geniushub` integration links Home Assistant with your Genius Hub CH/DHW system, including its zones, devices, and issues. -Currently, there is no support for Zone schedules. - -It uses the [geniushub](https://pypi.org/project/geniushub-client/) client library. +It uses the [geniushub](https://pypi.org/project/geniushub-client/) client library, which provides data compatible with the v1 API that _may not_ necessarily match that of the official Web App. ### Zones -Each Zone controlled by your Genius hub will be exposed as either a: +Each zone controlled by your Genius Hub will be exposed as either a: - - `Climate` entity, for **Radiator** Zones, and - - `Water Heater`, for **Hot Water Temperature** Zones +- `Climate` entity, for **Radiator** and **Wet Underfloor** Zones, and +- `Water Heater` entity, for **Hot Water Temperature** Zones -Other Zone types, such as **On / Off** Zones, are not currently supported. +Other zone types, such as **On/Off** zones, are not currently supported (although see `Binary Sensor`s, below). -Each such entity will report back its mode, state, setpoint and current temperature; other properties are available via its attributes (see below). The Zone's mode can changed as below. +Each entity derived from a GH zone will report back its mode, setpoint and current temperature; other properties are available via its attributes (see below). The zone's mode can be changed as below. GH mode | HA Operation | HA Preset :---: | :---: | :---: @@ -35,16 +33,18 @@ GH mode | HA Operation | HA Preset **Override** | Heat | Boost **Footprint** | Heat | Activity -Note that **Footprint** mode is only available to **Radiator** Zones that have room sensors. +Note that **Footprint** mode is only available to **Radiator** zones that have room sensors. + +Currently, there is no support for reading/altering zone schedules, although a zone can be switched to/from modes that utilize schedules. ### Devices -If the Hub is directly polled using the v3 API (see below), then each Device controlled by your Genius hub will be exposed as either a: +Each Device controlled by your Genius hub will be exposed as either a: - - `Sensor` entity with a % battery, for any Device with a battery (e.g. a Genius Valve), or - - `Binary Sensor` entity with on/off state for any Device that is a switch (e.g. a Smart Plug) +- `Sensor` entity with a % battery, for any Device with a battery (e.g., a Genius Valve), or +- `Binary Sensor` entity with on/off state for any Device that is a switch (e.g., Smart Plugs, DCRs) -Each such entity will report back its primary state; in addition, `assigned_zone` and `last_comms` (last communications time) are available via the entity's attributes. +Each such entity will report back its primary state and `assigned_zone`. If the Hub is directly polled using Option 1 (see below), then some additional attributes such as `last_comms` (last communications time) are also available. ### Issues @@ -57,26 +57,45 @@ Each such entity has a state attribute that will contain a list of any such issu - alias: GeniusHub Error Alerts trigger: platform: numeric_state - entity_id: sensor.errors + entity_id: sensor.geniushub_errors above: 0 action: - service: notify.pushbullet_notifier data_template: title: "Genius Hub has errors" message: >- - Genius Hub has the following {{ states('sensor.errors') }} errors: - {{ state_attr('sensor.errors', 'error_list') }} + Genius Hub has the following {{ states('sensor.geniushub_errors') }} errors: + {{ state_attr('sensor.geniushub_errors', 'error_list') }} ``` {% endraw %} -### State Attributes +This alert may be useful to see if the CH is being turned on whilst you're on a holiday! -Other properties are available via each entity's state attributes. For example, in the case of **Radiator** Zones/`Climate` devices: +{% raw %} +```yaml +- alias: GeniusHub CH State Change Alert + trigger: + platform: state + entity_id: binary_sensor.dual_channel_receiver_2_1 + action: + - service: notify.pushbullet_notifier + data_template: + title: "Warning: CH State Change!" + message: >- + {{ trigger.to_state.attributes.friendly_name }} has changed + from {{ trigger.from_state.state }} to {{ trigger.to_state.state }}. +``` +{% endraw %} + +## State Attributes + +Many zone/device properties are available via each entity's state attributes. For example, in the case of **Radiator**-derived `Climate` entities (note 'status'): ```json { "status": { "type": "radiator", + "mode": "off", "temperature": 19, "occupied": False, "override": { @@ -87,11 +106,24 @@ Other properties are available via each entity's state attributes. For example, } ``` +... and for **Genius Valve**-derived `Sensor` entities (note 'state'): + +```json +{ + "state": { + "set_temperature": 4.0, + "measured_temperature": 20.030000686645508, + "setback": 3.5, + "wakeup_interval": 450 + } +} +``` + This data can be accessed in automations, etc. via a value template. For example: {% raw %} ```yaml -value_template: "{{ state_attr('water_heater.boiler_h_w', 'status').override.setpoint }}" +value_template: "{{ state_attr('water_heater.genius_zone_2', 'status').override.setpoint }}" ``` {% endraw %} @@ -99,7 +131,7 @@ In the specific case of **Radiator** zones with room sensors: {% raw %} ```yaml -value_template: "{{ state_attr('climate.main_room', 'status').occupied }}" +value_template: "{{ state_attr('climate.genius_zone_12', 'status').occupied }}" ``` {% endraw %} @@ -107,26 +139,35 @@ value_template: "{{ state_attr('climate.main_room', 'status').occupied }}" To set up this integration, add one of the following to your **configuration.yaml** file. -### Option 1: hub token only +If required, you can switch between one Option and the other and, as the `unique_id` remains consistent, state history will be preserved. This assumes that the correct MAC address is provided for Option 2, below. If a wrong MAC address was provided for Option 1, then the MAC address can be overridden for Option 1 to maintain these links within the entity registry. - - requires a **hub token** obtained from [my.geniushub.co.uk/tokens](https://my.geniushub.co.uk/tokens) - - uses the v1 API - which is well-documented - - polls Heat Genius' own servers (so is slower, say ~5-10s response time) +### Option 1: hub hostname/address with user credentials + +This is the recommended option. + +- Requires your **username** & **password**, as used with [geniushub.co.uk/app](https://www.geniushub.co.uk/app). +- Uses the v3 API - unofficial, but there are additional features (e.g., battery levels). +- Polls the hub directly (so is faster, say ~1s response time). +- You have the option of specifying a MAC address. + +The hub does not have to be in the same subnet as HA. + +### Option 2: hub token only + +This option is recommended only if Ootion 1 does not work. The MAC address should match that written on the back of the Hub. + +- Requires a **hub token** obtained from [my.geniushub.co.uk/tokens](https://my.geniushub.co.uk/tokens). +- Uses the v1 API - which is well-documented. +- Polls Heat Genius' own servers (so is slower, say ~5-10s response time). +- You should use the Hub's MAC address (although any valid MAC will do). ```yaml # Example configuration.yaml entry, using a Hub Token geniushub: token: GENIUS_HUB_TOKEN + mac : GENIUS_HUB_MAC ``` -### Option 2: hub hostname/address with user credentials - - - requires your **username** & **password**, as used with [www.geniushub.co.uk/app](https://www.geniushub.co.uk/app) - - uses the v3 API - unofficial, but there are additional features (e.g., battery levels) - - polls the hub directly (so is faster, say ~1s response time) - -The hub does not have to be in the same network as HA. - ```yaml # Example configuration.yaml entry, directly polling the Hub geniushub: @@ -140,6 +181,10 @@ token: description: The Hub Token of the Genius Hub. required: true type: string +mac: + description: The MAC address of the Hub's ethernet port. + required: false + type: string host: description: The hostname/IP address of the Genius Hub. required: true @@ -154,4 +199,6 @@ password: type: string {% endconfiguration %} -Note that if a `host` is used instead of `token`, then the `username` and `password` are also required. +Note: `username` and `password` are only required when `host` is used (instead of `token`). + +Note: `mac` is required if `token` is used (instead of `host`) and is optional otherwise. From a91ea9286aa9c8be510906efd11632ebd748fa09 Mon Sep 17 00:00:00 2001 From: Antoine Bertin Date: Wed, 2 Oct 2019 21:03:46 +0000 Subject: [PATCH 65/76] Mosquitto 5.1 udpate (#9771) --- source/_addons/mosquitto.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/_addons/mosquitto.markdown b/source/_addons/mosquitto.markdown index 6dbf54510e8..7b1f5af0c3f 100644 --- a/source/_addons/mosquitto.markdown +++ b/source/_addons/mosquitto.markdown @@ -42,6 +42,16 @@ customize: required: false type: [boolean, string] default: false +cafile: + description: Path to the CA certificate. If not set, will default to the *certfile* value. + required: false + default: certfile + type: string +require_certificate: + description: Restrict to users with a valid certificate only. + required: false + default: false + type: boolean {% endconfiguration %} ### Home Assistant user management From db52f19cfe8f723bb0d1314502b42cc8b91c662d Mon Sep 17 00:00:00 2001 From: Matthias Alphart Date: Thu, 3 Oct 2019 00:54:12 +0200 Subject: [PATCH 66/76] add DPT 9.006 pressure_2byte sensor type (#10578) --- source/_integrations/sensor.knx.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/sensor.knx.markdown b/source/_integrations/sensor.knx.markdown index 93bbd69b089..ff460640e7e 100644 --- a/source/_integrations/sensor.knx.markdown +++ b/source/_integrations/sensor.knx.markdown @@ -79,6 +79,7 @@ type: | 9.001 | temperature | 2 | Β°C | | 9.004 | illuminance | 2 | lx | | 9.005 | speed_ms | 2 | m/s | +| 9.006 | pressure_2byte | 2 | Pa | | 9.007 | humidity | 2 | % | | 9.008 | ppm | 2 | ppm | | 9.020 | voltage | 2 | mV | From b9c845e801da48506ce772b5b6db31aa7b4f2e00 Mon Sep 17 00:00:00 2001 From: orrpan Date: Thu, 3 Oct 2019 12:50:40 +0200 Subject: [PATCH 67/76] emulated_hue note for sleep cycle and sleep as android (#10368) * emulated_hue note for sleep cycle and sleep as android * Update emulated_hue.markdown * :pencil2: Tweak --- source/_integrations/emulated_hue.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_integrations/emulated_hue.markdown b/source/_integrations/emulated_hue.markdown index ae128922ffa..a73558708f3 100644 --- a/source/_integrations/emulated_hue.markdown +++ b/source/_integrations/emulated_hue.markdown @@ -35,6 +35,12 @@ If you added or upgraded to a newer Alexa device and devices are not found, you
+
+ +[Sleep Cycle](https://www.sleepcycle.com) and [Sleep as Android](https://sleep.urbandroid.org): smart alarm clock app can use emulated_hue to turn on and off entities. Sleep Cycle only has it implemented in the iOS app, see [Sleep Cycle support](https://support.sleepcycle.com/hc/en-us/articles/207670385-Does-Sleep-Cycle-integrates-with-Phillips-Hue-). The app requires the same configuration as Google Home and does not work if the type is defined as Alexa in the configuration. + +
+ ### Configuration To enable the emulated Hue bridge, add one of the following configs to your `configuration.yaml` file: From cc78dcfcb96d0835b415110d9feca5faf19f2da7 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 3 Oct 2019 16:30:59 +0200 Subject: [PATCH 68/76] Initial draft release notes 0.100 --- _config.yml | 6 +- source/_posts/2019-10-09-release-100.markdown | 700 ++++++++++++++++++ 2 files changed, 703 insertions(+), 3 deletions(-) create mode 100644 source/_posts/2019-10-09-release-100.markdown diff --git a/_config.yml b/_config.yml index 1fcd8b3c3e8..d9c16deede8 100644 --- a/_config.yml +++ b/_config.yml @@ -100,9 +100,9 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 99 -current_patch_version: 3 -date_released: 2019-09-25 +current_minor_version: 100 +current_patch_version: 0 +date_released: 2019-10-09 # 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/_posts/2019-10-09-release-100.markdown b/source/_posts/2019-10-09-release-100.markdown new file mode 100644 index 00000000000..f05e2ef12e9 --- /dev/null +++ b/source/_posts/2019-10-09-release-100.markdown @@ -0,0 +1,700 @@ +--- +layout: post +title: "0.100: TBD" +description: "TBD" +date: 2019-10-03 14:05:02 +date_formatted: "October 9, 2019" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2019-09-0.100/components.png +--- + + + +TBD + +## In other news + +TBD + +## New Integrations + +- Add support for DOODS Image Processing ([@snowzach] - [#26208]) ([doods docs]) (new-integration) +- Izone component ([@Swamp-Ig] - [#24550]) ([izone docs]) (new-integration) +- Add transport data from maps.yandex.ru api ([@rishatik92] - [#26252]) ([moscow_yandex_transport docs]) (new-integration) +- Add transport data from maps.yandex.ru api ([@rishatik92] - [#26766]) ([yandex_transport docs]) (new-integration) +- Add Kaiterra integration ([@Michsior14] - [#26661]) ([kaiterra docs]) (new-integration) +- Add Ombi integration ([@larssont] - [#26755]) ([ombi docs]) (new-integration) +- Add here_travel_time ([@eifinger] - [#24603]) ([here_travel_time docs]) (new-integration) +- Add support for SOMA Smartshades devices ([@ratsept] - [#26226]) ([soma docs]) (new-integration) +- Add saj component ([@fredericvl] - [#26902]) ([saj docs]) (new-integration) + +## New Platforms + +- Add iaqualink binary sensor and unique_id ([@flz] - [#26616]) ([iaqualink docs]) (new-platform) +- Add basic support for IKEA Fyrtur blinds ([@ggravlingen] - [#26659]) ([tradfri docs]) (new-platform) +- Centralize rainbird config and add binary sensor platform ([@konikvranik] - [#26393]) ([rainbird docs]) (breaking change) (new-platform) + +## Breaking Changes + +- Refactor nzbget to support future platform changes ([@chriscla] - [#26462]) ([nzbget docs]) (breaking change) +- Fix spaceapi ([@Bouni] - [#26453]) ([spaceapi docs]) (breaking change) +- Remove deprecated ups integration (ADR-0004) ([@frenck] - [#26824]) ([ups docs]) (breaking change) +- Remove deprecated usps integration (ADR-0004) ([@frenck] - [#26823]) ([usps docs]) (breaking change) +- Remove deprecated sytadin integration (ADR-0004) ([@frenck] - [#26819]) ([sytadin docs]) (breaking change) +- Remove deprecated srp_energy integration (ADR-0004) ([@frenck] - [#26826]) ([srp_energy docs]) (breaking change) +- Remove deprecated fedex integration (ADR-0004) ([@frenck] - [#26822]) ([fedex docs]) (breaking change) +- Remove deprecated linksys_ap integration (ADR-0004) ([@frenck] - [#26847]) ([linksys_ap docs]) (breaking change) +- Group Linky sensors to Linky meter device ([@piitaya] - [#26738]) ([linky docs]) (breaking change) +- Move elv integration to component and bump pypca ([@majuss] - [#26552]) ([elv docs]) (breaking change) +- Reorg device automation ([@balloob] - [#26880]) ([automation docs]) ([binary_sensor docs]) ([deconz docs]) ([device_automation docs]) ([light docs]) ([switch docs]) ([zha docs]) (breaking change) +- Add config flow to ecobee ([@marthoc] - [#26634]) ([ecobee docs]) (breaking change) +- Add config flow to transmission ([@engrbm87] - [#26434]) ([transmission docs]) (breaking change) +- Centralize rainbird config and add binary sensor platform ([@konikvranik] - [#26393]) ([rainbird docs]) (breaking change) (new-platform) +- Fix incomfort and Bump client to 0.3.5 ([@zxdavb] - [#26802]) ([incomfort docs]) (breaking change) +- Bugfix evohome ([@zxdavb] - [#26810]) ([evohome docs]) (breaking change) +- Update opentherm_gw.climate to match Climate 1.0 ([@mvn23] - [#25931]) ([opentherm_gw docs]) (breaking change) +- Tweak geniushub and bump client to v0.6.26 ([@zxdavb] - [#26640]) ([geniushub docs]) (breaking change) + +## All changes + +- Add support for DOODS Image Processing ([@snowzach] - [#26208]) ([doods docs]) (new-integration) +- Bump zigate to 0.3.0 ([@doudz] - [#26586]) ([zha docs]) +- Upgrade youtube_dl to 2019.09.12.1 ([@BKPepe] - [#26593]) ([media_extractor docs]) +- Improve bluetooth tracker device code ([@pgilad] - [#26067]) ([bluetooth_tracker docs]) +- Disable Watson TTS Telemetry ([@poofyteddy] - [#26253]) ([watson_tts docs]) +- Fix Typo ([@SNoof85] - [#26612]) ([cert_expiry docs]) +- Refactor Bluetooth Tracker to async ([@pgilad] - [#26614]) ([bluetooth_tracker docs]) +- deCONZ - create deconz_events through sensor platform ([@Kane610] - [#26592]) ([deconz docs]) +- zha ZCL color loop effect ([@amigan] - [#26549]) ([zha docs]) +- Add iaqualink binary sensor and unique_id ([@flz] - [#26616]) ([iaqualink docs]) (new-platform) +- Add group attribute to Homematic IP Cloud ([@SukramJ] - [#26618]) ([homematicip_cloud docs]) +- Move deCONZ services to their own file ([@Kane610] - [#26645]) ([deconz docs]) +- Add built in weather to Homematic IP Cloud ([@SukramJ] - [#26642]) ([homematicip_cloud docs]) +- deCONZ - battery sensor instead of battery attribute ([@Kane610] - [#26591]) ([deconz docs]) +- deCONZ - Remove mechanisms to import a configuration from configuration.yaml ([@Kane610] - [#26648]) ([deconz docs]) +- Refactor nzbget to support future platform changes ([@chriscla] - [#26462]) ([nzbget docs]) (breaking change) +- Fix Environment Canada weather forecast, retain icon_code sensor ([@michaeldavie] - [#26646]) ([environment_canada docs]) +- Emulate color temperature for non-ct lights in light groups ([@bryanyork] - [#23495]) ([google_assistant docs]) ([group docs]) +- Use pynzbgetapi exceptions consistently ([@chriscla] - [#26667]) ([nzbget docs]) +- deCONZ - Improve service tests ([@Kane610] - [#26663]) ([deconz docs]) +- zha: fix 0 second transitions being ignored. ([@abmantis] - [#26654]) ([zha docs]) +- pytfiac version bump to 0.4 ([@fredrike] - [#26669]) ([tfiac docs]) +- Switch py_nextbus to py_nextbusnext ([@ViViDboarder] - [#26681]) ([nextbus docs]) +- Disconnect velux on hass stop ([@gibman] - [#26266]) ([velux docs]) +- Improve Envoy detection and support multiple Envoys ([@jesserizzo] - [#26665]) ([enphase_envoy docs]) +- Fix volumio set shuffle ([@zewelor] - [#26660]) ([volumio docs]) +- Fix mysensors validation for composite entities ([@MartinHjelmare] - [#26666]) ([mysensors docs]) +- Add support for automation description ([@emontnemery] - [#26662]) ([automation docs]) ([config docs]) +- Add alternative name for Tibber sensors ([@Danielhiversen] - [#26685]) ([tibber docs]) +- deCONZ improve light tests ([@Kane610] - [#26697]) ([deconz docs]) +- Hide "PTZ is not available on this camera" warning ([@definitio] - [#26649]) ([onvif docs]) +- deCONZ rewrite sensor tests ([@Kane610] - [#26679]) ([deconz docs]) +- Fix torque degree char ([@roblandry] - [#26183]) ([torque docs]) +- Change datetime.now() to dt_util.now() ([@tsvi] - [#26582]) +- Add additional needles to glances cpu_temp attribute ([@shutupflanders] - [#22311]) ([glances docs]) +- Move alexa integration to use dt_util ([@tsvi] - [#26723]) ([alexa docs]) +- Bumps pytest to 5.1.2 ([@frenck] - [#26718]) +- Bumps aiohttp to 3.6.0 ([@frenck] - [#26728]) +- Bumps pre-commit to 1.18.3 ([@frenck] - [#26717]) +- Update Solax Library to 0.2.2 ([@squishykid] - [#26705]) ([solax docs]) +- Bump aiohttp to 3.6.1 ([@frenck] - [#26739]) +- Add Plex config flow support ([@jjlawren] - [#26548]) ([plex docs]) +- Bump restrictedpython to 5.0 ([@frenck] - [#26741]) +- Izone component ([@Swamp-Ig] - [#24550]) ([izone docs]) (new-integration) +- Bump influxdb to 5.2.3 ([@frenck] - [#26743]) ([influxdb docs]) +- Update codeowners ([@amelchio] - [#26733]) ([lifx docs]) ([lifx_cloud docs]) ([lifx_legacy docs]) ([netgear_lte docs]) ([sonos docs]) +- Add transport data from maps.yandex.ru api ([@rishatik92] - [#26252]) ([moscow_yandex_transport docs]) (new-integration) +- deCONZ improve gateway tests ([@Kane610] - [#26709]) ([deconz docs]) +- Revert "Add transport data from maps.yandex.ru api (#26252)" ([@pvizeli] - [#26762]) ([yandex_transport docs]) +- Bump openwrt-luci-rpc to version 1.1.1 ([@flowolf] - [#26759]) ([luci docs]) +- Type hint additions ([@scop] - [#26765]) ([automation docs]) ([cover docs]) ([frontend docs]) ([http docs]) ([media_player docs]) ([switch docs]) +- Add transport data from maps.yandex.ru api ([@rishatik92] - [#26766]) ([yandex_transport docs]) (new-integration) +- ZHA siren and warning device support ([@dmulcahey] - [#26046]) ([zha docs]) +- Bump aiowwlln to 2.0.2 ([@bachya] - [#26769]) ([wwlln docs]) +- Bump simplisafe-python to 5.0.1 ([@bachya] - [#26775]) ([simplisafe docs]) +- Add integration scaffolding script ([@balloob] - [#26777]) +- Bump HAP-python to 2.6.0 for homekit ([@Jc2k] - [#26783]) ([homekit docs]) +- Bump pynws version to 0.8.1 ([@MatthewFlamm] - [#26770]) ([nws docs]) +- Add optimizer data to solaredge_local ([@scheric] - [#26708]) ([solaredge_local docs]) +- Mqtt binary sensor expire after ([@KiLLeRRaT] - [#26058]) ([mqtt docs]) +- Upgrade importlib-metadata to 0.23 ([@fabaff] - [#26787]) +- Upgrade python-whois to 0.7.2 ([@fabaff] - [#26788]) ([whois docs]) +- Fix doods missing detector name kwarg ([@snowzach] - [#26784]) ([doods docs]) +- Add myself as a pi_hole codeowner ([@johnluetke] - [#26796]) ([pi_hole docs]) +- Fix spaceapi ([@Bouni] - [#26453]) ([spaceapi docs]) (breaking change) +- Update light.py ([@CQoute] - [#26703]) ([esphome docs]) +- Bump hbmqtt to 0.9.5 ([@frenck] - [#26804]) ([mqtt docs]) +- Bump python-slugify to 3.0.4 ([@frenck] - [#26801]) +- Bump pytest to 5.1.3 ([@frenck] - [#26794]) +- Bump iperf3 to 0.1.11 ([@frenck] - [#26795]) ([iperf3 docs]) +- Bump shodan to 1.17.0 ([@frenck] - [#26797]) ([shodan docs]) +- Bump request_mock to 1.7.0 ([@frenck] - [#26799]) +- Bump pylutron to 0.2.5 ([@thecynic] - [#26815]) +- Upgrade sendgrid to 6.1.0 ([@fabaff] - [#26809]) ([sendgrid docs]) +- Exempt 'Help wanted' issue from stale bot ([@frenck] - [#26829]) +- Add device automation support to binary_sensor entities ([@emontnemery] - [#26643]) ([binary_sensor docs]) +- Update Vivotek camera component ([@HarlemSquirrel] - [#26754]) ([vivotek docs]) +- Add basic support for IKEA Fyrtur blinds ([@ggravlingen] - [#26659]) ([tradfri docs]) (new-platform) +- Unload Plex config entries ([@jjlawren] - [#26771]) ([plex docs]) +- Add Kaiterra integration ([@Michsior14] - [#26661]) ([kaiterra docs]) (new-integration) +- Add manual step to Plex config flow ([@jjlawren] - [#26773]) ([plex docs]) +- Add Ombi integration ([@larssont] - [#26755]) ([ombi docs]) (new-integration) +- Prevent Wemo doing I/O in event loop ([@balloob] - [#26835]) ([wemo docs]) +- Split scaffolding script ([@balloob] - [#26832]) +- Remove deprecated ups integration (ADR-0004) ([@frenck] - [#26824]) ([ups docs]) (breaking change) +- Remove deprecated usps integration (ADR-0004) ([@frenck] - [#26823]) ([usps docs]) (breaking change) +- Remove deprecated sytadin integration (ADR-0004) ([@frenck] - [#26819]) ([sytadin docs]) (breaking change) +- Add here_travel_time ([@eifinger] - [#24603]) ([here_travel_time docs]) (new-integration) +- Remove deprecated srp_energy integration (ADR-0004) ([@frenck] - [#26826]) ([srp_energy docs]) (breaking change) +- Remove deprecated fedex integration (ADR-0004) ([@frenck] - [#26822]) ([fedex docs]) (breaking change) +- Store ZHA light brightness when fading off to turn on at the correct brightness ([@abmantis] - [#26680]) ([zha docs]) +- Bump pyotp to 2.3.0 ([@frenck] - [#26849]) ([otp docs]) +- Remove deprecated linksys_ap integration (ADR-0004) ([@frenck] - [#26847]) ([linksys_ap docs]) (breaking change) +- Bump up ZHA dependencies ([@Adminiuga] - [#26746]) +- fix onvif/camera setting up error ([@sanyatuning] - [#26825]) ([onvif docs]) +- Bump homematicip_cloud to 0.10.11 ([@SukramJ] - [#26852]) ([homematicip_cloud docs]) +- Group Linky sensors to Linky meter device ([@piitaya] - [#26738]) ([linky docs]) (breaking change) +- Add unit to 'charging_level_hv' bwm_connected_drive sensor ([@timmccor] - [#26861]) ([bmw_connected_drive docs]) +- Add reproduce state template ([@balloob] - [#26866]) +- Put draw_box in image_processing ([@robmarkcole] - [#26712]) ([doods docs]) ([image_processing docs]) ([tensorflow docs]) +- Move elv integration to component and bump pypca ([@majuss] - [#26552]) ([elv docs]) (breaking change) +- Add availability_template to Template Sensor platform ([@grillp] - [#26516]) ([template docs]) +- Add device automation support to ZHA ([@dmulcahey] - [#26821]) ([zha docs]) +- Removes unnecessary else/elif blocks ([@frenck] - [#26884]) +- Add and corrects typehints in Entity helper & core class ([@frenck] - [#26805]) +- Add comment for clarity to helper.entity.enabled() ([@frenck] - [#26793]) +- Reorg device automation ([@balloob] - [#26880]) ([automation docs]) ([binary_sensor docs]) ([deconz docs]) ([device_automation docs]) ([light docs]) ([switch docs]) ([zha docs]) (breaking change) +- Use Python3 new super syntax sugar ([@frenck] - [#26890]) +- bump quirks ([@dmulcahey] - [#26885]) ([zha docs]) +- Update zigpy_zigate to 0.4.0 ([@doudz] - [#26883]) ([zha docs]) +- Inverting states for opening/closing Homekit covers ([@tleegaard] - [#26872]) ([homekit_controller docs]) +- Removes unnecessary utf8 source encoding declarations ([@frenck] - [#26887]) ([lcn docs]) ([yandex_transport docs]) +- Removes unnecessary print_function future import ([@frenck] - [#26888]) +- Add availability_template to Template Switch platform ([@grillp] - [#26513]) ([template docs]) +- Bump ndms2-client to 0.0.9 ([@foxel] - [#26899]) ([keenetic_ndms2 docs]) +- Add voltage attribute to Xiaomi Aqara devices ([@zhumuht] - [#26876]) ([xiaomi_aqara docs]) +- Fix bed_activity history chart of the Xiaomi Aqara vibration sensor ([@zhumuht] - [#26875]) ([xiaomi_aqara docs]) +- Fix missing whitespace around arithmetic operator ([@JeffLIrion] - [#26908]) ([xiaomi_aqara docs]) +- deCONZ - Improve ssdp discovery by storing uuid in config entry ([@Kane610] - [#26882]) ([deconz docs]) +- Add google_assistant alarm_control_panel ([@engrbm87] - [#26249]) ([google_assistant docs]) +- Add call direction sensor for Obihai ([@dshokouhi] - [#26867]) ([obihai docs]) +- deCONZ - Increase bridge discovery robustness in config flow ([@Kane610] - [#26911]) ([deconz docs]) +- Add config flow to ecobee ([@marthoc] - [#26634]) ([ecobee docs]) (breaking change) +- Remove lamps and groups from ha when removed from Hue ([@bramkragten] - [#26881]) ([hue docs]) +- Add MySensors ACK ([@petewill] - [#26894]) ([mysensors docs]) +- Add mysensors codeowner ([@MartinHjelmare] - [#26917]) ([mysensors docs]) +- Bump pyobihai, add unique ID and availability ([@dshokouhi] - [#26922]) ([obihai docs]) +- Add Plex config options support ([@jjlawren] - [#26870]) ([plex docs]) +- Add config flow to transmission ([@engrbm87] - [#26434]) ([transmission docs]) (breaking change) +- Centralize rainbird config and add binary sensor platform ([@konikvranik] - [#26393]) ([rainbird docs]) (breaking change) (new-platform) +- Add ecobee services to create and delete vacations ([@marthoc] - [#26923]) ([ecobee docs]) +- Bump androidtv to 0.0.28 ([@JeffLIrion] - [#26906]) ([androidtv docs]) +- Add more ebusd Vaillant "bai" sensors ([@sashao] - [#26750]) ([ebusd docs]) +- Add xbox live custom update interval ([@MartinHjelmare] - [#26939]) ([xbox_live docs]) +- Guard against non supported entities ([@balloob] - [#26941]) ([alexa docs]) +- Bump pyowlet to 1.0.3 ([@jaburges] - [#26892]) ([owlet docs]) +- Revert Nest HVAC mode when disabling Eco mode ([@joe248] - [#26934]) ([nest docs]) +- Fix ecobee integration ([@marthoc] - [#26951]) ([ecobee docs]) +- Add CO2 level reading for Kaiterra integration ([@Michsior14] - [#26935]) ([kaiterra docs]) +- Improve validation of device trigger config ([@emontnemery] - [#26910]) ([automation docs]) ([config docs]) ([device_automation docs]) +- Add device action support for ZHA ([@dmulcahey] - [#26903]) ([zha docs]) +- Add support for Z-Wave battery level ([@oandrew] - [#26943]) ([zwave docs]) +- Update Alexa discovery description ([@bramkragten] - [#26933]) ([alexa docs]) +- Add templates to scaffold device_trigger, device_condition, ([@balloob] - [#26871]) +- Upgrade mypy to 0.730, address raised issues ([@scop] - [#26959]) ([http docs]) +- Add hive boost to climate and water_heater ([@KJonline] - [#26789]) ([hive docs]) +- Bump Travis timeout to 50 minutes ([@scop] - [#26978]) +- Remove no longer needed Python < 3.6 compatibility code ([@scop] - [#27024]) +- 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]) +- 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]) +- Add availability_template to Template Fan platform ([@grillp] - [#26511]) ([template docs]) +- Add availability_template to Template Light platform ([@grillp] - [#26512]) ([template docs]) +- Add availability_template to Template Vacuum platform ([@grillp] - [#26514]) ([template docs]) +- Add create, remove of devices for HomematicIP_Cloud ([@SukramJ] - [#27030]) ([homematicip_cloud docs]) +- Add venstar support for hvac action ([@david81] - [#26956]) ([venstar docs]) +- Change hive hotwater to hot_water + bug fix ([@KJonline] - [#27038]) ([hive docs]) +- Return esphome cover position as Integer ([@neffs] - [#27039]) ([esphome docs]) +- Type hint additions ([@scop] - [#26831]) ([device_automation docs]) ([frontend docs]) ([group docs]) ([media_player docs]) ([persistent_notification docs]) ([sun docs]) ([websocket_api docs]) ([zone docs]) +- Upgrade pytest to 5.2.0 ([@scop] - [#27058]) +- Bump zha quirks to 0.0.26 ([@dmulcahey] - [#27051]) ([zha docs]) +- Add Pi-hole enable and disable services ([@johnluetke] - [#27055]) ([pi_hole docs]) +- add utc tz to forecast ([@MatthewFlamm] - [#27049]) ([darksky docs]) +- Fix rest_command when server is unreachable ([@sebasje] - [#26948]) ([rest_command docs]) +- Fix incomfort and Bump client to 0.3.5 ([@zxdavb] - [#26802]) ([incomfort docs]) (breaking change) +- Add support for SOMA Smartshades devices ([@ratsept] - [#26226]) ([soma docs]) (new-integration) +- Bump pyecobee to 0.1.4 ([@marthoc] - [#27074]) ([ecobee docs]) +- Fix SSL connections to Pi-hole ([@johnluetke] - [#27073]) ([pi_hole docs]) +- Bump shodan to 1.19.0 ([@frenck] - [#27079]) ([shodan docs]) +- Add some icons for Obihai ([@dshokouhi] - [#27075]) ([obihai docs]) +- bumped version of upstream library ([@exxamalte] - [#27083]) ([geonetnz_quakes docs]) +- Remove last of device tracker scanner ([@Kane610] - [#27082]) ([unifi docs]) +- Bugfix evohome ([@zxdavb] - [#26810]) ([evohome docs]) (breaking change) +- Add saj component ([@fredericvl] - [#26902]) ([saj docs]) (new-integration) +- Add availability_template to Template Lock platform ([@grillp] - [#26517]) ([template docs]) +- Cleanup coroutine threadsafe ([@pvizeli] - [#27080]) ([bluetooth_le_tracker docs]) ([generic docs]) ([group docs]) ([mqtt docs]) ([proxy docs]) +- Plex external config flow ([@jjlawren] - [#26936]) ([plex docs]) +- Bump attrs to 19.2.0 ([@frenck] - [#27102]) +- Update meteoalertapi to version 0.1.6 ([@rolfberkenbosch] - [#27099]) ([meteoalarm docs]) +- Nzbget services ([@chriscla] - [#26900]) ([nzbget docs]) +- Delete here_travel_time dead code COORDINATE_SCHEMA ([@eifinger] - [#27090]) ([here_travel_time docs]) +- Add missing http dependency ([@jjlawren] - [#27097]) ([plex docs]) +- Add entity registry support to ecobee integration ([@marthoc] - [#27088]) ([ecobee docs]) +- Update opentherm_gw.climate to match Climate 1.0 ([@mvn23] - [#25931]) ([opentherm_gw docs]) (breaking change) +- Improve validation of device action config ([@emontnemery] - [#27029]) ([automation docs]) +- Bump adb-shell to 0.0.3 ([@JeffLIrion] - [#27108]) ([androidtv docs]) +- Add Vera last user and low battery attributes ([@colohan] - [#27043]) ([vera docs]) +- Add neural support to amazon polly ([@bbrendon] - [#27101]) ([amazon_polly docs]) +- Bump androidtv to 0.0.29 ([@JeffLIrion] - [#27120]) ([androidtv docs]) +- Update documentation link URL for integrations in all manifests ([@frenck] - [#27114]) +- Tweak geniushub and bump client to v0.6.26 ([@zxdavb] - [#26640]) ([geniushub docs]) (breaking change) +- move ATTR_MODE to homeassistant.const ([@eifinger] - [#27118]) +- Update documentation link URL for integrations (part2) ([@frenck] - [#27117]) +- Fix generated comment in CODEOWNERS ([@tribut] - [#27115]) +- Disable flaky/slow test ([@emontnemery] - [#27125]) +- UniFi - Try to handle when UniFi erroneously marks offline client as wired ([@Kane610] - [#26960]) ([unifi docs]) +- deCONZ - Support Symfonisk sound controller with device triggers ([@Kane610] - [#26913]) ([deconz docs]) +- Add support for `for` to binary_sensor, light and switch device triggers ([@emontnemery] - [#26658]) ([device_automation docs]) +- Updated frontend to 20191002.0 ([@bramkragten] - [#27134]) ([frontend docs]) +- Fix error on failed Plex setup ([@jjlawren] - [#27132]) ([plex docs]) +- Bump up ZHA dependencies. ([@Adminiuga] - [#27127]) ([zha docs]) +- Fix unavailable climate entities in Alexa StateReport ([@ochlocracy] - [#27128]) ([alexa docs]) +- gpiozero requirement ver ([@bbrendon] - [#27129]) ([remote_rpi_gpio docs]) +- Update KNX integration to xknx 0.11.2 ([@farmio] - [#27130]) ([knx docs]) +- Display Fan entity as Fan category in Alexa ([@ochlocracy] - [#27135]) ([alexa docs]) +- Improve validation of device condition config ([@emontnemery] - [#27131]) ([automation docs]) ([binary_sensor docs]) ([light docs]) ([switch docs]) +- Fix colorTemperatureInKelvin in Alexa report when light is off ([@ochlocracy] - [#27107]) ([alexa docs]) +- Add device trigger support to sensor entities ([@emontnemery] - [#27133]) ([automation docs]) ([binary_sensor docs]) ([device_automation docs]) ([sensor docs]) +- Add Google Report State ([@balloob] - [#27112]) ([alexa docs]) ([cloud docs]) ([google_assistant docs]) + +[#22311]: https://github.com/home-assistant/home-assistant/pull/22311 +[#23495]: https://github.com/home-assistant/home-assistant/pull/23495 +[#24550]: https://github.com/home-assistant/home-assistant/pull/24550 +[#24603]: https://github.com/home-assistant/home-assistant/pull/24603 +[#25931]: https://github.com/home-assistant/home-assistant/pull/25931 +[#26046]: https://github.com/home-assistant/home-assistant/pull/26046 +[#26058]: https://github.com/home-assistant/home-assistant/pull/26058 +[#26067]: https://github.com/home-assistant/home-assistant/pull/26067 +[#26183]: https://github.com/home-assistant/home-assistant/pull/26183 +[#26208]: https://github.com/home-assistant/home-assistant/pull/26208 +[#26226]: https://github.com/home-assistant/home-assistant/pull/26226 +[#26249]: https://github.com/home-assistant/home-assistant/pull/26249 +[#26252]: https://github.com/home-assistant/home-assistant/pull/26252 +[#26253]: https://github.com/home-assistant/home-assistant/pull/26253 +[#26266]: https://github.com/home-assistant/home-assistant/pull/26266 +[#26393]: https://github.com/home-assistant/home-assistant/pull/26393 +[#26434]: https://github.com/home-assistant/home-assistant/pull/26434 +[#26453]: https://github.com/home-assistant/home-assistant/pull/26453 +[#26462]: https://github.com/home-assistant/home-assistant/pull/26462 +[#26509]: https://github.com/home-assistant/home-assistant/pull/26509 +[#26510]: https://github.com/home-assistant/home-assistant/pull/26510 +[#26511]: https://github.com/home-assistant/home-assistant/pull/26511 +[#26512]: https://github.com/home-assistant/home-assistant/pull/26512 +[#26513]: https://github.com/home-assistant/home-assistant/pull/26513 +[#26514]: https://github.com/home-assistant/home-assistant/pull/26514 +[#26516]: https://github.com/home-assistant/home-assistant/pull/26516 +[#26517]: https://github.com/home-assistant/home-assistant/pull/26517 +[#26548]: https://github.com/home-assistant/home-assistant/pull/26548 +[#26549]: https://github.com/home-assistant/home-assistant/pull/26549 +[#26552]: https://github.com/home-assistant/home-assistant/pull/26552 +[#26582]: https://github.com/home-assistant/home-assistant/pull/26582 +[#26586]: https://github.com/home-assistant/home-assistant/pull/26586 +[#26591]: https://github.com/home-assistant/home-assistant/pull/26591 +[#26592]: https://github.com/home-assistant/home-assistant/pull/26592 +[#26593]: https://github.com/home-assistant/home-assistant/pull/26593 +[#26612]: https://github.com/home-assistant/home-assistant/pull/26612 +[#26614]: https://github.com/home-assistant/home-assistant/pull/26614 +[#26616]: https://github.com/home-assistant/home-assistant/pull/26616 +[#26618]: https://github.com/home-assistant/home-assistant/pull/26618 +[#26634]: https://github.com/home-assistant/home-assistant/pull/26634 +[#26640]: https://github.com/home-assistant/home-assistant/pull/26640 +[#26642]: https://github.com/home-assistant/home-assistant/pull/26642 +[#26643]: https://github.com/home-assistant/home-assistant/pull/26643 +[#26645]: https://github.com/home-assistant/home-assistant/pull/26645 +[#26646]: https://github.com/home-assistant/home-assistant/pull/26646 +[#26648]: https://github.com/home-assistant/home-assistant/pull/26648 +[#26649]: https://github.com/home-assistant/home-assistant/pull/26649 +[#26654]: https://github.com/home-assistant/home-assistant/pull/26654 +[#26658]: https://github.com/home-assistant/home-assistant/pull/26658 +[#26659]: https://github.com/home-assistant/home-assistant/pull/26659 +[#26660]: https://github.com/home-assistant/home-assistant/pull/26660 +[#26661]: https://github.com/home-assistant/home-assistant/pull/26661 +[#26662]: https://github.com/home-assistant/home-assistant/pull/26662 +[#26663]: https://github.com/home-assistant/home-assistant/pull/26663 +[#26665]: https://github.com/home-assistant/home-assistant/pull/26665 +[#26666]: https://github.com/home-assistant/home-assistant/pull/26666 +[#26667]: https://github.com/home-assistant/home-assistant/pull/26667 +[#26669]: https://github.com/home-assistant/home-assistant/pull/26669 +[#26679]: https://github.com/home-assistant/home-assistant/pull/26679 +[#26680]: https://github.com/home-assistant/home-assistant/pull/26680 +[#26681]: https://github.com/home-assistant/home-assistant/pull/26681 +[#26685]: https://github.com/home-assistant/home-assistant/pull/26685 +[#26697]: https://github.com/home-assistant/home-assistant/pull/26697 +[#26703]: https://github.com/home-assistant/home-assistant/pull/26703 +[#26705]: https://github.com/home-assistant/home-assistant/pull/26705 +[#26708]: https://github.com/home-assistant/home-assistant/pull/26708 +[#26709]: https://github.com/home-assistant/home-assistant/pull/26709 +[#26712]: https://github.com/home-assistant/home-assistant/pull/26712 +[#26717]: https://github.com/home-assistant/home-assistant/pull/26717 +[#26718]: https://github.com/home-assistant/home-assistant/pull/26718 +[#26723]: https://github.com/home-assistant/home-assistant/pull/26723 +[#26728]: https://github.com/home-assistant/home-assistant/pull/26728 +[#26733]: https://github.com/home-assistant/home-assistant/pull/26733 +[#26738]: https://github.com/home-assistant/home-assistant/pull/26738 +[#26739]: https://github.com/home-assistant/home-assistant/pull/26739 +[#26741]: https://github.com/home-assistant/home-assistant/pull/26741 +[#26743]: https://github.com/home-assistant/home-assistant/pull/26743 +[#26746]: https://github.com/home-assistant/home-assistant/pull/26746 +[#26750]: https://github.com/home-assistant/home-assistant/pull/26750 +[#26754]: https://github.com/home-assistant/home-assistant/pull/26754 +[#26755]: https://github.com/home-assistant/home-assistant/pull/26755 +[#26759]: https://github.com/home-assistant/home-assistant/pull/26759 +[#26762]: https://github.com/home-assistant/home-assistant/pull/26762 +[#26765]: https://github.com/home-assistant/home-assistant/pull/26765 +[#26766]: https://github.com/home-assistant/home-assistant/pull/26766 +[#26769]: https://github.com/home-assistant/home-assistant/pull/26769 +[#26770]: https://github.com/home-assistant/home-assistant/pull/26770 +[#26771]: https://github.com/home-assistant/home-assistant/pull/26771 +[#26773]: https://github.com/home-assistant/home-assistant/pull/26773 +[#26775]: https://github.com/home-assistant/home-assistant/pull/26775 +[#26777]: https://github.com/home-assistant/home-assistant/pull/26777 +[#26783]: https://github.com/home-assistant/home-assistant/pull/26783 +[#26784]: https://github.com/home-assistant/home-assistant/pull/26784 +[#26787]: https://github.com/home-assistant/home-assistant/pull/26787 +[#26788]: https://github.com/home-assistant/home-assistant/pull/26788 +[#26789]: https://github.com/home-assistant/home-assistant/pull/26789 +[#26793]: https://github.com/home-assistant/home-assistant/pull/26793 +[#26794]: https://github.com/home-assistant/home-assistant/pull/26794 +[#26795]: https://github.com/home-assistant/home-assistant/pull/26795 +[#26796]: https://github.com/home-assistant/home-assistant/pull/26796 +[#26797]: https://github.com/home-assistant/home-assistant/pull/26797 +[#26799]: https://github.com/home-assistant/home-assistant/pull/26799 +[#26801]: https://github.com/home-assistant/home-assistant/pull/26801 +[#26802]: https://github.com/home-assistant/home-assistant/pull/26802 +[#26804]: https://github.com/home-assistant/home-assistant/pull/26804 +[#26805]: https://github.com/home-assistant/home-assistant/pull/26805 +[#26809]: https://github.com/home-assistant/home-assistant/pull/26809 +[#26810]: https://github.com/home-assistant/home-assistant/pull/26810 +[#26815]: https://github.com/home-assistant/home-assistant/pull/26815 +[#26819]: https://github.com/home-assistant/home-assistant/pull/26819 +[#26821]: https://github.com/home-assistant/home-assistant/pull/26821 +[#26822]: https://github.com/home-assistant/home-assistant/pull/26822 +[#26823]: https://github.com/home-assistant/home-assistant/pull/26823 +[#26824]: https://github.com/home-assistant/home-assistant/pull/26824 +[#26825]: https://github.com/home-assistant/home-assistant/pull/26825 +[#26826]: https://github.com/home-assistant/home-assistant/pull/26826 +[#26829]: https://github.com/home-assistant/home-assistant/pull/26829 +[#26831]: https://github.com/home-assistant/home-assistant/pull/26831 +[#26832]: https://github.com/home-assistant/home-assistant/pull/26832 +[#26835]: https://github.com/home-assistant/home-assistant/pull/26835 +[#26847]: https://github.com/home-assistant/home-assistant/pull/26847 +[#26849]: https://github.com/home-assistant/home-assistant/pull/26849 +[#26852]: https://github.com/home-assistant/home-assistant/pull/26852 +[#26861]: https://github.com/home-assistant/home-assistant/pull/26861 +[#26866]: https://github.com/home-assistant/home-assistant/pull/26866 +[#26867]: https://github.com/home-assistant/home-assistant/pull/26867 +[#26870]: https://github.com/home-assistant/home-assistant/pull/26870 +[#26871]: https://github.com/home-assistant/home-assistant/pull/26871 +[#26872]: https://github.com/home-assistant/home-assistant/pull/26872 +[#26874]: https://github.com/home-assistant/home-assistant/pull/26874 +[#26875]: https://github.com/home-assistant/home-assistant/pull/26875 +[#26876]: https://github.com/home-assistant/home-assistant/pull/26876 +[#26880]: https://github.com/home-assistant/home-assistant/pull/26880 +[#26881]: https://github.com/home-assistant/home-assistant/pull/26881 +[#26882]: https://github.com/home-assistant/home-assistant/pull/26882 +[#26883]: https://github.com/home-assistant/home-assistant/pull/26883 +[#26884]: https://github.com/home-assistant/home-assistant/pull/26884 +[#26885]: https://github.com/home-assistant/home-assistant/pull/26885 +[#26887]: https://github.com/home-assistant/home-assistant/pull/26887 +[#26888]: https://github.com/home-assistant/home-assistant/pull/26888 +[#26890]: https://github.com/home-assistant/home-assistant/pull/26890 +[#26892]: https://github.com/home-assistant/home-assistant/pull/26892 +[#26894]: https://github.com/home-assistant/home-assistant/pull/26894 +[#26899]: https://github.com/home-assistant/home-assistant/pull/26899 +[#26900]: https://github.com/home-assistant/home-assistant/pull/26900 +[#26902]: https://github.com/home-assistant/home-assistant/pull/26902 +[#26903]: https://github.com/home-assistant/home-assistant/pull/26903 +[#26906]: https://github.com/home-assistant/home-assistant/pull/26906 +[#26908]: https://github.com/home-assistant/home-assistant/pull/26908 +[#26910]: https://github.com/home-assistant/home-assistant/pull/26910 +[#26911]: https://github.com/home-assistant/home-assistant/pull/26911 +[#26913]: https://github.com/home-assistant/home-assistant/pull/26913 +[#26917]: https://github.com/home-assistant/home-assistant/pull/26917 +[#26922]: https://github.com/home-assistant/home-assistant/pull/26922 +[#26923]: https://github.com/home-assistant/home-assistant/pull/26923 +[#26933]: https://github.com/home-assistant/home-assistant/pull/26933 +[#26934]: https://github.com/home-assistant/home-assistant/pull/26934 +[#26935]: https://github.com/home-assistant/home-assistant/pull/26935 +[#26936]: https://github.com/home-assistant/home-assistant/pull/26936 +[#26939]: https://github.com/home-assistant/home-assistant/pull/26939 +[#26941]: https://github.com/home-assistant/home-assistant/pull/26941 +[#26943]: https://github.com/home-assistant/home-assistant/pull/26943 +[#26948]: https://github.com/home-assistant/home-assistant/pull/26948 +[#26951]: https://github.com/home-assistant/home-assistant/pull/26951 +[#26955]: https://github.com/home-assistant/home-assistant/pull/26955 +[#26956]: https://github.com/home-assistant/home-assistant/pull/26956 +[#26958]: https://github.com/home-assistant/home-assistant/pull/26958 +[#26959]: https://github.com/home-assistant/home-assistant/pull/26959 +[#26960]: https://github.com/home-assistant/home-assistant/pull/26960 +[#26978]: https://github.com/home-assistant/home-assistant/pull/26978 +[#27009]: https://github.com/home-assistant/home-assistant/pull/27009 +[#27024]: https://github.com/home-assistant/home-assistant/pull/27024 +[#27029]: https://github.com/home-assistant/home-assistant/pull/27029 +[#27030]: https://github.com/home-assistant/home-assistant/pull/27030 +[#27031]: https://github.com/home-assistant/home-assistant/pull/27031 +[#27038]: https://github.com/home-assistant/home-assistant/pull/27038 +[#27039]: https://github.com/home-assistant/home-assistant/pull/27039 +[#27043]: https://github.com/home-assistant/home-assistant/pull/27043 +[#27049]: https://github.com/home-assistant/home-assistant/pull/27049 +[#27051]: https://github.com/home-assistant/home-assistant/pull/27051 +[#27055]: https://github.com/home-assistant/home-assistant/pull/27055 +[#27058]: https://github.com/home-assistant/home-assistant/pull/27058 +[#27073]: https://github.com/home-assistant/home-assistant/pull/27073 +[#27074]: https://github.com/home-assistant/home-assistant/pull/27074 +[#27075]: https://github.com/home-assistant/home-assistant/pull/27075 +[#27079]: https://github.com/home-assistant/home-assistant/pull/27079 +[#27080]: https://github.com/home-assistant/home-assistant/pull/27080 +[#27082]: https://github.com/home-assistant/home-assistant/pull/27082 +[#27083]: https://github.com/home-assistant/home-assistant/pull/27083 +[#27088]: https://github.com/home-assistant/home-assistant/pull/27088 +[#27090]: https://github.com/home-assistant/home-assistant/pull/27090 +[#27097]: https://github.com/home-assistant/home-assistant/pull/27097 +[#27099]: https://github.com/home-assistant/home-assistant/pull/27099 +[#27101]: https://github.com/home-assistant/home-assistant/pull/27101 +[#27102]: https://github.com/home-assistant/home-assistant/pull/27102 +[#27107]: https://github.com/home-assistant/home-assistant/pull/27107 +[#27108]: https://github.com/home-assistant/home-assistant/pull/27108 +[#27112]: https://github.com/home-assistant/home-assistant/pull/27112 +[#27114]: https://github.com/home-assistant/home-assistant/pull/27114 +[#27115]: https://github.com/home-assistant/home-assistant/pull/27115 +[#27117]: https://github.com/home-assistant/home-assistant/pull/27117 +[#27118]: https://github.com/home-assistant/home-assistant/pull/27118 +[#27120]: https://github.com/home-assistant/home-assistant/pull/27120 +[#27125]: https://github.com/home-assistant/home-assistant/pull/27125 +[#27127]: https://github.com/home-assistant/home-assistant/pull/27127 +[#27128]: https://github.com/home-assistant/home-assistant/pull/27128 +[#27129]: https://github.com/home-assistant/home-assistant/pull/27129 +[#27130]: https://github.com/home-assistant/home-assistant/pull/27130 +[#27131]: https://github.com/home-assistant/home-assistant/pull/27131 +[#27132]: https://github.com/home-assistant/home-assistant/pull/27132 +[#27133]: https://github.com/home-assistant/home-assistant/pull/27133 +[#27134]: https://github.com/home-assistant/home-assistant/pull/27134 +[#27135]: https://github.com/home-assistant/home-assistant/pull/27135 +[@Adminiuga]: https://github.com/Adminiuga +[@BKPepe]: https://github.com/BKPepe +[@Bouni]: https://github.com/Bouni +[@CQoute]: https://github.com/CQoute +[@Danielhiversen]: https://github.com/Danielhiversen +[@HarlemSquirrel]: https://github.com/HarlemSquirrel +[@Jc2k]: https://github.com/Jc2k +[@JeffLIrion]: https://github.com/JeffLIrion +[@KJonline]: https://github.com/KJonline +[@Kane610]: https://github.com/Kane610 +[@KiLLeRRaT]: https://github.com/KiLLeRRaT +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@MatthewFlamm]: https://github.com/MatthewFlamm +[@Michsior14]: https://github.com/Michsior14 +[@SNoof85]: https://github.com/SNoof85 +[@SneakSnackSnake]: https://github.com/SneakSnackSnake +[@SukramJ]: https://github.com/SukramJ +[@Swamp-Ig]: https://github.com/Swamp-Ig +[@ViViDboarder]: https://github.com/ViViDboarder +[@abmantis]: https://github.com/abmantis +[@amelchio]: https://github.com/amelchio +[@amigan]: https://github.com/amigan +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@bbrendon]: https://github.com/bbrendon +[@bramkragten]: https://github.com/bramkragten +[@bryanyork]: https://github.com/bryanyork +[@chriscla]: https://github.com/chriscla +[@colohan]: https://github.com/colohan +[@david81]: https://github.com/david81 +[@definitio]: https://github.com/definitio +[@dmulcahey]: https://github.com/dmulcahey +[@doudz]: https://github.com/doudz +[@dshokouhi]: https://github.com/dshokouhi +[@eifinger]: https://github.com/eifinger +[@emontnemery]: https://github.com/emontnemery +[@engrbm87]: https://github.com/engrbm87 +[@exxamalte]: https://github.com/exxamalte +[@fabaff]: https://github.com/fabaff +[@farmio]: https://github.com/farmio +[@flowolf]: https://github.com/flowolf +[@flz]: https://github.com/flz +[@foxel]: https://github.com/foxel +[@fredericvl]: https://github.com/fredericvl +[@fredrike]: https://github.com/fredrike +[@frenck]: https://github.com/frenck +[@ggravlingen]: https://github.com/ggravlingen +[@gibman]: https://github.com/gibman +[@grillp]: https://github.com/grillp +[@jaburges]: https://github.com/jaburges +[@jesserizzo]: https://github.com/jesserizzo +[@jjlawren]: https://github.com/jjlawren +[@joe248]: https://github.com/joe248 +[@johnluetke]: https://github.com/johnluetke +[@konikvranik]: https://github.com/konikvranik +[@larssont]: https://github.com/larssont +[@majuss]: https://github.com/majuss +[@marthoc]: https://github.com/marthoc +[@michaeldavie]: https://github.com/michaeldavie +[@mvn23]: https://github.com/mvn23 +[@neffs]: https://github.com/neffs +[@oandrew]: https://github.com/oandrew +[@ochlocracy]: https://github.com/ochlocracy +[@petewill]: https://github.com/petewill +[@pgilad]: https://github.com/pgilad +[@piitaya]: https://github.com/piitaya +[@poofyteddy]: https://github.com/poofyteddy +[@pvizeli]: https://github.com/pvizeli +[@ratsept]: https://github.com/ratsept +[@rishatik92]: https://github.com/rishatik92 +[@roblandry]: https://github.com/roblandry +[@robmarkcole]: https://github.com/robmarkcole +[@rolfberkenbosch]: https://github.com/rolfberkenbosch +[@sanyatuning]: https://github.com/sanyatuning +[@sashao]: https://github.com/sashao +[@scheric]: https://github.com/scheric +[@scop]: https://github.com/scop +[@sebasje]: https://github.com/sebasje +[@shutupflanders]: https://github.com/shutupflanders +[@snowzach]: https://github.com/snowzach +[@squishykid]: https://github.com/squishykid +[@thecynic]: https://github.com/thecynic +[@timmccor]: https://github.com/timmccor +[@tleegaard]: https://github.com/tleegaard +[@tribut]: https://github.com/tribut +[@tsvi]: https://github.com/tsvi +[@zewelor]: https://github.com/zewelor +[@zhumuht]: https://github.com/zhumuht +[@zxdavb]: https://github.com/zxdavb +[alexa docs]: https://www.home-assistant.io/integrations/alexa/ +[amazon_polly docs]: https://www.home-assistant.io/integrations/amazon_polly/ +[androidtv docs]: https://www.home-assistant.io/integrations/androidtv/ +[automation docs]: https://www.home-assistant.io/integrations/automation/ +[binary_sensor docs]: https://www.home-assistant.io/integrations/binary_sensor/ +[bluetooth_le_tracker docs]: https://www.home-assistant.io/integrations/bluetooth_le_tracker/ +[bluetooth_tracker docs]: https://www.home-assistant.io/integrations/bluetooth_tracker/ +[bmw_connected_drive docs]: https://www.home-assistant.io/integrations/bmw_connected_drive/ +[cert_expiry docs]: https://www.home-assistant.io/integrations/cert_expiry/ +[cloud docs]: https://www.home-assistant.io/integrations/cloud/ +[config docs]: https://www.home-assistant.io/integrations/config/ +[cover docs]: https://www.home-assistant.io/integrations/cover/ +[darksky docs]: https://www.home-assistant.io/integrations/darksky/ +[deconz docs]: https://www.home-assistant.io/integrations/deconz/ +[device_automation docs]: https://www.home-assistant.io/integrations/device_automation/ +[doods docs]: https://www.home-assistant.io/integrations/doods/ +[ebusd docs]: https://www.home-assistant.io/integrations/ebusd/ +[ecobee docs]: https://www.home-assistant.io/integrations/ecobee/ +[egardia docs]: https://www.home-assistant.io/integrations/egardia/ +[elv docs]: https://www.home-assistant.io/integrations/elv/ +[enphase_envoy docs]: https://www.home-assistant.io/integrations/enphase_envoy/ +[environment_canada docs]: https://www.home-assistant.io/integrations/environment_canada/ +[esphome docs]: https://www.home-assistant.io/integrations/esphome/ +[evohome docs]: https://www.home-assistant.io/integrations/evohome/ +[fedex docs]: https://www.home-assistant.io/integrations/fedex/ +[frontend docs]: https://www.home-assistant.io/integrations/frontend/ +[generic docs]: https://www.home-assistant.io/integrations/generic/ +[geniushub docs]: https://www.home-assistant.io/integrations/geniushub/ +[geonetnz_quakes docs]: https://www.home-assistant.io/integrations/geonetnz_quakes/ +[glances docs]: https://www.home-assistant.io/integrations/glances/ +[google_assistant docs]: https://www.home-assistant.io/integrations/google_assistant/ +[group docs]: https://www.home-assistant.io/integrations/group/ +[here_travel_time docs]: https://www.home-assistant.io/integrations/here_travel_time/ +[hive docs]: https://www.home-assistant.io/integrations/hive/ +[homekit docs]: https://www.home-assistant.io/integrations/homekit/ +[homekit_controller docs]: https://www.home-assistant.io/integrations/homekit_controller/ +[homematicip_cloud docs]: https://www.home-assistant.io/integrations/homematicip_cloud/ +[http docs]: https://www.home-assistant.io/integrations/http/ +[hue docs]: https://www.home-assistant.io/integrations/hue/ +[iaqualink docs]: https://www.home-assistant.io/integrations/iaqualink/ +[image_processing docs]: https://www.home-assistant.io/integrations/image_processing/ +[incomfort docs]: https://www.home-assistant.io/integrations/incomfort/ +[influxdb docs]: https://www.home-assistant.io/integrations/influxdb/ +[iperf3 docs]: https://www.home-assistant.io/integrations/iperf3/ +[izone docs]: https://www.home-assistant.io/integrations/izone/ +[kaiterra docs]: https://www.home-assistant.io/integrations/kaiterra/ +[keenetic_ndms2 docs]: https://www.home-assistant.io/integrations/keenetic_ndms2/ +[knx docs]: https://www.home-assistant.io/integrations/knx/ +[lcn docs]: https://www.home-assistant.io/integrations/lcn/ +[lifx docs]: https://www.home-assistant.io/integrations/lifx/ +[lifx_cloud docs]: https://www.home-assistant.io/integrations/lifx_cloud/ +[lifx_legacy docs]: https://www.home-assistant.io/integrations/lifx_legacy/ +[light docs]: https://www.home-assistant.io/integrations/light/ +[linksys_ap docs]: https://www.home-assistant.io/integrations/linksys_ap/ +[linky docs]: https://www.home-assistant.io/integrations/linky/ +[luci docs]: https://www.home-assistant.io/integrations/luci/ +[media_extractor docs]: https://www.home-assistant.io/integrations/media_extractor/ +[media_player docs]: https://www.home-assistant.io/integrations/media_player/ +[meteoalarm docs]: https://www.home-assistant.io/integrations/meteoalarm/ +[moscow_yandex_transport docs]: https://www.home-assistant.io/integrations/moscow_yandex_transport/ +[mqtt docs]: https://www.home-assistant.io/integrations/mqtt/ +[mysensors docs]: https://www.home-assistant.io/integrations/mysensors/ +[nest docs]: https://www.home-assistant.io/integrations/nest/ +[netgear_lte docs]: https://www.home-assistant.io/integrations/netgear_lte/ +[nextbus docs]: https://www.home-assistant.io/integrations/nextbus/ +[nws docs]: https://www.home-assistant.io/integrations/nws/ +[nzbget docs]: https://www.home-assistant.io/integrations/nzbget/ +[obihai docs]: https://www.home-assistant.io/integrations/obihai/ +[ombi docs]: https://www.home-assistant.io/integrations/ombi/ +[onvif docs]: https://www.home-assistant.io/integrations/onvif/ +[opentherm_gw docs]: https://www.home-assistant.io/integrations/opentherm_gw/ +[openuv docs]: https://www.home-assistant.io/integrations/openuv/ +[otp docs]: https://www.home-assistant.io/integrations/otp/ +[owlet docs]: https://www.home-assistant.io/integrations/owlet/ +[persistent_notification docs]: https://www.home-assistant.io/integrations/persistent_notification/ +[pi_hole docs]: https://www.home-assistant.io/integrations/pi_hole/ +[plex docs]: https://www.home-assistant.io/integrations/plex/ +[proxy docs]: https://www.home-assistant.io/integrations/proxy/ +[rainbird docs]: https://www.home-assistant.io/integrations/rainbird/ +[remote_rpi_gpio docs]: https://www.home-assistant.io/integrations/remote_rpi_gpio/ +[rest_command docs]: https://www.home-assistant.io/integrations/rest_command/ +[saj docs]: https://www.home-assistant.io/integrations/saj/ +[sendgrid docs]: https://www.home-assistant.io/integrations/sendgrid/ +[sensor docs]: https://www.home-assistant.io/integrations/sensor/ +[shodan docs]: https://www.home-assistant.io/integrations/shodan/ +[simplisafe docs]: https://www.home-assistant.io/integrations/simplisafe/ +[solaredge_local docs]: https://www.home-assistant.io/integrations/solaredge_local/ +[solax docs]: https://www.home-assistant.io/integrations/solax/ +[soma docs]: https://www.home-assistant.io/integrations/soma/ +[sonos docs]: https://www.home-assistant.io/integrations/sonos/ +[spaceapi docs]: https://www.home-assistant.io/integrations/spaceapi/ +[srp_energy docs]: https://www.home-assistant.io/integrations/srp_energy/ +[sun docs]: https://www.home-assistant.io/integrations/sun/ +[switch docs]: https://www.home-assistant.io/integrations/switch/ +[sytadin docs]: https://www.home-assistant.io/integrations/sytadin/ +[template docs]: https://www.home-assistant.io/integrations/template/ +[tensorflow docs]: https://www.home-assistant.io/integrations/tensorflow/ +[tfiac docs]: https://www.home-assistant.io/integrations/tfiac/ +[tibber docs]: https://www.home-assistant.io/integrations/tibber/ +[torque docs]: https://www.home-assistant.io/integrations/torque/ +[tradfri docs]: https://www.home-assistant.io/integrations/tradfri/ +[transmission docs]: https://www.home-assistant.io/integrations/transmission/ +[unifi docs]: https://www.home-assistant.io/integrations/unifi/ +[ups docs]: https://www.home-assistant.io/integrations/ups/ +[usps docs]: https://www.home-assistant.io/integrations/usps/ +[velux docs]: https://www.home-assistant.io/integrations/velux/ +[venstar docs]: https://www.home-assistant.io/integrations/venstar/ +[vera docs]: https://www.home-assistant.io/integrations/vera/ +[vivotek docs]: https://www.home-assistant.io/integrations/vivotek/ +[volumio docs]: https://www.home-assistant.io/integrations/volumio/ +[watson_tts docs]: https://www.home-assistant.io/integrations/watson_tts/ +[websocket_api docs]: https://www.home-assistant.io/integrations/websocket_api/ +[wemo docs]: https://www.home-assistant.io/integrations/wemo/ +[whois docs]: https://www.home-assistant.io/integrations/whois/ +[wwlln docs]: https://www.home-assistant.io/integrations/wwlln/ +[xbox_live docs]: https://www.home-assistant.io/integrations/xbox_live/ +[xiaomi_aqara docs]: https://www.home-assistant.io/integrations/xiaomi_aqara/ +[yandex_transport docs]: https://www.home-assistant.io/integrations/yandex_transport/ +[yessssms docs]: https://www.home-assistant.io/integrations/yessssms/ +[zha docs]: https://www.home-assistant.io/integrations/zha/ +[zone docs]: https://www.home-assistant.io/integrations/zone/ +[zwave docs]: https://www.home-assistant.io/integrations/zwave/ From 9806c413e0bd445211e1ac6d5bc3f36327bc9073 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Sat, 5 Oct 2019 14:11:28 +0200 Subject: [PATCH 69/76] Add frontend release notes (#10601) * Add frontend release notes * Add links --- source/_posts/2019-10-09-release-100.markdown | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/source/_posts/2019-10-09-release-100.markdown b/source/_posts/2019-10-09-release-100.markdown index f05e2ef12e9..c115d96e8e2 100644 --- a/source/_posts/2019-10-09-release-100.markdown +++ b/source/_posts/2019-10-09-release-100.markdown @@ -19,6 +19,40 @@ TBD TBD +## Frontend + +### Lovelace + +[@iantrich](https://github.com/iantrich) fire has not been put out yet. This version he has also added many new functions to Lovelace! Check the [Lovelace changelog](https://www.home-assistant.io/lovelace/changelog/) for all changes. + +#### Some hightlights: +- There are a lot more option for state filtering +- We have a bunch of new UI editors +- A new action `url` to link to external sites + +### Automation editor + +[@emontnemery](https://github.com/emontnemery) has added a bunch of functions to the automation editor, you can now use `and` and `or` conditions, and give your automation a description so you know why you did what you did. + +### Devices + +When we are on automations, we have taken that to the last release introduced device page. You can now see all the triggers, conditions and actions the device supports, and create an automation with it in 1 click. + +Also the entity registry is added to the device page, so you can change all the settings of the devices entities in one place. +By default the disabled entities are now hidden, you can show them with the switch on the top. + +### We say goodbye to JSON + +On the backend we have been using YAML for a long time, but on the frontend, we still used JSON for a lot of things. JSON is harder to write than YAML so we have aligned that. All data inputs on the frontend now accept YAML. You can still use JSON, as JSON is valid YAML. + +This includes: + +- The automation editor +- The script editor +- Services data in dev tools +- States in dev tools +- Events in dev tools + ## New Integrations - Add support for DOODS Image Processing ([@snowzach] - [#26208]) ([doods docs]) (new-integration) @@ -274,6 +308,50 @@ TBD - Add device trigger support to sensor entities ([@emontnemery] - [#27133]) ([automation docs]) ([binary_sensor docs]) ([device_automation docs]) ([sensor docs]) - Add Google Report State ([@balloob] - [#27112]) ([alexa docs]) ([cloud docs]) ([google_assistant docs]) +## All frontend changes + +* Fix dark switch for map card editor ([#3856](https://github.com/home-assistant/home-assistant-polymer/pull/3856)) [@bramkragten](https://github.com/bramkragten) +* Align background with tiles ([#3858](https://github.com/home-assistant/home-assistant-polymer/pull/3858)) [@bramkragten](https://github.com/bramkragten) +* Allow yaml in dev states ([#3859](https://github.com/home-assistant/home-assistant-polymer/pull/3859)) [@bramkragten](https://github.com/bramkragten) +* Allow yaml in dev services ([#3860](https://github.com/home-assistant/home-assistant-polymer/pull/3860)) [@bramkragten](https://github.com/bramkragten) +* Allow yaml in dev events ([#3861](https://github.com/home-assistant/home-assistant-polymer/pull/3861)) [@bramkragten](https://github.com/bramkragten) +* Allow yaml in script and automation ([#3862](https://github.com/home-assistant/home-assistant-polymer/pull/3862)) [@bramkragten](https://github.com/bramkragten) +* Default hide disabled entities from entity registry ([#3863](https://github.com/home-assistant/home-assistant-polymer/pull/3863)) [@bramkragten](https://github.com/bramkragten) +* Guard for null badges ([#3841](https://github.com/home-assistant/home-assistant-polymer/pull/3841)) [@bramkragten](https://github.com/bramkragten) +* Add entity registry functions to device page ([#3843](https://github.com/home-assistant/home-assistant-polymer/pull/3843)) [@bramkragten](https://github.com/bramkragten) +* Allow user selection of text in Lovelace ([#3605](https://github.com/home-assistant/home-assistant-polymer/pull/3605)) [@iantrich](https://github.com/iantrich) +* Update documentation link URL for integrations ([#3857](https://github.com/home-assistant/home-assistant-polymer/pull/3857)) [@frenck](https://github.com/frenck) +* add actions to picture-glance entities ([#3807](https://github.com/home-assistant/home-assistant-polymer/pull/3807)) [@iantrich](https://github.com/iantrich) +* Fix some styling of ha-switch ([#3842](https://github.com/home-assistant/home-assistant-polymer/pull/3842)) [@bramkragten](https://github.com/bramkragten) +* Remove local mdc-datatable ([#3840](https://github.com/home-assistant/home-assistant-polymer/pull/3840)) [@bramkragten](https://github.com/bramkragten) +* Add missing domain icons ([#3836](https://github.com/home-assistant/home-assistant-polymer/pull/3836)) [@SeanPM5](https://github.com/SeanPM5) +* Use filter worker in data-table ([#3808](https://github.com/home-assistant/home-assistant-polymer/pull/3808)) [@bramkragten](https://github.com/bramkragten) +* add image option to entities card ([#3832](https://github.com/home-assistant/home-assistant-polymer/pull/3832)) [@iantrich](https://github.com/iantrich) +* fix alignment of switches positioned absolutely ([#3812](https://github.com/home-assistant/home-assistant-polymer/pull/3812)) [@iantrich](https://github.com/iantrich) +* add state_filter to picture cards ([#3791](https://github.com/home-assistant/home-assistant-polymer/pull/3791)) [@iantrich](https://github.com/iantrich) +* Add a setting for vibration ([#3813](https://github.com/home-assistant/home-assistant-polymer/pull/3813)) [@bramkragten](https://github.com/bramkragten) +* Add hassio supervisor and os update notice ([#3798](https://github.com/home-assistant/home-assistant-polymer/pull/3798)) [@bramkragten](https://github.com/bramkragten) +* Add name to picture entity struct ([#3809](https://github.com/home-assistant/home-assistant-polymer/pull/3809)) [@bramkragten](https://github.com/bramkragten) +* UI Editor for picture-glance card ([#3709](https://github.com/home-assistant/home-assistant-polymer/pull/3709)) [@iantrich](https://github.com/iantrich) +* Fix firefox overflow ([#3806](https://github.com/home-assistant/home-assistant-polymer/pull/3806)) [@bramkragten](https://github.com/bramkragten) +* Expand entity-filter options ([#3692](https://github.com/home-assistant/home-assistant-polymer/pull/3692)) [@iantrich](https://github.com/iantrich) +* Green shade in climate history for platforms that don't support `hvac_action` ([#3787](https://github.com/home-assistant/home-assistant-polymer/pull/3787)) [@OnFreund](https://github.com/OnFreund) +* UI editor for history-graph ([#3782](https://github.com/home-assistant/home-assistant-polymer/pull/3782)) [@iantrich](https://github.com/iantrich) +* cleanup editors ([#3786](https://github.com/home-assistant/home-assistant-polymer/pull/3786)) [@iantrich](https://github.com/iantrich) +* Add support for `and` and `or` conditions to the automation editor. ([#3724](https://github.com/home-assistant/home-assistant-polymer/pull/3724)) [@emontnemery](https://github.com/emontnemery) +* Add support for panels to cast ([#3796](https://github.com/home-assistant/home-assistant-polymer/pull/3796)) [@bramkragten](https://github.com/bramkragten) +* Move views to own folder + use update vs updated in panel view ([#3761](https://github.com/home-assistant/home-assistant-polymer/pull/3761)) [@bramkragten](https://github.com/bramkragten) +* Add Language Urdu ([#3750](https://github.com/home-assistant/home-assistant-polymer/pull/3750)) [@bramkragten](https://github.com/bramkragten) +* Add support for automation description ([#3723](https://github.com/home-assistant/home-assistant-polymer/pull/3723)) [@emontnemery](https://github.com/emontnemery) +* light-card: icon option ([#3771](https://github.com/home-assistant/home-assistant-polymer/pull/3771)) [@iantrich](https://github.com/iantrich) +* Switch paper-toggle-button to mwc-switch ([#3683](https://github.com/home-assistant/home-assistant-polymer/pull/3683)) [@iantrich](https://github.com/iantrich) +* Upgrade some deps ([#3780](https://github.com/home-assistant/home-assistant-polymer/pull/3780)) [@balloob](https://github.com/balloob) +* UI Editor for picture-entity card ([#3708](https://github.com/home-assistant/home-assistant-polymer/pull/3708)) [@iantrich](https://github.com/iantrich) +* picture entity editor fix ([#3783](https://github.com/home-assistant/home-assistant-polymer/pull/3783)) [@iantrich](https://github.com/iantrich) +* new action: url ([#3773](https://github.com/home-assistant/home-assistant-polymer/pull/3773)) [@iantrich](https://github.com/iantrich) +* Replace all default exports in common/ with named exports ([#3790](https://github.com/home-assistant/home-assistant-polymer/pull/3790)) [@iantrich](https://github.com/iantrich) +* Add device automation options to device page ([#3776](https://github.com/home-assistant/home-assistant-polymer/pull/3776)) [@bramkragten](https://github.com/bramkragten) + [#22311]: https://github.com/home-assistant/home-assistant/pull/22311 [#23495]: https://github.com/home-assistant/home-assistant/pull/23495 [#24550]: https://github.com/home-assistant/home-assistant/pull/24550 From 8038c50949ec3969bb1b8bf46ba173d413e66614 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Thu, 3 Oct 2019 11:35:00 -0500 Subject: [PATCH 70/76] Update changelog.markdown (#10589) * Update changelog.markdown * Update changelog.markdown --- source/lovelace/changelog.markdown | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/lovelace/changelog.markdown b/source/lovelace/changelog.markdown index a9392581543..aed4dbe4736 100644 --- a/source/lovelace/changelog.markdown +++ b/source/lovelace/changelog.markdown @@ -2,6 +2,24 @@ title: "Lovelace Changelog" description: "Changelog of the Lovelace UI." --- +## Changes in 0.100.0 +- πŸ“£ [picture glance card]: New config `tap_action` and `hold_action` for `entities` (#3807) @iantrich +- πŸ“£ [entities card]: New config `image` for `entities` (#3832) @iantrich +- πŸ“£ [entity filter card]: Support for operators in `state_filter` and individual `state_filter` option for `entitites` (#3692) @iantrich +- πŸ“£ [light card]: New config `icon` (#3771) @iantrich +- πŸ“£ [picture entity card]: UI Editor (#3708) @iantrich +- πŸ“£ [picture glance card]: UI Editor (#3709) @iantrich +- πŸ“£ [history graph card]: UI Editor (#3782) @iantrich +- πŸ“£ Add support for panels to cast (#3796) @bramkragten +- πŸ“£ Allow for user text selection (Android Chrome not supported) (#3605) @iantrich +- πŸ“£ add `state_filter` to picture cards (#3791) @iantrich +- πŸ“£ Add a setting for vibration (#3813) @bramkragten +- πŸ“£ Switch paper-toggle-button to mwc-switch (#3683) @iantrich +- πŸ“£ New Action `url` (#3773) @iantrich +- πŸ”§ [map card]: Align background with tiles (#3858) @bramkragten +- πŸ”§ [map card]: Fix dark switch for map card editor (#3856) @bramkragten +- πŸ”§ [views]: Guard for null badges (#3841) @bramkragten + ## Changes in 0.99.0 - πŸ“£ [glance card]: New config `show_last_changed` for `entities` - πŸ“£ [glance card]: New config `image` for `entities` From 8f385b12e885bff9a11c61564753f2ca6827351d Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Tue, 8 Oct 2019 22:03:35 +0200 Subject: [PATCH 71/76] Update frontend release notes (#10666) --- source/_posts/2019-10-09-release-100.markdown | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/_posts/2019-10-09-release-100.markdown b/source/_posts/2019-10-09-release-100.markdown index c115d96e8e2..81d95b53330 100644 --- a/source/_posts/2019-10-09-release-100.markdown +++ b/source/_posts/2019-10-09-release-100.markdown @@ -39,7 +39,9 @@ TBD When we are on automations, we have taken that to the last release introduced device page. You can now see all the triggers, conditions and actions the device supports, and create an automation with it in 1 click. Also the entity registry is added to the device page, so you can change all the settings of the devices entities in one place. -By default the disabled entities are now hidden, you can show them with the switch on the top. +By default the disabled entities are now hidden, you can show them with the switch on the top, this is the same on the general entity registry page. + +When you rename a device on the device page, it will now also rename the entities of that device if they contain the device name. When you are in advanced mode, it can also rename the entity id's for you. ### We say goodbye to JSON @@ -310,6 +312,10 @@ This includes: ## All frontend changes +* Fix whitespace error in services ([#3880](https://github.com/home-assistant/home-assistant-polymer/pull/3880)) [@bramkragten](https://github.com/bramkragten) +* Hide empty blocks on device page ([#3950](https://github.com/home-assistant/home-assistant-polymer/pull/3950)) [@bramkragten](https://github.com/bramkragten) +* Fix updating entity id in entity-registry-dialog ([#3962](https://github.com/home-assistant/home-assistant-polymer/pull/3862)) [@bramkragten](https://github.com/bramkragten) +* Add report state toggle for Google ([#3855](https://github.com/home-assistant/home-assistant-polymer/pull/3855)) [@bramkragten](https://github.com/bramkragten) * Fix dark switch for map card editor ([#3856](https://github.com/home-assistant/home-assistant-polymer/pull/3856)) [@bramkragten](https://github.com/bramkragten) * Align background with tiles ([#3858](https://github.com/home-assistant/home-assistant-polymer/pull/3858)) [@bramkragten](https://github.com/bramkragten) * Allow yaml in dev states ([#3859](https://github.com/home-assistant/home-assistant-polymer/pull/3859)) [@bramkragten](https://github.com/bramkragten) From 46c6684d3354ca3a57e106f2d22b8de8c02e2c8f Mon Sep 17 00:00:00 2001 From: cogneato Date: Tue, 8 Oct 2019 21:07:04 -0600 Subject: [PATCH 72/76] Add descriptions to breaking changes (#10670) --- source/_posts/2019-10-09-release-100.markdown | 105 +++++++++++++++--- 1 file changed, 87 insertions(+), 18 deletions(-) diff --git a/source/_posts/2019-10-09-release-100.markdown b/source/_posts/2019-10-09-release-100.markdown index 81d95b53330..0795443fbce 100644 --- a/source/_posts/2019-10-09-release-100.markdown +++ b/source/_posts/2019-10-09-release-100.markdown @@ -75,24 +75,93 @@ This includes: ## Breaking Changes -- Refactor nzbget to support future platform changes ([@chriscla] - [#26462]) ([nzbget docs]) (breaking change) -- Fix spaceapi ([@Bouni] - [#26453]) ([spaceapi docs]) (breaking change) -- Remove deprecated ups integration (ADR-0004) ([@frenck] - [#26824]) ([ups docs]) (breaking change) -- Remove deprecated usps integration (ADR-0004) ([@frenck] - [#26823]) ([usps docs]) (breaking change) -- Remove deprecated sytadin integration (ADR-0004) ([@frenck] - [#26819]) ([sytadin docs]) (breaking change) -- Remove deprecated srp_energy integration (ADR-0004) ([@frenck] - [#26826]) ([srp_energy docs]) (breaking change) -- Remove deprecated fedex integration (ADR-0004) ([@frenck] - [#26822]) ([fedex docs]) (breaking change) -- Remove deprecated linksys_ap integration (ADR-0004) ([@frenck] - [#26847]) ([linksys_ap docs]) (breaking change) -- Group Linky sensors to Linky meter device ([@piitaya] - [#26738]) ([linky docs]) (breaking change) -- Move elv integration to component and bump pypca ([@majuss] - [#26552]) ([elv docs]) (breaking change) -- Reorg device automation ([@balloob] - [#26880]) ([automation docs]) ([binary_sensor docs]) ([deconz docs]) ([device_automation docs]) ([light docs]) ([switch docs]) ([zha docs]) (breaking change) -- Add config flow to ecobee ([@marthoc] - [#26634]) ([ecobee docs]) (breaking change) -- Add config flow to transmission ([@engrbm87] - [#26434]) ([transmission docs]) (breaking change) -- Centralize rainbird config and add binary sensor platform ([@konikvranik] - [#26393]) ([rainbird docs]) (breaking change) (new-platform) -- Fix incomfort and Bump client to 0.3.5 ([@zxdavb] - [#26802]) ([incomfort docs]) (breaking change) -- Bugfix evohome ([@zxdavb] - [#26810]) ([evohome docs]) (breaking change) -- Update opentherm_gw.climate to match Climate 1.0 ([@mvn23] - [#25931]) ([opentherm_gw docs]) (breaking change) -- Tweak geniushub and bump client to v0.6.26 ([@zxdavb] - [#26640]) ([geniushub docs]) (breaking change) +- **Removed** - The following integrations which were marked in .98 for pending removal have now been removed (ADR-0004): + * **UPS** - ([@frenck] - [#26824]) ([ups docs]) + * **USPS** - ([@frenck] - [#26823]) ([usps docs]) + * **Sytadin** - ([@frenck] - [#26819]) ([sytadin docs]) + * **SRP Energy** - ([@frenck] - [#26826]) ([srp_energy docs]) + * **Fedex** - ([@frenck] - [#26822]) ([fedex docs]) + * **Linksys AP** - ([@frenck] - [#26847]) ([linksys_ap docs]) +- **NZBGet** - The integration has been changed to support multiple platforms and future events, and common code has been centralized to the component. The configuration has moved from the sensor platform to the `nzbget` key in configuration.yaml, and the `monitored_variables` option has been removed. Users need to update their configuration. - ([@chriscla] - [#26462]) ([nzbget docs]) + + New example configuration entry: + + ```yaml + nzbget: + host: 192.168.1.1 + ssl: false + ``` +- **SpaceAPI** - Values that were not compliant with the SpaceAPI specification were changed. + * `contact / mailing_list` has changed to `contact / ml`, to migrate change the `mailing_list` key to `ml` + * `location / address` is no longer required but is optional as the latitude and longitude properties of the location are added automatically from the HA config). There is no need to change anything. - ([@Bouni] - [#26453]) ([spaceapi docs]) + +- **Linky** - Linky sensors have been grouped to one Linky device. Users will need to remove and re-add the Linky integration to clear the device registry. - ([@piitaya] - [#26738]) ([linky docs]) + +- __Elv__ - ELV/PCA is now its own integration. Existing configuration should be removed and replaced. Optionally the port for the serial interface can be specified (default is: /dev/ttyUSB0). - ([@majuss] - [#26552]) ([elv docs]) + + Example configuration entry: + ```yaml + elv: + device: '/dev/ttyUSB0' + ``` + +- __Automation__ - Custom component developers who started playing with device automations only: we have restructured how integrations can expose their device triggers/conditions/actions. Instead of 1 platform `device_automation.py` it's now `device_action.py`, `device_trigger.py`, `device_condition.py`. + The method to attach a device trigger has been updated from `async_trigger` to `async_attach_trigger` to better reflect what is going on. - ([@balloob] - [#26880]) ([automation docs]) ([binary_sensor docs]) ([deconz docs]) ([device_automation docs]) ([light docs]) ([switch docs]) ([zha docs]) + +- **Ecobee** - Ecobee will now be set up via config flow. Existing users will have their config imported from ecobee.conf via an import flow so it shouldn't break their experience. Users configuring via configuration.yaml will have their api key and options imported into the flow but will still need to finish authorization via the flow (instead of the configurator component as previously). +The configuration parameter `hold_temp` has been removed, as it was not being used in the climate platform and had no effect on whether the temperature was held indefinitely or not. Users will need to remove the parameter `hold_temp` from configuration.yaml. +Ecobee-specific services will now be registered under the ecobee domain rather than the climate domain, and service names will not include the prefix "ecobee_" (e.g. the service "climate.ecobee_resume_program" will become "ecobee.resume_program"). - ([@marthoc] - [#26634]) ([ecobee docs]) +- **Transmission** - The Transmission integration can now be configured through a config flow via Integrations in the GUI. Once configured all sensors and switches will be created and available for the user. +`monitored_conditions` has been removed so existing users need to update their configuration in configuration.yaml and remove monitored conditions. The existing configuration will be imported as an entry under Integrations. - ([@engrbm87] - [#26434]) ([transmission docs]) + + Example configuration entry: + ```yaml + transmission: + host: 192.168.1.1 + ``` +- __Rainbird__ - Rainbird is now its own platform. The configuration of rainbird switches has been moved under `zones:` as part of the `rainbird:` integration. - ([@konikvranik] - [#26393]) ([rainbird docs]) + + Example configuration entry: + ```yaml + rainbird: + host: IP_ADDRESS_OF_MODULE + password: YOUR_PASSWORD + trigger_time: 6 + zones: + 1: + trigger_time: 6 + ``` +- **Incomfort** - Device state attributes that were causing pointless state changes have been removed: + * `"rf_message_rssi` signal strength (between gateway & boiler), changes almost every scan_interval + * `nodenr` unknown, is static + * `rfstatus_cntr` unknown, changes + + This is not likely to be considered a breaking change by users. - ([@zxdavb] - [#26802]) ([incomfort docs]) +- **Evohome** - Device state attributes keys have been changed to snake_case and, since this a breaking change, the opportunity was taken to revise/simplify the entire device state attributes schema. +Evohome is a complicated integration, has had major changes in recent times, and is not yet mature - these changes address some bugs and related architectural issues: + + * Modify behavior of set_temperature to mirror that of the vendor's UI (e.g. any target temp changes until next setpoint, unless explicitly set otherwise) + * Setpoint datetimes are now correctly converted to local/aware isoformat (internally, and for logging/state attributes) + * Use snake_case for device state attributes + * Add a unique_id for each entity (systemId, zoneID, dhwId) + * Refactoring - remove API wrappers (no longer using private methods) + * Add away mode for DHW (set to permanent off or Auto, depending)([@zxdavb] - [#26810]) ([evohome docs]) +- **OpenTherm** - Move climate entity state to hvac_action attribute to comply with climate 1.0. May break e.g. automations. - ([@mvn23] - [#25931]) ([opentherm_gw docs]) +- **Genius Hub** - Users connecting to a Hub via the v1 API will need to specify a valid MAC address for the hub (see example YAML, below). Those using the v3 API will be unaffected. +This change is in preperation for for further changes, so the geniushub entities can be given more appropriate `entity_ids`. + + Some Sensor entities fro GeniusHub Issues have been renamed, and so will get a new entity ID: + + * sensor.errors to sensor.geniushub_errors + * sensor.warnings to sensor.geniushub_warnings + * sensor.information to sensor.geniushub_informationeniushub and bump client to v0.6.26 - ([@zxdavb] - [#26640]) ([geniushub docs]) + + Example configuration entry: + ```yaml + geniushub: + token: JqVFd0UUEi... + mac: 18:CC:23:12:34:56 + ``` ## All changes From 6979a9310be0c3b762c12d889620d3f1ec588ecc Mon Sep 17 00:00:00 2001 From: jjlawren Date: Mon, 7 Oct 2019 14:37:37 -0500 Subject: [PATCH 73/76] Remove manual flow description, fix components->integrations reference (#10655) --- source/_integrations/plex.markdown | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/_integrations/plex.markdown b/source/_integrations/plex.markdown index 8620c3fa52c..872fe7e7d87 100644 --- a/source/_integrations/plex.markdown +++ b/source/_integrations/plex.markdown @@ -29,9 +29,7 @@ Local and secure connections are preferred when setting up an Integration. After
-Alternatively, you can manually configure a Plex server connection by selecting the "Manual setup" option when configuring a Plex integration. This will allow you to specify the server connection options which will be validated before setup is completed. The available options are similar to the **Configuration Variables** section below. - -If [discovery](/components/discovery/) is enabled and a local Plex server is found, a legacy `media_player` configuration (i.e., a `plex.conf` file) will be imported. GDM can be enabled via the Plex Web App under **Settings** -> **(Server Name)** -> **Settings** -> **Network** and choosing **Enable local network discovery (GDM)**. +If [discovery](/integrations/discovery/) is enabled and a local Plex server is found, a legacy `media_player` configuration (i.e., a `plex.conf` file) will be imported. GDM can be enabled via the Plex Web App under **Settings** -> **(Server Name)** -> **Settings** -> **Network** and choosing **Enable local network discovery (GDM)**. The `plex` integration can also be configured via `configuration.yaml`: From 94833153676a9c70eeac9a74ee41c0ed0054d14e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 9 Oct 2019 16:09:59 -0700 Subject: [PATCH 74/76] Update blog --- source/_posts/2019-10-09-release-100.markdown | 589 ++++++++++-------- .../blog/2019-10-0.100/action-trigger.png | Bin 0 -> 4350 bytes .../images/blog/2019-10-0.100/components.png | Bin 0 -> 22719 bytes .../blog/2019-10-0.100/condition-and.png | Bin 0 -> 8386 bytes .../2019-10-0.100/device-trigger-sensor.png | Bin 0 -> 5103 bytes .../blog/2019-10-0.100/hacktoberfest.png | Bin 0 -> 9793 bytes source/images/blog/2019-10-0.100/plex.png | Bin 0 -> 176719 bytes source/images/blog/2019-10-0.100/yaml.png | Bin 0 -> 5347 bytes 8 files changed, 345 insertions(+), 244 deletions(-) create mode 100644 source/images/blog/2019-10-0.100/action-trigger.png create mode 100644 source/images/blog/2019-10-0.100/components.png create mode 100644 source/images/blog/2019-10-0.100/condition-and.png create mode 100644 source/images/blog/2019-10-0.100/device-trigger-sensor.png create mode 100644 source/images/blog/2019-10-0.100/hacktoberfest.png create mode 100644 source/images/blog/2019-10-0.100/plex.png create mode 100644 source/images/blog/2019-10-0.100/yaml.png diff --git a/source/_posts/2019-10-09-release-100.markdown b/source/_posts/2019-10-09-release-100.markdown index 0795443fbce..edbed45a59d 100644 --- a/source/_posts/2019-10-09-release-100.markdown +++ b/source/_posts/2019-10-09-release-100.markdown @@ -1,8 +1,8 @@ --- layout: post -title: "0.100: TBD" -description: "TBD" -date: 2019-10-03 14:05:02 +title: "0.100: Better Plex, Bye JSON, HERE Travel time." +description: "A lot of frontend work, performance tweaks and more device automations." +date: 2019-10-09 01:05:02 date_formatted: "October 9, 2019" author: Paulus Schoutsen author_twitter: balloob @@ -13,36 +13,73 @@ og_image: /images/blog/2019-09-0.100/components.png -TBD +Welcome to the release notes of yet another wonderful release! No, we're not going for 1.0, we're doing 0.100! We feel like we're not ready yet with our vision for 1.0, but we're making progress every day. For a sneak peak of what we're thinking about, check our blog [Simple mode in Home Assistant 1.0](https://developers.home-assistant.io/blog/2019/10/05/simple-mode.html). -## In other news +## Hacktoberfest -TBD +It is Hacktoberfest. This means that we're spending the month celebrating contributing to open source. If you make 4 pull requests this month, you get a free Hacktoberfest t-shirt! More info and what to work on, check [our Hacktoberfest blog post](https://developers.home-assistant.io/blog/2019/09/27/hacktoberfest.html). -## Frontend +Average contributions per day have doubled for the month of October. There are now on average 40 contributions coming in each day. Breakdown is ~50% Home Assistant backend, ~37% documentation and ~13% the frontend. Most of these contributions you'll see in the next release! -### Lovelace +

+Graph of 420 PRs that got opened and merged in the last 14 days. +Last 14 days of pull pequest throughput in the Home Assistant organization. (source) +

-[@iantrich](https://github.com/iantrich) fire has not been put out yet. This version he has also added many new functions to Lovelace! Check the [Lovelace changelog](https://www.home-assistant.io/lovelace/changelog/) for all changes. +## State of the Union 2019 + +We're going to have another State of the Union! It will be held at November 13, in Amsterdam. Like last year, it will be hosted by our friends at ING. I'm looking forward to talk about all the great things that are happening in Home Assistant land. We had 150 tickets available when we announced it on social media, and they were all gone in less than 24 hours! + +We're going to make sure that there will be a live stream available. We'll announce that in time via the blog and social media. Some people on Twitter are talking about hosting viewing parties across the globe. Keep an eye out on [the social category on the forums](https://community.home-assistant.io/c/social) for announcements. + +## Plex + +[@jjlawren] has been on fire with the Plex integration. You will now be able to link your account via the official Plex account link feature. + +

+Screenshot of the Plex user interface asking the user if they want to link with Home Assistant. +Screenshot of the Plex user interface asking the user if they want to link with Home Assistant. +

+ +## Lovelace + +[@iantrich](https://github.com/iantrich) fire has not been put out yet. This version he has also added many new functions to Lovelace! Check the [Lovelace changelog](https://www.home-assistant.io/lovelace/changelog/) for all changes. Some hightlights: -#### Some hightlights: - There are a lot more option for state filtering - We have a bunch of new UI editors - A new action `url` to link to external sites +- Config panel: Disabled entities are now hidden by default. -### Automation editor +## Device automations + +[@emontnemery] has been hard at work at further expanding device automations aided by [@dmulcahey] and [@Kane610]. This release includes improved support for Zigbee (ZHA) devices, sensors, binary sensor, switch and Deconz. One neat new improvement is the addition of a "for" option. This allows you to specify triggers for when a certain device has been on for a period of time. + +

+Screenshot of a device trigger for a temperature sensor. +Screenshot of a device trigger for a temperature sensor. +

+ +## Automation editor [@emontnemery](https://github.com/emontnemery) has added a bunch of functions to the automation editor, you can now use `and` and `or` conditions, and give your automation a description so you know why you did what you did. -### Devices +

+Screenshot of an and-condition in the automation editor. +Screenshot of an and-condition in the automation editor. +

-When we are on automations, we have taken that to the last release introduced device page. You can now see all the triggers, conditions and actions the device supports, and create an automation with it in 1 click. +## Devices -Also the entity registry is added to the device page, so you can change all the settings of the devices entities in one place. -By default the disabled entities are now hidden, you can show them with the switch on the top, this is the same on the general entity registry page. +Device automations are now available on the experimental device page that we introduced in the last release. You can now see all the triggers, conditions and actions the device supports, and create an automation in 1 click. + +We also added the entity registry, so you can change all the settings of the devices entities in one place. When you rename a device on the device page, it will now also rename the entities of that device if they contain the device name. When you are in advanced mode, it can also rename the entity id's for you. +

+Screenshot of a card showing device triggers to create automations from. +

+ ### We say goodbye to JSON On the backend we have been using YAML for a long time, but on the frontend, we still used JSON for a lot of things. JSON is harder to write than YAML so we have aligned that. All data inputs on the frontend now accept YAML. You can still use JSON, as JSON is valid YAML. @@ -55,12 +92,30 @@ This includes: - States in dev tools - Events in dev tools +

+Screenshot of a service action in the automation editor using YAML. +Screenshot of a service action in the automation editor using YAML. +

+ +## In other news + +Hans Oischinger showcased how he can steer his vacuum cleaner to specific rooms in his ouse via his floorplan. Besides this tweet, he also wrote [a great blog about it](https://medium.com/@hans.oischinger/zoned-cleanup-with-live-map-922240b4cf8c). + + + +To improve discovery, we're collecting discovery info of devices and services. Please help us gather [zeroconf discovery info](https://github.com/home-assistant/home-assistant/issues/27371) and [HomeKit discovery info](https://github.com/home-assistant/home-assistant/issues/27292). + +As always, this release of Home Assistan is accompanied with a new release of the [Home Assistant Podcast](https://hasspodcast.io/): + + + ## New Integrations - Add support for DOODS Image Processing ([@snowzach] - [#26208]) ([doods docs]) (new-integration) - Izone component ([@Swamp-Ig] - [#24550]) ([izone docs]) (new-integration) - Add transport data from maps.yandex.ru api ([@rishatik92] - [#26252]) ([moscow_yandex_transport docs]) (new-integration) -- Add transport data from maps.yandex.ru api ([@rishatik92] - [#26766]) ([yandex_transport docs]) (new-integration) - Add Kaiterra integration ([@Michsior14] - [#26661]) ([kaiterra docs]) (new-integration) - Add Ombi integration ([@larssont] - [#26755]) ([ombi docs]) (new-integration) - Add here_travel_time ([@eifinger] - [#24603]) ([here_travel_time docs]) (new-integration) @@ -73,15 +128,25 @@ This includes: - Add basic support for IKEA Fyrtur blinds ([@ggravlingen] - [#26659]) ([tradfri docs]) (new-platform) - Centralize rainbird config and add binary sensor platform ([@konikvranik] - [#26393]) ([rainbird docs]) (breaking change) (new-platform) +## If you need help... + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). + +## Reporting Issues + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + + ## Breaking Changes - **Removed** - The following integrations which were marked in .98 for pending removal have now been removed (ADR-0004): - * **UPS** - ([@frenck] - [#26824]) ([ups docs]) - * **USPS** - ([@frenck] - [#26823]) ([usps docs]) - * **Sytadin** - ([@frenck] - [#26819]) ([sytadin docs]) - * **SRP Energy** - ([@frenck] - [#26826]) ([srp_energy docs]) - * **Fedex** - ([@frenck] - [#26822]) ([fedex docs]) - * **Linksys AP** - ([@frenck] - [#26847]) ([linksys_ap docs]) + - **UPS** - ([@frenck] - [#26824]) ([ups docs]) + - **USPS** - ([@frenck] - [#26823]) ([usps docs]) + - **Sytadin** - ([@frenck] - [#26819]) ([sytadin docs]) + - **SRP Energy** - ([@frenck] - [#26826]) ([srp_energy docs]) + - **Fedex** - ([@frenck] - [#26822]) ([fedex docs]) + - **Linksys AP** - ([@frenck] - [#26847]) ([linksys_ap docs]) - **NZBGet** - The integration has been changed to support multiple platforms and future events, and common code has been centralized to the component. The configuration has moved from the sensor platform to the `nzbget` key in configuration.yaml, and the `monitored_variables` option has been removed. Users need to update their configuration. - ([@chriscla] - [#26462]) ([nzbget docs]) New example configuration entry: @@ -89,39 +154,45 @@ This includes: ```yaml nzbget: host: 192.168.1.1 - ssl: false + ssl: false ``` + - **SpaceAPI** - Values that were not compliant with the SpaceAPI specification were changed. - * `contact / mailing_list` has changed to `contact / ml`, to migrate change the `mailing_list` key to `ml` - * `location / address` is no longer required but is optional as the latitude and longitude properties of the location are added automatically from the HA config). There is no need to change anything. - ([@Bouni] - [#26453]) ([spaceapi docs]) + + - `contact / mailing_list` has changed to `contact / ml`, to migrate change the `mailing_list` key to `ml` + - `location / address` is no longer required but is optional as the latitude and longitude properties of the location are added automatically from the HA config). There is no need to change anything. - ([@Bouni] - [#26453]) ([spaceapi docs]) - **Linky** - Linky sensors have been grouped to one Linky device. Users will need to remove and re-add the Linky integration to clear the device registry. - ([@piitaya] - [#26738]) ([linky docs]) -- __Elv__ - ELV/PCA is now its own integration. Existing configuration should be removed and replaced. Optionally the port for the serial interface can be specified (default is: /dev/ttyUSB0). - ([@majuss] - [#26552]) ([elv docs]) +- **Elv** - ELV/PCA is now its own integration. Existing configuration should be removed and replaced. Optionally the port for the serial interface can be specified (default is: /dev/ttyUSB0). - ([@majuss] - [#26552]) ([elv docs]) Example configuration entry: + ```yaml elv: - device: '/dev/ttyUSB0' + device: "/dev/ttyUSB0" ``` - -- __Automation__ - Custom component developers who started playing with device automations only: we have restructured how integrations can expose their device triggers/conditions/actions. Instead of 1 platform `device_automation.py` it's now `device_action.py`, `device_trigger.py`, `device_condition.py`. + +- **Automation** - Custom component developers who started playing with device automations only: we have restructured how integrations can expose their device triggers/conditions/actions. Instead of 1 platform `device_automation.py` it's now `device_action.py`, `device_trigger.py`, `device_condition.py`. The method to attach a device trigger has been updated from `async_trigger` to `async_attach_trigger` to better reflect what is going on. - ([@balloob] - [#26880]) ([automation docs]) ([binary_sensor docs]) ([deconz docs]) ([device_automation docs]) ([light docs]) ([switch docs]) ([zha docs]) - + - **Ecobee** - Ecobee will now be set up via config flow. Existing users will have their config imported from ecobee.conf via an import flow so it shouldn't break their experience. Users configuring via configuration.yaml will have their api key and options imported into the flow but will still need to finish authorization via the flow (instead of the configurator component as previously). -The configuration parameter `hold_temp` has been removed, as it was not being used in the climate platform and had no effect on whether the temperature was held indefinitely or not. Users will need to remove the parameter `hold_temp` from configuration.yaml. -Ecobee-specific services will now be registered under the ecobee domain rather than the climate domain, and service names will not include the prefix "ecobee_" (e.g. the service "climate.ecobee_resume_program" will become "ecobee.resume_program"). - ([@marthoc] - [#26634]) ([ecobee docs]) + The configuration parameter `hold_temp` has been removed, as it was not being used in the climate platform and had no effect on whether the temperature was held indefinitely or not. Users will need to remove the parameter `hold_temp` from configuration.yaml. + Ecobee-specific services will now be registered under the ecobee domain rather than the climate domain, and service names will not include the prefix "ecobee\_" (e.g. the service "climate.ecobee_resume_program" will become "ecobee.resume_program"). - ([@marthoc] - [#26634]) ([ecobee docs]) - **Transmission** - The Transmission integration can now be configured through a config flow via Integrations in the GUI. Once configured all sensors and switches will be created and available for the user. -`monitored_conditions` has been removed so existing users need to update their configuration in configuration.yaml and remove monitored conditions. The existing configuration will be imported as an entry under Integrations. - ([@engrbm87] - [#26434]) ([transmission docs]) + `monitored_conditions` has been removed so existing users need to update their configuration in configuration.yaml and remove monitored conditions. The existing configuration will be imported as an entry under Integrations. - ([@engrbm87] - [#26434]) ([transmission docs]) Example configuration entry: + ```yaml transmission: host: 192.168.1.1 ``` -- __Rainbird__ - Rainbird is now its own platform. The configuration of rainbird switches has been moved under `zones:` as part of the `rainbird:` integration. - ([@konikvranik] - [#26393]) ([rainbird docs]) + +- **Rainbird** - Rainbird is now its own platform. The configuration of rainbird switches has been moved under `zones:` as part of the `rainbird:` integration. - ([@konikvranik] - [#26393]) ([rainbird docs]) Example configuration entry: + ```yaml rainbird: host: IP_ADDRESS_OF_MODULE @@ -131,38 +202,66 @@ Ecobee-specific services will now be registered under the ecobee domain rather t 1: trigger_time: 6 ``` -- **Incomfort** - Device state attributes that were causing pointless state changes have been removed: - * `"rf_message_rssi` signal strength (between gateway & boiler), changes almost every scan_interval - * `nodenr` unknown, is static - * `rfstatus_cntr` unknown, changes - - This is not likely to be considered a breaking change by users. - ([@zxdavb] - [#26802]) ([incomfort docs]) -- **Evohome** - Device state attributes keys have been changed to snake_case and, since this a breaking change, the opportunity was taken to revise/simplify the entire device state attributes schema. -Evohome is a complicated integration, has had major changes in recent times, and is not yet mature - these changes address some bugs and related architectural issues: - * Modify behavior of set_temperature to mirror that of the vendor's UI (e.g. any target temp changes until next setpoint, unless explicitly set otherwise) - * Setpoint datetimes are now correctly converted to local/aware isoformat (internally, and for logging/state attributes) - * Use snake_case for device state attributes - * Add a unique_id for each entity (systemId, zoneID, dhwId) - * Refactoring - remove API wrappers (no longer using private methods) - * Add away mode for DHW (set to permanent off or Auto, depending)([@zxdavb] - [#26810]) ([evohome docs]) +- **Incomfort** - Device state attributes that were causing pointless state changes have been removed: + + - `"rf_message_rssi` signal strength (between gateway & boiler), changes almost every scan_interval + - `nodenr` unknown, is static + - `rfstatus_cntr` unknown, changes + + This is not likely to be considered a breaking change by users. - ([@zxdavb] - [#26802]) ([incomfort docs]) + +- **Evohome** - Device state attributes keys have been changed to snake_case and, since this a breaking change, the opportunity was taken to revise/simplify the entire device state attributes schema. + Evohome is a complicated integration, has had major changes in recent times, and is not yet mature - these changes address some bugs and related architectural issues: + + - Modify behavior of set_temperature to mirror that of the vendor's UI (e.g. any target temp changes until next setpoint, unless explicitly set otherwise) + - Setpoint datetimes are now correctly converted to local/aware isoformat (internally, and for logging/state attributes) + - Use snake_case for device state attributes + - Add a unique_id for each entity (systemId, zoneID, dhwId) + - Refactoring - remove API wrappers (no longer using private methods) + - Add away mode for DHW (set to permanent off or Auto, depending)([@zxdavb] - [#26810]) ([evohome docs]) + - **OpenTherm** - Move climate entity state to hvac_action attribute to comply with climate 1.0. May break e.g. automations. - ([@mvn23] - [#25931]) ([opentherm_gw docs]) - **Genius Hub** - Users connecting to a Hub via the v1 API will need to specify a valid MAC address for the hub (see example YAML, below). Those using the v3 API will be unaffected. -This change is in preperation for for further changes, so the geniushub entities can be given more appropriate `entity_ids`. - + This change is in preperation for for further changes, so the geniushub entities can be given more appropriate `entity_ids`. + Some Sensor entities fro GeniusHub Issues have been renamed, and so will get a new entity ID: - * sensor.errors to sensor.geniushub_errors - * sensor.warnings to sensor.geniushub_warnings - * sensor.information to sensor.geniushub_informationeniushub and bump client to v0.6.26 - ([@zxdavb] - [#26640]) ([geniushub docs]) - + - sensor.errors to sensor.geniushub_errors + - sensor.warnings to sensor.geniushub_warnings + - sensor.information to sensor.geniushub_informationeniushub and bump client to v0.6.26 - ([@zxdavb] - [#26640]) ([geniushub docs]) + Example configuration entry: + ```yaml geniushub: token: JqVFd0UUEi... mac: 18:CC:23:12:34:56 ``` +## Beta Fixes + +- Only generate device trigger for sensor with unit ([@emontnemery] - [#27152]) ([sensor docs]) (beta fix) +- Add above and below to sensor trigger extra_fields ([@emontnemery] - [#27160]) ([sensor docs]) (beta fix) +- Update connect-box to fix issue with attrs ([@pvizeli] - [#27194]) ([upc_connect docs]) (beta fix) +- Fix validation when automation is saved from frontend ([@emontnemery] - [#27195]) ([automation docs]) (beta fix) +- Fix ecobee binary sensor and sensor unique ids ([@marthoc] - [#27208]) ([ecobee docs]) (beta fix) +- Bump adb-shell to 0.0.4; bump androidtv to 0.0.30 ([@JeffLIrion] - [#27224]) ([androidtv docs]) (beta fix) +- Fix closed status for non horizontal awnings. ([@psicot] - [#26840]) ([tahoma docs]) (beta fix) +- Fix update on cert_expiry startup ([@jjlawren] - [#27137]) ([cert_expiry docs]) (beta fix) +- Fix onvif PTZ service freeze ([@skgsergio] - [#27250]) ([onvif docs]) (beta fix) +- Fix the todoist integration ([@boralyl] - [#27273]) ([todoist docs]) (beta fix) +- Fix Plex media_player.play_media service ([@jjlawren] - [#27278]) ([plex docs]) (beta fix) +- Remove manual config flow step ([@jjlawren] - [#27291]) ([plex docs]) (beta fix) +- Improve speed websocket sends messages ([@balloob] - [#27295]) ([websocket_api docs]) (beta fix) +- Google: Report all states on activating report state ([@balloob] - [#27312]) ([google_assistant docs]) (beta fix) +- Fix single Plex server case ([@jjlawren] - [#27326]) ([plex docs]) (beta fix) +- Updated frontend to 20191002.1 ([@bramkragten] - [#27329]) ([frontend docs]) (beta fix) +- Fix translations for binary_sensor triggers ([@emontnemery] - [#27330]) ([binary_sensor docs]) (beta fix) +- Fix connection issues with withings API by switching to a maintained codebase ([@vangorra] - [#27310]) ([withings docs]) (beta fix) +- Update zigpy-zigate to 0.4.1 ([@doudz] - [#27345]) ([zha docs]) (beta fix) +- Updated frontend to 20191002.2 ([@bramkragten] - [#27370]) ([frontend docs]) (beta fix) + ## All changes - Add support for DOODS Image Processing ([@snowzach] - [#26208]) ([doods docs]) (new-integration) @@ -216,7 +315,7 @@ This change is in preperation for for further changes, so the geniushub entities - Revert "Add transport data from maps.yandex.ru api (#26252)" ([@pvizeli] - [#26762]) ([yandex_transport docs]) - Bump openwrt-luci-rpc to version 1.1.1 ([@flowolf] - [#26759]) ([luci docs]) - Type hint additions ([@scop] - [#26765]) ([automation docs]) ([cover docs]) ([frontend docs]) ([http docs]) ([media_player docs]) ([switch docs]) -- Add transport data from maps.yandex.ru api ([@rishatik92] - [#26766]) ([yandex_transport docs]) (new-integration) +- Add transport data from maps.yandex.ru api ([@rishatik92] - [#26766]) ([yandex_transport docs]) - ZHA siren and warning device support ([@dmulcahey] - [#26046]) ([zha docs]) - Bump aiowwlln to 2.0.2 ([@bachya] - [#26769]) ([wwlln docs]) - Bump simplisafe-python to 5.0.1 ([@bachya] - [#26775]) ([simplisafe docs]) @@ -378,54 +477,27 @@ This change is in preperation for for further changes, so the geniushub entities - Fix colorTemperatureInKelvin in Alexa report when light is off ([@ochlocracy] - [#27107]) ([alexa docs]) - Add device trigger support to sensor entities ([@emontnemery] - [#27133]) ([automation docs]) ([binary_sensor docs]) ([device_automation docs]) ([sensor docs]) - Add Google Report State ([@balloob] - [#27112]) ([alexa docs]) ([cloud docs]) ([google_assistant docs]) - -## All frontend changes - -* Fix whitespace error in services ([#3880](https://github.com/home-assistant/home-assistant-polymer/pull/3880)) [@bramkragten](https://github.com/bramkragten) -* Hide empty blocks on device page ([#3950](https://github.com/home-assistant/home-assistant-polymer/pull/3950)) [@bramkragten](https://github.com/bramkragten) -* Fix updating entity id in entity-registry-dialog ([#3962](https://github.com/home-assistant/home-assistant-polymer/pull/3862)) [@bramkragten](https://github.com/bramkragten) -* Add report state toggle for Google ([#3855](https://github.com/home-assistant/home-assistant-polymer/pull/3855)) [@bramkragten](https://github.com/bramkragten) -* Fix dark switch for map card editor ([#3856](https://github.com/home-assistant/home-assistant-polymer/pull/3856)) [@bramkragten](https://github.com/bramkragten) -* Align background with tiles ([#3858](https://github.com/home-assistant/home-assistant-polymer/pull/3858)) [@bramkragten](https://github.com/bramkragten) -* Allow yaml in dev states ([#3859](https://github.com/home-assistant/home-assistant-polymer/pull/3859)) [@bramkragten](https://github.com/bramkragten) -* Allow yaml in dev services ([#3860](https://github.com/home-assistant/home-assistant-polymer/pull/3860)) [@bramkragten](https://github.com/bramkragten) -* Allow yaml in dev events ([#3861](https://github.com/home-assistant/home-assistant-polymer/pull/3861)) [@bramkragten](https://github.com/bramkragten) -* Allow yaml in script and automation ([#3862](https://github.com/home-assistant/home-assistant-polymer/pull/3862)) [@bramkragten](https://github.com/bramkragten) -* Default hide disabled entities from entity registry ([#3863](https://github.com/home-assistant/home-assistant-polymer/pull/3863)) [@bramkragten](https://github.com/bramkragten) -* Guard for null badges ([#3841](https://github.com/home-assistant/home-assistant-polymer/pull/3841)) [@bramkragten](https://github.com/bramkragten) -* Add entity registry functions to device page ([#3843](https://github.com/home-assistant/home-assistant-polymer/pull/3843)) [@bramkragten](https://github.com/bramkragten) -* Allow user selection of text in Lovelace ([#3605](https://github.com/home-assistant/home-assistant-polymer/pull/3605)) [@iantrich](https://github.com/iantrich) -* Update documentation link URL for integrations ([#3857](https://github.com/home-assistant/home-assistant-polymer/pull/3857)) [@frenck](https://github.com/frenck) -* add actions to picture-glance entities ([#3807](https://github.com/home-assistant/home-assistant-polymer/pull/3807)) [@iantrich](https://github.com/iantrich) -* Fix some styling of ha-switch ([#3842](https://github.com/home-assistant/home-assistant-polymer/pull/3842)) [@bramkragten](https://github.com/bramkragten) -* Remove local mdc-datatable ([#3840](https://github.com/home-assistant/home-assistant-polymer/pull/3840)) [@bramkragten](https://github.com/bramkragten) -* Add missing domain icons ([#3836](https://github.com/home-assistant/home-assistant-polymer/pull/3836)) [@SeanPM5](https://github.com/SeanPM5) -* Use filter worker in data-table ([#3808](https://github.com/home-assistant/home-assistant-polymer/pull/3808)) [@bramkragten](https://github.com/bramkragten) -* add image option to entities card ([#3832](https://github.com/home-assistant/home-assistant-polymer/pull/3832)) [@iantrich](https://github.com/iantrich) -* fix alignment of switches positioned absolutely ([#3812](https://github.com/home-assistant/home-assistant-polymer/pull/3812)) [@iantrich](https://github.com/iantrich) -* add state_filter to picture cards ([#3791](https://github.com/home-assistant/home-assistant-polymer/pull/3791)) [@iantrich](https://github.com/iantrich) -* Add a setting for vibration ([#3813](https://github.com/home-assistant/home-assistant-polymer/pull/3813)) [@bramkragten](https://github.com/bramkragten) -* Add hassio supervisor and os update notice ([#3798](https://github.com/home-assistant/home-assistant-polymer/pull/3798)) [@bramkragten](https://github.com/bramkragten) -* Add name to picture entity struct ([#3809](https://github.com/home-assistant/home-assistant-polymer/pull/3809)) [@bramkragten](https://github.com/bramkragten) -* UI Editor for picture-glance card ([#3709](https://github.com/home-assistant/home-assistant-polymer/pull/3709)) [@iantrich](https://github.com/iantrich) -* Fix firefox overflow ([#3806](https://github.com/home-assistant/home-assistant-polymer/pull/3806)) [@bramkragten](https://github.com/bramkragten) -* Expand entity-filter options ([#3692](https://github.com/home-assistant/home-assistant-polymer/pull/3692)) [@iantrich](https://github.com/iantrich) -* Green shade in climate history for platforms that don't support `hvac_action` ([#3787](https://github.com/home-assistant/home-assistant-polymer/pull/3787)) [@OnFreund](https://github.com/OnFreund) -* UI editor for history-graph ([#3782](https://github.com/home-assistant/home-assistant-polymer/pull/3782)) [@iantrich](https://github.com/iantrich) -* cleanup editors ([#3786](https://github.com/home-assistant/home-assistant-polymer/pull/3786)) [@iantrich](https://github.com/iantrich) -* Add support for `and` and `or` conditions to the automation editor. ([#3724](https://github.com/home-assistant/home-assistant-polymer/pull/3724)) [@emontnemery](https://github.com/emontnemery) -* Add support for panels to cast ([#3796](https://github.com/home-assistant/home-assistant-polymer/pull/3796)) [@bramkragten](https://github.com/bramkragten) -* Move views to own folder + use update vs updated in panel view ([#3761](https://github.com/home-assistant/home-assistant-polymer/pull/3761)) [@bramkragten](https://github.com/bramkragten) -* Add Language Urdu ([#3750](https://github.com/home-assistant/home-assistant-polymer/pull/3750)) [@bramkragten](https://github.com/bramkragten) -* Add support for automation description ([#3723](https://github.com/home-assistant/home-assistant-polymer/pull/3723)) [@emontnemery](https://github.com/emontnemery) -* light-card: icon option ([#3771](https://github.com/home-assistant/home-assistant-polymer/pull/3771)) [@iantrich](https://github.com/iantrich) -* Switch paper-toggle-button to mwc-switch ([#3683](https://github.com/home-assistant/home-assistant-polymer/pull/3683)) [@iantrich](https://github.com/iantrich) -* Upgrade some deps ([#3780](https://github.com/home-assistant/home-assistant-polymer/pull/3780)) [@balloob](https://github.com/balloob) -* UI Editor for picture-entity card ([#3708](https://github.com/home-assistant/home-assistant-polymer/pull/3708)) [@iantrich](https://github.com/iantrich) -* picture entity editor fix ([#3783](https://github.com/home-assistant/home-assistant-polymer/pull/3783)) [@iantrich](https://github.com/iantrich) -* new action: url ([#3773](https://github.com/home-assistant/home-assistant-polymer/pull/3773)) [@iantrich](https://github.com/iantrich) -* Replace all default exports in common/ with named exports ([#3790](https://github.com/home-assistant/home-assistant-polymer/pull/3790)) [@iantrich](https://github.com/iantrich) -* Add device automation options to device page ([#3776](https://github.com/home-assistant/home-assistant-polymer/pull/3776)) [@bramkragten](https://github.com/bramkragten) +- Handle all single zone thermostats ([@zxdavb] - [#27168]) ([evohome docs]) +- Only generate device trigger for sensor with unit ([@emontnemery] - [#27152]) ([sensor docs]) (beta fix) +- Add above and below to sensor trigger extra_fields ([@emontnemery] - [#27160]) ([sensor docs]) (beta fix) +- Update connect-box to fix issue with attrs ([@pvizeli] - [#27194]) ([upc_connect docs]) (beta fix) +- Fix validation when automation is saved from frontend ([@emontnemery] - [#27195]) ([automation docs]) (beta fix) +- Fix ecobee binary sensor and sensor unique ids ([@marthoc] - [#27208]) ([ecobee docs]) (beta fix) +- Bump adb-shell to 0.0.4; bump androidtv to 0.0.30 ([@JeffLIrion] - [#27224]) ([androidtv docs]) (beta fix) +- Fix closed status for non horizontal awnings. ([@psicot] - [#26840]) ([tahoma docs]) (beta fix) +- Fix update on cert_expiry startup ([@jjlawren] - [#27137]) ([cert_expiry docs]) (beta fix) +- Fix onvif PTZ service freeze ([@skgsergio] - [#27250]) ([onvif docs]) (beta fix) +- Fix the todoist integration ([@boralyl] - [#27273]) ([todoist docs]) (beta fix) +- Fix Plex media_player.play_media service ([@jjlawren] - [#27278]) ([plex docs]) (beta fix) +- Remove manual config flow step ([@jjlawren] - [#27291]) ([plex docs]) (beta fix) +- Improve speed websocket sends messages ([@balloob] - [#27295]) ([websocket_api docs]) (beta fix) +- Google: Report all states on activating report state ([@balloob] - [#27312]) ([google_assistant docs]) (beta fix) +- Fix single Plex server case ([@jjlawren] - [#27326]) ([plex docs]) (beta fix) +- Updated frontend to 20191002.1 ([@bramkragten] - [#27329]) ([frontend docs]) (beta fix) +- Fix translations for binary_sensor triggers ([@emontnemery] - [#27330]) ([binary_sensor docs]) (beta fix) +- Fix connection issues with withings API by switching to a maintained codebase ([@vangorra] - [#27310]) ([withings docs]) (beta fix) +- Update zigpy-zigate to 0.4.1 ([@doudz] - [#27345]) ([zha docs]) (beta fix) +- Updated frontend to 20191002.2 ([@bramkragten] - [#27370]) ([frontend docs]) (beta fix) [#22311]: https://github.com/home-assistant/home-assistant/pull/22311 [#23495]: https://github.com/home-assistant/home-assistant/pull/23495 @@ -547,6 +619,7 @@ This change is in preperation for for further changes, so the geniushub entities [#26831]: https://github.com/home-assistant/home-assistant/pull/26831 [#26832]: https://github.com/home-assistant/home-assistant/pull/26832 [#26835]: https://github.com/home-assistant/home-assistant/pull/26835 +[#26840]: https://github.com/home-assistant/home-assistant/pull/26840 [#26847]: https://github.com/home-assistant/home-assistant/pull/26847 [#26849]: https://github.com/home-assistant/home-assistant/pull/26849 [#26852]: https://github.com/home-assistant/home-assistant/pull/26852 @@ -640,31 +713,52 @@ This change is in preperation for for further changes, so the geniushub entities [#27133]: https://github.com/home-assistant/home-assistant/pull/27133 [#27134]: https://github.com/home-assistant/home-assistant/pull/27134 [#27135]: https://github.com/home-assistant/home-assistant/pull/27135 -[@Adminiuga]: https://github.com/Adminiuga -[@BKPepe]: https://github.com/BKPepe -[@Bouni]: https://github.com/Bouni -[@CQoute]: https://github.com/CQoute -[@Danielhiversen]: https://github.com/Danielhiversen -[@HarlemSquirrel]: https://github.com/HarlemSquirrel -[@Jc2k]: https://github.com/Jc2k -[@JeffLIrion]: https://github.com/JeffLIrion -[@KJonline]: https://github.com/KJonline -[@Kane610]: https://github.com/Kane610 -[@KiLLeRRaT]: https://github.com/KiLLeRRaT -[@MartinHjelmare]: https://github.com/MartinHjelmare -[@MatthewFlamm]: https://github.com/MatthewFlamm -[@Michsior14]: https://github.com/Michsior14 -[@SNoof85]: https://github.com/SNoof85 -[@SneakSnackSnake]: https://github.com/SneakSnackSnake -[@SukramJ]: https://github.com/SukramJ -[@Swamp-Ig]: https://github.com/Swamp-Ig -[@ViViDboarder]: https://github.com/ViViDboarder +[#27137]: https://github.com/home-assistant/home-assistant/pull/27137 +[#27152]: https://github.com/home-assistant/home-assistant/pull/27152 +[#27160]: https://github.com/home-assistant/home-assistant/pull/27160 +[#27168]: https://github.com/home-assistant/home-assistant/pull/27168 +[#27194]: https://github.com/home-assistant/home-assistant/pull/27194 +[#27195]: https://github.com/home-assistant/home-assistant/pull/27195 +[#27208]: https://github.com/home-assistant/home-assistant/pull/27208 +[#27224]: https://github.com/home-assistant/home-assistant/pull/27224 +[#27250]: https://github.com/home-assistant/home-assistant/pull/27250 +[#27273]: https://github.com/home-assistant/home-assistant/pull/27273 +[#27278]: https://github.com/home-assistant/home-assistant/pull/27278 +[#27291]: https://github.com/home-assistant/home-assistant/pull/27291 +[#27295]: https://github.com/home-assistant/home-assistant/pull/27295 +[#27310]: https://github.com/home-assistant/home-assistant/pull/27310 +[#27312]: https://github.com/home-assistant/home-assistant/pull/27312 +[#27326]: https://github.com/home-assistant/home-assistant/pull/27326 +[#27329]: https://github.com/home-assistant/home-assistant/pull/27329 +[#27330]: https://github.com/home-assistant/home-assistant/pull/27330 +[#27345]: https://github.com/home-assistant/home-assistant/pull/27345 +[#27370]: https://github.com/home-assistant/home-assistant/pull/27370 +[@adminiuga]: https://github.com/Adminiuga +[@bkpepe]: https://github.com/BKPepe +[@bouni]: https://github.com/Bouni +[@cqoute]: https://github.com/CQoute +[@danielhiversen]: https://github.com/Danielhiversen +[@harlemsquirrel]: https://github.com/HarlemSquirrel +[@jc2k]: https://github.com/Jc2k +[@jefflirion]: https://github.com/JeffLIrion +[@kjonline]: https://github.com/KJonline +[@kane610]: https://github.com/Kane610 +[@killerrat]: https://github.com/KiLLeRRaT +[@martinhjelmare]: https://github.com/MartinHjelmare +[@matthewflamm]: https://github.com/MatthewFlamm +[@michsior14]: https://github.com/Michsior14 +[@snoof85]: https://github.com/SNoof85 +[@sneaksnacksnake]: https://github.com/SneakSnackSnake +[@sukramj]: https://github.com/SukramJ +[@swamp-ig]: https://github.com/Swamp-Ig +[@vividboarder]: https://github.com/ViViDboarder [@abmantis]: https://github.com/abmantis [@amelchio]: https://github.com/amelchio [@amigan]: https://github.com/amigan [@bachya]: https://github.com/bachya [@balloob]: https://github.com/balloob [@bbrendon]: https://github.com/bbrendon +[@boralyl]: https://github.com/boralyl [@bramkragten]: https://github.com/bramkragten [@bryanyork]: https://github.com/bryanyork [@chriscla]: https://github.com/chriscla @@ -707,6 +801,7 @@ This change is in preperation for for further changes, so the geniushub entities [@pgilad]: https://github.com/pgilad [@piitaya]: https://github.com/piitaya [@poofyteddy]: https://github.com/poofyteddy +[@psicot]: https://github.com/psicot [@pvizeli]: https://github.com/pvizeli [@ratsept]: https://github.com/ratsept [@rishatik92]: https://github.com/rishatik92 @@ -719,6 +814,7 @@ This change is in preperation for for further changes, so the geniushub entities [@scop]: https://github.com/scop [@sebasje]: https://github.com/sebasje [@shutupflanders]: https://github.com/shutupflanders +[@skgsergio]: https://github.com/skgsergio [@snowzach]: https://github.com/snowzach [@squishykid]: https://github.com/squishykid [@thecynic]: https://github.com/thecynic @@ -726,128 +822,133 @@ This change is in preperation for for further changes, so the geniushub entities [@tleegaard]: https://github.com/tleegaard [@tribut]: https://github.com/tribut [@tsvi]: https://github.com/tsvi +[@vangorra]: https://github.com/vangorra [@zewelor]: https://github.com/zewelor [@zhumuht]: https://github.com/zhumuht [@zxdavb]: https://github.com/zxdavb -[alexa docs]: https://www.home-assistant.io/integrations/alexa/ -[amazon_polly docs]: https://www.home-assistant.io/integrations/amazon_polly/ -[androidtv docs]: https://www.home-assistant.io/integrations/androidtv/ -[automation docs]: https://www.home-assistant.io/integrations/automation/ -[binary_sensor docs]: https://www.home-assistant.io/integrations/binary_sensor/ -[bluetooth_le_tracker docs]: https://www.home-assistant.io/integrations/bluetooth_le_tracker/ -[bluetooth_tracker docs]: https://www.home-assistant.io/integrations/bluetooth_tracker/ -[bmw_connected_drive docs]: https://www.home-assistant.io/integrations/bmw_connected_drive/ -[cert_expiry docs]: https://www.home-assistant.io/integrations/cert_expiry/ -[cloud docs]: https://www.home-assistant.io/integrations/cloud/ -[config docs]: https://www.home-assistant.io/integrations/config/ -[cover docs]: https://www.home-assistant.io/integrations/cover/ -[darksky docs]: https://www.home-assistant.io/integrations/darksky/ -[deconz docs]: https://www.home-assistant.io/integrations/deconz/ -[device_automation docs]: https://www.home-assistant.io/integrations/device_automation/ -[doods docs]: https://www.home-assistant.io/integrations/doods/ -[ebusd docs]: https://www.home-assistant.io/integrations/ebusd/ -[ecobee docs]: https://www.home-assistant.io/integrations/ecobee/ -[egardia docs]: https://www.home-assistant.io/integrations/egardia/ -[elv docs]: https://www.home-assistant.io/integrations/elv/ -[enphase_envoy docs]: https://www.home-assistant.io/integrations/enphase_envoy/ -[environment_canada docs]: https://www.home-assistant.io/integrations/environment_canada/ -[esphome docs]: https://www.home-assistant.io/integrations/esphome/ -[evohome docs]: https://www.home-assistant.io/integrations/evohome/ -[fedex docs]: https://www.home-assistant.io/integrations/fedex/ -[frontend docs]: https://www.home-assistant.io/integrations/frontend/ -[generic docs]: https://www.home-assistant.io/integrations/generic/ -[geniushub docs]: https://www.home-assistant.io/integrations/geniushub/ -[geonetnz_quakes docs]: https://www.home-assistant.io/integrations/geonetnz_quakes/ -[glances docs]: https://www.home-assistant.io/integrations/glances/ -[google_assistant docs]: https://www.home-assistant.io/integrations/google_assistant/ -[group docs]: https://www.home-assistant.io/integrations/group/ -[here_travel_time docs]: https://www.home-assistant.io/integrations/here_travel_time/ -[hive docs]: https://www.home-assistant.io/integrations/hive/ -[homekit docs]: https://www.home-assistant.io/integrations/homekit/ -[homekit_controller docs]: https://www.home-assistant.io/integrations/homekit_controller/ -[homematicip_cloud docs]: https://www.home-assistant.io/integrations/homematicip_cloud/ -[http docs]: https://www.home-assistant.io/integrations/http/ -[hue docs]: https://www.home-assistant.io/integrations/hue/ -[iaqualink docs]: https://www.home-assistant.io/integrations/iaqualink/ -[image_processing docs]: https://www.home-assistant.io/integrations/image_processing/ -[incomfort docs]: https://www.home-assistant.io/integrations/incomfort/ -[influxdb docs]: https://www.home-assistant.io/integrations/influxdb/ -[iperf3 docs]: https://www.home-assistant.io/integrations/iperf3/ -[izone docs]: https://www.home-assistant.io/integrations/izone/ -[kaiterra docs]: https://www.home-assistant.io/integrations/kaiterra/ -[keenetic_ndms2 docs]: https://www.home-assistant.io/integrations/keenetic_ndms2/ -[knx docs]: https://www.home-assistant.io/integrations/knx/ -[lcn docs]: https://www.home-assistant.io/integrations/lcn/ -[lifx docs]: https://www.home-assistant.io/integrations/lifx/ -[lifx_cloud docs]: https://www.home-assistant.io/integrations/lifx_cloud/ -[lifx_legacy docs]: https://www.home-assistant.io/integrations/lifx_legacy/ -[light docs]: https://www.home-assistant.io/integrations/light/ -[linksys_ap docs]: https://www.home-assistant.io/integrations/linksys_ap/ -[linky docs]: https://www.home-assistant.io/integrations/linky/ -[luci docs]: https://www.home-assistant.io/integrations/luci/ -[media_extractor docs]: https://www.home-assistant.io/integrations/media_extractor/ -[media_player docs]: https://www.home-assistant.io/integrations/media_player/ -[meteoalarm docs]: https://www.home-assistant.io/integrations/meteoalarm/ -[moscow_yandex_transport docs]: https://www.home-assistant.io/integrations/moscow_yandex_transport/ -[mqtt docs]: https://www.home-assistant.io/integrations/mqtt/ -[mysensors docs]: https://www.home-assistant.io/integrations/mysensors/ -[nest docs]: https://www.home-assistant.io/integrations/nest/ -[netgear_lte docs]: https://www.home-assistant.io/integrations/netgear_lte/ -[nextbus docs]: https://www.home-assistant.io/integrations/nextbus/ -[nws docs]: https://www.home-assistant.io/integrations/nws/ -[nzbget docs]: https://www.home-assistant.io/integrations/nzbget/ -[obihai docs]: https://www.home-assistant.io/integrations/obihai/ -[ombi docs]: https://www.home-assistant.io/integrations/ombi/ -[onvif docs]: https://www.home-assistant.io/integrations/onvif/ -[opentherm_gw docs]: https://www.home-assistant.io/integrations/opentherm_gw/ -[openuv docs]: https://www.home-assistant.io/integrations/openuv/ -[otp docs]: https://www.home-assistant.io/integrations/otp/ -[owlet docs]: https://www.home-assistant.io/integrations/owlet/ -[persistent_notification docs]: https://www.home-assistant.io/integrations/persistent_notification/ -[pi_hole docs]: https://www.home-assistant.io/integrations/pi_hole/ -[plex docs]: https://www.home-assistant.io/integrations/plex/ -[proxy docs]: https://www.home-assistant.io/integrations/proxy/ -[rainbird docs]: https://www.home-assistant.io/integrations/rainbird/ -[remote_rpi_gpio docs]: https://www.home-assistant.io/integrations/remote_rpi_gpio/ -[rest_command docs]: https://www.home-assistant.io/integrations/rest_command/ -[saj docs]: https://www.home-assistant.io/integrations/saj/ -[sendgrid docs]: https://www.home-assistant.io/integrations/sendgrid/ -[sensor docs]: https://www.home-assistant.io/integrations/sensor/ -[shodan docs]: https://www.home-assistant.io/integrations/shodan/ -[simplisafe docs]: https://www.home-assistant.io/integrations/simplisafe/ -[solaredge_local docs]: https://www.home-assistant.io/integrations/solaredge_local/ -[solax docs]: https://www.home-assistant.io/integrations/solax/ -[soma docs]: https://www.home-assistant.io/integrations/soma/ -[sonos docs]: https://www.home-assistant.io/integrations/sonos/ -[spaceapi docs]: https://www.home-assistant.io/integrations/spaceapi/ -[srp_energy docs]: https://www.home-assistant.io/integrations/srp_energy/ -[sun docs]: https://www.home-assistant.io/integrations/sun/ -[switch docs]: https://www.home-assistant.io/integrations/switch/ -[sytadin docs]: https://www.home-assistant.io/integrations/sytadin/ -[template docs]: https://www.home-assistant.io/integrations/template/ -[tensorflow docs]: https://www.home-assistant.io/integrations/tensorflow/ -[tfiac docs]: https://www.home-assistant.io/integrations/tfiac/ -[tibber docs]: https://www.home-assistant.io/integrations/tibber/ -[torque docs]: https://www.home-assistant.io/integrations/torque/ -[tradfri docs]: https://www.home-assistant.io/integrations/tradfri/ -[transmission docs]: https://www.home-assistant.io/integrations/transmission/ -[unifi docs]: https://www.home-assistant.io/integrations/unifi/ -[ups docs]: https://www.home-assistant.io/integrations/ups/ -[usps docs]: https://www.home-assistant.io/integrations/usps/ -[velux docs]: https://www.home-assistant.io/integrations/velux/ -[venstar docs]: https://www.home-assistant.io/integrations/venstar/ -[vera docs]: https://www.home-assistant.io/integrations/vera/ -[vivotek docs]: https://www.home-assistant.io/integrations/vivotek/ -[volumio docs]: https://www.home-assistant.io/integrations/volumio/ -[watson_tts docs]: https://www.home-assistant.io/integrations/watson_tts/ -[websocket_api docs]: https://www.home-assistant.io/integrations/websocket_api/ -[wemo docs]: https://www.home-assistant.io/integrations/wemo/ -[whois docs]: https://www.home-assistant.io/integrations/whois/ -[wwlln docs]: https://www.home-assistant.io/integrations/wwlln/ -[xbox_live docs]: https://www.home-assistant.io/integrations/xbox_live/ -[xiaomi_aqara docs]: https://www.home-assistant.io/integrations/xiaomi_aqara/ -[yandex_transport docs]: https://www.home-assistant.io/integrations/yandex_transport/ -[yessssms docs]: https://www.home-assistant.io/integrations/yessssms/ -[zha docs]: https://www.home-assistant.io/integrations/zha/ -[zone docs]: https://www.home-assistant.io/integrations/zone/ -[zwave docs]: https://www.home-assistant.io/integrations/zwave/ +[alexa docs]: /integrations/alexa/ +[amazon_polly docs]: /integrations/amazon_polly/ +[androidtv docs]: /integrations/androidtv/ +[automation docs]: /integrations/automation/ +[binary_sensor docs]: /integrations/binary_sensor/ +[bluetooth_le_tracker docs]: /integrations/bluetooth_le_tracker/ +[bluetooth_tracker docs]: /integrations/bluetooth_tracker/ +[bmw_connected_drive docs]: /integrations/bmw_connected_drive/ +[cert_expiry docs]: /integrations/cert_expiry/ +[cloud docs]: /integrations/cloud/ +[config docs]: /integrations/config/ +[cover docs]: /integrations/cover/ +[darksky docs]: /integrations/darksky/ +[deconz docs]: /integrations/deconz/ +[device_automation docs]: /integrations/device_automation/ +[doods docs]: /integrations/doods/ +[ebusd docs]: /integrations/ebusd/ +[ecobee docs]: /integrations/ecobee/ +[egardia docs]: /integrations/egardia/ +[elv docs]: /integrations/elv/ +[enphase_envoy docs]: /integrations/enphase_envoy/ +[environment_canada docs]: /integrations/environment_canada/ +[esphome docs]: /integrations/esphome/ +[evohome docs]: /integrations/evohome/ +[fedex docs]: /integrations/fedex/ +[frontend docs]: /integrations/frontend/ +[generic docs]: /integrations/generic/ +[geniushub docs]: /integrations/geniushub/ +[geonetnz_quakes docs]: /integrations/geonetnz_quakes/ +[glances docs]: /integrations/glances/ +[google_assistant docs]: /integrations/google_assistant/ +[group docs]: /integrations/group/ +[here_travel_time docs]: /integrations/here_travel_time/ +[hive docs]: /integrations/hive/ +[homekit docs]: /integrations/homekit/ +[homekit_controller docs]: /integrations/homekit_controller/ +[homematicip_cloud docs]: /integrations/homematicip_cloud/ +[http docs]: /integrations/http/ +[hue docs]: /integrations/hue/ +[iaqualink docs]: /integrations/iaqualink/ +[image_processing docs]: /integrations/image_processing/ +[incomfort docs]: /integrations/incomfort/ +[influxdb docs]: /integrations/influxdb/ +[iperf3 docs]: /integrations/iperf3/ +[izone docs]: /integrations/izone/ +[kaiterra docs]: /integrations/kaiterra/ +[keenetic_ndms2 docs]: /integrations/keenetic_ndms2/ +[knx docs]: /integrations/knx/ +[lcn docs]: /integrations/lcn/ +[lifx docs]: /integrations/lifx/ +[lifx_cloud docs]: /integrations/lifx_cloud/ +[lifx_legacy docs]: /integrations/lifx_legacy/ +[light docs]: /integrations/light/ +[linksys_ap docs]: /integrations/linksys_ap/ +[linky docs]: /integrations/linky/ +[luci docs]: /integrations/luci/ +[media_extractor docs]: /integrations/media_extractor/ +[media_player docs]: /integrations/media_player/ +[meteoalarm docs]: /integrations/meteoalarm/ +[moscow_yandex_transport docs]: /integrations/moscow_yandex_transport/ +[mqtt docs]: /integrations/mqtt/ +[mysensors docs]: /integrations/mysensors/ +[nest docs]: /integrations/nest/ +[netgear_lte docs]: /integrations/netgear_lte/ +[nextbus docs]: /integrations/nextbus/ +[nws docs]: /integrations/nws/ +[nzbget docs]: /integrations/nzbget/ +[obihai docs]: /integrations/obihai/ +[ombi docs]: /integrations/ombi/ +[onvif docs]: /integrations/onvif/ +[opentherm_gw docs]: /integrations/opentherm_gw/ +[openuv docs]: /integrations/openuv/ +[otp docs]: /integrations/otp/ +[owlet docs]: /integrations/owlet/ +[persistent_notification docs]: /integrations/persistent_notification/ +[pi_hole docs]: /integrations/pi_hole/ +[plex docs]: /integrations/plex/ +[proxy docs]: /integrations/proxy/ +[rainbird docs]: /integrations/rainbird/ +[remote_rpi_gpio docs]: /integrations/remote_rpi_gpio/ +[rest_command docs]: /integrations/rest_command/ +[saj docs]: /integrations/saj/ +[sendgrid docs]: /integrations/sendgrid/ +[sensor docs]: /integrations/sensor/ +[shodan docs]: /integrations/shodan/ +[simplisafe docs]: /integrations/simplisafe/ +[solaredge_local docs]: /integrations/solaredge_local/ +[solax docs]: /integrations/solax/ +[soma docs]: /integrations/soma/ +[sonos docs]: /integrations/sonos/ +[spaceapi docs]: /integrations/spaceapi/ +[srp_energy docs]: /integrations/srp_energy/ +[sun docs]: /integrations/sun/ +[switch docs]: /integrations/switch/ +[sytadin docs]: /integrations/sytadin/ +[tahoma docs]: /integrations/tahoma/ +[template docs]: /integrations/template/ +[tensorflow docs]: /integrations/tensorflow/ +[tfiac docs]: /integrations/tfiac/ +[tibber docs]: /integrations/tibber/ +[todoist docs]: /integrations/todoist/ +[torque docs]: /integrations/torque/ +[tradfri docs]: /integrations/tradfri/ +[transmission docs]: /integrations/transmission/ +[unifi docs]: /integrations/unifi/ +[upc_connect docs]: /integrations/upc_connect/ +[ups docs]: /integrations/ups/ +[usps docs]: /integrations/usps/ +[velux docs]: /integrations/velux/ +[venstar docs]: /integrations/venstar/ +[vera docs]: /integrations/vera/ +[vivotek docs]: /integrations/vivotek/ +[volumio docs]: /integrations/volumio/ +[watson_tts docs]: /integrations/watson_tts/ +[websocket_api docs]: /integrations/websocket_api/ +[wemo docs]: /integrations/wemo/ +[whois docs]: /integrations/whois/ +[withings docs]: /integrations/withings/ +[wwlln docs]: /integrations/wwlln/ +[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/images/blog/2019-10-0.100/action-trigger.png b/source/images/blog/2019-10-0.100/action-trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..d286ed328c86e28d43aa3e9fe03ef619613ce349 GIT binary patch literal 4350 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 P{~gs;bd;-=Y=Zv-!g*px literal 0 HcmV?d00001 diff --git a/source/images/blog/2019-10-0.100/components.png b/source/images/blog/2019-10-0.100/components.png new file mode 100644 index 0000000000000000000000000000000000000000..17a3915d286b207892a3cec84d5f479b2863b166 GIT binary patch literal 22719 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 literal 0 HcmV?d00001 diff --git a/source/images/blog/2019-10-0.100/condition-and.png b/source/images/blog/2019-10-0.100/condition-and.png new file mode 100644 index 0000000000000000000000000000000000000000..849c58497c7f13671a873590c14188eef95eff82 GIT binary patch literal 8386 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 M>lkalzUCP9Z(5#=m;e9( literal 0 HcmV?d00001 diff --git a/source/images/blog/2019-10-0.100/hacktoberfest.png b/source/images/blog/2019-10-0.100/hacktoberfest.png new file mode 100644 index 0000000000000000000000000000000000000000..089598fbc7c781a147ac83694eba95bb950fb95e GIT binary patch literal 9793 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 a?9qh)TEb8sCiGvxKq`t5g~}K2g8vJ3=?z-| literal 0 HcmV?d00001 diff --git a/source/images/blog/2019-10-0.100/plex.png b/source/images/blog/2019-10-0.100/plex.png new file mode 100644 index 0000000000000000000000000000000000000000..d2281e76adddc85edfeab2ad30a6f7efac0ce0dd GIT binary patch literal 176719 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 Ire+iRZ}8bb{r~^~ literal 0 HcmV?d00001 From e315dc75df7d717f1b43ce0cddf3e052c980e6d9 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 9 Oct 2019 16:28:57 -0700 Subject: [PATCH 75/76] Fix broken links --- source/_integrations/doods.markdown | 2 +- .../{switch.pca.markdown => elv.markdown} | 0 .../{pizone.markdown => izone.markdown} | 0 source/_posts/2019-10-09-release-100.markdown | 34 +++++++++---------- source/_redirects | 3 ++ 5 files changed, 21 insertions(+), 18 deletions(-) rename source/_integrations/{switch.pca.markdown => elv.markdown} (100%) rename source/_integrations/{pizone.markdown => izone.markdown} (100%) diff --git a/source/_integrations/doods.markdown b/source/_integrations/doods.markdown index 76dc5ead0b7..53088e5a9d8 100644 --- a/source/_integrations/doods.markdown +++ b/source/_integrations/doods.markdown @@ -4,7 +4,7 @@ description: "Detect and recognize objects with DOODS." ha_category: - Image Processing ha_iot_class: Local Polling -ha_release: 0.100 +ha_release: "0.100" --- The `doods` image processing platform allows you to detect and recognize objects in a camera image using [DOODS](https://github.com/snowzach/doods/). The state of the entity is the number of objects detected, and recognized objects are listed in the `summary` attribute along with quantity. The `matches` attribute provides the confidence `score` for recognition and the bounding `box` of the object for each detection category. diff --git a/source/_integrations/switch.pca.markdown b/source/_integrations/elv.markdown similarity index 100% rename from source/_integrations/switch.pca.markdown rename to source/_integrations/elv.markdown diff --git a/source/_integrations/pizone.markdown b/source/_integrations/izone.markdown similarity index 100% rename from source/_integrations/pizone.markdown rename to source/_integrations/izone.markdown diff --git a/source/_posts/2019-10-09-release-100.markdown b/source/_posts/2019-10-09-release-100.markdown index edbed45a59d..5435c6862f4 100644 --- a/source/_posts/2019-10-09-release-100.markdown +++ b/source/_posts/2019-10-09-release-100.markdown @@ -115,7 +115,7 @@ As always, this release of Home Assistan is accompanied with a new release of th - Add support for DOODS Image Processing ([@snowzach] - [#26208]) ([doods docs]) (new-integration) - Izone component ([@Swamp-Ig] - [#24550]) ([izone docs]) (new-integration) -- Add transport data from maps.yandex.ru api ([@rishatik92] - [#26252]) ([moscow_yandex_transport docs]) (new-integration) +- Add transport data from maps.yandex.ru api ([@rishatik92] - [#26252]) ([yandex_transport docs]) (new-integration) - Add Kaiterra integration ([@Michsior14] - [#26661]) ([kaiterra docs]) (new-integration) - Add Ombi integration ([@larssont] - [#26755]) ([ombi docs]) (new-integration) - Add here_travel_time ([@eifinger] - [#24603]) ([here_travel_time docs]) (new-integration) @@ -141,12 +141,12 @@ Experiencing issues introduced by this release? Please report them in our [issue ## Breaking Changes - **Removed** - The following integrations which were marked in .98 for pending removal have now been removed (ADR-0004): - - **UPS** - ([@frenck] - [#26824]) ([ups docs]) - - **USPS** - ([@frenck] - [#26823]) ([usps docs]) - - **Sytadin** - ([@frenck] - [#26819]) ([sytadin docs]) - - **SRP Energy** - ([@frenck] - [#26826]) ([srp_energy docs]) - - **Fedex** - ([@frenck] - [#26822]) ([fedex docs]) - - **Linksys AP** - ([@frenck] - [#26847]) ([linksys_ap docs]) + - **UPS** - ([@frenck] - [#26824]) + - **USPS** - ([@frenck] - [#26823]) + - **Sytadin** - ([@frenck] - [#26819]) + - **SRP Energy** - ([@frenck] - [#26826]) + - **Fedex** - ([@frenck] - [#26822]) + - **Linksys AP** - ([@frenck] - [#26847]) - **NZBGet** - The integration has been changed to support multiple platforms and future events, and common code has been centralized to the component. The configuration has moved from the sensor platform to the `nzbget` key in configuration.yaml, and the `monitored_variables` option has been removed. Users need to update their configuration. - ([@chriscla] - [#26462]) ([nzbget docs]) New example configuration entry: @@ -309,8 +309,8 @@ Experiencing issues introduced by this release? Please report them in our [issue - Bump restrictedpython to 5.0 ([@frenck] - [#26741]) - Izone component ([@Swamp-Ig] - [#24550]) ([izone docs]) (new-integration) - Bump influxdb to 5.2.3 ([@frenck] - [#26743]) ([influxdb docs]) -- Update codeowners ([@amelchio] - [#26733]) ([lifx docs]) ([lifx_cloud docs]) ([lifx_legacy docs]) ([netgear_lte docs]) ([sonos docs]) -- Add transport data from maps.yandex.ru api ([@rishatik92] - [#26252]) ([moscow_yandex_transport docs]) (new-integration) +- Update codeowners ([@amelchio] - [#26733]) ([lifx docs]) ([lifx_cloud docs]) ([netgear_lte docs]) ([sonos docs]) +- Add transport data from maps.yandex.ru api ([@rishatik92] - [#26252]) ([yandex_transport docs]) (new-integration) - deCONZ improve gateway tests ([@Kane610] - [#26709]) ([deconz docs]) - Revert "Add transport data from maps.yandex.ru api (#26252)" ([@pvizeli] - [#26762]) ([yandex_transport docs]) - Bump openwrt-luci-rpc to version 1.1.1 ([@flowolf] - [#26759]) ([luci docs]) @@ -348,15 +348,15 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add Ombi integration ([@larssont] - [#26755]) ([ombi docs]) (new-integration) - Prevent Wemo doing I/O in event loop ([@balloob] - [#26835]) ([wemo docs]) - Split scaffolding script ([@balloob] - [#26832]) -- Remove deprecated ups integration (ADR-0004) ([@frenck] - [#26824]) ([ups docs]) (breaking change) -- Remove deprecated usps integration (ADR-0004) ([@frenck] - [#26823]) ([usps docs]) (breaking change) -- Remove deprecated sytadin integration (ADR-0004) ([@frenck] - [#26819]) ([sytadin docs]) (breaking change) +- Remove deprecated ups integration (ADR-0004) ([@frenck] - [#26824]) (breaking change) +- Remove deprecated usps integration (ADR-0004) ([@frenck] - [#26823]) (breaking change) +- Remove deprecated sytadin integration (ADR-0004) ([@frenck] - [#26819]) (breaking change) - Add here_travel_time ([@eifinger] - [#24603]) ([here_travel_time docs]) (new-integration) -- Remove deprecated srp_energy integration (ADR-0004) ([@frenck] - [#26826]) ([srp_energy docs]) (breaking change) -- Remove deprecated fedex integration (ADR-0004) ([@frenck] - [#26822]) ([fedex docs]) (breaking change) +- Remove deprecated srp_energy integration (ADR-0004) ([@frenck] - [#26826]) (breaking change) +- Remove deprecated fedex integration (ADR-0004) ([@frenck] - [#26822]) (breaking change) - Store ZHA light brightness when fading off to turn on at the correct brightness ([@abmantis] - [#26680]) ([zha docs]) - Bump pyotp to 2.3.0 ([@frenck] - [#26849]) ([otp docs]) -- Remove deprecated linksys_ap integration (ADR-0004) ([@frenck] - [#26847]) ([linksys_ap docs]) (breaking change) +- Remove deprecated linksys_ap integration (ADR-0004) ([@frenck] - [#26847]) (breaking change) - Bump up ZHA dependencies ([@Adminiuga] - [#26746]) - fix onvif/camera setting up error ([@sanyatuning] - [#26825]) ([onvif docs]) - Bump homematicip_cloud to 0.10.11 ([@SukramJ] - [#26852]) ([homematicip_cloud docs]) @@ -443,7 +443,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Bugfix evohome ([@zxdavb] - [#26810]) ([evohome docs]) (breaking change) - Add saj component ([@fredericvl] - [#26902]) ([saj docs]) (new-integration) - Add availability_template to Template Lock platform ([@grillp] - [#26517]) ([template docs]) -- Cleanup coroutine threadsafe ([@pvizeli] - [#27080]) ([bluetooth_le_tracker docs]) ([generic docs]) ([group docs]) ([mqtt docs]) ([proxy docs]) +- Cleanup coroutine threadsafe ([@pvizeli] - [#27080]) ([bluetooth_le_tracker docs]) ([group docs]) ([mqtt docs]) ([proxy docs]) - Plex external config flow ([@jjlawren] - [#26936]) ([plex docs]) - Bump attrs to 19.2.0 ([@frenck] - [#27102]) - Update meteoalertapi to version 0.1.6 ([@rolfberkenbosch] - [#27099]) ([meteoalarm docs]) @@ -885,7 +885,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [media_extractor docs]: /integrations/media_extractor/ [media_player docs]: /integrations/media_player/ [meteoalarm docs]: /integrations/meteoalarm/ -[moscow_yandex_transport docs]: /integrations/moscow_yandex_transport/ +[yandex_transport docs]: /integrations/yandex_transport/ [mqtt docs]: /integrations/mqtt/ [mysensors docs]: /integrations/mysensors/ [nest docs]: /integrations/nest/ diff --git a/source/_redirects b/source/_redirects index 5bb2f65fa2f..de66afd057d 100644 --- a/source/_redirects +++ b/source/_redirects @@ -2057,3 +2057,6 @@ /components/zone /integrations/zone /components/zoneminder /integrations/zoneminder /components/zwave /integrations/zwave + +# Breaking changes +/integrations/switch.pca /integrations/elv From e3f0cb3ea2afde15d7ccf4c99fe060d8af6ce423 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 9 Oct 2019 23:38:20 -0700 Subject: [PATCH 76/76] Update post --- _config.yml | 4 +-- ...rkdown => 2019-10-10-release-100.markdown} | 30 +++++++++++-------- 2 files changed, 20 insertions(+), 14 deletions(-) rename source/_posts/{2019-10-09-release-100.markdown => 2019-10-10-release-100.markdown} (97%) diff --git a/_config.yml b/_config.yml index d9c16deede8..e18361fda98 100644 --- a/_config.yml +++ b/_config.yml @@ -100,9 +100,9 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 100 +current_minor_version: 100 current_patch_version: 0 -date_released: 2019-10-09 +date_released: 2019-10-10 # 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/_posts/2019-10-09-release-100.markdown b/source/_posts/2019-10-10-release-100.markdown similarity index 97% rename from source/_posts/2019-10-09-release-100.markdown rename to source/_posts/2019-10-10-release-100.markdown index 5435c6862f4..42eb221281b 100644 --- a/source/_posts/2019-10-09-release-100.markdown +++ b/source/_posts/2019-10-10-release-100.markdown @@ -2,8 +2,8 @@ layout: post title: "0.100: Better Plex, Bye JSON, HERE Travel time." description: "A lot of frontend work, performance tweaks and more device automations." -date: 2019-10-09 01:05:02 -date_formatted: "October 9, 2019" +date: 2019-10-10 01:05:02 +date_formatted: "October 10, 2019" author: Paulus Schoutsen author_twitter: balloob comments: true @@ -13,7 +13,7 @@ og_image: /images/blog/2019-09-0.100/components.png -Welcome to the release notes of yet another wonderful release! No, we're not going for 1.0, we're doing 0.100! We feel like we're not ready yet with our vision for 1.0, but we're making progress every day. For a sneak peak of what we're thinking about, check our blog [Simple mode in Home Assistant 1.0](https://developers.home-assistant.io/blog/2019/10/05/simple-mode.html). +Welcome to the release notes of yet another wonderful release! No, we're not going for 1.0, we're doing 0.100! We feel like we're not ready yet with our goals for 1.0, but we're making progress every day. For a sneak peak of what we're thinking about, check our blog [Simple mode in Home Assistant 1.0](https://developers.home-assistant.io/blog/2019/10/05/simple-mode.html). ## Hacktoberfest @@ -30,7 +30,7 @@ Last 14 days of pull pequest throughput in the Home Assistant organization. ( Screenshot of a card showing device triggers to create automations from.

-### We say goodbye to JSON +We also added the entity registry, so you can change all the settings of the devices entities in one place. + +And, bonus, when you rename a device on the device page, it will now also rename the entities of that device if they contain the device name. When you are in advanced mode, it can also rename the entity id's for you. + +## Goodbye JSON πŸ‘‹ On the backend we have been using YAML for a long time, but on the frontend, we still used JSON for a lot of things. JSON is harder to write than YAML so we have aligned that. All data inputs on the frontend now accept YAML. You can still use JSON, as JSON is valid YAML. @@ -97,16 +97,22 @@ This includes: Screenshot of a service action in the automation editor using YAML.

+## Thank You, @Amelchio + +Core developer [@amelchio] is taking a break from working on Home Assistant. Amelchio has been a contributing member of the Home Assistant community for 2.5 years in which he made a grand total of 275 pull requests! Amelchio has worked on improving database performance and under his wing the Sonos, LIFX and Netgear LTE integrations flourished. He is an example community member, always available in the chat to help other people contribute to Home Assistant. + +Thanks Anders, we're going to miss you! ❀️ + ## In other news -Hans Oischinger showcased how he can steer his vacuum cleaner to specific rooms in his ouse via his floorplan. Besides this tweet, he also wrote [a great blog about it](https://medium.com/@hans.oischinger/zoned-cleanup-with-live-map-922240b4cf8c). +Hans Oischinger showcased how he can steer his vacuum cleaner to specific rooms in his house via his floorplan. Besides this tweet, he also wrote [a great blog about it](https://medium.com/@hans.oischinger/zoned-cleanup-with-live-map-922240b4cf8c). To improve discovery, we're collecting discovery info of devices and services. Please help us gather [zeroconf discovery info](https://github.com/home-assistant/home-assistant/issues/27371) and [HomeKit discovery info](https://github.com/home-assistant/home-assistant/issues/27292). -As always, this release of Home Assistan is accompanied with a new release of the [Home Assistant Podcast](https://hasspodcast.io/): +As always, this release of Home Assistant is accompanied with a new release of the [Home Assistant Podcast](https://hasspodcast.io/):