From 2f1eaa6efe07388e599dd1107699b665026bcc83 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 14 Dec 2018 11:20:39 +0100 Subject: [PATCH 01/27] Release 0.84.2 --- _config.yml | 4 +-- source/_posts/2018-12-12-release-84.markdown | 37 ++++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index 07e6962cf57..96cbb5e88c5 100644 --- a/_config.yml +++ b/_config.yml @@ -142,8 +142,8 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 84 -current_patch_version: 1 -date_released: 2018-12-12 +current_patch_version: 2 +date_released: 2018-12-14 # 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/2018-12-12-release-84.markdown b/source/_posts/2018-12-12-release-84.markdown index 35fbce2d5a8..a464ef4b274 100644 --- a/source/_posts/2018-12-12-release-84.markdown +++ b/source/_posts/2018-12-12-release-84.markdown @@ -75,6 +75,43 @@ Editor UI is now further processed. You can manage your Lovelace UI without leav [logbook docs]: /components/logbook/ [owntracks docs]: /components/owntracks/ +## {% linkable_title Release 0.84.2 - December 14 %} + +- Don't avoid async_schedule_update_ha_state by returning false ([@syssi] - [#19102]) ([binary_sensor.xiaomi_aqara docs]) +- Always add friendly name attribute to ZHA entities ([@damarco] - [#19141]) ([zha docs]) +- Bump aioasuswrt ([@kennedyshead] - [#19229]) ([asuswrt docs]) +- Add automation and script events to logbook filter events ([@luca-angemi] - [#19253]) ([logbook docs]) +- Fix list (fixes #19235) ([@fabaff] - [#19258]) ([tts docs]) +- Fix OwnTracks deadlocking ([@balloob] - [#19260]) ([owntracks docs]) +- Fix call to super() ([@marchingphoenix] - [#19279]) ([light.lutron docs]) +- Improve check for duplicated entity_id ([@emontnemery] - [#19194]) +- Fix race in entity_platform.async_add_entities ([@emontnemery] - [#19222]) + +[#19102]: https://github.com/home-assistant/home-assistant/pull/19102 +[#19141]: https://github.com/home-assistant/home-assistant/pull/19141 +[#19222]: https://github.com/home-assistant/home-assistant/pull/19222 +[#19229]: https://github.com/home-assistant/home-assistant/pull/19229 +[#19253]: https://github.com/home-assistant/home-assistant/pull/19253 +[#19258]: https://github.com/home-assistant/home-assistant/pull/19258 +[#19260]: https://github.com/home-assistant/home-assistant/pull/19260 +[#19279]: https://github.com/home-assistant/home-assistant/pull/19279 +[#19194]: https://github.com/home-assistant/home-assistant/pull/19194 +[@balloob]: https://github.com/balloob +[@damarco]: https://github.com/damarco +[@emontnemery]: https://github.com/emontnemery +[@fabaff]: https://github.com/fabaff +[@kennedyshead]: https://github.com/kennedyshead +[@luca-angemi]: https://github.com/luca-angemi +[@marchingphoenix]: https://github.com/marchingphoenix +[@syssi]: https://github.com/syssi +[asuswrt docs]: /components/asuswrt/ +[binary_sensor.xiaomi_aqara docs]: /components/binary_sensor.xiaomi_aqara/ +[light.lutron docs]: /components/light.lutron/ +[logbook docs]: /components/logbook/ +[owntracks docs]: /components/owntracks/ +[tts docs]: /components/tts/ +[zha docs]: /components/zha/ + ## {% linkable_title 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). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. From ad85c2fe9255bdd8909df2606b5a92b70a4836c6 Mon Sep 17 00:00:00 2001 From: Nicholas Westerhausen Date: Fri, 14 Dec 2018 14:20:19 -0500 Subject: [PATCH 02/27] Fix installation requirements (#7841) As of mychevy.py [1.0.0](https://github.com/sdague/mychevy/blob/49677c4db9ef0bcfdab8d30a2afd52984302f7b3/HISTORY.rst#L9) selenium is no longer a dependency. (The home assistant component imports mychevy 1.0.1) Removed references to selenium. Added Chevy Volt to known working vehicles. --- source/_components/mychevy.markdown | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/source/_components/mychevy.markdown b/source/_components/mychevy.markdown index a737ba764a4..b918befd0c7 100644 --- a/source/_components/mychevy.markdown +++ b/source/_components/mychevy.markdown @@ -13,7 +13,7 @@ ha_release: 0.62 ha_iot_class: "Cloud Polling" --- -The `mychevy` component communicates with the [my.chevrolet](https://my.chevrolet.com) website using selenium to log in as your user and screen scrape the data provided. GM does not make it easy to sign up for any official development program, so this provides a workaround to get access to your data. +The `mychevy` component communicates with the [my.chevrolet](https://my.chevrolet.com) website to log in as your user and screen scrape the data provided. GM does not make it easy to sign up for any official development program, so this provides a workaround to get access to your data. This component provides the following platforms: @@ -43,10 +43,6 @@ password: {% endconfiguration %} -### {% linkable_title Installation %} - -Because this uses selenium behind the scenes, installation is more complicated than merely `pip` install. See the [installation instructions](https://github.com/sdague/mychevy). - ### {% linkable_title Limitations %} The architecture of the GM automotive networking imposes some limitations on the functionality of the component. @@ -55,5 +51,5 @@ The OnStar network link is very slow, and takes 1 - 3 minutes to get information The OnStar network (or more specifically the gateway used by the my.chevrolet website) appears to suffer more than most networks when the car is a) in a garage, and b) it's cold outside (like < 15 degrees F). One of the provided sensors is a status sensor which indicates if we got connectivity with the car on the last polling cycle or not. -The "API" for this is written by web scraping. As such, it only currently is known to work if you have a Chevy Bolt EV, and only 1 Chevy car connected to OnStar. Patches for extended support should go to the https://github.com/sdague/mychevy project first, then Home Assistant can be extended. +The "API" for this is written by web scraping. As such, it only currently is known to work if you have a Chevy Bolt EV or a Chevy Volt, and only 1 Chevy car connected to OnStar. Patches for extended support should go to the https://github.com/sdague/mychevy project first, then Home Assistant can be extended. From da37bd4018521c9782d980b21a3a0c773d506177 Mon Sep 17 00:00:00 2001 From: Nicholas Westerhausen Date: Sat, 15 Dec 2018 05:09:19 -0500 Subject: [PATCH 03/27] Fix example config (#7830) Example configs were using `title` instead of `name` --- source/_lovelace/gauge.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_lovelace/gauge.markdown b/source/_lovelace/gauge.markdown index 60376bdc937..d8de956b693 100644 --- a/source/_lovelace/gauge.markdown +++ b/source/_lovelace/gauge.markdown @@ -80,7 +80,7 @@ Title and Unit of Measurement Example: ```yaml - type: gauge - title: CPU Usuage + name: CPU Usuage unit: '%' entity: sensor.cpu_usage ``` @@ -94,7 +94,7 @@ Define the severity map: ```yaml - type: gauge - title: With Severity + name: With Severity unit: '%' entity: sensor.cpu_usage severity: From 8969200324b0512fe0eae65cb2b267e41895024c Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 15 Dec 2018 10:11:46 +0000 Subject: [PATCH 04/27] Clarification on base_url format (#7839) Needs `https://` if you're using HTTPS ;) --- source/_components/http.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/http.markdown b/source/_components/http.markdown index c80fbf4c31c..a10425e3cfe 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -41,7 +41,7 @@ server_port: type: integer default: 8123 base_url: - description: "The URL that Home Assistant is available on the internet. For example: `hass-example.duckdns.org:8123`. The iOS app finds local installations, if you have an outside URL use this so that you can auto-fill when discovered in the app." + description: "The URL that Home Assistant is available on the internet. For example: `https://hass-example.duckdns.org:8123`. The iOS app finds local installations, if you have an outside URL use this so that you can auto-fill when discovered in the app." required: false type: string default: Your local IP address From 7fea37192c04369b28873c5ccc4ea2ad9e7998c7 Mon Sep 17 00:00:00 2001 From: emontnemery Date: Sat, 15 Dec 2018 11:18:04 +0100 Subject: [PATCH 05/27] Update light.mqtt.markdown (#7845) --- source/_components/light.mqtt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index faf73b852a1..459c4cb70eb 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "MQTT Light - Default schema" +title: "MQTT Light" description: "Instructions on how to setup MQTT lights using default schema within Home Assistant." date: 2015-11-13 08:30 sidebar: true From be80507a8778860dfbc9adf369a5d001f56700d6 Mon Sep 17 00:00:00 2001 From: Nate Robinson Date: Sat, 15 Dec 2018 11:23:44 +0100 Subject: [PATCH 06/27] Remove "height" and "line_color" from example (#7850) Updated config example to match revised config options as of version 0.84. --- source/_lovelace/sensor.markdown | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/_lovelace/sensor.markdown b/source/_lovelace/sensor.markdown index ce5fda52708..ddc70520d89 100644 --- a/source/_lovelace/sensor.markdown +++ b/source/_lovelace/sensor.markdown @@ -64,6 +64,4 @@ theme: - type: sensor entity: sensor.illumination name: Illumination - height: 75 - line_color: "#3498db" ``` From 48286ea1a12cbcf658bd4a785faddce60c52f126 Mon Sep 17 00:00:00 2001 From: Jorim Tielemans Date: Sat, 15 Dec 2018 11:25:44 +0100 Subject: [PATCH 07/27] Fix logo 404 not found (#7852) Docs were added but there doesn't exist a flunearyou.jpg, there is a .png however. PS: same issue with w800rf32.png, but I can't seem to find a related logo either. --- source/_components/sensor.flunearyou.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.flunearyou.markdown b/source/_components/sensor.flunearyou.markdown index 71514a95641..f7e85a46f54 100644 --- a/source/_components/sensor.flunearyou.markdown +++ b/source/_components/sensor.flunearyou.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -logo: flunearyou.jpg +logo: flunearyou.png ha_category: Health ha_release: 0.83 ha_iot_class: "Cloud Polling" From d703e355c9bcb998289003b1bbc4480761a756c3 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 15 Dec 2018 10:34:57 +0000 Subject: [PATCH 08/27] Fixing the numeric state examples (#7853) There's a bunch of copy/paste numeric state conditions that have quotes around them, when they shouldn't --- source/_docs/scripts/conditions.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown index 6efb7b4b771..32ed35a628d 100644 --- a/source/_docs/scripts/conditions.markdown +++ b/source/_docs/scripts/conditions.markdown @@ -25,7 +25,7 @@ condition: state: 'home' - condition: numeric_state entity_id: 'sensor.temperature' - below: '20' + below: 20 ``` If you do not want to combine AND and OR conditions, you can also just list them sequentially, by default all conditions have to be true. @@ -38,7 +38,7 @@ condition: state: 'home' - condition: numeric_state entity_id: 'sensor.temperature' - below: '20' + below: 20 ``` Currently you need to format your conditions like this to be able to edit them using the [automations editor](/docs/automation/editor/). @@ -56,7 +56,7 @@ condition: state: 'home' - condition: numeric_state entity_id: 'sensor.temperature' - below: '20' + below: 20 ``` ### {% linkable_title MIXED AND and OR conditions %} @@ -78,7 +78,7 @@ condition: state: 'rain' - condition: numeric_state entity_id: 'sensor.temperature' - below: '20' + below: 20 ``` ### {% linkable_title Numeric state condition %} From 4a34cb79c70d697f5032c2acd2a331d23b765cbd Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 15 Dec 2018 11:55:31 +0100 Subject: [PATCH 09/27] Minor changes --- source/_components/camera.onvif.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/camera.onvif.markdown b/source/_components/camera.onvif.markdown index 3a695d30fe6..4d00a1ef72d 100644 --- a/source/_components/camera.onvif.markdown +++ b/source/_components/camera.onvif.markdown @@ -12,7 +12,7 @@ ha_category: Camera ha_release: 0.47 --- -The `onvif` camera platform allows you to use an ONVIF camera in Home Assistant. This requires the [`ffmpeg` component](/components/ffmpeg/) to be already configured. +The `onvif` camera platform allows you to use an [ONVIF](https://www.onvif.org/) camera in Home Assistant. This requires the [`ffmpeg` component](/components/ffmpeg/) to be already configured. ## {% linkable_title Configuration %} @@ -27,7 +27,7 @@ camera: {% configuration %} host: - description: An IP or hostname of the camera. + description: The IP address or hostname of the camera. required: true type: string name: @@ -53,12 +53,12 @@ profile: type: integer default: 0 extra_arguments: - description: "Extra options to pass to `ffmpeg`, e.g., image quality or video filter options. More details in [FFmpeg component](/components/ffmpeg)." + description: "Extra options to pass to `ffmpeg`, e.g., image quality or video filter options. More details in [`ffmpeg` component](/components/ffmpeg)." required: false type: string {% endconfiguration %} -Most of the Onvif cameras support more than one audio/video Profile. Each profile provides different image quality. Usually, the first profile has the highest quality, and it is the profile used by default. However, you may want to use a lower quality image. One of the reasons may be that your hardware isn't able to render the highest quality image in real-time - especially when running on Raspberry Pi. Therefore you can choose which profile do you want to use by setting in config `profile` variable. +Most of the ONVIF cameras support more than one audio/video profile. Each profile provides different image quality. Usually, the first profile has the highest quality and it is the profile used by default. However, you may want to use a lower quality image. One of the reasons may be that your hardware isn't able to render the highest quality image in real-time, especially when running on Raspberry Pi. Therefore you can choose which profile do you want to use by setting in config `profile` variable. ### {% linkable_title Service `camera.onvif_ptz` %} From 3f10c0e9ac709e259cabb09fa3af476161d00816 Mon Sep 17 00:00:00 2001 From: Jorim Tielemans Date: Sat, 15 Dec 2018 12:20:28 +0100 Subject: [PATCH 10/27] Fix w800rf32.png 404 error (#7854) * Delete w800rf32.png This should not be at the root of this repo! * Add w800rf32.png in the right place --- .../images/supported_brands/w800rf32.png | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename w800rf32.png => source/images/supported_brands/w800rf32.png (100%) diff --git a/w800rf32.png b/source/images/supported_brands/w800rf32.png similarity index 100% rename from w800rf32.png rename to source/images/supported_brands/w800rf32.png From e373b507abcc250ad57401f473bab5a9e1f6188d Mon Sep 17 00:00:00 2001 From: Jorim Tielemans Date: Sat, 15 Dec 2018 13:02:55 +0100 Subject: [PATCH 11/27] Move switch.linode.markdown (#7855) * Delete switch.linode.markdown * Upload switch.linode.markdown --- source/{components => _components}/switch.linode.markdown | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/{components => _components}/switch.linode.markdown (100%) diff --git a/source/components/switch.linode.markdown b/source/_components/switch.linode.markdown similarity index 100% rename from source/components/switch.linode.markdown rename to source/_components/switch.linode.markdown From c2f07f127f628cd032cd5203c75c8d1910f814b9 Mon Sep 17 00:00:00 2001 From: R Huish <5207490+genestealer@users.noreply.github.com> Date: Sun, 16 Dec 2018 08:34:48 +0000 Subject: [PATCH 12/27] Grammar fixes: google_assistant.markdown (#7870) * Grammar fixes: google_assistant.markdown * Update google_assistant.markdown --- source/_components/google_assistant.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index cb6e53b4dfd..6a94af7fa7a 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -89,7 +89,7 @@ If you've added Home Assistant to the home screen, you have to first remove it f 2. Click `Test -> Simulator`, then click `Share` icon in the right top corner. Follow the on-screen instruction: 1. Add team members: Got to `Settings -> Permission`, click `Add`, type the new user's e-mail address and choose `Project -> Viewer` role. 2. Copy and share the link with the new user. - 3. New user clicks the link with their own Google account, it will enable our draft test app under their account. + 3. When the new user opens the link with their own Google account, it will enable your draft test app under their account. 3. Have the new user go to their `Google Assistant` app to add `[test] your app name` to their account. 8. If you want to use the `google_assistant.request_sync` service, to update devices without unlinking and relinking, in Home Assistant, then enable Homegraph API for your project: 1. Go to the [Google API Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview). From 4454eaab4a2daf7eb3ce85292209b4cbc8399369 Mon Sep 17 00:00:00 2001 From: Jens Date: Sun, 16 Dec 2018 09:35:13 +0100 Subject: [PATCH 13/27] Update switch.fritzdect.markdown (#7869) Adds another tested combination (latest firmware versions) to switch.fritzdect.markdown to document it is working fine. --- source/_components/switch.fritzdect.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/switch.fritzdect.markdown b/source/_components/switch.fritzdect.markdown index 380deebdaf3..88322c313fe 100644 --- a/source/_components/switch.fritzdect.markdown +++ b/source/_components/switch.fritzdect.markdown @@ -24,6 +24,7 @@ Supported Firmwares (tested): - FRITZ!OS: 06.80 / FRITZ!DECT: 03.83 - FRITZ!OS: 06.98-51288 (Beta) / FRITZ!DECT: 03.87 +- FRITZ!OS: 7.01 / FRITZ!DECT: 04.09 To use your AVM FRITZ!DECT switch(es) in your installation, add the following to your `configuration.yaml` file: From 6e3a0cc33dfe032981bedb0f06ce2c95e8c16ee3 Mon Sep 17 00:00:00 2001 From: Nicole Zeckner Date: Sun, 16 Dec 2018 03:37:23 -0500 Subject: [PATCH 14/27] Update installation.markdown (#7868) Change usermod "-G" to usermod "-aG" since we want the user added to dialout, not moved to dialout. --- source/_docs/z-wave/installation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 6a9693fddf9..9bd27a789e2 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -148,7 +148,7 @@ $ dmesg | grep USB If Home Assistant (`hass`) runs with another user (e.g., *homeassistant* on Hassbian) give access to the stick with: ```bash -$ sudo usermod -a -G dialout homeassistant +$ sudo usermod -aG dialout homeassistant ```

