From 53913af89b4f152c0659888283df68b65134182f Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 15 Jul 2020 21:56:58 +0200 Subject: [PATCH] Beta release notes for 0.113 (#14001) Co-authored-by: Bram Kragten Co-authored-by: cogneato --- _config.yml | 6 +- source/_posts/2020-07-01-release-113.markdown | 1491 +++++++++++++++++ .../blog/2020-07-0.113/automation-modes.png | Bin 0 -> 14809 bytes .../images/blog/2020-07-0.113/script-name.png | Bin 0 -> 13754 bytes 4 files changed, 1494 insertions(+), 3 deletions(-) create mode 100644 source/_posts/2020-07-01-release-113.markdown create mode 100644 source/images/blog/2020-07-0.113/automation-modes.png create mode 100644 source/images/blog/2020-07-0.113/script-name.png diff --git a/_config.yml b/_config.yml index 911082b60aa..2c77e52e45d 100644 --- a/_config.yml +++ b/_config.yml @@ -100,9 +100,9 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 112 -current_patch_version: 5 -date_released: 2020-07-13 +current_minor_version: 113 +current_patch_version: 0 +date_released: 2020-07-22 # 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/2020-07-01-release-113.markdown b/source/_posts/2020-07-01-release-113.markdown new file mode 100644 index 00000000000..b0d7bd83f1f --- /dev/null +++ b/source/_posts/2020-07-01-release-113.markdown @@ -0,0 +1,1491 @@ +--- +layout: post +title: "0.113: Beta release notes" +description: "0.113: Beta release notes" +date: 2020-07-14 00:00:00 +date_formatted: "July 22, 2020" +author: Franck Nijhof +author_twitter: frenck +comments: true +categories: Release-Notes +og_image: /images/blog/2020-07-0.113/social.png +--- + + + +Beta release notes for 0.113.0 + +Please be sure to report issues on our GitHub issue tracker: + +Issues with core & integrations: +Issues with the frontend/UI: + +Issues introduced in this beta, are generally picked up with priority. + +## Introduction + +Another special, themed, release inbound! + +It seems like [@bdraco] is unstoppable; he just keeps going on improving +the performance of the Core. I truly admire him for the work he has been +delivering the past months, however, that is not the point of this release. +Sorry, [@bdraco]! + +This release is about: Automations & Scripts! Yes!!! + +A long, long time bug with automation triggering has been resolved, but not +only that, [@pnbruckner] went all-in by extending the automation/script engine +even more. + +Adding repeat, a chooser and running modes (with cool down possibilities as a side-effect). + +I've been playing with these features on my home already and I've +changed/improved quite a few things. For real, [@pnbruckner], thank you! + +Enjoy the release! + +../Frenck + +## Automations & Scripts + +This release brings changes to our automations and scripts. Before we start with +this all, please note, that the `action` part of an automation is a script +`sequence`. + +**So, all discussed below, apply to both scripts and automations.** + +Before diving in: All automation and script changes, have been driven by +[@pnbruckner]! It is awesome! Thanks! + +### Automations & Scripts: Bug fix + +There has been an issue with our automations for a long time already, which +you actually might have never noticed. It is kinda hard to explain, so this +needs an example. + +Consider the following automation: + +```yaml +automation: + - alias: "Example" + description: "On button press, turn on the light bulb for 10 seconds." + trigger: + - platform: state + entity_id: binary_sensor.button + to: "on" + action: + - service: light.turn_on + entity_id: light.bulb + - delay: + seconds: 10 + - service: light.turn_off + entity_id: light.bulb +``` + +This automation turns on a light bulb when the button is pressed, and after +10 seconds, it turns off the light bulb again. A fairly basic automation, which +does exactly what one would expect, except when a button is pressed twice. + +So it takes 10 seconds for the bulb to turn off, what if you press the button +again after 5 seconds? + +_Please, think about this for a moment..._ + +What actually happened before 0.113, is that the light bulb would turn off +immediately! Chances are, you didn't expect that. + +Let's explain this: So the first button push, turns on the light, and the delay +is active for 10 seconds. The second button push, done after 5 seconds, is +actually not handled, however, it does cause the delay of the first run to +cancel itself and continues to run the rest of the actions/sequence, +causing the light to turn off immediately! + +That bug, has been fixed. As of this release, the second button press wouldn't +do anything and the light will now turn off after 10 seconds, which the first +button push has triggered. + +### Automations & Scripts: Running modes + +With the above-mentioned bug fix, it now becomes possible to introduce new +running modes for both scripts and automations. It allows you to control +what happens if actions of a previous trigger are still running. + +Considering the light bulb example in the bug fix paraph above, it shows +the default mode: `single`, which means: Do not run and ignore the trigger +if a previous action of the same automation is still running. + +Besides the default `single` mode, the following modes are now available: + +Mode | Description +-|- +`single` | Do not start a new run, if running already. +`restart` | Start a new run, after stopping the previous run. +`queued` | Start a new run after all previous runs complete. +`parallel` | Start a new, independent, run in parallel with previous runs. + +

+Automation/script running modes visual explained. +Automation/script running modes visual explained. +

+ +For the queued and parallel modes, an additional parameter `max` is available +to control the maximum number of runs that are awaiting each other. When +omitting this setting, it would default to 10. + +To clarify a little more, remember the first example in the bug fix paragraph +where the light bulb would turn on for 10 seconds after a button press? + +This would make every button press within the 10 seconds, restart the countdown +again: + +```yaml +automation: + - trigger: + - ... + mode: restart + action: + - ... +``` + +And this example, would turn on/off the light, for 10 seconds twice, if the +button was pressed after 5 seconds. + +```yaml +automation: + - trigger: + - ... + mode: queue + action: + - ... +``` + +The modes are also available for automations and scripts in the frontend UI: + +

+Screenshot of running modes in the frontend +Screenshot of running modes in the frontend. +

+ +This is a powerful feature, which allows you to control how automations +and scripts are run in ways you could not do before. + +More information about the running mode can be found the [automations][automation-mode] +and [scripts][scripts-mode] documentation. + +[automation-mode]: /docs/automation/#automation-modes +[scripts-mode]: /integrations/script#script-modes + +### Automations & Scripts: Repeats + +A brand new action is made to allow for repeating (also called loops) +part of your automations or scripts. + +The new repeat feature can be used in three different ways: + +- **Counted repeat**: Control how many times to repeat a sequence. +- **While loop**: Keep repeating as long the condition(s) is/are met. +- **Repeat until**: Runs at least once, and decides after that to repeat until the condition(s) is/are met. + +For example, this would spam your phone with the same message 10 times: + +```yaml +- alias: Send notification spam to phone + repeat: + count: 10 + sequence: + - service: notify.frenck + data: + message: Ding dong! Someone is at the door! +``` + +More information about repeats can be found in the [documentation][repeats]. + +[repeats]: /docs/scripts/#repeat-a-group-of-actions + +### Automations & Scripts: Chooser + +Got multiple automations for that single light to turn it on/off? Or multiple +automations/scripts to handle the different buttons on some remote? + +You can now combine them using a chooser. The chooser is able to pick the +first sequence that matches a condition, or if none match, run a default +sequence. + +This means each individual sequence in the chooser is paired with its own set +of conditions. + +```yaml +automation: + - alias: "Example" + description: "On button press, turn on the light bulb for 10 seconds." + trigger: + - platform: state + entity_id: + - binary_sensor.button1 + - binary_sensor.button2 + - binary_sensor.button3 + action: + - choose: + - conditions: + - condition: state + entity_id: binary_sensor.button1 + state: "on" + sequence: + - service: light.turn_on + entity_id: light.bulb + - conditions: + - condition: state + entity_id: binary_sensor.button2 + state: "on" + sequence: + - service: light.turn_off + entity_id: light.bulb + default: + - service: notify.frenck + data: + message: Some other unknown button was pressed! +``` + +In the above example, pushing button1, turns on the bulb; while button2 turns +it off again. The third button isn't handled by any of the conditions in +the chooser and the (optional) default is run instead. + +The chooser can be used as an `if`/`else` statement, where the `default` acts as +the else. Or even as `if`/`else if`/`else` statement as shown in the YAML +example above. + +More information about the chooser can be found in the [documentation][chooser]. + +[chooser]: /docs/scripts/#choose-a-group-of-actions + +### Automations & Scripts: Bonus! Cool down + +An often requested feature is to allow for a cool down time on an automation. +What that entails is setting a limiting the run of an automation or script +to a certain time frame. + +While this is not a feature specifically added or build, it can be achieved +now using the new run modes. + +```yaml +automation: + - alias: "Doorbell cool down" + description: "Prevent multiple message being send when spamming the doorbell." + mode: single # Which is the default + trigger: + - platform: state + state: binary_sensor.doorbell + to: "on" + action: + - service: notify.frenck + data: + message: Ding dong! Someone is at the door! + - delay: + seconds: 10 +``` + +The `single` run mode of this automation, combined with the last `delay` of 10 +seconds, prevents this automation from being ran more often than only once +every 10 seconds. This is ideal for things like a doorbell. + +## MDI icons updated + +It has taken some time for us to upgrade to the newest version of +[Material Design Icons][mdi], 5.3.45, there was a reason for that, +version [5.0.45][mdi-upgrade] contains a lot of breaking changes. + +We wanted to handle these well, so it took some time. + +A lot of icons are renamed, and some are removed. In this release, we included +all new, and all removed icons and we made sure the new and the old name work. + +If you use an icon that is renamed or removed we will show a warning in the log, +in version 0.115,this conversion path will be removed and removed icons and +old names no longer work. + +So make sure to check your logs if you need to adjust any of your used MDI +icons. + +Most of the removed MDI icons can be found in [Simple icons][simple-icons], +which is available as a [custom integration][hass-simpleicons]. + +Please note: It is possible that custom integrations (also known as +custom components) use deprecated icons. These can throw warnings that need +to be addressed in the custom integration. + +[mdi]: https://dev.materialdesignicons.com +[mdi-upgrade]: https://dev.materialdesignicons.com/upgrade#4.9.95-to-5.0.45 +[simple-icons]: https://simpleicons.org/ +[hass-simpleicons]: https://github.com/vigonotion/hass-simpleicons + +## Script and Scene editor updates + +The UI to edit or create a script has been updated, besides support for the +new running mode and you can give your scripts a custom icon and ID from the UI. + +Especially the naming is helpful, you no longer have to search your states for +a long numeric entity id that matches your script. + +

+Screenshot of a script name, icon and run mode. +Screenshot of a script name, icon and run mode. +

+ +The support for setting a custom icon, is also added to the scenes editor. + +## More speed optimizations + +After, the well-received, speed optimization done in the 0.111 & 0.112 releases, +the sega towards improving resource usage and responsiveness of the platform +continues. + +This time we have both [@bdraco] and [@pvizeli] to thank for some great +optimizations that will reduce the CPU usage of Home Assistant. + +First of all, if you are running a Home Assistant OS, Container or +Supervised installation, this your Home Assistant instance will run on +Python 3.8. No action from your end is needed for this. + +It is not just a normal Python version, but [@pvizeli] has worked on a highly +optimized Python version for Home Assistant, hitting performance improvements +that can reach up to 40%! He wrote a more [technical article about this on +our developers blog][python-speed]. + +Then [@bdraco] did his part on adding some improvements to the Core. He +changed a lot of handling around event & state listeners, in such a way +less things trigger unneeded, which reduces processing when states change. + +This lowers CPU usage and improves response speed when you have many state +changes happening in a short time span, or when having a lot of automations. + +Also, all time listeners now have microsecond precision as they are scheduled +on the internal event loop, instead of the previous situation when it relied on +the internal clock that triggered every second. + +This release should drastically lower the CPU usage of Home Assistant for +most installations. + +[python-speed]: https://developers.home-assistant.io/blog/2020/07/13/alpine-python + +## Other noteworthy changes + +- Philips Hue groups can now be turned on/off in the integration options via the UI. +- The [OpenZWave][ozw docs] (beta) got 3 new services. Two of those are for + setting user codes on locks. The other allows for setting device-specific + configuration parameters. +- After a moment of absence, [@yosilevy](https://github.com/yosilevy) is back! + He has been the one fixing all kinds of RTL issues we had in Home Assistant, + with his return, this release is full of RTL tweaks again! + +## New Integrations + +- Create PoolSense integration ([@haemishkyd] - [#35561]) ([poolsense docs]) +- Add Dexcom Integration ([@gagebenne] - [#33852]) ([dexcom docs]) +- Add new integration for Bond hub ([@prystupa] - [#37477]) ([bond docs]) + +## New Platforms + +- Add support for window covers to ozw integration ([@Michsior14] - [#37217]) ([ozw docs]) +- Support Fan domain in Bond integration ([@prystupa] - [#37703]) ([bond docs]) +- Updates to poolsense integration ([@haemishkyd] - [#37613]) ([poolsense docs]) +- Apply code quality updates to poolsense ([@haemishkyd] - [#37781]) ([poolsense docs]) +- Add basic support for lights in bond integration ([@prystupa] - [#37802]) ([bond docs]) +- Add support for generic device (switch) to bond integration ([@prystupa] - [#37837]) ([bond docs]) + +## Integrations now available to set up from the UI + +The following integrations are now available via the Home Assistant UI: + +- [Syncthru][syncthru docs], done by [@scop] +- [SmartHab][smarthab docs], done by [@outadoc] + +## If you need help... + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/core/issues). Make sure to fill in all fields of the issue template. + + + +## Breaking Changes + +Below is a listing of the breaking change for this release, per subject or +integration. Click on one of those to read more about the breaking change +for that specific item. + +
+ Minimum Python version 3.7.1 +

+ +The minimum required Python version has been bumped from Python 3.7.0 to 3.7.1. + +([@bdraco] - [#37184]) + +

+
+ +
+ Automations/Scripts +

+ +The way automations behaved when they were triggered while "suspended" in a +delay or wait_template step from a previous trigger event was unexpected. If +this happened the suspended step would be aborted and the automation would +continue the action sequence with the following step. + +This change removes support for that "legacy" behavior, in both automations +and scripts (although scripts were less affected by this.) + +It also provides new "modes" of operation for these action sequences, namely +`single`, `restart`, `queued` & `parallel`. To minimize the impact on existing +automations and scripts, the default mode is `single`. + +In addition, for `queued` & `parallel` modes there is now a new configuration +option -- `max` -- that controls the maximum number of "runs" that can be +running and/or queued up at a time. + +And lastly, the delay step is now much more precise, and supports delays of +less than one second. + +([@pnbruckner] - [#37729]) ([automation docs]) ([script docs]) + +

+
+ +
+ Templates +

+ +Most of the template platforms would check for extract_entities failing to +extract entities and avoid setting up a state change listener for "all" after +extract_entities had warned that it could not extract the entities and updates +would need to be done manually. + +This protection has been extended to all template platforms. + +Alter the behavior of extract_entities to return the successfully extracted +entities if one or more templates fail extraction instead of returning "all" +and getting rejected by the platform itself. + +([@bdraco] - [#37831]) ([template docs]) + +

+
+ +
+ Relative time +

+ +Previously, the value used for displaying a relative time was floored before +being interpolated into the localized string, leading to situations like these: + +- 47 hours ago is displayed as "1 day ago" instead of "2 days ago" +- 13 days in the future is displayed as "in 1 week" + +This change modifies the `relativeTime` function to use `Math.round` instead of +`Math.floor` so the output more closely matches the actual relative time of the +input. + +([@GMTA] - [#37125]) + +

+
+ +
+ MQTT +

+ +Birth and will messages are now published by default. + +MQTT birth message defaults to:`{"topic": "homeassistant/status", "payload": "online"}` +MQTT will message defaults to: `{"topic": "homeassistant/status", "payload": "offline"}` + +MQTT will published also on clean connect from broker. + +([@emontnemery] - [#37371]) ([mqtt docs]) + +

+
+ +
+ ZHA with Hue remotes +

+ +This update does contains a breaking change if you are using Device Triggers +for the Hue Dimmer models RWL020 and RWL021. + +We decided to configure these to use the extended manufacturer support so that +we can support 4 triggers per button. + +If you were previously using Device Triggers in automations for these devices +you will have reconfigure the device leveraging the button on the device page +or remove and re-pair the device after updating Home Assistant. + +Then you will have to update the automations to use the new triggers. + +Sorry for the inconvenience. + +([@dmulcahey] - [#37859]) ([zha docs]) + +

+
+ +
+ Philips Hue +

+ +Configuring a Hue bridge via YAML configuration is now deprecated. Your current +YAML configuration is imported and can be safely removed after upgrading. + +Adding Hue bridges manually by IP can now be done via the UI. Changing allowing +Hue groups or unreachable Hue bulb is now managed by clicking the options button +on the Hue integration in the UI. + +([@frenck] - [#37268]) ([hue docs]) + +

+
+ +
+ InfluxDB +

+ +Support for glob matching is added with InfluxDB filters. + +InfluxDB was not using the common filtering logic shared by `recorder`, +`logbook`, `homekit`, etc. and as a result had filtering logic that is +inconsistent with the filtering logic of every other recorder-like component. +This has been corrected causing the following changes in filtering logic. + +Same domain specified in both include and exclude: + +- Previous behavior: All entities in that domain excluded +- New behavior: All entities of that domain included unless entity is excluded + by ID or by glob + +Same entity ID specified in both include and exclude: + +- Previous behavior: Entity excluded +- New behavior: Entity included + +Filtering has 1+ exclude domains, 0 include domains, and 1+ include entity ID's specified: + +- Previous behavior: All entities not specifically listed by ID were excluded +- New behavior: All entities not specifically excluded by either domain or ID + are included. + +([@mdegat01] - [#37069]) ([influxdb docs]) + +

+
+ +
+ Transmission +

+ +For all torrents sensors (e.g., `active_torrents` or `started_torrents`) order +of the content of the `torrent_info` attribute has changed to `oldest first` +which means older torrents will appear first in the list. + +Also a default limit of 10 items is also applied to the list to avoid very long +strings stored in the recorder database. Both configuration options, `order` and +`limit`, can be adjusted in the integrations UI. + +([@zhulik] - [#35411]) ([transmission docs]) + +

+
+ +
+ Logitech Harmony Hub +

+ +New devices and activities are visible as harmony attributes. The current +activity is now updated as soon as the remote starts the activity change +instead of being delayed until the activity is finished setting up. + +([@bdraco] - [#37559]) ([harmony docs]) + +

+
+ +
+ Xiaomi Miio +

+ + Fan and remote components now have unique LED strings. + If you had previously set your automation calls from + "**fan**_set_led_on/off" to "**remote**_set_led_on/off", + you will now need to set those back to "fan". + + ([@alexhardwicke] - [#37605]) ([xiaomi_miio docs]) + +

+
+ +
+ Samsung SyncThru Printer +

+ +Syncthru configuration is now done through the integrations UI page. + +([@scop] - [#36690]) ([discovery docs]) ([syncthru docs]) +

+
+ +
+ Slack +

+ +Re-added the ability to use remote files (by URL) in Slack messages. + +The data schema for sending files in Slack messages has changed, so be sure to +update any Slack-related service calls with the new schema as listed in +the Slack integration documentation. + +([@bachya] - [#37161]) ([slack docs]) + +

+
+ +
+ RFXCOM RFXtrx +

+ +- Configuration of rfxtrx devices now happens through the Integration UI page. +- Configuration of entity name must now be done inside home assistant +- Multiple entities may be generated for a single device +- The events signalled from entity id's are removed in favor of events from an integration level. +- The events format has changed. + +([@elupus] - [#37742] [#37565]) ([rfxtrx docs]) + +

+
+ +
+ Fibaro +

+ +Fibaro Home Center switches that control light sources will now correctly be configured as Light entities (instead of Switch entities). This causes those entities IDs to change from `switch`. to `light`. If this is not desirable, change the device role in Home Center to something that isn't a light source (e.g., Other device). + +([@danielpervan] - [#37690]) ([fibaro docs]) + +

+
+ +
+ Frontend: Deprecated HTML imports +

+ +`extra_html_url` is now deprecated and support will be removed in 0.115. +You can switch to the new `extra_module_url` or `extra_js_url_es5` by changing +your imported file to JavaScript. + +With the start of custom components, you would import a HTML file for your +component instead of JavaScript. That's why we have always supported importing +extra HTML in the frontend and custom panels. + +This has been deprecated and superseded by ES modules since some time and has + no support anymore in browsers. We have a polyfill in place to still support + this, but we are going to remove this. + +In version 0.115 we will remove the ability to import HTML, you can use ES +modules as a replacement. + +([@bramkragten] - [#37843]) ([frontend docs]) + +

+
+ +## All changes + +
+ Click to see all changes! + +- Zerproc cleanup ([@emlove] - [#37072]) ([zerproc docs]) +- Add concept of allowed external URLs to config ([@bachya] - [#36988]) +- Add legacy polling option for Amcrest motion detection ([@pnbruckner] - [#36955]) ([amcrest docs]) +- Improve setup ([@balloob] - [#37075]) +- Add worldclock custom format ([@InduPrakash] - [#36157]) ([worldclock docs]) +- Bump version to 0.113.0dev0 ([@frenck] - [#37071]) +- Migrate doorbird to use new logbook platform ([@bdraco] - [#37097]) ([doorbird docs]) +- Improve isoformat timestamp performance for full states ([@bdraco] - [#37105]) ([history docs]) +- Plex tests cleanup and additions ([@jjlawren] - [#37117]) ([plex docs]) +- Ensure doorbird events can be filtered by entity_id ([@bdraco] - [#37116]) ([doorbird docs]) +- Upgrade sqlalchemy to 1.3.18 ([@frenck] - [#37123]) ([recorder docs]) ([sql docs]) +- Add optimistic Guardian switch updating ([@bachya] - [#37141]) ([guardian docs]) +- Update remote_rpi_gpio switch parent ([@Kdemontf] - [#37136]) ([remote_rpi_gpio docs]) +- Improve Smappee integration ([@bsmappee] - [#37087]) ([smappee docs]) +- Add support for glob matching in InfluxDB filters ([@mdegat01] - [#37069]) ([influxdb docs]) (breaking-change) +- Update Plex tests to mock websockets ([@jjlawren] - [#37147]) ([plex docs]) +- add phillips remote cluster ([@dmulcahey] - [#37172]) ([zha docs]) +- Improve scalability of state change event routing ([@bdraco] - [#37174]) ([automation docs]) +- Ensure all async_track_state_change_event callbacks run if one throws ([@bdraco] - [#37179]) +- Fixup rfxtrx tests to at least run ([@elupus] - [#37186]) ([rfxtrx docs]) +- Attempt to set unique id of rfxtrx device ([@elupus] - [#37159]) ([rfxtrx docs]) +- Bump aioguardian ([@bachya] - [#37188]) ([guardian docs]) +- Add debug output for invalid service call data ([@pnbruckner] - [#37171]) +- Limit and sort transmission torrents_info attribute ([@zhulik] - [#35411]) ([transmission docs]) (breaking-change) +- Move transmission limit and order config options to the options flow ([@zhulik] - [#37198]) ([transmission docs]) +- Sensors sometimes are created without event ([@elupus] - [#37205]) ([rfxtrx docs]) +- Correct typo in input_number UI text ([@davet2001] - [#37208]) ([input_number docs]) +- Silence spurious warning when HomeKit is already running ([@bdraco] - [#37199]) ([homekit docs]) +- Additional testing for InfluxDB and some quality improvements ([@mdegat01] - [#37181]) ([influxdb docs]) +- Add first unit test to config flow for Plum Lightpad ([@prystupa] - [#37183]) ([plum_lightpad docs]) +- Ensure homekit state changed listeners are unsubscribed on reload ([@bdraco] - [#37200]) ([homekit docs]) +- Use eventloop for scheduling ([@bdraco] - [#37184]) ([asuswrt docs]) ([generic_thermostat docs]) (breaking-change) +- Add mdegat01 as code owner for InfluxDB ([@mdegat01] - [#37227]) ([influxdb docs]) +- Move Guardian services to entity platform services ([@bachya] - [#37189]) ([guardian docs]) +- Use shared zeroconf for discovery netdisco ([@bdraco] - [#37237]) ([discovery docs]) +- Register 'androidtv.learn_sendevent' service ([@JeffLIrion] - [#35707]) ([androidtv docs]) +- Add support for window covers to ozw integration ([@Michsior14] - [#37217]) ([ozw docs]) (new-platform) +- Remove Hue configurator demo from demo integration ([@frenck] - [#37250]) ([demo docs]) +- Bump pychromecast to 7.0.1 ([@emontnemery] - [#37225]) ([cast docs]) +- Changed FilterTest namedtuples to dataclasses ([@mdegat01] - [#37252]) ([apache_kafka docs]) ([azure_event_hub docs]) ([google_pubsub docs]) ([prometheus docs]) +- Enhance script integration to use new features in script helper ([@pnbruckner] - [#37201]) ([script docs]) +- Refactor Influx logic to reduce V1 vs V2 code paths ([@mdegat01] - [#37232]) ([influxdb docs]) +- Cache checking for entity exposure in emulated_hue ([@bdraco] - [#37260]) ([emulated_hue docs]) +- Add missed call sensor to Freebox ([@Quentame] - [#36895]) ([freebox docs]) +- Add humidifier support to google_assistant ([@Shulyaka] - [#37157]) ([google_assistant docs]) +- Improve support for homematic garage covers ([@guillempages] - [#35350]) ([homematic docs]) +- Create PoolSense integration ([@haemishkyd] - [#35561]) ([poolsense docs]) (new-integration) +- Add media_stop for volumio integration ([@divanikus] - [#37211]) ([volumio docs]) +- Clean up 'androidtv.learn_sendevent' service ([@JeffLIrion] - [#37276]) ([androidtv docs]) +- Add a service for setting the timer to tado water heaters ([@jfearon] - [#36533]) ([tado docs]) +- Add constant for PlatformNotReady wait time to use in tests ([@mdegat01] - [#37266]) ([influxdb docs]) +- Add Dexcom Integration ([@gagebenne] - [#33852]) ([dexcom docs]) (new-integration) +- Bump pynws-1.2.1 for NWS ([@MatthewFlamm] - [#37304]) ([nws docs]) +- Limit entity platform entity service to same integration ([@balloob] - [#37313]) +- Add Hue manual bridge config flow + options flow ([@frenck] - [#37268]) ([hue docs]) (breaking-change) +- Fix Influx V1 test query ([@mdegat01] - [#37309]) ([influxdb docs]) +- Fix flapping flux tests ([@bdraco] - [#37346]) ([flux docs]) +- Add humidifier support to homekit ([@Shulyaka] - [#37207]) ([homekit docs]) +- Fix flapping gdacs tests ([@bdraco] - [#37363]) ([gdacs docs]) +- Upgrade pre-commit to 2.6.0 ([@frenck] - [#37339]) +- Add ozw garage door barrier support ([@firstof9] - [#37316]) ([ozw docs]) +- Improve unifi device tracker performance ([@bdraco] - [#37308]) ([unifi docs]) +- Fix ozw garage door methods ([@MartinHjelmare] - [#37374]) ([ozw docs]) +- Modified Influx tests to mock test queries with accurate output ([@mdegat01] - [#37315]) ([influxdb docs]) +- Remove my codeownership over things I dont use anymore ([@robbiet480] - [#37401]) +- Convert rfxtrx tests to pytest async tests and re-enable ([@elupus] - [#37206]) ([rfxtrx docs]) +- Add GitHub Actions for CI ([@frenck] - [#37419]) +- Reduce time to run zha discover tests ([@bdraco] - [#37424]) ([zha docs]) +- Ensure async_setup is mocked in geonetnz intergration tests ([@bdraco] - [#37426]) ([geonetnz_quakes docs]) ([geonetnz_volcano docs]) +- Add helpers.location.coordinates ([@eifinger] - [#37234]) +- Replace asynctest with tests.async_mock ([@balloob] - [#37428]) +- Prevent verisure lock from looping forever and sleeping in test ([@bdraco] - [#37425]) ([verisure docs]) +- Fix undesired power toggling ([@ktnrg45] - [#37427]) ([ps4 docs]) +- Fix unmocked setup in garmin_connect test ([@bdraco] - [#37429]) ([garmin_connect docs]) +- Fix unmocked setup in ipp tests ([@bdraco] - [#37430]) ([ipp docs]) +- Stub out ecobee aux heat services ([@balloob] - [#37423]) ([ecobee docs]) +- Fix building of Python Wheels ([@frenck] - [#37433]) +- Mock setup in sonarr config flow tests ([@bdraco] - [#37432]) ([sonarr docs]) +- Add more unit tests for plum_lightpad ([@prystupa] - [#37275]) ([plum_lightpad docs]) +- Add Plugwise zeroconf discovery ([@bouwew] - [#37289]) ([plugwise docs]) +- Mock setup in directv config flow tests ([@ctalkington] - [#37439]) ([directv docs]) ([directv docs]) +- Apply some suggestions from poolsense code review ([@ctalkington] - [#37440]) ([poolsense docs]) +- Fix extremely minor typo: Cosumption -> Consumption ([@smugleafdev] - [#37322]) ([solaredge docs]) +- Fix DarkSky spamming the log ([@RogerSelwyn] - [#37421]) ([darksky docs]) +- Upgrade python-join-api to allow user to specify actions ([@nkgilley] - [#37394]) ([joaoapps_join docs]) +- Use a more detailed battery icon for Tesla cars ([@jberstler] - [#37154]) ([tesla docs]) +- Avoid selecting the states created column for history ([@bdraco] - [#37450]) ([history docs]) +- Use device class to isolate tesla battery icon ([@ctalkington] - [#37446]) ([tesla docs]) +- Remove pytest-xdist from tox now that it's in requirements_test.txt ([@scop] - [#37455]) +- Fix Plugwise zeroconf discovery formatting ([@CoMPaTech] - [#37457]) ([plugwise docs]) +- Xiaomi Gateway subdevice support & AqaraHT + SensorHT devices ([@starkillerOG] - [#36539]) ([xiaomi_miio docs]) +- Fix entity_component test flapping ([@bdraco] - [#37445]) +- Fix flapping geo_json_events tests ([@frenck] - [#37471]) ([geo_json_events docs]) +- Fix geonetnz_quakes test flapping ([@emontnemery] - [#37473]) ([geonetnz_quakes docs]) +- Call sync function from async context ([@timvancann] - [#37324]) ([avri docs]) +- Support empty output of MQTT binary_sensor value_template ([@emontnemery] - [#37420]) ([mqtt docs]) +- Publish birth and will messages by default ([@emontnemery] - [#37371]) ([mqtt docs]) (breaking-change) +- Fix flapping google_assistant tests ([@frenck] - [#37480]) ([google_assistant docs]) +- Add humidifier support to emulated_hue ([@Shulyaka] - [#37110]) ([emulated_hue docs]) +- GitHub Actions: Add hadolint problem matcher ([@frenck] - [#37494]) +- GitHub Actions: Add codespell problem matcher ([@frenck] - [#37487]) +- GitHub Actions: Add json problem matcher ([@frenck] - [#37490]) ([hue docs]) +- GitHub Actions: Add pylint problem matcher ([@frenck] - [#37463]) +- GitHub Actions: Add check executables problem matcher ([@frenck] - [#37488]) +- GitHub Actions: Add mypy problem matcher ([@frenck] - [#37485]) +- GitHub Actions: Add yamllint problem matcher ([@frenck] - [#37468]) ([ads docs]) +- GitHub Actions: Add flake8 problem matcher ([@frenck] - [#37465]) +- GitHub Actions: Show diff on failure ([@frenck] - [#37461]) +- Fix flapping geonetnz_volcano test ([@bdraco] - [#37497]) ([geonetnz_volcano docs]) +- Upgrade flake8 to 3.8.3 ([@scop] - [#37501]) +- Use package constraints in tox lint ([@scop] - [#37500]) +- GitHub Actions: Add pytest problem matcher ([@frenck] - [#37508]) ([toon docs]) +- Enhance automation integration to use new features in script helper ([@pnbruckner] - [#37479]) ([automation docs]) ([script docs]) +- Do not count netdata cleared and undefined alarms as warnings ([@jurgenhaas] - [#37505]) ([netdata docs]) +- Bump env_canada to 0.1.0 ([@michaeldavie] - [#37483]) ([environment_canada docs]) +- Prebake common history queries ([@bdraco] - [#37496]) ([history docs]) +- Add prometheus metric naming guidelines ([@knyar] - [#37149]) ([prometheus docs]) +- Use the main event loop for homekit ([@bdraco] - [#37441]) ([homekit docs]) +- Add denonavr solution tip for connection_error ([@starkillerOG] - [#37405]) ([denonavr docs]) +- Fix Datadog boolean metrics ([@shermdog] - [#37273]) ([datadog docs]) +- Fix flapping demo geo_location test ([@bdraco] - [#37516]) ([demo docs]) +- Standardise geniusheub error levels ([@RogerSelwyn] - [#37512]) ([geniushub docs]) +- Standardis asuswrt error message level ([@RogerSelwyn] - [#37515]) ([asuswrt docs]) +- Convert Android TV integration to async ([@JeffLIrion] - [#37510]) ([androidtv docs]) +- Add config flow + async support for SmartHab integration ([@outadoc] - [#34387]) ([smarthab docs]) +- Tado climate entity timer service ([@jfearon] - [#37472]) ([tado docs]) +- Use async_track_state_change_event for automation numeric_state ([@bdraco] - [#37255]) ([automation docs]) +- Fix xiaomi_miio error when no sensors present ([@starkillerOG] - [#37531]) ([xiaomi_miio docs]) +- Switch tests to use hass objects instead of direct ([@elupus] - [#37530]) ([rfxtrx docs]) +- Log lines do not end with a full stop ([@frenck] - [#37527]) +- Fix flake8 problem matcher to handle fatals as errors ([@frenck] - [#37536]) +- Transition Guardian to use a DataUpdateCoordinator ([@bachya] - [#37380]) ([guardian docs]) +- Switch rfxtrx to dispatcher ([@elupus] - [#37271]) ([rfxtrx docs]) +- Cleanup async_track_state_change and augment docstring ([@bdraco] - [#37251]) +- Add Amcrest audio_detected binary sensor ([@pnbruckner] - [#37486]) ([amcrest docs]) +- Add new integration for Bond hub ([@prystupa] - [#37477]) ([bond docs]) (new-integration) +- Switch homekit to use async_track_state_change_event ([@bdraco] - [#37253]) ([homekit docs]) +- Add missing manifest object to the check ([@ludeeus] - [#37535]) +- Add dependabot for automatic updates to GitHub Actions ([@frenck] - [#37550]) +- Bump actions/upload-artifact from v1 to v2.0.1 (dependabot - [#37555]) +- Bump codecov/codecov-action from v1 to v1.0.10 (dependabot - [#37556]) +- Strings capitalization consistency fixes ([@scop] - [#37454]) +- Protect loop set default executor ([@balloob] - [#37438]) +- Add optimistic mode to template switch ([@akloeckner] - [#31637]) ([template docs]) +- Mock setup in plex test to prevent CI failure ([@bdraco] - [#37590]) ([plex docs]) +- Ensure homekit accessory reset only affect the bridges with the accessory ([@bdraco] - [#37588]) ([homekit docs]) +- apply small feedback suggestions from a previous PR that is already merged ([@prystupa] - [#37551]) ([bond docs]) +- Bump voluptuous-serialize 2.4.0 ([@balloob] - [#37241]) +- Fix missing Plex account mocks in tests ([@jjlawren] - [#37591]) ([plex docs]) +- Update Rejseplanen rjpl to 0.3.6 ([@DarkFox] - [#37215]) ([rejseplanen docs]) +- Make devices and activities visible as harmony attributes ([@bdraco] - [#37559]) ([harmony docs]) (breaking-change) +- Upgrade debugpy to 1.0.0b12 ([@frenck] - [#37599]) ([debugpy docs]) +- Upgrade coverage to 5.2 ([@frenck] - [#37598]) +- Fix typos in Hue integration ([@frenck] - [#37597]) ([hue docs]) +- Add current temperature as separate sensor in Toon ([@frenck] - [#37336]) ([toon docs]) +- Add host names in esphome logs ([@TheLastGimbus] - [#37587]) ([esphome docs]) +- Fix sync/async and small improvements to forked_daapd ([@frenck] - [#37619]) ([forked_daapd docs]) +- Remove dead code from cast ([@frenck] - [#37620]) ([cast docs]) +- Fix acmeda syn/async cover methods ([@frenck] - [#37618]) ([acmeda docs]) +- Fix sync/async override in sms ([@frenck] - [#37621]) ([sms docs]) +- Switch what is used for unique identifier ([@elupus] - [#37581]) ([rfxtrx docs]) +- Change MediaPlayerDevice into MediaPlayerEntity ([@brefra] - [#37629]) ([pioneer docs]) +- Ozw climate fixes ([@marcelveldt] - [#37560]) ([ozw docs]) +- Bump aiohomekit to 0.2.41 ([@Jc2k] - [#37602]) ([homekit_controller docs]) +- Fix homekit test mocking missed in loop changeover ([@bdraco] - [#37628]) ([homekit docs]) +- Reduce log level of unknown discovered services ([@balloob] - [#37617]) ([discovery docs]) +- fix erroneous dependency used by Bond integration (simplejson to json) ([@prystupa] - [#37642]) ([bond docs]) +- Mark the example values as strings because that's what we expect ([@balloob] - [#37640]) ([alarm_control_panel docs]) +- Fix ozw entities cleanup on node removal ([@marcelveldt] - [#37630]) ([ozw docs]) +- bump pyvizio version ([@raman325] - [#37644]) ([vizio docs]) +- Add OZW support for set_config_parameter service ([@firstof9] - [#37523]) ([ozw docs]) +- Modify cast tests to setup via cast integration ([@emontnemery] - [#37256]) ([cast docs]) +- Give fan and remote components unique LED strings ([@alexhardwicke] - [#37605]) ([xiaomi_miio docs]) (breaking-change) +- Vizio: when checking new host against existing config entry hosts, make check hostname aware ([@raman325] - [#37397]) ([vizio docs]) +- Add preset modes to Touchline ([@pilehave] - [#36054]) ([touchline docs]) +- Updated influxdb-client dependency to 1.8.0 ([@mdegat01] - [#37396]) ([influxdb docs]) +- Check buckets/dbs for validity during Influx sensor startup ([@mdegat01] - [#37391]) ([influxdb docs]) +- Fix missing Guardian service strings ([@bachya] - [#37659]) ([guardian docs]) +- Apply more suggestions from bond code review ([@ctalkington] - [#37592]) ([bond docs]) +- Set MQTT sensor to state unavailable when value expires ([@emontnemery] - [#36609]) ([mqtt docs]) +- Convert syncthru to config flow and native SSDP discovery ([@scop] - [#36690]) ([discovery docs]) ([syncthru docs]) (breaking-change) +- Use "next_state" attr instead of "post_pending" for ArmDisarm trait ([@engrbm87] - [#37325]) ([google_assistant docs]) +- Add ozw usercode support ([@firstof9] - [#37390]) ([ozw docs]) +- OZW Usercodes update services.yaml with examples ([@firstof9] - [#37667]) ([ozw docs]) +- Add humidifier support to prometheus ([@Shulyaka] - [#37112]) ([prometheus docs]) +- Refactor Enocean part 1 ([@jduquennoy] - [#35927]) ([enocean docs]) +- Add back Netatmo public weather sensors ([@cgtobi] - [#34401]) ([netatmo docs]) +- Split handling and application of event ([@elupus] - [#37665]) ([rfxtrx docs]) +- Python 3.8 on core Container ([@pvizeli] - [#37677]) +- Detect lingering threads after tests ([@elupus] - [#37270]) +- Change audio sample rate for apple watch homekit camera ([@Harryjholmes] - [#37637]) ([homekit docs]) +- Round time values in get_age() to better approximate the actual age ([@GMTA] - [#37125]) (breaking-change) +- Add bond cover assumed state and local polling ([@prystupa] - [#37666]) ([bond docs]) +- Actually fix Guardian entity services ([@bachya] - [#37700]) ([guardian docs]) +- Revert "Updated influxdb-client dependency to 1.8.0" (#37396)" ([@mdegat01] - [#37697]) ([influxdb docs]) +- Upgrade foobot-async ([@balloob] - [#37706]) ([foobot docs]) +- Rewrite rfxtrx init logic to do away with global object ([@elupus] - [#37699]) ([rfxtrx docs]) +- bump tuyaha 0.0.7 ([@PaulAnnekov] - [#37709]) ([tuya docs]) +- Fix get profiles checking if has ptz capabilities ([@djpremier] - [#37176]) ([onvif docs]) +- Update influxdb-client dependency to 1.8.0, fix test write for InfluxDB v2 ([@bednar] - [#37710]) ([influxdb docs]) +- Fix loopenergy callback updating HA before the object is initialised ([@pavoni] - [#37650]) ([loopenergy docs]) +- Fix Hue homekit discovery ([@balloob] - [#37694]) ([hue docs]) +- Add new repeat loop for scripts and automations ([@pnbruckner] - [#37589]) ([automation docs]) ([script docs]) +- Add rfxtrx device classes to known types ([@elupus] - [#37698]) ([rfxtrx docs]) +- Re-add ability to use remote files (by URL) in Slack messages ([@bachya] - [#37161]) ([slack docs]) (breaking-change) +- Use the shared zeroconf instance for homekit_controller ([@bdraco] - [#37691]) ([homekit_controller docs]) +- Uninstall typing ([@balloob] - [#37735]) +- Remove legacy script mode and simplify remaining modes ([@pnbruckner] - [#37729]) ([automation docs]) ([script docs]) (breaking-change) +- Support Fan domain in Bond integration ([@prystupa] - [#37703]) ([bond docs]) (new-platform) +- Fix incorrect comparison of speed "off" by identity instead of by value ([@prystupa] - [#37738]) ([fan docs]) +- Refactor Bond integration to remove duplication ([@prystupa] - [#37740]) ([bond docs]) +- Updates to poolsense integration ([@haemishkyd] - [#37613]) ([poolsense docs]) (new-platform) +- Bump ADS to 3.1.3 ([@balloob] - [#37748]) ([ads docs]) +- Reference constraint files from requirement files ([@balloob] - [#37751]) +- Bump pyHS100 to 3.5.1 ([@balloob] - [#37749]) ([tplink docs]) +- Fix script queued mode typo ([@pnbruckner] - [#37759]) +- Upgrade bond-home to 0.0.9 ([@prystupa] - [#37764]) ([bond docs]) +- Bump teslajsonpy to 0.9.3. ([@alandtse] - [#37771]) ([tesla docs]) +- Significantly improve logging performance when no integrations are requesting debug level ([@bdraco] - [#37776]) ([logger docs]) +- Add Bond hub as a device for bond entities ([@prystupa] - [#37772]) ([bond docs]) +- Add generic unavailable and last_updated metrics for prometheus ([@esev] - [#37456]) ([prometheus docs]) +- Switch rfxtrx to integration level config ([@elupus] - [#37742]) ([rfxtrx docs]) (breaking-change) +- Add support for fan direction in bond integration ([@prystupa] - [#37789]) ([bond docs]) +- Apply code quality updates to poolsense ([@haemishkyd] - [#37781]) ([poolsense docs]) (new-platform) +- Wrap possible I/O in executor ([@jjlawren] - [#37688]) ([plex docs]) +- Fix Dockerfile.dev for VS Code devcontainer ([@ajschmidt8] - [#37801]) +- Add basic support for lights in bond integration ([@prystupa] - [#37802]) ([bond docs]) (new-platform) +- Replace rfxtrx entity events with integration events ([@elupus] - [#37565]) ([rfxtrx docs]) (breaking-change) +- Bump aiokafka to 0.6.0 ([@balloob] - [#37778]) ([apache_kafka docs]) +- Drop dummy connection ([@elupus] - [#37805]) ([rfxtrx docs]) +- pydaikin version bump to 2.3.1: ([@pnguyen-tyro] - [#37682]) ([daikin docs]) +- Allow an extra packet without dts (for Arlo camera streaming) ([@dermotduffy] - [#37792]) ([stream docs]) +- Constraints pt3 ([@balloob] - [#37803]) +- Add urlencode template filter ([@jschlyter] - [#37753]) +- Add rfxtrx ability to send a raw command to device ([@elupus] - [#37793]) ([rfxtrx docs]) +- Drop white blacklist pt1 ([@balloob] - [#37816]) +- Simplify logger integration ([@balloob] - [#37780]) ([logger docs]) +- Add devolo binary sensor device class mapping ([@2Fake] - [#37350]) ([devolo_home_control docs]) +- Convert Toon expires_in value to float ([@tizzen33] - [#37716]) ([toon docs]) +- Apply bond python related feedback from a prior PR ([@prystupa] - [#37821]) ([bond docs]) +- Switch rfxtrx to config entries ([@elupus] - [#37794]) ([rfxtrx docs]) +- Update Travis-CI to use Python 3.7.1 ([@scop] - [#37830]) +- Map bond fan speeds to standard HA speeds ([@prystupa] - [#37808]) ([bond docs]) +- Apply code review changes for poolsense ([@haemishkyd] - [#37817]) ([poolsense docs]) +- Version bump for asuswrt ([@kennedyshead] - [#37827]) ([asuswrt docs]) +- Travis CI improvements ([@scop] - [#37840]) +- Bump actions/upload-artifact from v2.0.1 to 2.1.0 (dependabot - [#37841]) +- Add support for generic device (switch) to bond integration ([@prystupa] - [#37837]) ([bond docs]) (new-platform) +- Add choose script action ([@pnbruckner] - [#37818]) +- Attrs cleanups ([@scop] - [#37849]) ([camera docs]) ([cast docs]) ([device_tracker docs]) ([esphome docs]) ([mqtt docs]) ([stream docs]) ([zha docs]) +- Add mode info attributes to script and automation ([@bramkragten] - [#37815]) ([automation docs]) ([script docs]) +- Fix media_content_id attribute in Spotify integration ([@aaliddell] - [#37853]) ([spotify docs]) +- Frontend: deprecate `extra_html_url` ([@bramkragten] - [#37843]) ([frontend docs]) (breaking-change) +- Switch async_track_state_change to the faster async_track_state_change_event part 3 ([@bdraco] - [#37852]) ([bayesian docs]) ([esphome docs]) ([filter docs]) +- Adjust icons for MDI bump ([@bramkragten] - [#37730]) +- Avoid homekit crash when temperature is clamped above max value ([@bdraco] - [#37746]) ([homekit docs]) +- Always expose Toon gas sensors ([@frenck] - [#37829]) ([toon docs]) +- Use size of camera in Agent DVR ([@timmo001] - [#36375]) ([agent_dvr docs]) +- Adjust history as all scripts can now be canceled ([@bdraco] - [#37820]) ([history docs]) +- Ensure HomeKit does not throw when a linked motion sensor is removed ([@bdraco] - [#37773]) ([homekit docs]) +- Add HmIP-FSI16 to HomematicIP Cloud ([@SukramJ] - [#37715]) ([homematicip_cloud docs]) +- Fix Fibaro HC light switches not being configured as Light entities ([@danielpervan] - [#37690]) ([fibaro docs]) (breaking-change) +- Do no crash Luftdaten on additional data returned by the API ([@jbeyerstedt] - [#37763]) ([luftdaten docs]) +- Fix zone cleaning and raise config entry not ready when needed ([@dshokouhi] - [#37741]) ([neato docs]) +- bump zigpy and zha quirks ([@dmulcahey] - [#37859]) ([zha docs]) (breaking-change) +- Updated frontend to 20200714.0 ([@bramkragten] - [#37862]) ([frontend docs]) +- Have async_track_point_in_utc_time call async_run_job directly from call_at ([@bdraco] - [#37790]) +- Add support for fireplaces to bond integration ([@prystupa] - [#37850]) ([bond docs]) +- Update august manufacturer name ([@bdraco] - [#37867]) ([august docs]) +- Switch async_track_state_change to the faster async_track_state_change_event part 6 ([@bdraco] - [#37869]) ([manual_mqtt docs]) ([min_max docs]) ([mold_indicator docs]) ([plant docs]) +- Switch async_track_state_change to the faster async_track_state_change_event part 5 ([@bdraco] - [#37866]) +- Switch async_track_state_change to the faster async_track_state_change_event part 4 ([@bdraco] - [#37863]) ([derivative docs]) ([generic_thermostat docs]) ([integration docs]) ([statistics docs]) +- Switch async_track_state_change to the faster async_track_state_change_event ([@bdraco] - [#37834]) ([group docs]) +- Switch a few more async_track_state_change to the faster async_track_state_change_event ([@bdraco] - [#37833]) +- Switch universal media_player to use async_track_state_change_event ([@bdraco] - [#37832]) ([universal docs]) +- Improve handling of template platforms when entity extraction fails ([@bdraco] - [#37831]) ([template docs]) (breaking-change) +- Switch async_track_state_change to the faster async_track_state_change_event part 7 ([@bdraco] - [#37870]) ([alert docs]) ([knx docs]) ([zha docs]) +- Prefer external URLs because internal can't have valid SSL ([@balloob] - [#37872]) ([cast docs]) +- Use supervisord "group:name" when get process info ([@serhtt] - [#37678]) ([supervisord docs]) +- Don't reuse venv cache when Python version changes ([@frenck] - [#37881]) +- Fix yeelight flash ([@shenxn] - [#37743]) ([yeelight docs]) +- Improve Neato error logging by including device name ([@dshokouhi] - [#37865]) ([neato docs]) +- Stop running scripts at shutdown ([@pnbruckner] - [#37858]) +- Updated frontend to 20200715.0 ([@bramkragten] - [#37884]) ([frontend docs]) +- Adapt MQTT config flow to default birth and will ([@emontnemery] - [#37875]) ([mqtt docs]) +- Provide workaround for missing/disabled/broken IPv6 ([@bdraco] - [#37887]) ([zeroconf docs]) +- Revert breaking change for Automation ([@pvizeli] - [#37885]) ([automation docs]) + +
+ +[#31637]: https://github.com/home-assistant/core/pull/31637 +[#33852]: https://github.com/home-assistant/core/pull/33852 +[#34387]: https://github.com/home-assistant/core/pull/34387 +[#34401]: https://github.com/home-assistant/core/pull/34401 +[#35350]: https://github.com/home-assistant/core/pull/35350 +[#35411]: https://github.com/home-assistant/core/pull/35411 +[#35561]: https://github.com/home-assistant/core/pull/35561 +[#35707]: https://github.com/home-assistant/core/pull/35707 +[#35927]: https://github.com/home-assistant/core/pull/35927 +[#36054]: https://github.com/home-assistant/core/pull/36054 +[#36157]: https://github.com/home-assistant/core/pull/36157 +[#36375]: https://github.com/home-assistant/core/pull/36375 +[#36533]: https://github.com/home-assistant/core/pull/36533 +[#36539]: https://github.com/home-assistant/core/pull/36539 +[#36609]: https://github.com/home-assistant/core/pull/36609 +[#36690]: https://github.com/home-assistant/core/pull/36690 +[#36895]: https://github.com/home-assistant/core/pull/36895 +[#36955]: https://github.com/home-assistant/core/pull/36955 +[#36988]: https://github.com/home-assistant/core/pull/36988 +[#37069]: https://github.com/home-assistant/core/pull/37069 +[#37071]: https://github.com/home-assistant/core/pull/37071 +[#37072]: https://github.com/home-assistant/core/pull/37072 +[#37075]: https://github.com/home-assistant/core/pull/37075 +[#37087]: https://github.com/home-assistant/core/pull/37087 +[#37097]: https://github.com/home-assistant/core/pull/37097 +[#37105]: https://github.com/home-assistant/core/pull/37105 +[#37110]: https://github.com/home-assistant/core/pull/37110 +[#37112]: https://github.com/home-assistant/core/pull/37112 +[#37116]: https://github.com/home-assistant/core/pull/37116 +[#37117]: https://github.com/home-assistant/core/pull/37117 +[#37123]: https://github.com/home-assistant/core/pull/37123 +[#37125]: https://github.com/home-assistant/core/pull/37125 +[#37136]: https://github.com/home-assistant/core/pull/37136 +[#37141]: https://github.com/home-assistant/core/pull/37141 +[#37147]: https://github.com/home-assistant/core/pull/37147 +[#37149]: https://github.com/home-assistant/core/pull/37149 +[#37154]: https://github.com/home-assistant/core/pull/37154 +[#37157]: https://github.com/home-assistant/core/pull/37157 +[#37159]: https://github.com/home-assistant/core/pull/37159 +[#37161]: https://github.com/home-assistant/core/pull/37161 +[#37171]: https://github.com/home-assistant/core/pull/37171 +[#37172]: https://github.com/home-assistant/core/pull/37172 +[#37174]: https://github.com/home-assistant/core/pull/37174 +[#37176]: https://github.com/home-assistant/core/pull/37176 +[#37179]: https://github.com/home-assistant/core/pull/37179 +[#37181]: https://github.com/home-assistant/core/pull/37181 +[#37183]: https://github.com/home-assistant/core/pull/37183 +[#37184]: https://github.com/home-assistant/core/pull/37184 +[#37186]: https://github.com/home-assistant/core/pull/37186 +[#37188]: https://github.com/home-assistant/core/pull/37188 +[#37189]: https://github.com/home-assistant/core/pull/37189 +[#37198]: https://github.com/home-assistant/core/pull/37198 +[#37199]: https://github.com/home-assistant/core/pull/37199 +[#37200]: https://github.com/home-assistant/core/pull/37200 +[#37201]: https://github.com/home-assistant/core/pull/37201 +[#37205]: https://github.com/home-assistant/core/pull/37205 +[#37206]: https://github.com/home-assistant/core/pull/37206 +[#37207]: https://github.com/home-assistant/core/pull/37207 +[#37208]: https://github.com/home-assistant/core/pull/37208 +[#37211]: https://github.com/home-assistant/core/pull/37211 +[#37215]: https://github.com/home-assistant/core/pull/37215 +[#37217]: https://github.com/home-assistant/core/pull/37217 +[#37225]: https://github.com/home-assistant/core/pull/37225 +[#37227]: https://github.com/home-assistant/core/pull/37227 +[#37232]: https://github.com/home-assistant/core/pull/37232 +[#37234]: https://github.com/home-assistant/core/pull/37234 +[#37237]: https://github.com/home-assistant/core/pull/37237 +[#37241]: https://github.com/home-assistant/core/pull/37241 +[#37250]: https://github.com/home-assistant/core/pull/37250 +[#37251]: https://github.com/home-assistant/core/pull/37251 +[#37252]: https://github.com/home-assistant/core/pull/37252 +[#37253]: https://github.com/home-assistant/core/pull/37253 +[#37255]: https://github.com/home-assistant/core/pull/37255 +[#37256]: https://github.com/home-assistant/core/pull/37256 +[#37260]: https://github.com/home-assistant/core/pull/37260 +[#37266]: https://github.com/home-assistant/core/pull/37266 +[#37268]: https://github.com/home-assistant/core/pull/37268 +[#37270]: https://github.com/home-assistant/core/pull/37270 +[#37271]: https://github.com/home-assistant/core/pull/37271 +[#37273]: https://github.com/home-assistant/core/pull/37273 +[#37275]: https://github.com/home-assistant/core/pull/37275 +[#37276]: https://github.com/home-assistant/core/pull/37276 +[#37289]: https://github.com/home-assistant/core/pull/37289 +[#37304]: https://github.com/home-assistant/core/pull/37304 +[#37308]: https://github.com/home-assistant/core/pull/37308 +[#37309]: https://github.com/home-assistant/core/pull/37309 +[#37313]: https://github.com/home-assistant/core/pull/37313 +[#37315]: https://github.com/home-assistant/core/pull/37315 +[#37316]: https://github.com/home-assistant/core/pull/37316 +[#37322]: https://github.com/home-assistant/core/pull/37322 +[#37324]: https://github.com/home-assistant/core/pull/37324 +[#37325]: https://github.com/home-assistant/core/pull/37325 +[#37336]: https://github.com/home-assistant/core/pull/37336 +[#37339]: https://github.com/home-assistant/core/pull/37339 +[#37346]: https://github.com/home-assistant/core/pull/37346 +[#37350]: https://github.com/home-assistant/core/pull/37350 +[#37363]: https://github.com/home-assistant/core/pull/37363 +[#37371]: https://github.com/home-assistant/core/pull/37371 +[#37374]: https://github.com/home-assistant/core/pull/37374 +[#37380]: https://github.com/home-assistant/core/pull/37380 +[#37390]: https://github.com/home-assistant/core/pull/37390 +[#37391]: https://github.com/home-assistant/core/pull/37391 +[#37394]: https://github.com/home-assistant/core/pull/37394 +[#37396]: https://github.com/home-assistant/core/pull/37396 +[#37397]: https://github.com/home-assistant/core/pull/37397 +[#37401]: https://github.com/home-assistant/core/pull/37401 +[#37405]: https://github.com/home-assistant/core/pull/37405 +[#37419]: https://github.com/home-assistant/core/pull/37419 +[#37420]: https://github.com/home-assistant/core/pull/37420 +[#37421]: https://github.com/home-assistant/core/pull/37421 +[#37423]: https://github.com/home-assistant/core/pull/37423 +[#37424]: https://github.com/home-assistant/core/pull/37424 +[#37425]: https://github.com/home-assistant/core/pull/37425 +[#37426]: https://github.com/home-assistant/core/pull/37426 +[#37427]: https://github.com/home-assistant/core/pull/37427 +[#37428]: https://github.com/home-assistant/core/pull/37428 +[#37429]: https://github.com/home-assistant/core/pull/37429 +[#37430]: https://github.com/home-assistant/core/pull/37430 +[#37432]: https://github.com/home-assistant/core/pull/37432 +[#37433]: https://github.com/home-assistant/core/pull/37433 +[#37438]: https://github.com/home-assistant/core/pull/37438 +[#37439]: https://github.com/home-assistant/core/pull/37439 +[#37440]: https://github.com/home-assistant/core/pull/37440 +[#37441]: https://github.com/home-assistant/core/pull/37441 +[#37445]: https://github.com/home-assistant/core/pull/37445 +[#37446]: https://github.com/home-assistant/core/pull/37446 +[#37450]: https://github.com/home-assistant/core/pull/37450 +[#37454]: https://github.com/home-assistant/core/pull/37454 +[#37455]: https://github.com/home-assistant/core/pull/37455 +[#37456]: https://github.com/home-assistant/core/pull/37456 +[#37457]: https://github.com/home-assistant/core/pull/37457 +[#37461]: https://github.com/home-assistant/core/pull/37461 +[#37463]: https://github.com/home-assistant/core/pull/37463 +[#37465]: https://github.com/home-assistant/core/pull/37465 +[#37468]: https://github.com/home-assistant/core/pull/37468 +[#37471]: https://github.com/home-assistant/core/pull/37471 +[#37472]: https://github.com/home-assistant/core/pull/37472 +[#37473]: https://github.com/home-assistant/core/pull/37473 +[#37477]: https://github.com/home-assistant/core/pull/37477 +[#37479]: https://github.com/home-assistant/core/pull/37479 +[#37480]: https://github.com/home-assistant/core/pull/37480 +[#37483]: https://github.com/home-assistant/core/pull/37483 +[#37485]: https://github.com/home-assistant/core/pull/37485 +[#37486]: https://github.com/home-assistant/core/pull/37486 +[#37487]: https://github.com/home-assistant/core/pull/37487 +[#37488]: https://github.com/home-assistant/core/pull/37488 +[#37490]: https://github.com/home-assistant/core/pull/37490 +[#37494]: https://github.com/home-assistant/core/pull/37494 +[#37496]: https://github.com/home-assistant/core/pull/37496 +[#37497]: https://github.com/home-assistant/core/pull/37497 +[#37500]: https://github.com/home-assistant/core/pull/37500 +[#37501]: https://github.com/home-assistant/core/pull/37501 +[#37505]: https://github.com/home-assistant/core/pull/37505 +[#37508]: https://github.com/home-assistant/core/pull/37508 +[#37510]: https://github.com/home-assistant/core/pull/37510 +[#37512]: https://github.com/home-assistant/core/pull/37512 +[#37515]: https://github.com/home-assistant/core/pull/37515 +[#37516]: https://github.com/home-assistant/core/pull/37516 +[#37523]: https://github.com/home-assistant/core/pull/37523 +[#37527]: https://github.com/home-assistant/core/pull/37527 +[#37530]: https://github.com/home-assistant/core/pull/37530 +[#37531]: https://github.com/home-assistant/core/pull/37531 +[#37535]: https://github.com/home-assistant/core/pull/37535 +[#37536]: https://github.com/home-assistant/core/pull/37536 +[#37550]: https://github.com/home-assistant/core/pull/37550 +[#37551]: https://github.com/home-assistant/core/pull/37551 +[#37555]: https://github.com/home-assistant/core/pull/37555 +[#37556]: https://github.com/home-assistant/core/pull/37556 +[#37559]: https://github.com/home-assistant/core/pull/37559 +[#37560]: https://github.com/home-assistant/core/pull/37560 +[#37565]: https://github.com/home-assistant/core/pull/37565 +[#37581]: https://github.com/home-assistant/core/pull/37581 +[#37587]: https://github.com/home-assistant/core/pull/37587 +[#37588]: https://github.com/home-assistant/core/pull/37588 +[#37589]: https://github.com/home-assistant/core/pull/37589 +[#37590]: https://github.com/home-assistant/core/pull/37590 +[#37591]: https://github.com/home-assistant/core/pull/37591 +[#37592]: https://github.com/home-assistant/core/pull/37592 +[#37597]: https://github.com/home-assistant/core/pull/37597 +[#37598]: https://github.com/home-assistant/core/pull/37598 +[#37599]: https://github.com/home-assistant/core/pull/37599 +[#37602]: https://github.com/home-assistant/core/pull/37602 +[#37605]: https://github.com/home-assistant/core/pull/37605 +[#37613]: https://github.com/home-assistant/core/pull/37613 +[#37617]: https://github.com/home-assistant/core/pull/37617 +[#37618]: https://github.com/home-assistant/core/pull/37618 +[#37619]: https://github.com/home-assistant/core/pull/37619 +[#37620]: https://github.com/home-assistant/core/pull/37620 +[#37621]: https://github.com/home-assistant/core/pull/37621 +[#37628]: https://github.com/home-assistant/core/pull/37628 +[#37629]: https://github.com/home-assistant/core/pull/37629 +[#37630]: https://github.com/home-assistant/core/pull/37630 +[#37637]: https://github.com/home-assistant/core/pull/37637 +[#37640]: https://github.com/home-assistant/core/pull/37640 +[#37642]: https://github.com/home-assistant/core/pull/37642 +[#37644]: https://github.com/home-assistant/core/pull/37644 +[#37650]: https://github.com/home-assistant/core/pull/37650 +[#37659]: https://github.com/home-assistant/core/pull/37659 +[#37665]: https://github.com/home-assistant/core/pull/37665 +[#37666]: https://github.com/home-assistant/core/pull/37666 +[#37667]: https://github.com/home-assistant/core/pull/37667 +[#37677]: https://github.com/home-assistant/core/pull/37677 +[#37678]: https://github.com/home-assistant/core/pull/37678 +[#37682]: https://github.com/home-assistant/core/pull/37682 +[#37688]: https://github.com/home-assistant/core/pull/37688 +[#37690]: https://github.com/home-assistant/core/pull/37690 +[#37691]: https://github.com/home-assistant/core/pull/37691 +[#37694]: https://github.com/home-assistant/core/pull/37694 +[#37697]: https://github.com/home-assistant/core/pull/37697 +[#37698]: https://github.com/home-assistant/core/pull/37698 +[#37699]: https://github.com/home-assistant/core/pull/37699 +[#37700]: https://github.com/home-assistant/core/pull/37700 +[#37703]: https://github.com/home-assistant/core/pull/37703 +[#37706]: https://github.com/home-assistant/core/pull/37706 +[#37709]: https://github.com/home-assistant/core/pull/37709 +[#37710]: https://github.com/home-assistant/core/pull/37710 +[#37715]: https://github.com/home-assistant/core/pull/37715 +[#37716]: https://github.com/home-assistant/core/pull/37716 +[#37729]: https://github.com/home-assistant/core/pull/37729 +[#37730]: https://github.com/home-assistant/core/pull/37730 +[#37735]: https://github.com/home-assistant/core/pull/37735 +[#37738]: https://github.com/home-assistant/core/pull/37738 +[#37740]: https://github.com/home-assistant/core/pull/37740 +[#37741]: https://github.com/home-assistant/core/pull/37741 +[#37742]: https://github.com/home-assistant/core/pull/37742 +[#37743]: https://github.com/home-assistant/core/pull/37743 +[#37746]: https://github.com/home-assistant/core/pull/37746 +[#37748]: https://github.com/home-assistant/core/pull/37748 +[#37749]: https://github.com/home-assistant/core/pull/37749 +[#37751]: https://github.com/home-assistant/core/pull/37751 +[#37753]: https://github.com/home-assistant/core/pull/37753 +[#37759]: https://github.com/home-assistant/core/pull/37759 +[#37763]: https://github.com/home-assistant/core/pull/37763 +[#37764]: https://github.com/home-assistant/core/pull/37764 +[#37771]: https://github.com/home-assistant/core/pull/37771 +[#37772]: https://github.com/home-assistant/core/pull/37772 +[#37773]: https://github.com/home-assistant/core/pull/37773 +[#37776]: https://github.com/home-assistant/core/pull/37776 +[#37778]: https://github.com/home-assistant/core/pull/37778 +[#37780]: https://github.com/home-assistant/core/pull/37780 +[#37781]: https://github.com/home-assistant/core/pull/37781 +[#37789]: https://github.com/home-assistant/core/pull/37789 +[#37790]: https://github.com/home-assistant/core/pull/37790 +[#37792]: https://github.com/home-assistant/core/pull/37792 +[#37793]: https://github.com/home-assistant/core/pull/37793 +[#37794]: https://github.com/home-assistant/core/pull/37794 +[#37801]: https://github.com/home-assistant/core/pull/37801 +[#37802]: https://github.com/home-assistant/core/pull/37802 +[#37803]: https://github.com/home-assistant/core/pull/37803 +[#37805]: https://github.com/home-assistant/core/pull/37805 +[#37808]: https://github.com/home-assistant/core/pull/37808 +[#37815]: https://github.com/home-assistant/core/pull/37815 +[#37816]: https://github.com/home-assistant/core/pull/37816 +[#37817]: https://github.com/home-assistant/core/pull/37817 +[#37818]: https://github.com/home-assistant/core/pull/37818 +[#37820]: https://github.com/home-assistant/core/pull/37820 +[#37821]: https://github.com/home-assistant/core/pull/37821 +[#37827]: https://github.com/home-assistant/core/pull/37827 +[#37829]: https://github.com/home-assistant/core/pull/37829 +[#37830]: https://github.com/home-assistant/core/pull/37830 +[#37831]: https://github.com/home-assistant/core/pull/37831 +[#37832]: https://github.com/home-assistant/core/pull/37832 +[#37833]: https://github.com/home-assistant/core/pull/37833 +[#37834]: https://github.com/home-assistant/core/pull/37834 +[#37837]: https://github.com/home-assistant/core/pull/37837 +[#37840]: https://github.com/home-assistant/core/pull/37840 +[#37841]: https://github.com/home-assistant/core/pull/37841 +[#37843]: https://github.com/home-assistant/core/pull/37843 +[#37849]: https://github.com/home-assistant/core/pull/37849 +[#37850]: https://github.com/home-assistant/core/pull/37850 +[#37852]: https://github.com/home-assistant/core/pull/37852 +[#37853]: https://github.com/home-assistant/core/pull/37853 +[#37858]: https://github.com/home-assistant/core/pull/37858 +[#37859]: https://github.com/home-assistant/core/pull/37859 +[#37862]: https://github.com/home-assistant/core/pull/37862 +[#37863]: https://github.com/home-assistant/core/pull/37863 +[#37865]: https://github.com/home-assistant/core/pull/37865 +[#37866]: https://github.com/home-assistant/core/pull/37866 +[#37867]: https://github.com/home-assistant/core/pull/37867 +[#37869]: https://github.com/home-assistant/core/pull/37869 +[#37870]: https://github.com/home-assistant/core/pull/37870 +[#37872]: https://github.com/home-assistant/core/pull/37872 +[#37875]: https://github.com/home-assistant/core/pull/37875 +[#37881]: https://github.com/home-assistant/core/pull/37881 +[#37884]: https://github.com/home-assistant/core/pull/37884 +[#37885]: https://github.com/home-assistant/core/pull/37885 +[#37887]: https://github.com/home-assistant/core/pull/37887 +[@2Fake]: https://github.com/2Fake +[@CoMPaTech]: https://github.com/CoMPaTech +[@DarkFox]: https://github.com/DarkFox +[@GMTA]: https://github.com/GMTA +[@Harryjholmes]: https://github.com/Harryjholmes +[@InduPrakash]: https://github.com/InduPrakash +[@Jc2k]: https://github.com/Jc2k +[@JeffLIrion]: https://github.com/JeffLIrion +[@Kdemontf]: https://github.com/Kdemontf +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@MatthewFlamm]: https://github.com/MatthewFlamm +[@Michsior14]: https://github.com/Michsior14 +[@PaulAnnekov]: https://github.com/PaulAnnekov +[@Quentame]: https://github.com/Quentame +[@RogerSelwyn]: https://github.com/RogerSelwyn +[@Shulyaka]: https://github.com/Shulyaka +[@SukramJ]: https://github.com/SukramJ +[@TheLastGimbus]: https://github.com/TheLastGimbus +[@aaliddell]: https://github.com/aaliddell +[@ajschmidt8]: https://github.com/ajschmidt8 +[@akloeckner]: https://github.com/akloeckner +[@alandtse]: https://github.com/alandtse +[@alexhardwicke]: https://github.com/alexhardwicke +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@bednar]: https://github.com/bednar +[@bouwew]: https://github.com/bouwew +[@bramkragten]: https://github.com/bramkragten +[@brefra]: https://github.com/brefra +[@bsmappee]: https://github.com/bsmappee +[@cgtobi]: https://github.com/cgtobi +[@ctalkington]: https://github.com/ctalkington +[@danielpervan]: https://github.com/danielpervan +[@davet2001]: https://github.com/davet2001 +[@dermotduffy]: https://github.com/dermotduffy +[@divanikus]: https://github.com/divanikus +[@djpremier]: https://github.com/djpremier +[@dmulcahey]: https://github.com/dmulcahey +[@dshokouhi]: https://github.com/dshokouhi +[@eifinger]: https://github.com/eifinger +[@elupus]: https://github.com/elupus +[@emlove]: https://github.com/emlove +[@emontnemery]: https://github.com/emontnemery +[@engrbm87]: https://github.com/engrbm87 +[@esev]: https://github.com/esev +[@firstof9]: https://github.com/firstof9 +[@frenck]: https://github.com/frenck +[@gagebenne]: https://github.com/gagebenne +[@guillempages]: https://github.com/guillempages +[@haemishkyd]: https://github.com/haemishkyd +[@jberstler]: https://github.com/jberstler +[@jbeyerstedt]: https://github.com/jbeyerstedt +[@jduquennoy]: https://github.com/jduquennoy +[@jfearon]: https://github.com/jfearon +[@jjlawren]: https://github.com/jjlawren +[@jschlyter]: https://github.com/jschlyter +[@jurgenhaas]: https://github.com/jurgenhaas +[@kennedyshead]: https://github.com/kennedyshead +[@knyar]: https://github.com/knyar +[@ktnrg45]: https://github.com/ktnrg45 +[@ludeeus]: https://github.com/ludeeus +[@marcelveldt]: https://github.com/marcelveldt +[@mdegat01]: https://github.com/mdegat01 +[@michaeldavie]: https://github.com/michaeldavie +[@nkgilley]: https://github.com/nkgilley +[@outadoc]: https://github.com/outadoc +[@pavoni]: https://github.com/pavoni +[@pilehave]: https://github.com/pilehave +[@pnbruckner]: https://github.com/pnbruckner +[@pnguyen-tyro]: https://github.com/pnguyen-tyro +[@prystupa]: https://github.com/prystupa +[@pvizeli]: https://github.com/pvizeli +[@raman325]: https://github.com/raman325 +[@robbiet480]: https://github.com/robbiet480 +[@scop]: https://github.com/scop +[@serhtt]: https://github.com/serhtt +[@shenxn]: https://github.com/shenxn +[@shermdog]: https://github.com/shermdog +[@smugleafdev]: https://github.com/smugleafdev +[@starkillerOG]: https://github.com/starkillerOG +[@timmo001]: https://github.com/timmo001 +[@timvancann]: https://github.com/timvancann +[@tizzen33]: https://github.com/tizzen33 +[@zhulik]: https://github.com/zhulik +[acmeda docs]: /integrations/acmeda/ +[ads docs]: /integrations/ads/ +[agent_dvr docs]: /integrations/agent_dvr/ +[alarm_control_panel docs]: /integrations/alarm_control_panel/ +[alert docs]: /integrations/alert/ +[amcrest docs]: /integrations/amcrest/ +[androidtv docs]: /integrations/androidtv/ +[apache_kafka docs]: /integrations/apache_kafka/ +[asuswrt docs]: /integrations/asuswrt/ +[august docs]: /integrations/august/ +[automation docs]: /integrations/automation/ +[avri docs]: /integrations/avri/ +[azure_event_hub docs]: /integrations/azure_event_hub/ +[bayesian docs]: /integrations/bayesian/ +[bond docs]: /integrations/bond/ +[camera docs]: /integrations/camera/ +[cast docs]: /integrations/cast/ +[daikin docs]: /integrations/daikin/ +[darksky docs]: /integrations/darksky/ +[datadog docs]: /integrations/datadog/ +[debugpy docs]: /integrations/debugpy/ +[demo docs]: /integrations/demo/ +[denonavr docs]: /integrations/denonavr/ +[derivative docs]: /integrations/derivative/ +[device_tracker docs]: /integrations/device_tracker/ +[devolo_home_control docs]: /integrations/devolo_home_control/ +[dexcom docs]: /integrations/dexcom/ +[directv docs]: /integrations/directv/ +[discovery docs]: /integrations/discovery/ +[doorbird docs]: /integrations/doorbird/ +[ecobee docs]: /integrations/ecobee/ +[emulated_hue docs]: /integrations/emulated_hue/ +[enocean docs]: /integrations/enocean/ +[environment_canada docs]: /integrations/environment_canada/ +[esphome docs]: /integrations/esphome/ +[fan docs]: /integrations/fan/ +[fibaro docs]: /integrations/fibaro/ +[filter docs]: /integrations/filter/ +[flux docs]: /integrations/flux/ +[foobot docs]: /integrations/foobot/ +[forked_daapd docs]: /integrations/forked_daapd/ +[freebox docs]: /integrations/freebox/ +[frontend docs]: /integrations/frontend/ +[garmin_connect docs]: /integrations/garmin_connect/ +[gdacs docs]: /integrations/gdacs/ +[generic_thermostat docs]: /integrations/generic_thermostat/ +[geniushub docs]: /integrations/geniushub/ +[geo_json_events docs]: /integrations/geo_json_events/ +[geonetnz_quakes docs]: /integrations/geonetnz_quakes/ +[geonetnz_volcano docs]: /integrations/geonetnz_volcano/ +[google_assistant docs]: /integrations/google_assistant/ +[google_pubsub docs]: /integrations/google_pubsub/ +[group docs]: /integrations/group/ +[guardian docs]: /integrations/guardian/ +[harmony docs]: /integrations/harmony/ +[history docs]: /integrations/history/ +[homekit docs]: /integrations/homekit/ +[homekit_controller docs]: /integrations/homekit_controller/ +[homematic docs]: /integrations/homematic/ +[homematicip_cloud docs]: /integrations/homematicip_cloud/ +[hue docs]: /integrations/hue/ +[influxdb docs]: /integrations/influxdb/ +[input_number docs]: /integrations/input_number/ +[integration docs]: /integrations/integration/ +[ipp docs]: /integrations/ipp/ +[joaoapps_join docs]: /integrations/joaoapps_join/ +[knx docs]: /integrations/knx/ +[logger docs]: /integrations/logger/ +[loopenergy docs]: /integrations/loopenergy/ +[luftdaten docs]: /integrations/luftdaten/ +[manual_mqtt docs]: /integrations/manual_mqtt/ +[min_max docs]: /integrations/min_max/ +[mold_indicator docs]: /integrations/mold_indicator/ +[mqtt docs]: /integrations/mqtt/ +[neato docs]: /integrations/neato/ +[netatmo docs]: /integrations/netatmo/ +[netdata docs]: /integrations/netdata/ +[nws docs]: /integrations/nws/ +[onvif docs]: /integrations/onvif/ +[ozw docs]: /integrations/ozw/ +[pioneer docs]: /integrations/pioneer/ +[plant docs]: /integrations/plant/ +[plex docs]: /integrations/plex/ +[plugwise docs]: /integrations/plugwise/ +[plum_lightpad docs]: /integrations/plum_lightpad/ +[poolsense docs]: /integrations/poolsense/ +[prometheus docs]: /integrations/prometheus/ +[ps4 docs]: /integrations/ps4/ +[recorder docs]: /integrations/recorder/ +[rejseplanen docs]: /integrations/rejseplanen/ +[remote_rpi_gpio docs]: /integrations/remote_rpi_gpio/ +[rfxtrx docs]: /integrations/rfxtrx/ +[script docs]: /integrations/script/ +[slack docs]: /integrations/slack/ +[smappee docs]: /integrations/smappee/ +[smarthab docs]: /integrations/smarthab/ +[sms docs]: /integrations/sms/ +[solaredge docs]: /integrations/solaredge/ +[sonarr docs]: /integrations/sonarr/ +[spotify docs]: /integrations/spotify/ +[sql docs]: /integrations/sql/ +[statistics docs]: /integrations/statistics/ +[stream docs]: /integrations/stream/ +[supervisord docs]: /integrations/supervisord/ +[syncthru docs]: /integrations/syncthru/ +[tado docs]: /integrations/tado/ +[template docs]: /integrations/template/ +[tesla docs]: /integrations/tesla/ +[toon docs]: /integrations/toon/ +[touchline docs]: /integrations/touchline/ +[tplink docs]: /integrations/tplink/ +[transmission docs]: /integrations/transmission/ +[tuya docs]: /integrations/tuya/ +[unifi docs]: /integrations/unifi/ +[universal docs]: /integrations/universal/ +[verisure docs]: /integrations/verisure/ +[vizio docs]: /integrations/vizio/ +[volumio docs]: /integrations/volumio/ +[worldclock docs]: /integrations/worldclock/ +[xiaomi_miio docs]: /integrations/xiaomi_miio/ +[yeelight docs]: /integrations/yeelight/ +[zeroconf docs]: /integrations/zeroconf/ +[zerproc docs]: /integrations/zerproc/ +[zha docs]: /integrations/zha/ diff --git a/source/images/blog/2020-07-0.113/automation-modes.png b/source/images/blog/2020-07-0.113/automation-modes.png new file mode 100644 index 0000000000000000000000000000000000000000..1343ce46e07ca33f90c7d5020e12d3c82f457b17 GIT binary patch literal 14809 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 YU!pL3J(J(SnJkbTL|M98(m3$H0lU!QUH||9 literal 0 HcmV?d00001