From dce6cf3e10da8d5612a21599e0967784effdbe46 Mon Sep 17 00:00:00 2001
From: Franck Nijhof
Date: Thu, 17 Sep 2020 17:59:13 +0200
Subject: [PATCH] Release notes 0.115.0 (#14522)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Hmmbob <33529490+hmmbob@users.noreply.github.com>
Co-authored-by: Joakim Sørensen
Co-authored-by: Martin Hjelmare
Co-authored-by: Paulus Schoutsen
Co-authored-by: Bram Kragten
---
source/_posts/2020-09-17-release-115.markdown | 1641 ++++++++++-------
.../add-card-by-entity-confirmation.png | Bin 0 -> 57426 bytes
.../add-card-by-entity-selection.png | Bin 0 -> 64653 bytes
.../images/blog/2020-09-0.115/attributes.png | Bin 0 -> 23953 bytes
.../blog/2020-09-0.115/calendar-card.png | Bin 0 -> 27552 bytes
.../blog/2020-09-0.115/change-password.png | Bin 0 -> 33235 bytes
.../2020-09-0.115/cloud-expose-entities.png | Bin 0 -> 59900 bytes
.../2020-09-0.115/dev-tools-templates.gif | Bin 0 -> 62380 bytes
.../2020-09-0.115/integrations-reload.png | Bin 0 -> 48141 bytes
source/images/blog/2020-09-0.115/logbook.png | Bin 0 -> 23711 bytes
.../images/blog/2020-09-0.115/more-info.png | Bin 0 -> 62135 bytes
.../blog/2020-09-0.115/order-entities.gif | Bin 0 -> 606320 bytes
source/images/blog/2020-09-0.115/sidebar.gif | Bin 0 -> 17560990 bytes
source/images/blog/2020-09-0.115/social.png | Bin 0 -> 89301 bytes
.../blog/2020-09-0.115/wait-for-trigger.png | Bin 0 -> 26937 bytes
source/index.html | 2 +-
16 files changed, 1002 insertions(+), 641 deletions(-)
create mode 100644 source/images/blog/2020-09-0.115/add-card-by-entity-confirmation.png
create mode 100644 source/images/blog/2020-09-0.115/add-card-by-entity-selection.png
create mode 100644 source/images/blog/2020-09-0.115/attributes.png
create mode 100644 source/images/blog/2020-09-0.115/calendar-card.png
create mode 100644 source/images/blog/2020-09-0.115/change-password.png
create mode 100644 source/images/blog/2020-09-0.115/cloud-expose-entities.png
create mode 100644 source/images/blog/2020-09-0.115/dev-tools-templates.gif
create mode 100644 source/images/blog/2020-09-0.115/integrations-reload.png
create mode 100644 source/images/blog/2020-09-0.115/logbook.png
create mode 100644 source/images/blog/2020-09-0.115/more-info.png
create mode 100644 source/images/blog/2020-09-0.115/order-entities.gif
create mode 100644 source/images/blog/2020-09-0.115/sidebar.gif
create mode 100644 source/images/blog/2020-09-0.115/social.png
create mode 100644 source/images/blog/2020-09-0.115/wait-for-trigger.png
diff --git a/source/_posts/2020-09-17-release-115.markdown b/source/_posts/2020-09-17-release-115.markdown
index a95f213f964..83c6bf27174 100644
--- a/source/_posts/2020-09-17-release-115.markdown
+++ b/source/_posts/2020-09-17-release-115.markdown
@@ -1,8 +1,8 @@
---
layout: post
-title: "0.115: Beta release notes"
-description: "Lorem ipsum"
-date: 2020-09-07 00:00:00
+title: "0.115: B-Day release! Media browser, tags, automations & WTH"
+description: "Celebrating with a new media browser, support for tags, powerful new automation features and lot of WTH changes!"
+date: 2020-09-17 00:00:00
date_formatted: "September 17, 2020"
author: Franck Nijhof
author_twitter: frenck
@@ -11,116 +11,289 @@ categories: Release-Notes
og_image: /images/blog/2020-09-0.115/social.png
---
-
+## Happy Birthday Home Assistant!
-These are the beta release notes for Home Assistant 0.115!
+
+There's a party goin' on right here 🕺
+A dedication to last throughout the years 🥳
+So bring your good times, and your laughter too 😂
+We gonna celebrate our party with you 🎁
+
+It's a celebration! 🎉
+
-0.115 is our birthday release, and is jam packed! We run a longer beta this
-time. The release is planned for 17 September.
+~ [_Kool & The Gang - Celebration_](https://www.youtube.com/watch?v=3GwjfUFyY6M)
-The release notes still need a lot of tweaking and we are looking into splitting
-the release announcements into multiple blog posts.
+7! Siete! Soch! Syv! Sieben! Seitsemän! Cедем! Sept! Sju! επτά! Zeven! Sette!
+Seven! Years old today! And ooooh, are we going to party and celebrate with
+you!
-If you encounter any issues, please report them on GitHub:
+You might have noticed, this release is a bit late, two weeks late.
+Our regular release cycle is 3 weeks, this time however, we took 5 weeks.
+Sure, the reason was, of course, related to our birthday today, but what is a
+better gift than a jam-packed release that has something for everybody?
-- Issues with integrations, automations and such (Core related):
-
-- Issues with the frontend/lovelace:
-
-- Issues with the Supervisor:
-
-- Issues with the documentation:
-
+Thankfully, a lot of you have been sharing their gift wishlist items during
+[the month of "What the heck?!"][wth] (WTH). I love you all! What a good and
+amazing set of great ideas, annoyances and other suggestions have been made in
+that forum this month!
-Please be sure to include the beta version you are running in the issue
-description, so we can classify your issue correctly. Issues introduced in the beta are processed with priority.
+And it is not just that, a lot of people jumped in fixing these things as well!
+What a community! The month of WTH is almost over now, after that we will
+close the category on the forum, until the next WTH month.
-## TODO
+Besides that, two totally new and big features are added this release, which
+we really wanted to polish before releasing it.
-- Introduction note
-- Birthday message
-- Split into multiple posts?
-- Social media image
-- Documentation page for new image integration is missing
+I usually write some things about the release in my personal introduction
+note right here, but honestly, I have no idea where to start... it is just
+too darn much! I love the new automation features, but there are so
+many of those in this release as well. 😅 I'm not going to try writing this. 😂
+
+So, let me close with a thank you to our founding father:
+
+> Paulus, thank you so much for what you have imagined, started and created 7
+> years ago. Your idea has changed the lives of many, including my own.
+> Thank you.
+
+Of course, it is not just Paulus, but everybody else who contributes to the
+project in any way. Code, text, support, chat, YouTube video, live streams,
+blogs, articles, community guides, documentation, tweets, issues, bug reports,
+feature requests, ideas, questions or even if you just use it.
+Thank you for contributing! ❤️
+
+Happy birthday and enjoy the release!
+
+../Frenck
+
+[wth]: /blog/2020/08/18/the-month-of-what-the-heck/
+
+## Table of contents
+
+Alright, this release is massive, so here is a table of contents for helping
+navigating you around this release.
+
+- [Media Browser](#media-browser)
+- [Home Assistant Tags](#home-assistant-tags)
+- [Customize the sidebar](#customize-the-sidebar)
+- [Person image upload](#person-image-upload)
+- [Updated more info dialog](#updated-more-info-dialog)
+- [More information in the logbook panel](#more-information-in-the-logbook-panel)
+- [Automation & Scripts updates](#automation--scripts-updates)
+ - [New action: Wait for trigger](#new-action-wait-for-trigger)
+ - [Triggers & Conditions on entity attributes](#triggers--conditions-on-entity-attributes)
+ - [Use `input_datetime` helpers in automation triggers](#use-input_datetime-helpers-in-automation-triggers)
+ - [Use `input_*` helpers in conditions](#use-input_-helpers-in-conditions)
+ - [Shorthand notation for template conditions](#shorthand-notation-for-template-conditions)
+ - [Use templates directly in `data` and `service` fields](#use-templates-directly-in-data-and-service-fields)
+ - [Variables](#variables)
+ - [Other scripts and automation changes](#other-scripts-and-automation-changes)
+- [Calendar card](#calendar-card)
+- [Template developer tools](#template-developer-tools)
+- [Reload everything YAML](#reload-everything-yaml)
+- [User password change](#user-password-change)
+- [Improved ways of exposing entities via Home Assistant Cloud](#improved-ways-of-exposing-entities-via-home-assistant-cloud)
+- [Add card by entities](#add-card-by-entities)
+- [Order entities in Lovelace UI editor](#order-entities-in-lovelace-ui-editor)
+- [Other noteworthy changes](#other-noteworthy-changes)
+- [New Integrations](#new-integrations)
+- [New Platforms](#new-platforms)
+- [Integrations now available to set up from the UI](#integrations-now-available-to-set-up-from-the-ui)
+- [Breaking Changes](#breaking-changes)
## Media Browser
-Media players are now able to offer a media browser. This allows you to browse
-through the available content for the media player.
+This release includes an exciting set of features around media. If the media
+player supports it, you can now browse the player's media library and quickly
+change what you're listening to. No need for two apps anymore if you want to
+change the lights and pick some music.
-We also added a new media panel, this panel can be used to browse your local media.
-If you create a directory `media` in your configuration directory and add some media files in it, you can now play them from Home Assistant in your web browser.
+Any media player can enable this new feature. This release adds media browser
+support to [Arcam FMJ](/integrations/arcam_fmj), [Kodi](/integrations/kodi),
+[Philips JS](/integrations/philips_js), [Plex](/integrations/plex),
+[Roku](/integrations/roku), [Sonos](/integrations/sonos)
+and [Spotify](/integrations/spotify)!
-There is also support for other integrations like Netatmo and more are on the way. (are there more sources?)
-You can also select another media player and use it to browse and play media on that media player.
+Thanks to [@jjlawren] for the initial implementation and to [@cgtobi],
+[@ctalkington], [@martinhjelmare], [@elupus] for the work on the various
+integrations and backend refining.
-- Websocket media browsing for Plex ([@jjlawren] - [#35590]) ([plex docs])
-- Add Spotify media browser capability ([@cgtobi] - [#39240]) ([spotify docs])
-- Add Sonos media browser capability ([@cgtobi] - [#39239]) ([sonos docs])
-- Register media browser panel ([@hunterjm] - [#39655]) ([media_source docs])
-- Add media browser support to roku ([@ctalkington] - [#39652]) ([roku docs])
-- Add Arcam radio media browsing ([@elupus] - [#39593]) ([arcam_fmj docs])
-- Add Netatmo media browser support ([@cgtobi] - [#39578]) ([cast docs]) ([default_config docs]) ([media_source docs]) ([netatmo docs]) (new-integration)
-- Media Source implementation for Chromecast ([@hunterjm] - [#39305]) ([cast docs]) ([default_config docs]) ([media_finder docs]) (new-integration)
+But a media browser isn't just backend, it also needs to look good. Thankfully,
+we had [@NKDZCK] on the case, with the help of [@bramkragten]. They came up with
+a beautiful design so you can browse your media in style.
-## Wanna play tag?
+[@nkdzck]: https://github.com/NKDZCK
-We have a tags configuration panel, you create tags, see when a tag is last
-scanned, and write tags with the Android and iOS companion apps.
+
+
+
-When a tag is scanned it will glow so you can easily identify it.
+When [@hunterjm] saw the new media browser, he got an idea. What if the user can
+use the media browser to browse media offered by any integration and play it on
+any of their media players? And so
+[the media source integration](/integrations/media_source/) was born.
-## Month of "What The Heck?!"
+The first media source that has been added is to allow users to play local media.
+Local media can be motion detection events from your IP camera or a bunch of
+music files to be used with [Home Assistant Tags][tags].
-Lorem ipsum
+Home Assistant, by default, will look at the `/media` path. If you're using Home
+Assistant OS (the default install), you can use the Samba add-on to upload media.
+If you use Docker, you need to mount a volume at `/media` and if you use a
+Python virtual environment, the default is `/media`.
-- Collect some stats
-- Keep it global?
-- Mention WTH related changes below marked as WTH
-- Next year...
-- Awesome thanks
-- Links to GitHub org with WTH labels?
-- Not over yet! Hacktoberfest!
+You can also specify your own media paths with a new configuration option
+in `configuration.yaml`:
+
+```yaml
+homeassistant:
+ media_dirs:
+ motion: /media/motion_events
+ music: /media/music
+```
+
+Media Source is not limited to local media. Any integration can offer its
+media. [@cgtobi] has upgraded [the Netatmo integration](/integrations/netatmo),
+which will now offer its recorded motion events to play.
+
+Media player integrations that want to play media sources will need to be
+updated. In this release, we've updated [the Chromecast integration](/integrations/cast/).
+If you click its media browser button, you will be presented with the available
+local sources.
+
+Sometimes you just want to play your media without having to turn on the TV. To
+cover that case, [@NKDZCK] added a new media browser to the Home Assistant
+interface, which can be used to play your media. That way, you can quickly see
+what that motion event that you just received was about.
+
+
+
+
+
+## Home Assistant Tags
+
+
+
+The Home Assistant tag reader, made by Adonno with the help of MagnusO.
+
+
+Home Assistant now has native support for tags! With Home Assistant Tags, we’re
+making scannable tags (NFC/RFID) a first-class citizen in Home Assistant.
+Easy to read, write and automate!
+
+We have a beautiful UI for it in the frontend, our mobile companion apps have
+been updated to work seamlessly with tags and there is now even an open-source
+scanner available, as shown in the image above.
+
+For all details, [read the dedicated blog post about Home Assistant tags][tags]!
+
+[tags]: /blog/2020/09/15/home-assistant-tags/
+
+## Customize the sidebar
+
+One of the most requested functions of What the heck was customizing the
+sidebar: You do want history for your entities in the more info dialog, but you
+don't use that history panel. Or you do want calendars for automating, or in
+the new Lovelace cards, but don't want a calendar panel with all your calendars.
+
+Now you can hide panels from the sidebar and rearrange them, by just drag and
+drop them.
+
+
+
+Screen recording of customizing the sidebar.
+
+
+You can enter edit mode by pressing and holding the sidebar's header or from
+your profile page. You can then drag the items in the order you want them
+or remove them by clicking the `x` next to it.
+
+The removed items will be visible at the bottom of the list, by clicking the
+`+` button, you can add them back to the sidebar.
+
+These settings are stored on your device in the local storage of your browser,
+this means that this setting is device-based and will be cleared when you logout.
+
+## Person image upload
+
+You can now upload images for a person in the frontend!
+
+Select or drop an image in the input field and then crop it to a square. The
+image is stored on your Home Assistant server.
+
+
+
+
+
+We will use the image in the frontend for your persons and the sidebar for the
+user linked to this person.
+
+This feature is powered by the new image integration and opens up for future
+possibilities. For example, uploading images, for use in your Lovelace picture
+cards, would be nice!
+
+## Updated more info dialog
+
+The more info dialog is updated. In case an entity has controls, for example
+a light, the more info dialog will now have 2 tabs. One for controls and one
+for history.
+
+On the history tab, you can find the history graph you are used to and now also
+a list of logbook entries of the specific entity.
+
+
+
+The updated more info dialogs, showing the two tabs: details & history.
+
+
+For entities without controls (like a sensor), no tabs will be shown like before.
+
+## More information in the logbook panel
+
+The logbook will now show what automation or script caused the change and
+what action was used to make the change happen.
+
+This solves yet another WTH request. It will be really helpful to find those
+cases that are: WTH turned on this light?
+
+
+
+The logbook shows which automation changed the state of my stream light.
+
## Automation & Scripts updates
-TODO: Remove next line
-Own notes with an overview of the changes:
-
-The month of "What the heck?!" brought in a lot of topics the evolve around
+The month of "What the heck?!" brought in a lot of topics that evolve around
automations and scripts, of which quite a few have been addressed this release.
Furthermore, we already had quite a bunch of improvements pending. If you
-like doing automation in YAML, you'll probably love this release.
+like doing automation in YAML, you'll probably just love this release.
-Before starting on the list of newly added features, lets talk about the Home
+Before starting on the list of newly added features, let's talk about the Home
Assistant frontend. You can now duplicate an automation and, the long present
-but always disabled, duplicate condition, trigger, and action function is now
+but always disabled, duplicate condition, trigger, and action function are now
also finally working!
-### New action: `wait_for_trigger`
+### New action: Wait for trigger
-This is a special new trigger than can be used in an automation action or
-script sequence, that allows you to pause the execution until a certain trigger
-is been fired.
+This is a special new action than can be used in an automation action or
+script sequence that allows you to pause the execution until a certain trigger
+is been fired. It can be helpful for automations or scripts that consist of
+multiple stages.
-It can be helpful for automations or scripts that consists of multiple stages,
-for example, actionable notification. Those would send the notification and
-next wait for a second input as a trigger before continuing.
-
-The following example sends a notification when one passes through 2 gates to
-enter the garden:
+In this example, a notification is sent when one passes through two gates
+to enter the garden, but only when both gates are passed within 10 seconds.
```yaml
automation:
- trigger:
- platform: state
entity_id: binary_sensor.gate1
- to: 'on'
+ to: "on"
action:
- wait_for_trigger:
- platform: state
entity_id: binary_sensor.gate2
- to: 'on'
+ to: "on"
timeout: 10
continue_on_timeout: false
- service: notify.notify
@@ -128,24 +301,55 @@ automation:
message: Someone just entered the yard!
```
+This example is simple and probably fairly useless for most of us. However,
+let's say you left your garage door open and you leave the "Home" zone. Home
+Assistant could send you an actionable notification, saying: "Hey, you left
+the garage door open, shall I close if for you?" with 2 choices: Yes/No.
+
+Where you previously would have needed 3 automations for this. The first
+for sending a notification and two others for handling the "Yes" or "No"
+answer. Using the `wait_for_trigger` this could be done in a single automation.
+
+Right after sending the notification, the `wait_for_trigger` could halt the
+script from continuing, until it receives the "Yes" or "No" answer and continue
+after that and run the actions you'd like based on the answer received.
+
+This new feature is not just for our YAML uses; it also is added to our
+automation editor in the UI.
+
+
+
+The automation editor can also use the new Wait for trigger action.
+
+
### Triggers & Conditions on entity attributes
-Every tried to create an automation trigger or condition on an entity attribute?
-Like the temperature of a climate or weather entity?
+Ever tried to create an automation trigger or condition on an entity attribute, like the temperature of a climate or weather entity?
-You used to need to use a template for that, which was a reason for a lot of you
-to put it up as a "What the heck?!" entry.
+You used to need to use a template for that. Either by extracting the attribute
+from an entity using a template sensor or by writing a template condition.
+A reason for a lot of you to put it up as a "What the heck?!" entry. And you
+know what? You guys are right, this was difficult.
-Home Assistant now support the use of attributes in triggers & conditions, in
-both the state and numeric state triggers & conditions, which now have a
-`attribute` option that can be set with the attribute to use.
+
+
+The automation editor now supports attributes on triggers and conditions.
+
+
+So, Home Assistant now supports the use of attributes in triggers & conditions.
+Both the state and numeric state, triggers & conditions now have an `attribute`
+option that can be set with the attribute to use. The UI got a nice field for
+it, as shown in the above screenshots, but of course, it is also available
+when you are using YAML for your automations.
+
+Some example triggers and conditions using attributes in YAML:
```yaml
trigger:
- platform: state
entity_id: climate.living_room
- attribute: havc_action
- state: "heating"
+ attribute: hvac_action
+ to: "heating"
- platform: numeric_state
entity_id: weather.outside
attribute: temperature
@@ -161,19 +365,102 @@ condition:
below: 80
```
-### Use input_* helper entities directly in your automations and scripts
+### Use `input_datetime` helpers in automation triggers
-- Time trigger can also accept an input_datetime Entity ID ([@pnbruckner] - [#38698]) ([automation docs])
-- Numeric state condition can also accept input_number entity ID ([@frenck] - [#39680])
-- Time condition can also accept an input_datetime Entity ID ([@frenck] - [#39676])
+Using dates and times in your automation can be hard. If often needs quite a bit
+of Jinja templating and is actually really hard to do. [@pnbruckner] noticed,
+and he added the possibility to use your `input_datetime` helper entities
+directly in time trigger!
+
+Assume you have an `input_datetime.bedroom_alarm_clock_time` helper entity, that
+is in your Lovelace UI, which you can set a time in. Great! You can now
+just use it in your automations to trigger on:
+
+```yaml
+trigger:
+ - platform: time
+ at: input_datetime.bedroom_alarm_clock_time
+```
+
+Yes, he made it that elegant. It also works for multiple, or mixed variable and
+statically set times.
+
+```yaml
+trigger:
+ - platform: time
+ at:
+ - "10:00"
+ - input_datetime.bedroom_alarm_clock_time
+ - input_datetime.some_other_time_entity
+```
+
+More about the time trigger, can be found in our [documentation][trigger-time].
+
+[trigger-time]: /docs/automation/trigger/#time-trigger
+
+### Use `input_*` helpers in conditions
+
+[@pnbruckner] set a standard in the above, and we used that to start working
+on making this something that would work on more places. As of this release,
+all `input_*` entities can be used in conditions.
+
+The `time` condition can accept `input_datetime` helper entities, similar to
+the trigger shown above.
+
+```yaml
+conditions:
+ - condition: time
+ after: input_datetime.house_silent_hours_start
+ before: input_datetime.house_silent_hours_end
+```
+
+The `numeric_state` condition now accepts `input_number` helper entities for
+the `above` and `below` options.
+
+```yaml
+conditions:
+ - condition: numeric_state
+ entity_id: climate.living_room_thermostat
+ attribute: temperature
+ above: input_number.temperature_threshold_low
+ below: input_number.temperature_threshold_high
+```
+
+And finally, the `state` condition accepts any `input_*` helper entity in its
+`state` option.
+
+```yaml
+conditions:
+ - condition: state
+ entity_id: sensor.happy_birthday
+ state: input_text.too_you
+ - condition: state
+ entity_id: sensor.happy_birtday_song
+ state: input_select.notify_on_song
+ - condition: state
+ entity_id: light.living_room
+ state: input_boolean.expected_state
+```
+
+We are confident this will greatly improve the power and ease of the helper
+entities. The [conditions documentation][conditions] has been updated
+with more examples.
+
+Here is an idea: You can now easily create a set of helper entities
+representing your automation settings and adding those to a separate Lovelace
+dashboard. You now have your own automation configuration panel, helpful
+for tweaking things like times or adjust temperature thresholds, without
+touching your automations.
+
+[conditions]: /docs/scripts/conditions/
### Shorthand notation for template conditions
-A neat little trick has been added this release, to allow for shorter, cleaner
-code if you use templates quite a bit: A shorthand notation for condition
-templates has been added.
+A neat little trick added this release: Allow for shorter, cleaner
+YAML code, if you use templates quite a bit: A shorthand notation for condition
+templates have been added.
-All places that accept condition now accept templates directly. Some examples:
+All places that accept conditions, now accept templates directly. Some examples:
{% raw %}
@@ -181,7 +468,7 @@ All places that accept condition now accept templates directly. Some examples:
automations:
- alias: "My automation"
...
- conditions: "{{ (state_attr('device_tracker.iphone', 'battery_level') | int) > 50 }}"
+ condition: "{{ (state_attr('device_tracker.iphone', 'battery_level') | int) > 50 }}"
...
```
@@ -191,9 +478,9 @@ automations:
```yaml
- choose:
- - conditions: "{{ is_state('sensor.mode', 'on') and (state_attr('climate.room', 'temperature') | int) < 10 }}"
+ - condition: "{{ is_state('sensor.mode', 'on') and (state_attr('climate.room', 'temperature') | int) < 10 }}"
sequence:
- - ...
+ - ...
```
{% endraw %}
@@ -208,7 +495,7 @@ condition:
conditions:
- "{{ is_state('device_tracker.iphone', 'away') }}"
- condition: numeric_state
- entity_id: 'sensor.temperature'
+ entity_id: "sensor.temperature"
below: 20
```
@@ -239,7 +526,8 @@ action:
{% endraw %}
Don't worry, the old format still works as before, so this is not a breaking
-change. However, you can start removing those `data_template`'s.
+change. However, you can start removing those `data_template`'s by renaming to
+(or merging them with) `data`.
The keys inside a data block, can be templates now too!
@@ -253,81 +541,125 @@ service: kef_custom.set_mode
{% endraw %}
+### Variables
+
+Another WTH item, "Why can't we have variables?!". This WTH is not fully solved,
+but a good start is made this release by adding support for variables to
+automation and scripts.
+
+Here is an example automation:
+
+{% raw %}
+
+```yaml
+automation:
+ trigger:
+ platform: sun
+ event: sunset
+ offset: -00:30
+ variables:
+ notification_service: notify.paulus_iphone
+ action:
+ - service: "{{ notification_service }}"
+ data:
+ message: Beautiful sunset!
+```
+
+{% endraw %}
+
+While the above example, it doesn't add that much value, it does shows how it
+works. Variables can be templates too! For example:
+
+{% raw %}
+
+```yaml
+variables:
+ person: frenck
+ notification_service: "notify.{{ person }}_iphone"
+```
+
+{% endraw %}
+
+Both scripts and automation actions support this syntax now. Additionally,
+we added a new action! The variables action. This unlocks the potential to
+change variables during the runtime of a script.
+
+{% raw %}
+
+```yaml
+variables:
+ notification_service: notify.paulus_iphone
+action:
+ - variables:
+ notification_service: notify.frenck_iphone
+ - service: "{{ notification_service }}"
+ data:
+ message: This message actually went to Frenck, not Paulus.
+```
+
+{% endraw %}
+
+For a more extensive example, check out the example written in [the blog
+article about Home Assistant Tags][tags].
+
### Other scripts and automation changes
-- Create variable with result of wait_template and accept template for timeout option ([@pnbruckner] - [#38634]) ([automation docs])
-- Add max_exceeded log level option to automations & scripts ([@pnbruckner] - [#39448]) ([automation docs]) ([script docs])
-- Add as_local convenience function to jinja templates ([@bdraco] - [#39618])
-- Add timestamp option for input_datetime.set_datetime ([@pnbruckner] - [#39121]) ([input_datetime docs])
+But wait! There is more! 😂
+
+There was no way of knowing if a wait template was timed out or if it continued
+normally. Now, we do know this. After each wait template, a new variable is
+available: `wait`. It provides `wait.completed` (indicates if the template
+evaluated to true before the timeout expired) and `wait.remaning` (remaining time
+out).
+
+{% raw %}
+
+```yaml
+sequence:
+ - wait_template: "{{ is_state('binary_sensor.abc', 'on') }}"
+ timeout: 10
+ continue_on_timeout: true
+ - choose:
+ - conditions:
+ - condition: template
+ value_template: "{{ not wait.completed }}"
+ sequence:
+ # Handle timeout case
+```
+
+{% endraw %}
+
+The new script and automation run modes are amazing! But in some cases, they
+might be polluting your logs. For example, you have a automation in `single`
+mode, but it does get triggered multiples times sometimes and you are not
+interested in the log. You can now control that with the `max_exceeded` option.
+
+The example below silences the automation and it will not log when it gets
+triggered while it was already running:
+
+```yaml
+automation:
+ - trigger: ...
+ max_exceeded: silent
+ action: ...
+```
## Calendar card
-Like promised when we introduced the calendar panel, we now also added a
-calendar Lovelace card. This allows you to select the calendar entities you
-want to show.
+Like promised, when we introduced the calendar panel, we now also added a
+Lovelace calendar card!
+
+This allows you to create as many calendars as you want with the entities you
+want.
+
+If you want multiple calendar panels, create a Lovelace dashboard with a
+panelmode view with a calendar card!
+
-TODO: screenshot
-
-
-## Customize the sidebar
-
-One of the most requested functions of What the heck was customizing the
-sidebar, you do want history for your entities in the more info dialog, but you
-don't use that history panel. Or you do want calendars for automating but don't
-want a calendar panel.
-
-Now you can hide panels from the sidebar, and rearrange them.
-
-TODO: animation / screen recording
-
-
-You can enter edit mode by pressing and holding the sidebar, you can then drag
-the items in the order you want them or remove them by clicking the cross.
-
-This is stored on your device, so this has to be set up on every device.
-
-## Person image upload
-
-You can now upload images in the frontend for a person, you can select or drop
-an image in the input field and then crop it to a square. The image will be
-stored on your Home Assistant server.
-
-TODO: screenshot
-
-
-We will use the image in the frontend for your persons, but also in the sidebar
-for the user that is linked to this person.
-
-## Code editor themeable (breaking)
-
-TODO: Move this to the breaking changes
-
-The code editor is now themeable, you can set the background color and the color
-for the different code blocks. The default background color now is
-`card-background-color`, for some themes this may conflict with the default code
-colors. To get the old behavior back add `code-editor-background-color: white`
-to your theme.
-
-## Updated MDI to 5.5.55
-
-TODO: Move this to the breaking change section
-
-The MDI icons are updated to version [5.5.55](https://dev.materialdesignicons.com/changelog#version-5.5.55), another 100 icons where added. `scooter` was...?
## Template developer tools
@@ -335,51 +667,35 @@ The template developer tools are very useful for checking if the template you
made works and does what you want it to do. But people had some annoyances with
the tool; the editor is always filled with sample data, that can give a lot of
response. It would be more useful to have your previously used template there.
+Yes, you guessed it, another WTH!
The template would also not automatically re-render after the state of an entity
-is changed.
+is changed, causing you needing to change the template in order to re-render it.
-TODO: animated gif?
-
-
-We addressed both these issues, we save your last-used template and will show
+We addressed both these issues. We save your last-used template and will show
that instead of the example when you visit the template developer tools.
-We will also listen for changes of the entities you used in your template and
-automatically re-render your template.
-
-## Logbook
-
-The more info dialog is updated, it now has 2 tabs. One for controls and one
-for history. On the history tab, you can find the history graph you are used to
-and now also a list of logbook entries of the specific entity.
-
-TODO: screenshot
-
-On the logbook panel, we added some more information. You can now see what
-automation or script caused the change of state and also what action was used
-to do it.
+We will also listen for changes of the entities you used in your template and
+automatically re-render your template. As a bonus, we will show
+which entities Home Assistant detected you are using in your template.
-## Reload everything YAML and integration
+## Reload everything YAML
-We added a lot of YAML integrations that can be reloaded without restarting
-Home Assistant, you can just reload it from the configuration server control
-page (you will need advanced mode).
+WTH, do we still need to restart Home Assistant for applying YAML configuration?
+That was one of the WTH raised. It is being worked on!
-As of this release, beside the integration that already could be reloaded,
+This release, [@bdraco] found a way to reload some of the internal integrations
+and boosted this capability to a lot of integrations. For those, you can just
+reload the YAML in the configuration server control page (you will need advanced mode).
+
+As of this release, besides the integrations that already could be reloaded,
the following integration can now reload their YAML configuration without
-restart Home Assistant:
+a restart of Home Assistant:
- [Command Line][command_line docs]
- [File Size][filesize docs]
@@ -393,7 +709,7 @@ restart Home Assistant:
- [MQTT][mqtt docs]
- [Ping][ping docs]
- [RESTful][rest docs]
-- [RPi GPIO][rpi_gpio docs]
+- [Raspberry Pi GPIO][rpi_gpio docs]
- [SMTP][smtp docs]
- [Statistics][statistics docs]
- [Telegram][telegram docs]
@@ -401,27 +717,41 @@ restart Home Assistant:
- [Trend][trend docs]
- [Universal Media Player][universal docs]
-You can also reload an integration that is setup with the UI. This can be useful
-when it lost it's connection or is in an otherwise failed state. You can find
-the reload the button in the overflow menu on the integration card.
+You can also reload an integration that is setup with the UI! This can be useful
+when it lost its connection or is in an otherwise failed state. You can find
+the reload button in the overflow menu on the integration card.
+
+
+
+UI configured integration can now be reloaded as well!
+
## User password change
-Another What the heck: Being able to change the password of a user as the owner
-of the system. You can now change the password of every user from the UI when
-you are the owner of your system.
+Another What the heck, that sounded so obvious: Being able to change a user's
+password as the owner of the system. Right?!
-## Cloud expose domains/entity
+You can now change every user's password from the UI when you are the owner of
+the system!
-If you are using Home Assistant Cloud with Google Assistant or Alexa, you can
-select what entities you want to expose in the UI. We would by default expose
-all new entities. We now introduced a new setting where you can set if you want
-to expose entities by domain.
+
+
+As a owner, you can now change a password of a user.
+
-You can overrule this domain setting per entity.
+## Improved ways of exposing entities via Home Assistant Cloud
-A newly added entity will by default get the settings of the domain, so you
-don't have to change these settings for every newly added entity.
+This release brings an update to the way you can expose entities to Google
+Assistant and Amazon Alexa via Home Assistant Cloud.
+
+With the new panel, you can now set on a domain level if entities should be
+exposed/not exposed by default. You can still override this on a per-entity
+level for fine-grained control.
+
+The default expose rules have also been updated to expose entities that work
+best with voice assistants.
+
+
## Add card by entities
@@ -429,17 +759,19 @@ Are you a bit overwhelmed by all the different types of cards Lovelace has? You
can now just select the entities you want to use for a card, and have Lovelace
suggest a card for you.
-TODO: screenshot
-
In the add card dialog, we added a second tab with a list of all your entities.
Select the entities you want to use and click continue. We will suggest a card
-for you and you can then fine-tune the config.
+for you and you can then fine-tune the configuration.
## Order entities in Lovelace UI editor
@@ -447,79 +779,45 @@ You can now sort the entities in Lovelace UI editors by just dragging them.
No more clicking the up and down buttons over and over again, simply drag the
item up or down.
-TODO: Animated gif
-
-
-
-## Home Assistant Cloud for older Android devices
-
-Home Assistant Cloud uses Let's Encrypt to provide SSL certificates for your instance. Let's Encrypt is changing the way they sign their certificates at the end of the month which breaks support for older Android devices (older than Android 7.1).
-
-This release includes an update to make the certificates used by Home Assistant Cloud backwards compatible. This relies on a feature that Let's Encrypt provides, which will expire in September 2021.
-
-If you use an older Android device and cannot upgrade to Home Assistant 0.115 or want to use it past September 2021, install the Firefox browser. It includes modern certificates and is able to support the new Let's Encrypt certificates.
## Other noteworthy changes
-- The OpenZwave beta integration in coming along nicely. First signs of
+- The OpenZWave beta integration is coming along nicely. First signs of
some control panels in the UI are visible this release. You can see the status
and information of your network and nodes. There are also buttons to put your
Z-Wave network in inclusion and exclusion mode and to refresh a node.
Thanks [@cgarwood]!
-- The stream component now supports audio! And if you use the latest Home
- Assistant Android app, the stream component now support H.265 streams.
- Amazing job [@uvjustin]!
-- The [Met.no](/integrations/met) now support hourly forcasts, very nice [@bruxy70]!
+
+- The code editor in the UI is now theme-able, so make them look nice!
+
+- The stream component now supports audio! Amazing job [@uvjustin]!
+
+- Slack notification now supports change username/icon on the fly, which was
+ a great WTH suggestion! Thanks for adding that [@bachya].
+
+- The [Met.no](/integrations/met) now supports hourly forecasts, very nice [@bruxy70]!
+
+- The MDI icons are updated to version [5.5.55](https://dev.materialdesignicons.com/changelog#version-5.5.55),
+ this adds another 100 icons you can use!
+
- The Google Assistant integration got some updates:
+
- [@elupus] added support for asking for the previous or next input source.
- Basic support for controlling light effect has been added by [@mjg59].
- [@blueshiftlabs] added capabilities to control media player muting and
relative-volume controls.
-- The Netatmo integration was re-engineered and now has a new data handler to
- reduce the number of API calls and also merge in webhook events to improve the
- overall responsiveness.
- It now comes with a light platform to control the outdoor camera flood light and
- contains services to set the home/away status of occupants as well as the outdoor camera mode.
-- Performance
- - Template parsing and entity tracking?
- - Improve performance of fetching the state domain ([@bdraco] - [#38653])
- - Improve the performance of dt_util.utcnow() ([@bdraco] - [#39145])
- - Add shortcuts when we know template is static ([@balloob] - [#39208])
- - Standardize uuid generation for events/storage/registry ([@bdraco] - [#39184])
- - Tune logbook performance to accomodate recent changes ([@bdraco] - [#39348]) ([automation docs]) ([logbook docs]) ([script docs])
- - Provide a logbook option entity_matches_only to optimize for single entity lookup ([@bdraco] - [#39555]) ([logbook docs]
- - Something about the template changes? Mainly performance...
- - Add track_template_result method to events ([@bdraco] - [#38802])
- - Update TrackTemplateResultInfo to remove side effects from init ([@bdraco] - [#38934])
- - Update template sensor to use async_track_template_result ([@bdraco] - [#38940]) ([template docs])
- - Convert template lock to use async_track_template_result ([@bdraco] - [#38946]) ([template docs])
- - Convert template switch to use async_track_template_result ([@bdraco] - [#38950]) ([template docs])
- - Convert template fan to use async_track_template_result ([@bdraco] - [#38983]) ([template docs])
- - Convert template alarm_control_panel to use async_track_template_result ([@bdraco] - [#39014]) ([template docs])
- - Convert template binary_sensor to use async_track_template_result ([@bdraco] - [#39027]) ([template docs])
- - Convert template cover to use async_track_template_result ([@bdraco] - [#39042]) ([template docs])
- - Convert template light to use async_track_template_result ([@bdraco] - [#39045]) ([template docs])
- - Convert template vacuum to use async_track_template_result ([@bdraco] - [#39047]) ([template docs])
- - Convert bayesian binary_sensor to use async_track_template_result ([@bdraco] - [#39174]) ([bayesian docs])
- - Update websocket api to use async_track_template_result ([@bdraco] - [#39057]) ([websocket_api docs])
- - Simplify template integration entities ([@bdraco] - [#39083]) ([template docs])
- - Update template triggers to use async_track_template_result ([@bdraco] - [#39059]) ([template docs])
- - Update universal media_player to use async_track_template_result ([@bdraco] - [#39054]) ([universal docs])
- - Report usage of extract_entities by custom components ([@bdraco] - [#39185]) (breaking-change)
- - Subscribe to state change events only if the template has entities ([@bdraco] - [#39188]) ([template docs])
- - Make async_track_template_result track multiple templates ([@bdraco] - [#39371]) ([bayesian docs]) ([template docs]) ([universal docs]) ([websocket_api docs]))
+- The Netatmo integration was re-engineered, which reduced the number of API
+ calls and added webhook events to improve overall responsiveness. It now
+ supports controlling the outdoor camera floodlight and got services to set
+ the occupants' home/away status and the outdoor camera mode.
-- WTH: Extend IP ban / failed login notification information ([@frenck] - [#39020]) ([http docs])
-- WTH: Allow Slack notifications to change username/icon on the fly ([@bachya] - [#39091])
-- WTH: Don't sort keys when dumping json and yaml ([@bramkragten] - [#39214]) ([http docs])
-- WTH: Allow owner users to change password of any user ([@balloob] - [#39242]) ([config docs])
-- WTH: Add description of what caused an automation trigger to fire ([@pnbruckner] - [#39251])
+- We no longer automatically alphabetically sort the keys in YAML files written
+ by the UI, as a result from a WTH request. Much better!
## New Integrations
@@ -575,126 +873,34 @@ integration. Click on one of those to read more about the breaking change
for that specific item.
- Instituto Português do Mar e Atmosfera (IPMA)
+ Automations
-The `precipitation` attribute has been renamed to `precipitation_probability`.
+Previously an automation's `last_triggered` attribute was updated, and an
+`automation_triggered` event was fired, whenever a trigger fired and the
+conditions (if any) were true, regardless if the actions actually ran.
-([@dgomes] - [#38697]) ([ipma docs])
+For example, in `single` mode, the actions won't run if they are still running
+from a previous trigger event.
+
+Now the attribute will be updated, and the event fired, only if the actions
+actually run.
+
+([@pnbruckner] - [#39323]) ([automation docs])
- Deutsche Wetter Dienst (DWD) Weather Warnings
+ Axis
-If you use entity state attributes of this integration in automations or scripts
-need to adjust these to handle the changes.
+Initial naming of events from VMD4 and Fence guard are now based on their
+configured name on the device; `binary_sensor.m1065-lw_0_vmd4_camera1profile1`
+is now `binary_sensor.m1065-lw_0_vmd4_profile_1` or `profile_1` can be whatever
+the user chose to name the profile.
-- The `region_state` attribute has been removed, cause it is no longer available
- on the new API.
-- All timestamps in the state attributes are now UTC and not local time anymore.
-
-([@stephan192] - [#34820]) ([dwd_weather_warnings docs])
-
-
-
-
-
- HTTP: Using reverse proxies
-
-
-The processing of data received from reverse proxies is now more strictly
-handled. Invalid or malformed `X-Forwarded-For` headers will now result in an
-HTTP 400 error (Bad Request).
-
-Support for `X-Forwarded-Proto` and `X-Forwarded-Host` has been added.
-
-Additionally, Home Assistant will now log cases of a reverse proxy being used,
-but not configured with Home Assistant. Make sure, you set the
-`use_x_forwarded_for` and `trusted_proxies` in your Home Assistant HTTP
-configuration correctly to avoid warnings.
-
-([@frenck] - [#38696]) ([http docs])
-
-
-
-
-
- Netatmo
-
-
-The sensor for wind and gust angle is split up into two entities so that it now
-returns the direction (e.g., `NE`) and the actual value (e.g., `178°`) rather
-than a string containing both (e.g., `NE (123°)`).
-
-([@cgtobi] - [#38627]) ([netatmo docs])
-
-
-
-
-
- OAuth2 authentication and redirects
-
-
-Integrations using OAuth2 authentication now use the current request URL from
-the browser as the redirect target, instead of the internal URL setting.
-
-This matches the experience one would expect to happen and removes the need
-to fiddle around with the internal URL setting.
-
-However, this might require you to update application settings when
-re-authenticating with existing services.
-
-([@frenck] - [#38692])
-
-
-
-
-
- OpenUV
-
-
-Support for configuring this integration has been fully removed.
-If you have existing OpenUV configuration in your YAML configuration files,
-you can safely remove that configuration.
-
-([@bachya] - [#38857]) ([openuv docs])
-
-
-
-
-
- Yandex Transport
-
-
-The integration now accepts a full stop ID in text notation:
-`'stop__1234'` or `'group_345'` or `'6789'`
-
-You'll have to update `stop_id: 1234567` in your existing configuration to
-`stop_id: stop__1234567` as it is used in Yandex maps API.
-
-([@devbis] - [#39021]) ([yandex_transport docs])
-
-
-
-
-
- Sentry
-
-
-The YAML configuration for Sentry is now deprecated and no longer works. If you
-had Sentry configured via YAML previously, you can safely remove the YAML
-configuration (without the need to reconfigure) as it has been imported into
-the UI before.
-
-The release is now formatted with only the version number of Home Assistant
-Core, for example, `0.115.0`. Previously, this was prefixed with
-`homeassistant-`, for example, `homeassistant-0.115.0`.
-This prefix is now removed.
-
-([@frenck] - [#38833]) ([sentry docs])
+([@Kane610] - [#39699]) ([axis docs])
@@ -708,10 +914,10 @@ This prefix is now removed.
To set up a Broadlink device, click _Configuration_ in the sidebar and click
_Integrations_.
-The devices will be imported from your configuration files to that page. If yousee
- your device there, click _Configure_. If not, click the `+` icon in the lower
- right, click _Broadlink_, enter the host and follow the instructions to
- complete the setup.
+The devices will be imported from your configuration files to that page. If you see
+your device there, click _Configure_. If not, click the `+` icon in the lower
+right, click _Broadlink_, enter the host and follow the instructions to
+complete the setup.
The name you choose will serve as a template for the entities. You can change
the entity name and id in the entity settings on the frontend. You may need to
@@ -839,6 +1045,216 @@ file, they are gone.
+
+
+ Brother Printer
+
+
+The uptime sensor state format and unit have been changed. If you rely on those
+you might need to adjust your configuration.
+
+([@bieniu] - [#39226]) ([brother docs])
+
+
+
+
+
+ CPU Speed
+
+
+The naming of the attributes was updated to be aligned with the current used
+standards.
+
+- `Brand` -> `brand`
+- `GHz Advertised` -> `ghz_advertised`
+
+([@fabaff] - [#39155]) ([cpuspeed docs])
+
+
+
+
+
+ Deutsche Wetter Dienst (DWD) Weather Warnings
+
+
+If you use entity state attributes of this integration in automations or scripts
+need to adjust these to handle the changes.
+
+- The `region_state` attribute has been removed, cause it is no longer available
+ on the new API.
+- All timestamps in the state attributes are now UTC and not local time anymore.
+
+([@stephan192] - [#34820]) ([dwd_weather_warnings docs])
+
+
+
+
+
+ Emulated Hue
+
+
+By default, all lights and devices that do not support brightness adjustment are
+exported as On/Off lights without a brightness property. When upgrading from
+earlier versions of Home Assistant (0.112 and earlier), some devices may now be
+reported by Alexa as non-responsive.
+
+Alternatively, you can set the `lights_all_dimmable` configuration option to
+continue reporting these devices as if they have a brightness setting.
+
+**How to fix it once and for all**:
+
+You need to have Alexa rediscover all devices and then remove the now
+non-responding duplicates using the Alexa phone App. This can take quite a while
+if you have lots of devices.
+
+An alternative would be to log in to the Alexa web site and remove all the lights
+instead and then re-discover them all.
+
+To do so go to , or if not
+logged in: then select "Smart Home" -> "Devices" and
+select "Remove All".
+
+If you have multiple Echo devices on your network, it is possible that the
+entries would continue to show as duplicates. This is due to an individual Echo
+device caching the old list and re-using it.
+
+The only known solution for this is to remove your echo devices from your Amazon
+account, delete all the lights previously discovered by Alexa and then re-run
+discovery.
+
+This is a one-off requirement, unfortunately there's no other way to easily
+transition from the previously incorrect values reported by the Emulated Hue.
+
+([@jyavenard] - [#39539]) ([emulated_hue docs])
+
+
+
+
+
+ Ezviz
+
+
+The Ezviz integration has been temporarily disabled, as it has a dependency
+that contains code that breaks Home Assistant.
+
+([@balloob] - [#38444]) ([ezviz docs])
+
+
+
+
+
+ Frontend
+
+
+The previous deprecated frontend configuration options `frontend_extra_html_url`
+and `frontend_extra_html_url` are now removed.
+
+([@balloob] - [#39799]) ([frontend docs])
+
+
+
+
+
+ HDMI-CEC
+
+
+The HDMI-CEC integration has been temporarily disabled, as it has a dependency
+that contains code that breaks Home Assistant.
+
+([@balloob] - [#37707])
+
+
+
+
+
+ Home Assistant Cloud for older Android devices
+
+
+Home Assistant Cloud uses Let's Encrypt to provide SSL certificates for your
+instance. Let's Encrypt is changing the way they sign their certificates at
+the end of the month which breaks support for older Android devices
+(older than Android 7.1).
+
+This release includes an update to make the certificates used by Home Assistant
+Cloud backward compatible. This relies on a feature that Let's Encrypt
+provides, which will expire in September 2021.
+
+If you use an older Android device and cannot upgrade to Home Assistant 0.115
+or want to use it past September 2021, install the Firefox browser. It includes
+modern certificates and is able to support the new Let's Encrypt certificates.
+
+
+
+
+
+ HTTP: Using reverse proxies
+
+
+The processing of data received from reverse proxies is now more strictly
+handled. Invalid or malformed `X-Forwarded-For` headers will now result in an
+HTTP 400 error (Bad Request).
+
+Support for `X-Forwarded-Proto` and `X-Forwarded-Host` has been added.
+
+Additionally, Home Assistant will now log cases of a reverse proxy being used,
+but not configured with Home Assistant. Make sure, you set the
+`use_x_forwarded_for` and `trusted_proxies` in your Home Assistant HTTP
+configuration correctly to avoid warnings.
+
+([@frenck] - [#38696]) ([http docs])
+
+
+
+
+
+ Instituto Português do Mar e Atmosfera (IPMA)
+
+
+The `precipitation` attribute has been renamed to `precipitation_probability`.
+
+([@dgomes] - [#38697]) ([ipma docs])
+
+
+
+
+
+ KNX
+
+
+The KNX integration has been completely refactored to no longer rely on
+dedicated platform configuration but instead use the integration domain key
+as the base configuration.
+
+Let's say you've previously used the following configuration:
+
+```yaml
+knx:
+ tunneling:
+ host: "192.168.0.1"
+switch:
+ - platform: knx
+ name: Switch
+ address: "2/0/1"
+ state_address: "2/0/2"
+```
+
+You'll need to migrate it as follows:
+
+```yaml
+knx:
+ tunneling:
+ host: "192.168.0.1"
+ switch:
+ - name: Switch
+ address: "2/0/1"
+ state_address: "2/0/2"
+```
+
+([@marvin-w] - [#39219]) ([knx docs])
+
+
+
+
Kodi
@@ -860,103 +1276,34 @@ Existing YAML entries will be imported, but:
- CPU Speed
+ Lovelace for generated (auto) mode
-The naming of the attributes was updated to be aligned with the current used
-standards.
+Entities that are generated from mobile apps with the `mobile_app` integration
+is now hidden in the generated Lovelace view. If you want to continue to display
+those you need to take control over your view with the 3 dots in the top right
+corner of the Lovelace screen.
-- `Brand` -> `brand`
-- `GHz Advertised` -> `ghz_advertised`
-
-([@fabaff] - [#39155]) ([cpuspeed docs])
+([@ludeeus] - [#6873]) ([lovelace docs])
- RFLink
+ MDI Icons
-The integration has been adjusted and modified the `entity_id` generation for
-Rflink toggle type lights. There is a small possibility an entity ID has
-changed because of this.
+The MDI icons are updated to version [5.5.55](https://dev.materialdesignicons.com/changelog#version-5.5.55),
+this adds another 100 icons you can use!
-([@javicalle] - [#37992]) ([rflink docs])
+In 5.5.55 there was 1 breaking change, if you used the icon `mdi:scooter` this
+has been renamed to `mdi:human-scooter` and you need to adjust your
+configuration.
-
-
-
-
- Ezviz
-
-
-The Ezviz integration has been temporarily disabled, as it has a dependency
-that contains code that breaks Home Assistant.
-
-([@balloob] - [#38444]) ([ezviz docs])
-
-
-
-
-
- Brother Printer
-
-
-The uptime sensor state format and unit have been changed. If you rely on those
-you might need to adjust your configuration.
-
-([@bieniu] - [#39226]) ([brother docs])
-
-
-
-
-
- HDMI-CEC
-
-
-The HDMI-CEC integration has been temporarily disabled, as it has a dependency
-that contains code that breaks Home Assistant.
-
-([@balloob] - [#37707])
-
-
-
-
-
- KNX
-
-
-The KNX integration has been completely refactored to no longer rely on
-dedicated platform configuration but instead use the integration domain key
-as the base configuration.
-
-Let's say you've previously used the following configuration:
-
-```yaml
-knx:
- tunneling:
- host: '192.168.0.1'
-switch:
- - platform: knx
- name: Switch
- address: '2/0/1'
- state_address: '2/0/2'
-```
-
-You'll need to migrate it as follows:
-
-```yaml
-knx:
- tunneling:
- host: '192.168.0.1'
- switch:
- - name: Switch
- address: '2/0/1'
- state_address: '2/0/2'
-```
-
-([@marvin-w] - [#39219]) ([knx docs])
+All icons that were deprecated in [0.113.0](/blog/2020/07/22/release-113/#mdi-icons-updated)
+have now been removed. Icons that were renamed or deleted in
+version [5.0.45](https://dev.materialdesignicons.com/upgrade#4.9.95-to-5.0.45)
+will no longer work.
@@ -969,14 +1316,14 @@ The attributes of `next_rain` has been reworked. In the previous version it was
a list of objects with changing keys (every 5 minutes) corresponding to a
UTC timestamp. This design was difficult to use in templates and automation.
-The new design will add a dedicated string attribute to have the the reference
+The new design will add a dedicated string attribute to have the reference
timestamp of the forecast (`forecast_time_ref`) and a dict attribute with fixed
keys to access the rain forecast within the hour (`1_hour_forecast`).
Example of the new attributes:
```yaml
-forecast_time_ref: '2020-08-20T19:25:00+00:00'
+forecast_time_ref: "2020-08-20T19:25:00+00:00"
1_hour_forecast:
0 min: Temps sec
5 min: Temps sec
@@ -995,20 +1342,39 @@ forecast_time_ref: '2020-08-20T19:25:00+00:00'
- Automations
+ Meteorologisk institutt (Met.no)
-Previously an automation's `last_triggered` attribute was updated, and an
-`automation_triggered` event was fired, whenever a trigger fired and the
-conditions (if any) were true, regardless if the actions actually ran.
+While updating the integration, and its underlying libraries, to use the newer
+API endpoint, some of the calculations and forecast aggregations were tweaked a
+bit:
-For example, in `single` mode, the actions won't run if they are still running
-from a previous trigger event.
+- Use hourly forecast for current weather, not daily.
+- Ensure compared datetime objects are compared in the same time zone.
+- Use highest resolution data from full 24 hours to calculate daily forecast
+ min/max/sum values.
-Now the attribute will be updated, and the event fired, only if the actions
-actually run.
+None of these changes are expected to break your setup, though the data
+presented might look a little different due to the above.
-([@pnbruckner] - [#39323]) ([automation docs])
+In addition, all time stamps are now given in UTC. Automations that depend on
+the `datetime` key under the state attribute `forecast` needs to be checked and
+updated accordingly.
+
+([@thimic] - [#39493]) ([met docs])
+
+
+
+
+
+ Netatmo
+
+
+The sensor for wind and gust angle is split up into two entities so that it now
+returns the direction (e.g., `NE`) and the actual value (e.g., `178°`) rather
+than a string containing both (e.g., `NE (123°)`).
+
+([@cgtobi] - [#38627]) ([netatmo docs])
@@ -1017,7 +1383,7 @@ actually run.
NZBGet
-NZBGet is now available via the Integrations UI. This also means its no longer
+NZBGet is now available via the Integrations UI. This also means it's no longer
configured in YAML. Existing configurations are automatically transitioned to
configuration via UI, so after upgrade your existing YAML entry can be safely
removed.
@@ -1034,16 +1400,108 @@ start time of the application.
- Yeelight
+ OAuth2 authentication and redirects
-The Yeelight integration now uses custom SSDP-like discovery instead of the
-mDNS discovery, since mDNS discovery is removed in new firmwares.
+Integrations using OAuth2 authentication now use the current request URL from
+the browser as the redirect target, instead of the internal URL setting.
-After this change, there will be no longer automatic configuration based on
-discovery. Users currently using that should set up all devices through UI.
+This matches the experience one would expect to happen and removes the need
+to fiddle around with the internal URL setting.
-([@shenxn] - [#37191]) ([yeelight docs])
+However, this might require you to update application settings when
+re-authenticating with existing services.
+
+([@frenck] - [#38692])
+
+
+
+
+
+ Open Hardware Monitor
+
+
+In some locales numbers with decimals uses "," instead of "." and this causes
+an issue when trying to use InfluxDB for example. This has been adjusted.
+
+([@fillefilip8] - [#39030]) ([openhardwaremonitor docs])
+
+
+
+
+
+ OpenUV
+
+
+Support for configuring this integration has been fully removed.
+If you have existing OpenUV configuration in your YAML configuration files,
+you can safely remove that configuration.
+
+([@bachya] - [#38857]) ([openuv docs])
+
+
+
+
+
+ OpenWeatherMap
+
+
+The OpenWeatherMap integration can now be configured via the UI. After upgrading,
+your existing configuration will be imported automatically and you can safely
+remove existing YAML configuration for this integration.
+
+([@freekode] - [#34659]) ([openweathermap docs])
+
+
+
+
+
+ RFLink
+
+
+The integration has been adjusted and modified the `entity_id` generation for
+Rflink toggle type lights. There is a small possibility an entity ID has
+changed because of this.
+
+([@javicalle] - [#37992]) ([rflink docs])
+
+
+
+
+
+ Roku
+
+
+The Roku state now better aligns with media playback.
+
+Previously, if an app was open, the state would be "playing" even if you were
+just browsing the app interface. This has been adjusted to be represented as
+"on". When Roku reports media playback in progress, the state "playing" will
+be used.
+
+This improves compatibility with exposing entities to Alexa, Google Assistant,
+and HomeKit.
+
+([@ctalkington] - [#39540]) ([roku docs])
+
+
+
+
+
+ Sentry
+
+
+The YAML configuration for Sentry is now deprecated and no longer works. If you
+had Sentry configured via YAML previously, you can safely remove the YAML
+configuration (without the need to reconfigure) as it has been imported into
+the UI before.
+
+The release is now formatted with only the version number of Home Assistant
+Core, for example, `0.115.0`. Previously, this was prefixed with
+`homeassistant-`, for example, `homeassistant-0.115.0`.
+This prefix is now removed.
+
+([@frenck] - [#38833]) ([sentry docs])
@@ -1087,7 +1545,7 @@ a performance issue where the template would be re-rendered unnecessarily.
Please review the [`Working without entities`][working-without-entities] section
on the [`Binary Sensor Template`][working-without-entities] documentation for
-alternative ways to force templates entities to re-evaluate. This includes
+alternative ways to force template entities to re-evaluate. This includes
templates that rely on the use of `now()`.
If this change means you need to make adjustments, we have made it easier by
@@ -1102,125 +1560,14 @@ section under `Configure Home Assistant` -> `Server Controls`.
- Emulated Hue
+ Themes
-By default, all lights and devices that do not support brightness adjustment are
-exported as On/Off lights without a brightness property. When upgrading from
-earlier versions of Home Assistant (0.112 and earlier), some devices may now be
-reported by Alexa as non-responsive.
-
-Alternatively, you can set the `lights_all_dimmable` configuration option to
-continue reporting these devices as if they have a brightness setting.
-
-**How to fix it once and for all**:
-
-You need to have Alexa rediscover all devices and then remove the now
-non-responding duplicates using the Alexa phone App. This can take quite a while
-if you have lots of devices.
-
-An alternative would be to log to the Alexa web site and remove all the lights
-instead and then re-discover them all.
-
-To do so go to , or if not
-logged in: then select "Smart Home" -> "Devices" and
-select "Remove All".
-
-If you have multiple Echo devices on your network, it is possible that the
-entries would continue to show as duplicates. This is due to an individual Echo
-device caching the old list and re-using it.
-
-The only known solution for this is to remove your echo devices from your Amazon
-account, delete all the lights previously discovered by Alexa and then re-run
-discovery.
-
-This is a one-off requirement, unfortunately there's no other way to easily
-transitioned from the previously incorrect values reported by the Emulated Hue.
-
-([@jyavenard] - [#39539]) ([emulated_hue docs])
-
-
-
-
-
- Roku
-
-
-The Roku state now better aligns with media playback.
-
-Previously, if an app was open, the state would be "playing" even if you were
-just browsing the app interface. This has been adjusted to be represented as
-"on". When Roku reports media playback in progress, the state "playing" will
-be used.
-
-This improves compatibility with exposing entities to Alexa, Google Assistant,
-and HomeKit.
-
-([@ctalkington] - [#39540]) ([roku docs])
-
-
-
-
-
- Meteorologisk institutt (Met.no)
-
-
-While updating the integration, and its underlying libraries, to use the newer
-API endpoint, some of the calculations and forecast aggregations were tweaked a
-bit:
-
-- Use hourly forecast for current weather, not daily.
-- Ensure compared datetime objects are compared in the same time zone.
-- Use highest resolution data from full 24 hours to calculate daily forecast
- min/max/sum values.
-
-None of these changes are expected to break your setup, though the data
-presented might look a little different due to the above.
-
-In addition, all time stamps are now given in UTC. Automations that depend on
-the `datetime` key under the state attribute `forecast` needs to be checked and
-updated accordingly.
-
-([@thimic] - [#39493]) ([met docs])
-
-
-
-
-
- OpenWeatherMap
-
-
-The OpenWeatherMap integration can now be configured via the UI. After upgrading
-your existing configuration will be imported automatically and you can safely
-remove existing YAML configuration for this integration.
-
-([@freekode] - [#34659]) ([openweathermap docs])
-
-
-
-
-
- Open Hardware Monitor
-
-
-In some locales numbers with decimals uses "," instead of "." and this causes
-an issue when trying to use InfluxDB for example. This has been adjusted.
-
-([@fillefilip8] - [#39030]) ([openhardwaremonitor docs])
-
-
-
-
-
- Lovelace for generated (auto) mode
-
-
-Entities that are generated from mobile apps with the `mobile_app` integration
-is now hidden in the generated Lovelace view. If you want to continue to display
-those you need to take control over your view with the 3 dots in the top right
-corner of the Lovelace screen.
-
-([@ludeeus] - [#6873]) ([lovelace docs])
+The code editor is now themeable, you can set the background color and the color
+for the different code blocks. The default background color now is
+`card-background-color`. For some themes this may conflict with the default code
+colors. To get the old behavior back add `code-editor-background-color: white`
+to your theme.
@@ -1240,20 +1587,6 @@ could never trigger.
-
- Axis
-
-
-Initial naming of events from VMD4 and Fence guard are now based on their
-configured name on the device; `binary_sensor.m1065-lw_0_vmd4_camera1profile1`
-is now `binary_sensor.m1065-lw_0_vmd4_profile_1` or `profile_1` can be whatever
-the user chose to name the profile.
-
-([@Kane610] - [#39699]) ([axis docs])
-
-
-
-
Timer
@@ -1275,13 +1608,31 @@ Now it will render as "25:00:00".
- Frontend
+ Yandex Transport
-The previous deprecated frontend configuration options `frontend_extra_html_url`
-and `frontend_extra_html_url` are now removed.
+The integration now accepts a full stop ID in text notation:
+`'stop__1234'` or `'group_345'` or `'6789'`
-([@balloob] - [#39799]) ([frontend docs])
+You'll have to update `stop_id: 1234567` in your existing configuration to
+`stop_id: stop__1234567` as it is used in Yandex maps API.
+
+([@devbis] - [#39021]) ([yandex_transport docs])
+
+
+
+
+
+ Yeelight
+
+
+The Yeelight integration now uses custom SSDP-like discovery instead of the
+mDNS discovery, since mDNS discovery is removed in new firmwares.
+
+After this change, there will be no longer automatic configuration based on
+discovery. Users currently using that should set up all devices through UI.
+
+([@shenxn] - [#37191]) ([yeelight docs])
@@ -1289,7 +1640,7 @@ and `frontend_extra_html_url` are now removed.
## Farewell to the following
- The **Prezzi Benzina** integration has been removed.
- It was using webscaping to gather its data, which is no longer allowed.
+ It was using webscraping to gather its data, which is no longer allowed.
([@eliseomartelli] - [#38736])
- The **yr** integration has been removed after a request from yr.no. Use
the Met.no integration instead
@@ -1357,7 +1708,7 @@ and `frontend_extra_html_url` are now removed.
- Add URL as common string ([@ctalkington] - [#38694])
- Add hourly forecast to met.no ([@bruxy70] - [#38700]) ([met docs])
- Update IPMA weather component ([@dgomes] - [#38697]) ([ipma docs]) (breaking-change)
-- Remove prezzibenzina integration (ADR-0004) ([@eliseomartelli] - [#38736]) ([prezzibenzina docs]) (breaking-change)
+- Remove prezzibenzina integration (ADR-0004) ([@eliseomartelli] - [#38736]) (breaking-change)
- Add Ecobee services ([@hudcap] - [#38749]) ([ecobee docs])
- [RFC] Add Tag integration ([@dmulcahey] - [#38727]) ([default_config docs]) ([tag docs]) (new-integration)
- Update Flo config flow and associated tests ([@dmulcahey] - [#38722]) ([flo docs])
@@ -1379,8 +1730,8 @@ and `frontend_extra_html_url` are now removed.
- Cleanup Netatmo code ([@cgtobi] - [#38772]) ([netatmo docs])
- Add config flow to insteon component ([@teharris1] - [#36467]) ([insteon docs])
- Bump androidtv to 0.0.49 ([@JeffLIrion] - [#38778]) ([androidtv docs])
-- Bump actions/setup-python from v2.1.1 to v2.1.2 (dependabot - [#38780])
-- Bump actions/upload-artifact from v2.1.3 to v2.1.4 (dependabot - [#38779])
+- Bump actions/setup-python from v2.1.1 to v2.1.2 (@dependabot - [#38780])
+- Bump actions/upload-artifact from v2.1.3 to v2.1.4 (@dependabot - [#38779])
- Remove Netatmo HomeKit discovery method ([@cgtobi] - [#38770]) ([netatmo docs])
- Add roon media player integration ([@pavoni] - [#37553]) ([roon docs]) (new-integration)
- Unsubscribe ozw listeners ([@MartinHjelmare] - [#38787]) ([ozw docs])
@@ -1438,7 +1789,7 @@ and `frontend_extra_html_url` are now removed.
- Make check-executables-have-shebangs manual ([@emontnemery] - [#38980])
- Bump python-openzwave-mqtt to 1.0.5 ([@cgarwood] - [#38984]) ([ozw docs])
- Allow empty cast media_player config ([@emontnemery] - [#38971]) ([cast docs])
-- Bump codecov/codecov-action from v1.0.12 to v1.0.13 (dependabot - [#38991])
+- Bump codecov/codecov-action from v1.0.12 to v1.0.13 (@dependabot - [#38991])
- Fix time trigger test ([@pnbruckner] - [#38988]) ([homeassistant docs])
- Bump pysuez to 0.1.19 ([@ooii] - [#38998]) ([suez_water docs])
- Add triggers for the Tag component ([@dmulcahey] - [#39004]) ([tag docs])
@@ -1567,17 +1918,17 @@ and `frontend_extra_html_url` are now removed.
- Wait before sending MQTT birth message ([@emontnemery] - [#39120]) ([mqtt docs])
- Ensure unique ids are generated for surepetcare ([@ctalkington] - [#39196]) ([surepetcare docs])
- Add HomeKit Controller heater-cooler devices ([@vfreex] - [#38979]) ([homekit_controller docs])
-- Remove yr integration after a request from yr.no ([@Danielhiversen] - [#39247]) ([yr docs]) (breaking-change)
+- Remove yr integration after a request from yr.no ([@Danielhiversen] - [#39247]) (breaking-change)
- Update homeassistant base image 8.3.0 ([@pvizeli] - [#39245])
- Subscribe to state change events only if the template has entities ([@bdraco] - [#39188]) ([template docs])
- Ensure the context is passed to group changes ([@bdraco] - [#39221]) ([group docs])
-- Support reloading the universal platform ([@bdraco] - [#39248]) ([helpers docs]) ([template docs]) ([universal docs])
+- Support reloading the universal platform ([@bdraco] - [#39248]) ([template docs]) ([universal docs])
- Ensure template tracking can recover after the template generates an exception ([@bdraco] - [#39256])
- Implement local discovery of Smappee series-2 devices and improvements ([@bsmappee] - [#38728]) ([smappee docs])
- Add api to reload config entries ([@bdraco] - [#39068]) ([config docs])
-- Add the ability to reload light/cover groups from yaml ([@bdraco] - [#39250]) ([group docs]) ([helpers docs]) ([template docs]) ([universal docs])
+- Add the ability to reload light/cover groups from yaml ([@bdraco] - [#39250]) ([group docs]) ([template docs]) ([universal docs])
- Rename entity base class for HMIPC ([@SukramJ] - [#39243]) ([homematicip_cloud docs])
-- Add the ability to reload the rest platforms from yaml ([@bdraco] - [#39257]) ([group docs]) ([helpers docs]) ([rest docs]) ([template docs]) ([universal docs])
+- Add the ability to reload the rest platforms from yaml ([@bdraco] - [#39257]) ([group docs]) ([rest docs]) ([template docs]) ([universal docs])
- Add the ability to reload command_line platforms from yaml ([@bdraco] - [#39262]) ([command_line docs]) ([group docs]) ([rest docs]) ([template docs]) ([universal docs])
- Add the ability to reload filter platforms from yaml ([@bdraco] - [#39267]) ([filter docs])
- Allow disabling integrations in manifest, block uuid package being installed and disable ezviz ([@balloob] - [#38444]) ([ezviz docs]) (breaking-change)
@@ -1629,7 +1980,7 @@ and `frontend_extra_html_url` are now removed.
- Ensure we always fire time pattern changes after microsecond 0 ([@bdraco] - [#39302])
- Update time triggers to use async_track_state_change_event ([@bdraco] - [#39338]) ([homeassistant docs])
- Add the ability to reload generic platforms from yaml ([@bdraco] - [#39289]) ([generic docs])
-- Add the ability to reload homekit from yaml ([@bdraco] - [#39326]) ([helpers docs]) ([homekit docs])
+- Add the ability to reload homekit from yaml ([@bdraco] - [#39326]) ([homekit docs])
- Allow exposing domains in cloud ([@balloob] - [#39216]) ([cloud docs])
- Add description of what caused an automation trigger to fire ([@pnbruckner] - [#39251]) ([arcam_fmj docs]) ([automation docs]) ([geo_location docs]) ([homeassistant docs]) ([kodi docs]) ([litejet docs]) ([mqtt docs]) ([sun docs]) ([template docs]) ([webhook docs]) ([zone docs])
- Add support for reloading min_max from yaml ([@bdraco] - [#39327]) ([min_max docs])
@@ -2057,6 +2408,12 @@ and `frontend_extra_html_url` are now removed.
- Fix missing f from f-strings in cast integration ([@frenck] - [#40144]) ([cast docs]) (beta fix)
- Fix local media browser source conflicting with local www folder ([@frenck] - [#40151]) ([media_source docs]) (beta fix)
- Update frontend to 20200916.0 ([@bramkragten] - [#40153]) ([frontend docs]) (beta fix)
+- Check mpd time type before splitting it ([@ctalkington] - [#40139]) ([mpd docs]) (beta fix)
+- Fix luci device_tracker not reliably reporting home/away state ([@cagnulein] - [#40160]) ([luci docs]) (beta fix)
+- Update pyhaversion to 3.4.2 ([@ludeeus] - [#40161]) ([version docs]) (beta fix)
+- Updated frontend to 20200917.1 ([@bramkragten] - [#40170]) ([frontend docs]) (beta fix)
+- Fix editing tags only get isoformat from datetime ([@bramkragten] - [#40174]) ([tag docs]) (beta fix)
+- Add missing conext preservation to bayesian and universal ([@bdraco] - [#40178]) ([bayesian docs]) ([universal docs]) (beta fix)
@@ -2814,10 +3171,16 @@ and `frontend_extra_html_url` are now removed.
[#40130]: https://github.com/home-assistant/core/pull/40130
[#40131]: https://github.com/home-assistant/core/pull/40131
[#40132]: https://github.com/home-assistant/core/pull/40132
+[#40139]: https://github.com/home-assistant/core/pull/40139
[#40140]: https://github.com/home-assistant/core/pull/40140
[#40144]: https://github.com/home-assistant/core/pull/40144
[#40151]: https://github.com/home-assistant/core/pull/40151
[#40153]: https://github.com/home-assistant/core/pull/40153
+[#40160]: https://github.com/home-assistant/core/pull/40160
+[#40161]: https://github.com/home-assistant/core/pull/40161
+[#40170]: https://github.com/home-assistant/core/pull/40170
+[#40174]: https://github.com/home-assistant/core/pull/40174
+[#40178]: https://github.com/home-assistant/core/pull/40178
[@2Fake]: https://github.com/2Fake
[@Adminiuga]: https://github.com/Adminiuga
[@ArdaSeremet]: https://github.com/ArdaSeremet
@@ -2877,6 +3240,7 @@ and `frontend_extra_html_url` are now removed.
[@brg468]: https://github.com/brg468
[@bruxy70]: https://github.com/bruxy70
[@bsmappee]: https://github.com/bsmappee
+[@cagnulein]: https://github.com/cagnulein
[@caronc]: https://github.com/caronc
[@cgarwood]: https://github.com/cgarwood
[@cgtobi]: https://github.com/cgtobi
@@ -3041,7 +3405,7 @@ and `frontend_extra_html_url` are now removed.
[flo docs]: /integrations/flo/
[freebox docs]: /integrations/freebox/
[frontend docs]: /integrations/frontend/
-[generic docs]: /integrations/generic/
+[generic docs]: /integrations/generic_ip_camera/
[generic_thermostat docs]: /integrations/generic_thermostat/
[geo_location docs]: /integrations/geo_location/
[gios docs]: /integrations/gios/
@@ -3052,7 +3416,6 @@ and `frontend_extra_html_url` are now removed.
[growatt_server docs]: /integrations/growatt_server/
[hangouts docs]: /integrations/hangouts/
[hassio docs]: /integrations/hassio/
-[helpers docs]: /integrations/helpers/
[history_stats docs]: /integrations/history_stats/
[hive docs]: /integrations/hive/
[hlk_sw16 docs]: /integrations/hlk_sw16/
@@ -3090,8 +3453,8 @@ and `frontend_extra_html_url` are now removed.
[lovelace docs]: /integrations/lovelace/
[luci docs]: /integrations/luci/
[marytts docs]: /integrations/marytts/
-[media_finder docs]: /integrations/media_finder/
-[media_manager docs]: /integrations/media_manager/
+[media_finder docs]: /integrations/media_source/
+[media_manager docs]: /integrations/image/
[media_player docs]: /integrations/media_player/
[media_source docs]: /integrations/media_source/
[mediaroom docs]: /integrations/mediaroom/
@@ -3137,7 +3500,6 @@ and `frontend_extra_html_url` are now removed.
[plugwise docs]: /integrations/plugwise/
[poolsense docs]: /integrations/poolsense/
[powerwall docs]: /integrations/powerwall/
-[prezzibenzina docs]: /integrations/prezzibenzina/
[progettihwsw docs]: /integrations/progettihwsw/
[pvpc_hourly_pricing docs]: /integrations/pvpc_hourly_pricing/
[qvr_pro docs]: /integrations/qvr_pro/
@@ -3235,7 +3597,6 @@ and `frontend_extra_html_url` are now removed.
[xmpp docs]: /integrations/xmpp/
[yandex_transport docs]: /integrations/yandex_transport/
[yeelight docs]: /integrations/yeelight/
-[yr docs]: /integrations/yr/
[zeroconf docs]: /integrations/zeroconf/
[zha docs]: /integrations/zha/
[zone docs]: /integrations/zone/
diff --git a/source/images/blog/2020-09-0.115/add-card-by-entity-confirmation.png b/source/images/blog/2020-09-0.115/add-card-by-entity-confirmation.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad951240b247b1b82fe7e3fb44432ebf946c1361
GIT binary patch
literal 57426
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
z
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