From cf259596d1161d09a3fc4215683dded03399b1fd Mon Sep 17 00:00:00 2001 From: Karim Geiger Date: Sun, 16 Dec 2018 22:39:11 +0100 Subject: [PATCH 15/27] Add note for purge service to explain behaviour (#7874) I recently thought my purge service did not work since there still were some entries in my database having a younger date than specified by the purge. It took me quite a while to find an answer as to why that is, so I thought adding a note to the documentation wouldn't hurt. Source: https://community.home-assistant.io/t/recorder-does-not-purge/70077/2 --- source/_components/recorder.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index c9ba56e1b97..4a20ef3f296 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -131,6 +131,10 @@ Call the service `recorder.purge` to start a purge task which deletes events and | `keep_days` | yes | The number of history days to keep in recorder database (defaults to the component `purge_keep_days` configuration) | `repack` | yes | Rewrite the entire database, possibly saving some disk space. Only supported for SQLite and requires at least as much disk space free as the database currently uses. +

+Purging does not necessarily remove all entries before a given date. For example, to be able to recover after startup, the last known state for each entry is never purged. This is true even if the entry is already removed from your configuration. +

+ ## {% linkable_title Custom database engines %} | Database engine | `db_url` | From 0958d426226afe3e7c7a5e6d80e4c13e5ceb04f8 Mon Sep 17 00:00:00 2001 From: Jorim Tielemans Date: Sun, 16 Dec 2018 22:40:21 +0100 Subject: [PATCH 16/27] Update climate.evohome.markdown (#7858) --- source/_components/climate.evohome.markdown | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/_components/climate.evohome.markdown b/source/_components/climate.evohome.markdown index bd1b562302e..c00c004f6e8 100644 --- a/source/_components/climate.evohome.markdown +++ b/source/_components/climate.evohome.markdown @@ -24,7 +24,7 @@ Currently, only the standard HA operating modes are supported; the evohome modes The evohome Heating zones support only three operating modes: FollowSchedule, TemporaryOverride, and PermanentOverride. If the zone is in FollowSchedule mode, it inherits its `operating_mode` from the controller; the other modes are mapped to 'Manual' or 'Off'. A device's actual operating mode can be tracked via its `device_state_attributes`, which includes a JSON data structure for current state called `status`. For example: -``` +```json { 'zoneId': '999999', 'temperatureStatus': { @@ -39,10 +39,13 @@ A device's actual operating mode can be tracked via its `device_state_attributes 'name': 'Main Room' } ``` + This data can be accessed in automations, etc., via a value template: +{% raw %} ``` value_template: "{{ state_attr('climate.main_room', 'status').setpointStatus.setpointMode }}" ``` +{% endraw %}

Full configuration details can be found on the main [evohome component](/components/evohome/) page. From 7ecc813ce73da13edd3a3afef58c947ed301311a Mon Sep 17 00:00:00 2001 From: Glenn Morrison Date: Mon, 17 Dec 2018 02:08:46 -0600 Subject: [PATCH 17/27] Improper English (#7878) --- source/_components/google_assistant.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 6a94af7fa7a..dc61e9904f1 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -49,7 +49,7 @@ Since release 0.80, the `Authorization Code` type of `OAuth` account linking is 2. Change your `configuration.yaml` file: - Remove `client_id`, `access_token`, `agent_user_id` config from `google_assistant:` since they are no longer needed. 3. Restart Home Assistant, open the `Google Home` app on your mobile phone then go to `Account > Settings > Assistant > Home Control`, press the `3 dot icon in the top right > Manage accounts > [test] your app name > Unlink account` Then relink your account by selecting `[test] your app name` again. -4. A browser will be open and asking you to login to your Home Assistant instance, it will redirect back to `Google Assistant` app right afterward. +4. A browser will open and ask you to login to your Home Assistant instance and will redirect back to the `Google Assistant` app right afterward.

If you've added Home Assistant to the home screen, you have to first remove it from home screen, otherwise, this HTML5 app will show up instead of a browser. Using it would prevent Home Assistant to redirect back to the `Google Assistant` app. From 8fe99f60e222fbc46fa7bb0432c7f2e3f156f7ef Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 17 Dec 2018 11:35:03 +0100 Subject: [PATCH 18/27] Release 0.84.3 --- _config.yml | 4 +-- source/_posts/2018-12-12-release-84.markdown | 29 ++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index 96cbb5e88c5..2d2b284fab8 100644 --- a/_config.yml +++ b/_config.yml @@ -142,8 +142,8 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 84 -current_patch_version: 2 -date_released: 2018-12-14 +current_patch_version: 3 +date_released: 2018-12-17 # 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/2018-12-12-release-84.markdown b/source/_posts/2018-12-12-release-84.markdown index a464ef4b274..115752a0b2e 100644 --- a/source/_posts/2018-12-12-release-84.markdown +++ b/source/_posts/2018-12-12-release-84.markdown @@ -112,6 +112,35 @@ Editor UI is now further processed. You can manage your Lovelace UI without leav [tts docs]: /components/tts/ [zha docs]: /components/zha/ +## {% linkable_title Release 0.84.3 - December 17 %} + +- Set lock status correctly for Schlage BE469 Z-Wave locks ([@ahayworth] - [#18737]) ([lock.zwave docs]) +- Fix restore state for manual alarm control panel ([@liaanvdm] - [#19284]) ([alarm_control_panel.manual docs]) +- Fix not being able to update entities ([@glentakahashi] - [#19344]) ([config docs]) + +#### Frontend + +- Fix setting aspect ratio in percentage ([#2289](https://github.com/home-assistant/home-assistant-polymer/pull/2289)) [@balloob] +- Fix opening edit dialog twice when closed by clicking on overlay ([#2290](https://github.com/home-assistant/home-assistant-polymer/pull/2290)) [@balloob] +- Fix translations not loading on first load ([#2293](https://github.com/home-assistant/home-assistant-polymer/pull/2293)) [@balloob] +- remove Animation for thermostat and light ([#2303](https://github.com/home-assistant/home-assistant-polymer/pull/2303)) [@zsarnett] +- Fix for picture element positioning ([#2335](https://github.com/home-assistant/home-assistant-polymer/pull/2335)) [@iantrich] +- Fix undefined on plant/weather card ([#2339](https://github.com/home-assistant/home-assistant-polymer/pull/2339)) [@balloob] +- Fix service button element ([#2343](https://github.com/home-assistant/home-assistant-polymer/pull/2343)) [@balloob] + + +[#18737]: https://github.com/home-assistant/home-assistant/pull/18737 +[#19284]: https://github.com/home-assistant/home-assistant/pull/19284 +[#19344]: https://github.com/home-assistant/home-assistant/pull/19344 +[@ahayworth]: https://github.com/ahayworth +[@glentakahashi]: https://github.com/glentakahashi +[@zsarnett]: https://github.com/zsarnett +[@iantrich]: https://github.com/iantrich +[@liaanvdm]: https://github.com/liaanvdm +[alarm_control_panel.manual docs]: /components/alarm_control_panel.manual/ +[config docs]: /components/config/ +[lock.zwave docs]: /components/lock.zwave/ + ## {% linkable_title 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). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. From 1c1bc54c96d7aaee824129e500d3ef592d43983b Mon Sep 17 00:00:00 2001 From: Nicole Zeckner Date: Mon, 17 Dec 2018 10:44:30 -0500 Subject: [PATCH 19/27] Update installation.markdown (#7883) Change from -G to -aG, since we want to add to the group and not change the group. (Sorry I didn't catch this with the last one.) --- source/_docs/z-wave/installation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 9bd27a789e2..e9c0ae6068b 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -249,7 +249,7 @@ $ groups homeassistant That should include `dialout`, if it doesn't then: ```bash -$ sudo usermod -G dialout homeassistant +$ sudo usermod -aG dialout homeassistant ``` ### {% linkable_title Device path changes %} From 09f35d5f7508c3cd715b764bb3e22d37d6fc5cdd Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 17 Dec 2018 20:17:24 +0100 Subject: [PATCH 20/27] Update recorder.markdown --- source/_components/recorder.markdown | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 4a20ef3f296..9d888eacd32 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -140,16 +140,14 @@ Purging does not necessarily remove all entries before a given date. For example | Database engine | `db_url` | | :---------------|:---------------------------------------------------------| | SQLite | `sqlite:////PATH/TO/DB_NAME` | -| MariaDB | `mysql://SERVER_IP/DB_NAME?charset=utf8` | -| MariaDB         | `mysql://user:password@SERVER_IP/DB_NAME?charset=utf8` | -| MySQL | `mysql://SERVER_IP/DB_NAME?charset=utf8` | -| MySQL           | `mysql://user:password@SERVER_IP/DB_NAME?charset=utf8` | -| MySQL (pymysql) | `mysql+pymysql://SERVER_IP/DB_NAME?charset=utf8` | -| MySQL (pymysql) | `mysql+pymysql://user:password@SERVER_IP/DB_NAME?charset=utf8` | +| MariaDB | `mysql+pymysql://SERVER_IP/DB_NAME?charset=utf8` | +| MariaDB         | `mysql+pymysql://user:password@SERVER_IP/DB_NAME?charset=utf8` | +| MySQL | `mysql+pymysql://SERVER_IP/DB_NAME?charset=utf8` | +| MySQL | `mysql+pymysql://user:password@SERVER_IP/DB_NAME?charset=utf8` | | PostgreSQL | `postgresql://SERVER_IP/DB_NAME` | -| PostgreSQL | `postgresql://scott:tiger@SERVER_IP/DB_NAME` | +| PostgreSQL | `postgresql://user:password@SERVER_IP/DB_NAME` | | PostgreSQL (Socket) | `postgresql://@/DB_NAME` | -| MS SQL Server | `mssql+pymssql://user:pass@SERVER_IP/DB_NAME?charset=utf8` | +| MS SQL Server | `mssql+pymssql://user:password@SERVER_IP/DB_NAME?charset=utf8` |

If you use MariaDB 10 you need to add port 3307 (or another port depending on which port is used by, for example: your hosting provider.) to the SERVER_IP, e.g., `mysql://user:password@SERVER_IP:3307/DB_NAME?charset=utf8`. From 418c45778477ec1a445a98180c0b7073fa729ab3 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 17 Dec 2018 21:34:20 +0100 Subject: [PATCH 21/27] Add blog post Harmony --- ...ogitech-harmony-removes-local-api.markdown | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown diff --git a/source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown b/source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown new file mode 100644 index 00000000000..2bb030d8c95 --- /dev/null +++ b/source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown @@ -0,0 +1,39 @@ +--- +layout: post +title: "Logitech Harmony removes local API" +description: "Logitech has disabled the local API of the Harmony Hub with their latest software update. For privacy and speed it is important that home automation devices communicate locally, without data leaving the network." +date: 2018-12-17 00:01:00 +date_formatted: "December 17, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Public-Service-Announcement +--- + +Logitech has disabled the local API of the Harmony Hub with their latest software update (v4.15.206). For privacy and speed it is important that home automation devices communicate locally, without data leaving the network. With the latest update to the Logitech Harmony Hub, this is no longer possible. + +We hope that this was an oversight on their end and that it will be reverted shortly. We have reached out to Logitech for a clarification and will update this post when available. + +If you have already updated your Harmony Hub to v4.15.206, you have probably noticed that Home Assistant and other products communicating with the local API have stopped working. Don’t worry, it’s (still?) possible to downgrade to a previous version using the following steps (source: [Reddit 1](https://www.reddit.com/r/homeassistant/comments/a6u6ep/psa_harmony_hub_firmware_v415206_breaksremoves/), [Reddit 2](https://www.reddit.com/r/homeassistant/comments/a6u6ep/psa_harmony_hub_firmware_v415206_breaksremoves/eby89t8/)): + +1. Download the [MyHarmony Computer Application](https://support.myharmony.com/en-us/download). +2. Launch the MyHarmony app. +3. Before clicking anywhere inside the window: + - Windows users: Press Alt+F9. + - Mac users: Press Fn+Option+F9 or Option+F9 (depending on Mac model, either one will work). +4. Scroll the window to find your Harmony model. +5. Select "Factory Reset" for the appropriate model. This does not do anything immediately. +6. Steps 1-4 will be displayed for completing a Factory Reset. We are only doing Step 1. "Restore" here means "Rollback". +7. Connect your Harmony hub to the PC via micro-USB. +Within a few minutes, it will be detected by MyHarmony and display Remote Model, Firmware Version, and Hardware revision. The Restore 1. button will be enabled. +8. Click "Restore" and wait. (Now is the first time that it actually describes that it's a rollback!) +9. When it completes, you should be on Firmware Version 4.15.193. Disconnect the hub from the PC and return it to its original location. +And the final, important step: eliminate the ability for the Harmony hub to access these domains, or the internet altogether. I used 1. DD-WRT's Access Restrictions feature to disable all internet access, because my specific implementation is entirely intranet-based. YMMV. + - svcs.myharmony.com + - content.dhg.myharmony.com + - logging.dhg.myharmony.com + - myharmony.com + - sus.dhg.myharmony.com + + +Until this is resolved, we will no longer recommend buying or using Logitech products. From 7178c7f13a042926e60f2a66edfcc06cb134c039 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Mon, 17 Dec 2018 15:18:21 -0600 Subject: [PATCH 22/27] :warning: breaking change on views id -> path (#7886) --- source/lovelace/changelog.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/lovelace/changelog.markdown b/source/lovelace/changelog.markdown index 1d3ad92620b..a8af4b145c6 100644 --- a/source/lovelace/changelog.markdown +++ b/source/lovelace/changelog.markdown @@ -11,6 +11,7 @@ footer: true ## {% linkable_title Changes in 0.84.0 %} ### Breaking Changes +- ⚠️ [views]: Renamed `id` to `path` - ⚠️ [sensor card]: Removed configs `height`, `line_color` and `line_width` - ⚠️ [gauge card]: Renamed config `title` to `name` - ⚠️ [alarm panel card]: Renamed config `title` to `name` @@ -205,6 +206,7 @@ footer: true - ❤️ Initial release of the Lovelace UI +[views]: /lovelace/views/ [alarm panel card]: /lovelace/alarm-panel/ [conditional card]: /lovelace/conditional/ [entities card]: /lovelace/entities/ From e9fc22b4a621993a3a36b1082c8f6059d17e319e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 17 Dec 2018 23:40:32 +0100 Subject: [PATCH 23/27] Add image --- ...-logitech-harmony-removes-local-api.markdown | 10 +++++++++- .../forum-post.png | Bin 0 -> 18957 bytes 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 source/images/blog/2018-12-logitech-harmony-removes-local-api/forum-post.png diff --git a/source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown b/source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown index 2bb030d8c95..a04f5b0e38d 100644 --- a/source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown +++ b/source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown @@ -12,7 +12,15 @@ categories: Public-Service-Announcement Logitech has disabled the local API of the Harmony Hub with their latest software update (v4.15.206). For privacy and speed it is important that home automation devices communicate locally, without data leaving the network. With the latest update to the Logitech Harmony Hub, this is no longer possible. -We hope that this was an oversight on their end and that it will be reverted shortly. We have reached out to Logitech for a clarification and will update this post when available. +We hope that this was an oversight on their end and that it will be reverted shortly. We have reached out to Logitech for a clarification and will update this post when available. Update: still no response but Twitter user [@FlorianNoack](https://twitter.com/FlorianNoack/status/1074744105002037248?s=09) found an answer from Logitech on [a thread on their forums](https://community.logitech.com/s/question/0D55A00008D1oIoSAJ/firmware-update-blocked-api-access) (visible after clicking a few times on "More answers"): + +

+ Screenshot of a forum post by a Logitech employee saying that the Harmony team is aware of the feedback and it will provide an update shortly. + Forum post by member of the Harmony Team. +

+ + + If you have already updated your Harmony Hub to v4.15.206, you have probably noticed that Home Assistant and other products communicating with the local API have stopped working. Don’t worry, it’s (still?) possible to downgrade to a previous version using the following steps (source: [Reddit 1](https://www.reddit.com/r/homeassistant/comments/a6u6ep/psa_harmony_hub_firmware_v415206_breaksremoves/), [Reddit 2](https://www.reddit.com/r/homeassistant/comments/a6u6ep/psa_harmony_hub_firmware_v415206_breaksremoves/eby89t8/)): diff --git a/source/images/blog/2018-12-logitech-harmony-removes-local-api/forum-post.png b/source/images/blog/2018-12-logitech-harmony-removes-local-api/forum-post.png new file mode 100644 index 0000000000000000000000000000000000000000..77973b112727b4d2aac6092e9bb774c458e50123 GIT binary patch literal 18957 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 z2=cdHVSow%00000000000000000000000000001v0HpuouNy+pY5)KL07*qoM6N<$ Ef@Z1`tN;K2 literal 0 HcmV?d00001 From 6c6cd38a8f88b4c7aabff5a6de76a50c0a740a35 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 17 Dec 2018 23:45:49 +0100 Subject: [PATCH 24/27] Lazy image load logo (#7888) * Lazy load component logos * Fix component count --- source/components/index.html | 42 ++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/source/components/index.html b/source/components/index.html index 9839cf555ab..eea09566104 100644 --- a/source/components/index.html +++ b/source/components/index.html @@ -13,19 +13,24 @@ body_id: components-page regenerate: false --- -{% assign count = site.components | size %} -{% assign nocat = site.components | where: 'ha_category', null | size %} -{% assign tot = count | minus: nocat %} -{% assign components = site.components | sort: 'title' %} -{% assign categories = components | sort: 'ha_category' | map: 'ha_category' | uniq %} -{% capture current_version %}{{ site.current_major_version }}.{{ site.current_minor_version }}{% endcapture %} -{% assign added_one_ago_minor_version = site.current_minor_version|minus: 1 %} -{% capture added_one_ago_version %}{{ site.current_major_version }}.{{ added_one_ago_minor_version }}{% endcapture %} -{% assign added_two_ago_minor_version = site.current_minor_version|minus: 2 %} -{% capture added_two_ago_version %}{{ site.current_major_version }}.{{ added_two_ago_minor_version }}{% endcapture %} -{% assign current_version_components_count = site.components | where: 'ha_release', current_version | size %} -{% assign one_ago_version_components_count = site.components | where: 'ha_release', added_one_ago_version | size %} -{% assign two_ago_version_components_count = site.components | where: 'ha_release', added_two_ago_version | size %} +{%- comment -%}Can't use where to count nil because of https://github.com/jekyll/jekyll/issues/6038{%- endcomment -%} +{%- assign tot = 0 -%} +{%- for comp in site.components -%} + {%- if comp.ha_category -%} + {%- assign tot = tot | plus: 1 -%} + {%- endif %} +{%- endfor -%} + +{%- assign components = site.components | sort: 'title' -%} +{%- assign categories = components | sort: 'ha_category' | map: 'ha_category' | uniq -%} +{%- capture current_version -%}{{ site.current_major_version }}.{{ site.current_minor_version }}{% endcapture -%} +{%- assign added_one_ago_minor_version = site.current_minor_version|minus: 1 -%} +{%- capture added_one_ago_version -%}{{ site.current_major_version }}.{{ added_one_ago_minor_version }}{% endcapture -%} +{%- assign added_two_ago_minor_version = site.current_minor_version|minus: 2 -%} +{%- capture added_two_ago_version -%}{{ site.current_major_version }}.{{ added_two_ago_minor_version }}{% endcapture -%} +{%- assign current_version_components_count = site.components | where: 'ha_release', current_version | size -%} +{%- assign one_ago_version_components_count = site.components | where: 'ha_release', added_one_ago_version | size -%} +{%- assign two_ago_version_components_count = site.components | where: 'ha_release', added_two_ago_version | size -%}

Support for these components is provided by the Home Assistant community. @@ -68,8 +73,9 @@ Support for these components is provided by the Home Assistant community. {%- endfor -%} {% endcomment %} - - + + + {% raw %}