From e6021f6b95cd6f0142a445dcfbafa687eb6eb801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Sun, 14 Mar 2021 15:21:12 +0100 Subject: [PATCH 01/29] Add missing link to update (#16994) --- source/_posts/2021-03-03-release-20213.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_posts/2021-03-03-release-20213.markdown b/source/_posts/2021-03-03-release-20213.markdown index bf14a76182f6..bb459381e77d 100644 --- a/source/_posts/2021-03-03-release-20213.markdown +++ b/source/_posts/2021-03-03-release-20213.markdown @@ -42,6 +42,7 @@ My oh my, enjoy this release! - [Release 2021.3.1 - March 5](#release-202131---march-5) - [Release 2021.3.2 - March 5](#release-202132---march-5) - [Release 2021.3.3 - March 8](#release-202133---march-8) +- [Release 2021.3.4 - March 12](#release-202134---march-12) - [If you need help...](#if-you-need-help) - [Breaking Changes](#breaking-changes) - [Farewell to the following](#farewell-to-the-following) From ede860d9be8fad4a23d3b50915925f63b597629b Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 15 Mar 2021 13:05:00 +0100 Subject: [PATCH 02/29] Some fixes for service-call docu (#17006) --- source/_docs/scripts/service-calls.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_docs/scripts/service-calls.markdown b/source/_docs/scripts/service-calls.markdown index ed72800b79d7..b61170a4cfd1 100644 --- a/source/_docs/scripts/service-calls.markdown +++ b/source/_docs/scripts/service-calls.markdown @@ -3,7 +3,7 @@ title: "Service Calls" description: "Instructions on how to call services in Home Assistant." --- -Various integrations allow calling services when a certain event occurs. The most common one is calling a service when an automation trigger happens. But a service can also be called from a script or via the Amazon Echo. +Various integrations allow calling services when a certain event occurs. The most common one is calling a service when an automation trigger happens. But a service can also be called from a script, a Lovelace dashboard or via voice command devices such as Amazon Echo. The configuration options to call a configuration are the same between all integrations and are described on this page. @@ -27,10 +27,10 @@ entity_id: group.living_room Instead of targeting an entity, you can also target an area or device. Or a combination of these. This is done with the `target` key. -A `target` is a map thats contains atleast one of the following: `area_id`, `device_id`, `entity_id`. +A `target` is a map that contains at least one of the following: `area_id`, `device_id`, `entity_id`. Each of these can be a list. -When the service is called, the area's and devices will be resolved to entities. +When the service is called, the areas and devices will be resolved to entities. ```yaml service: homeassistant.turn_on @@ -46,7 +46,7 @@ target: ### Passing data to the service call -You can also specify other parameters beside the entity to target. For example, the light turn on service allows specifying the brightness. +You can also specify other parameters beside the entity to target. For example, the `light.turn_on` service allows specifying the brightness. ```yaml service: light.turn_on @@ -111,8 +111,8 @@ data: There are four `homeassistant` services that aren't tied to any single domain, these are: -- `homeassistant.turn_on` - Turns on an entity (that supports being turned on), for example an `automation`, `switch`, etc -- `homeassistant.turn_off` - Turns off an entity (that supports being turned off), for example an `automation`, `switch`, etc +- `homeassistant.turn_on` - Turns on an entity (that supports being turned on), for example an `automation`, `switch`, etc. +- `homeassistant.turn_off` - Turns off an entity (that supports being turned off), for example an `automation`, `switch`, etc. - `homeassistant.toggle` - Turns off an entity that is on, or turns on an entity that is off (that supports being turned on and off) - `homeassistant.update_entity` - Request the update of an entity, rather than waiting for the next scheduled update, for example [Google travel time] sensor, a [template sensor], or a [light] From 57acb255da6524818a9fb4a068926f99b5a450dd Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Mon, 15 Mar 2021 13:58:40 +0100 Subject: [PATCH 03/29] Add icon reference to Lovelace documentation (#16865) --- source/lovelace/badges.markdown | 4 ++-- source/lovelace/dashboards-and-views.markdown | 4 ++-- source/lovelace/header-footer.markdown | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/lovelace/badges.markdown b/source/lovelace/badges.markdown index 3934736eee19..a5c40f10b0a8 100644 --- a/source/lovelace/badges.markdown +++ b/source/lovelace/badges.markdown @@ -30,7 +30,7 @@ name: default: Name of entity icon: required: false - description: Overwrites icon or entity picture. + description: Overwrites icon or entity picture. You can use any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com). Prefix the icon name with `mdi:`, ie `mdi:home`. type: string default: Entity domain icon image: @@ -87,7 +87,7 @@ name: type: string icon: required: false - description: Overwrites icon or entity picture. + description: Overwrites icon or entity picture. You can use any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com). Prefix the icon name with `mdi:`, ie `mdi:home`. type: string image: required: false diff --git a/source/lovelace/dashboards-and-views.markdown b/source/lovelace/dashboards-and-views.markdown index 1f0050b8d14a..569fb8dd9af7 100644 --- a/source/lovelace/dashboards-and-views.markdown +++ b/source/lovelace/dashboards-and-views.markdown @@ -110,7 +110,7 @@ dashboards: type: string icon: required: false - description: The icon to show in the sidebar. + description: The icon to show in the sidebar. You can use any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com). Prefix the icon name with `mdi:`, ie `mdi:home`. type: string show_in_sidebar: required: false @@ -227,7 +227,7 @@ views: default: view index icon: required: false - description: Icon-name from Material Design Icons. + description: Icon-name from Material Design Icons. You can use any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com). Prefix the icon name with `mdi:`, ie `mdi:home`. type: string panel: required: false diff --git a/source/lovelace/header-footer.markdown b/source/lovelace/header-footer.markdown index e44835cab336..5839927d531f 100644 --- a/source/lovelace/header-footer.markdown +++ b/source/lovelace/header-footer.markdown @@ -69,7 +69,7 @@ entities: type: string icon: required: false - description: Override the entity icon. + description: Override the entity icon. You can use any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com). Prefix the icon name with `mdi:`, ie `mdi:home`. type: string image: required: false From 63d0f4a03495ade9c1f698e62756ffa9eb46ce6d Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Mon, 15 Mar 2021 13:58:57 +0100 Subject: [PATCH 04/29] Add unique ID to weather template (#16869) --- source/_integrations/weather.template.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_integrations/weather.template.markdown b/source/_integrations/weather.template.markdown index c2e857c9cae6..b3dcb5fe029f 100644 --- a/source/_integrations/weather.template.markdown +++ b/source/_integrations/weather.template.markdown @@ -40,6 +40,10 @@ name: description: Name to use in the frontend. required: true type: string +unique_id: + description: An ID that uniquely identifies this weather entity. Set this to a unique value to allow customization through the UI. + required: false + type: string condition_template: description: The current weather condition. required: true From 9cfdae1752cf33a3e0e28d66cc7ca3742d60f69d Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Mon, 15 Mar 2021 13:59:16 +0100 Subject: [PATCH 05/29] Add note about tested hardware in NAD documentation (#16870) --- source/_integrations/nad.markdown | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/_integrations/nad.markdown b/source/_integrations/nad.markdown index 324c3472b84d..5536edde2a06 100644 --- a/source/_integrations/nad.markdown +++ b/source/_integrations/nad.markdown @@ -10,6 +10,11 @@ ha_domain: nad The `nad` platform allows you to control a [NAD receiver](https://nadelectronics.com/) through RS232, TCP and Telnet from Home Assistant. +Please note that the RS232 interface is only tested with the NAD T748v2, but is should work with more NAD receivers. +The Telnet interface is only tested with the NAD T787. + +## Configuration + To add an NAD receiver to your installation, add the following to your `configuration.yaml` file: ```yaml @@ -18,12 +23,13 @@ media_player: - platform: nad serial_port: /dev/ttyUSB0 ``` + ```yaml # Example configuration.yaml entry for TCP configuration media_player: - platform: nad type: TCP - host: IP_ADDRESS + host: "IP_ADDRESS" ``` {% configuration %} @@ -89,7 +95,7 @@ A full configuration example could look like this: media_player: - platform: nad serial_port: /dev/ttyUSB0 - name: NAD Receiver + name: "NAD Receiver" min_volume: -60 max_volume: -20 sources: From a91074272407f3974a996d6a7b352ab4d197806d Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Mon, 15 Mar 2021 14:19:38 +0100 Subject: [PATCH 06/29] Lowercase MDI icons URLs (#17012) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Joakim Sørensen --- source/_docs/configuration/customizing-devices.markdown | 2 +- source/lovelace/badges.markdown | 4 ++-- source/lovelace/dashboards-and-views.markdown | 4 ++-- source/lovelace/header-footer.markdown | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_docs/configuration/customizing-devices.markdown b/source/_docs/configuration/customizing-devices.markdown index 6b6f5b57917c..29d66e54b920 100644 --- a/source/_docs/configuration/customizing-devices.markdown +++ b/source/_docs/configuration/customizing-devices.markdown @@ -39,7 +39,7 @@ entity_picture: required: false type: string icon: - description: "Any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com) ([Cheatsheet](https://cdn.materialdesignicons.com/5.3.45/)). Prefix name with `mdi:`, ie `mdi:home`. Note: Newer icons may not yet be available in the current Home Assistant release. You can check when an icon was added to MaterialDesignIcons.com at [MDI History](https://materialdesignicons.com/history)." + description: "Any icon from [MaterialDesignIcons.com](http://materialdesignicons.com). Prefix name with `mdi:`, ie `mdi:home`. Note: Newer icons may not yet be available in the current Home Assistant release. You can check when an icon was added to MaterialDesignIcons.com at [MDI History](https://materialdesignicons.com/history)." required: false type: string assumed_state: diff --git a/source/lovelace/badges.markdown b/source/lovelace/badges.markdown index a5c40f10b0a8..4f9512c2fca6 100644 --- a/source/lovelace/badges.markdown +++ b/source/lovelace/badges.markdown @@ -30,7 +30,7 @@ name: default: Name of entity icon: required: false - description: Overwrites icon or entity picture. You can use any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com). Prefix the icon name with `mdi:`, ie `mdi:home`. + description: Overwrites icon or entity picture. You can use any icon from [MaterialDesignIcons.com](http://materialdesignicons.com). Prefix the icon name with `mdi:`, ie `mdi:home`. type: string default: Entity domain icon image: @@ -87,7 +87,7 @@ name: type: string icon: required: false - description: Overwrites icon or entity picture. You can use any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com). Prefix the icon name with `mdi:`, ie `mdi:home`. + description: Overwrites icon or entity picture. You can use any icon from [MaterialDesignIcons.com](http://materialdesignicons.com). Prefix the icon name with `mdi:`, ie `mdi:home`. type: string image: required: false diff --git a/source/lovelace/dashboards-and-views.markdown b/source/lovelace/dashboards-and-views.markdown index 569fb8dd9af7..4f5ea17cdf90 100644 --- a/source/lovelace/dashboards-and-views.markdown +++ b/source/lovelace/dashboards-and-views.markdown @@ -110,7 +110,7 @@ dashboards: type: string icon: required: false - description: The icon to show in the sidebar. You can use any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com). Prefix the icon name with `mdi:`, ie `mdi:home`. + description: The icon to show in the sidebar. You can use any icon from [MaterialDesignIcons.com](http://materialdesignicons.com). Prefix the icon name with `mdi:`, ie `mdi:home`. type: string show_in_sidebar: required: false @@ -227,7 +227,7 @@ views: default: view index icon: required: false - description: Icon-name from Material Design Icons. You can use any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com). Prefix the icon name with `mdi:`, ie `mdi:home`. + description: Icon-name from Material Design Icons. You can use any icon from [MaterialDesignIcons.com](http://materialdesignicons.com). Prefix the icon name with `mdi:`, ie `mdi:home`. type: string panel: required: false diff --git a/source/lovelace/header-footer.markdown b/source/lovelace/header-footer.markdown index 5839927d531f..0284b3318208 100644 --- a/source/lovelace/header-footer.markdown +++ b/source/lovelace/header-footer.markdown @@ -69,7 +69,7 @@ entities: type: string icon: required: false - description: Override the entity icon. You can use any icon from [MaterialDesignIcons.com](http://MaterialDesignIcons.com). Prefix the icon name with `mdi:`, ie `mdi:home`. + description: Override the entity icon. You can use any icon from [MaterialDesignIcons.com](http://materialdesignicons.com). Prefix the icon name with `mdi:`, ie `mdi:home`. type: string image: required: false From 6d01d7260fd9f33eab714f72783ed7403098634d Mon Sep 17 00:00:00 2001 From: Dima Boger Date: Mon, 15 Mar 2021 16:27:01 +0300 Subject: [PATCH 07/29] [Xiaomi Miio] Add example for vacuum segment clean with repetition (#16776) Co-authored-by: Franck Nijhof --- source/_integrations/xiaomi_miio.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/_integrations/xiaomi_miio.markdown b/source/_integrations/xiaomi_miio.markdown index 891be1a1854f..93bcf1ef1f10 100644 --- a/source/_integrations/xiaomi_miio.markdown +++ b/source/_integrations/xiaomi_miio.markdown @@ -1371,6 +1371,22 @@ automation: segments: 1 ``` +The original app for Xiaomi vacuum has a nice feature of room cleaning with repetition, you can achieve the same result with repeating segments: + +```yaml +automation: + - alias: "Vacuum kitchen" + trigger: + - event: start + platform: homeassistant + action: + - service: xiaomi_miio.vacuum_clean_segment + target: + entity_id: vacuum.xiaomi_vacuum + data: + segments: [1, 1] +``` + ### Attributes In addition to [all of the attributes provided by the `vacuum` component](/integrations/vacuum/#attributes), From 040aed613a781d930554c9d5533a40af06b11a24 Mon Sep 17 00:00:00 2001 From: cnico Date: Mon, 15 Mar 2021 14:39:13 +0100 Subject: [PATCH 08/29] generic camera : example of secured access (#16991) Co-authored-by: Franck Nijhof --- source/_integrations/generic.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/_integrations/generic.markdown b/source/_integrations/generic.markdown index f545c310732d..8f1fd8957ef0 100644 --- a/source/_integrations/generic.markdown +++ b/source/_integrations/generic.markdown @@ -139,3 +139,19 @@ camera: still_image_url: http://194.218.96.92/jpg/image.jpg stream_source: rtsp://194.218.96.92:554 ``` + +### Secured access to the camera + +To access a camera that requires secured access for still image or live stream (an HIK in my case). + +```yaml +camera: + - platform: generic + still_image_url: "http://192.168.1.100/ISAPI/Streaming/Channels/101/picture" + stream_source: "rtsp://USERNAME:PASSWORD@192.168.1.100:554/Streaming/Channels/102" + name: "My Camera" + verify_ssl: false + username: "USERNAME" + password: "PASSWORD" + authentication: digest +``` From 259fb6f8959f9b9b1c52347fcb0848d61706d994 Mon Sep 17 00:00:00 2001 From: Juri Calleri Date: Mon, 15 Mar 2021 15:34:29 +0100 Subject: [PATCH 09/29] added another choose example (#16972) Co-authored-by: Franck Nijhof --- source/_docs/scripts.markdown | 58 +++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index a04eeb290dc5..7c5813f1dfb4 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -610,6 +610,64 @@ automation: {% endraw %} + +More `choose` can be used together. This is the case of an IF-IF. + +The following example shows how a single automation can control entities that aren't related to each other but have in common the same trigger. + +When the sun goes below the horizon, the `porch` and `garden` lights must turn on. If someone is watching the TV in the living room, there is a high chance that someone is in that room, therefore the living room lights have to turn on too. The same concept applies to the `studio` room. + +{% raw %} + +```yaml +# Example with "if" and "if" +automation: + - alias: "Turn lights on when the sun gets dim and if some room is occupied" + trigger: + - platform: numeric_state + entity_id: sun.sun + attribute: elevation + below: 4 + action: + # This must always apply + - service: light.turn_on + data: + brightness: 255 + color_temp: 366 + target: + entity_id: + - light.porch + - light.garden + # IF a entity is ON + - choose: + - conditions: + - condition: state + entity_id: binary_sensor.livingroom_tv + state: "on" + sequence: + - service: light.turn_on + data: + brightness: 255 + color_temp: 366 + target: + entity_id: light.livingroom + # IF another entity not related to the previous, is ON + - choose: + - conditions: + - condition: state + entity_id: binary_sensor.studio_pc + state: "on" + sequence: + - service: light.turn_on + data: + brightness: 255 + color_temp: 366 + target: + entity_id: light.studio +``` + +{% endraw %} + [Script component]: /integrations/script/ [automations]: /getting-started/automation-action/ [Alexa/Amazon Echo]: /integrations/alexa/ From fff7349f97785b981b390e9ae521c7d5024b69cd Mon Sep 17 00:00:00 2001 From: Kevin Eifinger Date: Mon, 15 Mar 2021 15:42:06 +0100 Subject: [PATCH 10/29] Remove additional ")" (#16980) --- source/_integrations/xiaomi_miio.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/xiaomi_miio.markdown b/source/_integrations/xiaomi_miio.markdown index 93bcf1ef1f10..3174c9f0ca3c 100644 --- a/source/_integrations/xiaomi_miio.markdown +++ b/source/_integrations/xiaomi_miio.markdown @@ -34,7 +34,7 @@ ha_platforms: The `xiaomi_miio` integration supports the following devices: - [Xiaomi Gateway](#xiaomi-gateway) -- [Xiaomi device tracker (Xiaomi Mi WiFi Repeater 2)](#xiaomi-device-tracker-xiaomi-mi-wifi-repeater-2)) +- [Xiaomi device tracker (Xiaomi Mi WiFi Repeater 2)](#xiaomi-device-tracker-xiaomi-mi-wifi-repeater-2) - [Xiaomi Air Purifier and Humidifier](#xiaomi-air-purifier-and-humidifier) - [Xiaomi Air Quality Index Monitor](#xiaomi-air-quality-index-monitor) - [Xiaomi Mi Air Quality Monitor](#xiaomi-mi-air-quality-monitor) From 9dad5841976ea1dbbbf58818e34f4b40c82b3c82 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Mar 2021 15:47:36 +0100 Subject: [PATCH 11/29] Bump nokogiri from 1.11.1 to 1.11.2 (#16964) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.11.1 to 1.11.2. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.11.1...v1.11.2) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index ff95f49b6f22..9da9617fe7d1 100644 --- a/Gemfile +++ b/Gemfile @@ -21,7 +21,7 @@ group :jekyll_plugins do end gem 'sinatra', '2.1.0' -gem 'nokogiri', '1.11.1' +gem 'nokogiri', '1.11.2' # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem # and associated library diff --git a/Gemfile.lock b/Gemfile.lock index bc95e45e3d30..c98ef7a0bb27 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -74,10 +74,10 @@ GEM multi_json (1.15.0) mustermann (1.1.1) ruby2_keywords (~> 0.0.1) - nokogiri (1.11.1) + nokogiri (1.11.2) mini_portile2 (~> 2.5.0) racc (~> 1.4) - nokogiri (1.11.1-x64-mingw32) + nokogiri (1.11.2-x64-mingw32) racc (~> 1.4) pathutil (0.16.2) forwardable-extended (~> 2.6) @@ -130,7 +130,7 @@ DEPENDENCIES jekyll-sitemap (= 1.4.0) jekyll-time-to-read (= 0.1.2) jekyll-toc (= 0.17.0) - nokogiri (= 1.11.1) + nokogiri (= 1.11.2) rake (= 13.0.3) sass-globbing (= 1.1.5) sassc (= 2.1.0) From d7295df4676996f6f97700d8fafcf6223eaae353 Mon Sep 17 00:00:00 2001 From: Philip Allgaier Date: Mon, 15 Mar 2021 15:48:34 +0100 Subject: [PATCH 12/29] Tweaks to the blueprint selectors (#17007) --- source/_docs/blueprint/selectors.markdown | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown index 28b6fee89bf8..900abfe07de5 100644 --- a/source/_docs/blueprint/selectors.markdown +++ b/source/_docs/blueprint/selectors.markdown @@ -10,7 +10,7 @@ Some selectors can, for example, show a toggle button to turn something on or off, while another select can filter a list of devices to show only devices that have motion-sensing capabilities. -Having the good selectors set on your blueprint automations inputs makes a +Having good selectors set on your blueprint automation inputs makes a blueprint easier to use from the UI. The following selectors are currently available: @@ -53,7 +53,7 @@ The add-on selector allows the user to input an add-on slug. On the user interface, it will list all installed add-ons and use the slug of the selected add-on. -![Screenshot of an Add-on selector](/images/blueprints/selector-addon.png) +![Screenshot of an add-on selector](/images/blueprints/selector-addon.png) This selector does not have any other options; therefore, it only has its key. @@ -71,7 +71,7 @@ and entities that are assigned to those areas. For example, the areas list could be limited to areas with entities provided by the [ZHA](/integrations/zha) integration. -In its most basic form, it doesn't require any options, which will show +In its most basic form, this selector doesn't require any options, which will show all areas. ```yaml @@ -183,9 +183,9 @@ A device selector can filter the list of devices, based on things like the manufacturer or model of the device, the entities the device provides or based on the domain that provided the device. -![Screenshot of an device selector](/images/blueprints/selector-device.png) +![Screenshot of a device selector](/images/blueprints/selector-device.png) -In its most basic form, it doesn't require any options, which will show +In its most basic form, this selector doesn't require any options, which will show all devices. ```yaml @@ -270,7 +270,7 @@ entity. ![Screenshot of an entity selector](/images/blueprints/selector-entity.png) -In its most basic form, it doesn't require any options, which will show +In its most basic form, this selector doesn't require any options, which will show all entities. ```yaml @@ -329,7 +329,7 @@ On the user interface, the input can either be in a slider or number mode. Both modes limit the user input by a minimal and maximum value, and can have a unit of measurement to go with it. -In its most basic form, it requires a minimal and maximum value: +In its most basic form, this selector requires a minimal and maximum value: ```yaml number: @@ -425,7 +425,7 @@ options: ## Target selector -The target selector is a rather special selector, allowing the user to selector +The target selector is a rather special selector, allowing the user to select targeted entities, devices or areas for service calls. The value of the input will contain a special target format, that is accepted by service calls. @@ -436,7 +436,7 @@ those properties in those areas. ![Screenshot of a target selector](/images/blueprints/selector-target.png) -Its most basic form, doesn't require any options, which will allow the +In its most basic form, this selector does not require any options, which will allow the user to target any entity, device or area available in the system. ```yaml From 59853a98c4b47a45e8dce6d50227a9265998d73f Mon Sep 17 00:00:00 2001 From: ejars Date: Mon, 15 Mar 2021 15:52:32 +0100 Subject: [PATCH 13/29] corrected parameter in Service `opentherm_gw.set_hot_water_setpoint` (#16990) second parameter is temperature instead of dhw_override --- source/_integrations/opentherm_gw.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/opentherm_gw.markdown b/source/_integrations/opentherm_gw.markdown index e83c31cbd512..cff008c9358c 100644 --- a/source/_integrations/opentherm_gw.markdown +++ b/source/_integrations/opentherm_gw.markdown @@ -149,7 +149,7 @@ Set the domestic hot water setpoint on the OpenTherm Gateway. Not all boilers su | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | | `gateway_id` | no | The `gateway_id` as specified during configuration. -| `dhw_override` | no | The domestic hot water setpoint to set on the gateway. Values between 0 and 90 are accepted, but not all boilers support this range. Check the values of the `slave_dhw_min_setp` and `slave_dhw_max_setp` sensors to see the supported range on your boiler. +| `temperature` | no | The domestic hot water setpoint to set on the gateway. Values between 0 and 90 are accepted, but not all boilers support this range. Check the values of the `slave_dhw_min_setp` and `slave_dhw_max_setp` sensors to see the supported range on your boiler. ### Service `opentherm_gw.set_gpio_mode` From f81f8985cba68c5c85add727b1711efeb1b9b804 Mon Sep 17 00:00:00 2001 From: Matheson Steplock Date: Mon, 15 Mar 2021 10:59:39 -0400 Subject: [PATCH 14/29] added missing instructions (#16933) --- source/_includes/installation/operating_system.md | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_includes/installation/operating_system.md b/source/_includes/installation/operating_system.md index 1b0b235406e1..043b98471110 100644 --- a/source/_includes/installation/operating_system.md +++ b/source/_includes/installation/operating_system.md @@ -100,6 +100,7 @@ _Select and copy the URL or use the "copy" button that appear when you hover it. 1. Put the SD card in your card reader. 2. Open balenaEtcher, select the Home Assistant image and flash it to the SD card. 3. Unmount the SD card and remove it from your card reader. +4. Once completed you will be able to reach Home Assistant on homeassistant.local:8123. If you are running an older Windows version or have a stricter network configuration, you might need to access Home Assistant at homeassistant:8123 or `http://X.X.X.X:8123` (replace X.X.X.X with your {{site.installation.types[page.installation_type].board}}’s IP address). {% else %} ### Create the Virtual Machine From db18cb2a3aeeb18f127fe084ea1c80cd77b67b3f Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Mon, 15 Mar 2021 21:46:48 +0100 Subject: [PATCH 15/29] Add report model to Yeelight documentation (#17015) --- source/_integrations/yeelight.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/yeelight.markdown b/source/_integrations/yeelight.markdown index a38a08f01dc1..dc8072535748 100644 --- a/source/_integrations/yeelight.markdown +++ b/source/_integrations/yeelight.markdown @@ -173,6 +173,7 @@ This integration is tested to work with the following models. If you have a diff | `color1` | YLDP03YL | LED Bulb (Color) - E26 | | `color2` | YLDP06YL | LED Bulb (Color) - 2nd generation | | `color4` | YLDP13YL | LED Bulb 1S (Color) | +| `color6` | YLDP13AYL | LED Bulb 1S (Color) | | `strip1` | YLDD01YL | Lightstrip (Color) | | `strip1` | YLDD02YL | Lightstrip (Color) | | ? | YLDD04YL | Lightstrip (Color) | From 2a84f1e1ff0e71331fc3c022e84ca2073e48f487 Mon Sep 17 00:00:00 2001 From: Marty Cochrane <56393197+martycochrane@users.noreply.github.com> Date: Tue, 16 Mar 2021 00:47:13 +0100 Subject: [PATCH 16/29] Update verisure documentation for 2fa bug (#17013) * Update verisure documentation for 2fa bug * fixed textlint suggestions * Full stops on list items * Changed title & Removed data * Changed title and location * Added details about why to create a new user * reword steps * added recommended note style * Change login to be an action * typo * changed login to log in as it's an action * Changed mypages to My Pages * Small Tweaks Co-authored-by: Franck Nijhof --- source/_integrations/verisure.markdown | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/_integrations/verisure.markdown b/source/_integrations/verisure.markdown index 97a90b73d591..0d20e8bcae40 100644 --- a/source/_integrations/verisure.markdown +++ b/source/_integrations/verisure.markdown @@ -104,6 +104,19 @@ giid: type: string {% endconfiguration %} +## 2 Factor Authentication Prerequisite + +Verisure added 2FA rules to Verisure My Pages that aren't supported through their third-party API integration. If you have 2FA enabled, which is forced by default, you might not be able to use this integration. Here is the suggested way to deactivate 2FA (if it's allowed in your region). + +You can deactivate 2FA for your admin account and use that for Home Assistant but this isn't recommended. The steps below sets up a specific Home Assistant user and gives it restricted access. + +1. Log in to Verisure My Pages as your admin user and create a new admin user for Home Assistant. +2. Log in as your newly created Home Assistant user, you'll be prompted to set up 2FA, do that and then log out. This will make sure the options below are available. +3. Log in as the Home Assistant user, browse to Account and subscription -> Account -> Login Credentials -> Disable 2FA.
This will only be available if the user is admin and has logged in once with 2FA, logged out and in again.
+4. Log in as your administrator again and change the Home Assistant user to a restricted user. +5. Change Home Assistant Verisure config to the new user credentials in Home Assistant. +6. Restart Home Assistant. + ## Alarm Control Panel The Verisure alarm control panel platform allows you to control your [Verisure](https://www.verisure.com/) Alarms. From 540557d635717917df8c4f4dc7a5119551ac638c Mon Sep 17 00:00:00 2001 From: Ashton Lafferty Date: Tue, 16 Mar 2021 01:18:30 -0600 Subject: [PATCH 17/29] Small fix (#17021) --- source/_docs/locked_out.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/locked_out.md b/source/_docs/locked_out.md index e7be0bfe88ba..d2fba55b095f 100644 --- a/source/_docs/locked_out.md +++ b/source/_docs/locked_out.md @@ -12,7 +12,7 @@ or need to recover your data. If you are still logged in to the web interface with your user, then you are in luck. Add a new user as an administrator and give the new user a password you can remember. Then log out, and log in with this new user. You may then reset your password via this new administrator account (and then delete this new account), or you can delete your old user account. Either way, your configuration will remain, and you don't have to do a new onboarding process. -If you’ve forgotten your username, then deleting the files mentioned above will be necessary to start a new onboarding process. +If you’ve forgotten your username, then deleting the files mentioned further below will be necessary to start a new onboarding process. #### To reset a user's password, via console If you know the username, but not the password and you can access the [Home Assistant console](https://www.home-assistant.io/hassio/commandline/) and use the command below: From 52a872b5a4ad36e03f5378968e21950e0ff0e70a Mon Sep 17 00:00:00 2001 From: Ashton Lafferty Date: Tue, 16 Mar 2021 05:10:54 -0600 Subject: [PATCH 18/29] Update output of help (#17023) --- source/_includes/common-tasks/commandline.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/source/_includes/common-tasks/commandline.md b/source/_includes/common-tasks/commandline.md index bb03546d2bc3..25e8a28d22e7 100644 --- a/source/_includes/common-tasks/commandline.md +++ b/source/_includes/common-tasks/commandline.md @@ -67,21 +67,30 @@ Usage: Available Commands: addons Install, update, remove and configure Home Assistant add-ons + audio Audio device handling. authentication Authentication for Home Assistant users. + banner Prints the CLI Home Assistant banner along with some useful information + cli Get information, update or configure the Home Assistant cli backend core Provides control of the Home Assistant Core dns Get information, update or configure the Home Assistant DNS server + docker Docker backend specific for info and OCI configuration hardware Provides hardware information about your system help Help about any command host Control the host/system that Home Assistant is running on info Provides a general Home Assistant information overview + jobs Get information and manage running jobs + multicast Get information, update or configure the Home Assistant Multicast + network Network specific for updating, info and configuration imports + observer Get information, update or configure the Home Assistant observer os Operating System specific for updating, info and configuration imports + resolution Resolution center of Supervisor, show issues and suggest solutions snapshots Create, restore and remove snapshot backups supervisor Monitor, control and configure the Home Assistant Supervisor Flags: --api-token string Home Assistant Supervisor API token --config string Optional config file (default is $HOME/.homeassistant.yaml) - --endpoint string Endpoint for Home Assistant Supervisor ( default is 'supervisor' ) + --endpoint string Endpoint for Home Assistant Supervisor (default is 'supervisor') -h, --help help for ha --log-level string Log level (defaults to Warn) --no-progress Disable the progress spinner From 78febbe131ef134f8823e99b013e71e3e21e46a3 Mon Sep 17 00:00:00 2001 From: David Beitey Date: Tue, 16 Mar 2021 15:48:59 +0000 Subject: [PATCH 19/29] Wrap service call docs template example value in quotes (#17025) --- source/_docs/scripts/service-calls.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/scripts/service-calls.markdown b/source/_docs/scripts/service-calls.markdown index b61170a4cfd1..896126b7aa4e 100644 --- a/source/_docs/scripts/service-calls.markdown +++ b/source/_docs/scripts/service-calls.markdown @@ -103,7 +103,7 @@ target: thermostat.downstairs {% endif %} data: - temperature: {{ 22 - distance(states.device_tracker.paulus) }} + temperature: "{{ 22 - distance(states.device_tracker.paulus) }}" ``` {% endraw %} From f464e9f18836258fd838784e457bd5f05849f20e Mon Sep 17 00:00:00 2001 From: anugs <36812514+anugs@users.noreply.github.com> Date: Tue, 16 Mar 2021 22:30:11 +0530 Subject: [PATCH 20/29] Update automation.markdown (#17027) --- source/_docs/automation.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_docs/automation.markdown b/source/_docs/automation.markdown index 85a9b72a15ef..1d1df61bd3cb 100644 --- a/source/_docs/automation.markdown +++ b/source/_docs/automation.markdown @@ -3,14 +3,14 @@ title: "Automating Home Assistant" description: "Steps to help you get automation setup in Home Assistant." --- -Home Assistant contains information about all your devices and services. This information is not only available for the user in the dashboard, it can also be used to trigger automations. And that's fun! +Home Assistant contains information about all your devices and services. This information is available for the user in the dashboard and it can be used to trigger automations. And that's fun! Automations in Home Assistant allow you to automatically respond to things that happen. You can turn the lights on at sunset or pause the music when you receive a call. -If you are just starting out, we strongly suggest you start with blueprint automations. These are ready-made automations by the community that you only need to configure. +If you are just starting out, we recommend that you start with blueprint automations. These are ready-made automations by the community that you only need to configure. ### [Learn about automation blueprints »](/docs/automation/using_blueprints/) -If you got the hang of blueprints and need more, it's time for the next step. But before we can start creating automations, you will need to learn about the automation basics. +If you have got the hang of blueprints and would like to explore more, it's time for the next step. But before you start creating automations, you will need to learn about the automation basics. ### [Learn about automation basics »](/docs/automation/basics/) From 172011f8275c5a25afad4a87b9b9de7fa90303d8 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 16 Mar 2021 21:35:45 +0100 Subject: [PATCH 21/29] Remove confusing line from History docs (#17032) --- source/_integrations/history.markdown | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/source/_integrations/history.markdown b/source/_integrations/history.markdown index 21e45b807c99..c792f1414f95 100644 --- a/source/_integrations/history.markdown +++ b/source/_integrations/history.markdown @@ -164,15 +164,15 @@ The following characters can be used in entity globs: The history is stored in a SQLite database `home-assistant_v2.db` within your configuration directory unless the `recorder` integration is set up differently. - - events table is all events except `time_changed` that happened while recorder integration was running. - - states table contains all the `new_state` values of `state_changed` events. - - Inside the states table you have: - - `entity_id`: the entity_id of the entity - - `state`: the state of the entity - - `attributes`: JSON of the state attributes - - `last_changed`: timestamp last time the state has changed. A state_changed event can happen when just attributes change. - - `last_updated`: timestamp anything has changed (state, attributes) - - `created`: timestamp this entry was inserted into the database +- events table is all events except `time_changed` that happened while recorder integration was running. +- states table contains all the `new_state` values of `state_changed` events. +- Inside the states table you have: + - `entity_id`: the entity_id of the entity + - `state`: the state of the entity + - `attributes`: JSON of the state attributes + - `last_changed`: timestamp last time the state has changed. + - `last_updated`: timestamp anything has changed (state, attributes) + - `created`: timestamp this entry was inserted into the database When the `history` integration queries the states table it only selects states where the state has changed: `WHERE last_changed=last_updated` From 19178b20da33e0bf7c0bd734043c100fd3e033cc Mon Sep 17 00:00:00 2001 From: fredericks1982 <32093333+fredericks1982@users.noreply.github.com> Date: Wed, 17 Mar 2021 22:12:45 +0100 Subject: [PATCH 22/29] Removed repeated word (#17043) --- source/_docs/configuration/templating.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 73b694f2075f..40fa62422654 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -63,7 +63,7 @@ Extensions allow templates to access all of the Home Assistant specific states a ### Limited Templates -Templates for some triggers [triggers](/docs/automation/trigger/) as well as `trigger_variables` only support a subset of the Home Assistant template extensions. This subset is referred to as "Limited Templates". +Templates for some [triggers](/docs/automation/trigger/) as well as `trigger_variables` only support a subset of the Home Assistant template extensions. This subset is referred to as "Limited Templates". ### States From e69ebc0ce5dfaab8e3b35d920981083be7511932 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Mar 2021 09:02:04 +0100 Subject: [PATCH 23/29] Bump kramdown from 2.3.0 to 2.3.1 (#17046) Bumps [kramdown](https://github.com/gettalong/kramdown) from 2.3.0 to 2.3.1. - [Release notes](https://github.com/gettalong/kramdown/releases) - [Changelog](https://github.com/gettalong/kramdown/blob/master/doc/news.page) - [Commits](https://github.com/gettalong/kramdown/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index c98ef7a0bb27..c77920e59cc0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -61,7 +61,7 @@ GEM nokogiri (~> 1.10) jekyll-watch (2.2.1) listen (~> 3.0) - kramdown (2.3.0) + kramdown (2.3.1) rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) From d01307c1131a99ec02fe29e466a7e34455340c50 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 18 Mar 2021 17:18:11 +0000 Subject: [PATCH 24/29] Add ESPHome blog --- ...18-nabu-casa-has-acquired-esphome.markdown | 58 ++++++++++++++++++ .../social.png | Bin 0 -> 56363 bytes source/images/sponsors/esphome.svg | 1 + 3 files changed, 59 insertions(+) create mode 100644 source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown create mode 100644 source/images/blog/2021-03-18-nabu-casa-acquired-esphome/social.png create mode 100644 source/images/sponsors/esphome.svg diff --git a/source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown b/source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown new file mode 100644 index 000000000000..f7eac73ff366 --- /dev/null +++ b/source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown @@ -0,0 +1,58 @@ +--- +layout: post +title: "Nabu Casa has acquired ESPHome" +description: "Nabu Casa has acquires ESPHome to ensure that the project can continue to flourish as a free and open source project." +date: 2021-03-18 00:00:00 +date_formatted: "March 18, 2021" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Announcements +og_image: /images/blog/2021-03-18-nabu-casa-acquired-esphome/social.png +feedback: true +--- + +Today I'm happy to announce that [ESPHome](https://esphome.io) is from now on under the [Nabu Casa](https://www.nabucasa.com) umbrella. ESPHome is the easiest way to program ESP8266 and ESP32 devices and integrate them into Home Assistant. It has become an important piece of the Home Assistant ecosystem, so much so that we want to ensure that the project can continue to flourish as a free and open source project. This week Nabu Casa came to an agreement to acquire the ESPHome project from [Otto Winter](https://github.com/ottowinter), the founder of ESPHome. + +Otto started ESPHome three years ago to make programming ESP devices as easy as possible. With ESPHome, users write simple YAML files in which you describe what components are attached to what pins of the ESP device. ESPHome will then make this available in Home Assistant. No extra work necessary. Super simple. + +{% details Example ESPHome configuration %} + +The following ESPHome YAML example will program your ESP device. When you plug it in, it will make the light on pin 16 available in Home Assistant. + +```yaml +esphome: + name: esp32_light + platform: ESP32 + board: esp32dev + +wifi: + ssid: "MySSID" + password: "supersecret" + +api: + +light: + - platform: binary + name: "Desk Lamp" + output: light_output + +output: + - id: light_output + platform: gpio + pin: GPIO16 +``` + +{% enddetails %} + +ESPHome logo + +Otto’s vision was right and ESPHome has become the easiest way for people to integrate ESP devices in Home Assistant. For example, the [tag reader](/blog/2020/09/15/home-assistant-tags/#standalone-tag-reader) is based on ESPHome, and many other projects are too. + +As the project grew, so did Otto’s obligations in his personal life until they could no longer be combined. With the acquisition of ESPHome, Nabu Casa now owns the copyright of Otto’s code and the ESPHome organizations on GitHub, Docker, etc. Otto has shut down his Patreon account. Otto will step back from being part of the project management side of things. The project will continue as an open source project with the current ESPHome development team, [@jesserockz](https://github.com/jesserockz) and [@glmnet](https://github.com/glmnet). Otto will still be around and help out on development as his time allows. + +We are going to bring our experience gained from the Home Assistant project and apply it to ESPHome, like focus on community and ease of use. If you have any ideas, make sure to share them in the [ESPHome discord](https://discord.gg/KhAMKrd). + +**About Nabu Casa**
+Nabu Casa was founded by the founders of Home Assistant. It exists to make the privacy-centered smart home accessible to everyone. Nabu Casa has no investors and is solely funded by users via Home Assistant Cloud subscriptions. With Home Assistant, Nabu Casa already works on making sure the brains of your home are the best it can be. And with ESPHome they will help you make sure that other devices are too. + diff --git a/source/images/blog/2021-03-18-nabu-casa-acquired-esphome/social.png b/source/images/blog/2021-03-18-nabu-casa-acquired-esphome/social.png new file mode 100644 index 0000000000000000000000000000000000000000..5acda059f1eab2d602469350a3330be291480b1d GIT binary patch literal 56363 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 QIAN|`k-MCEQRn{u0*m-O%>V!Z literal 0 HcmV?d00001 diff --git a/source/images/sponsors/esphome.svg b/source/images/sponsors/esphome.svg new file mode 100644 index 000000000000..067154be308a --- /dev/null +++ b/source/images/sponsors/esphome.svg @@ -0,0 +1 @@ + \ No newline at end of file From 0c2aab05ecd14224c45098469e17448258a33f30 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 18 Mar 2021 17:22:41 +0000 Subject: [PATCH 25/29] Add social image on top --- .../_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown b/source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown index f7eac73ff366..96e94d2beb40 100644 --- a/source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown +++ b/source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown @@ -12,6 +12,9 @@ og_image: /images/blog/2021-03-18-nabu-casa-acquired-esphome/social.png feedback: true --- +Nabu Casa heart ESPHome + + Today I'm happy to announce that [ESPHome](https://esphome.io) is from now on under the [Nabu Casa](https://www.nabucasa.com) umbrella. ESPHome is the easiest way to program ESP8266 and ESP32 devices and integrate them into Home Assistant. It has become an important piece of the Home Assistant ecosystem, so much so that we want to ensure that the project can continue to flourish as a free and open source project. This week Nabu Casa came to an agreement to acquire the ESPHome project from [Otto Winter](https://github.com/ottowinter), the founder of ESPHome. Otto started ESPHome three years ago to make programming ESP devices as easy as possible. With ESPHome, users write simple YAML files in which you describe what components are attached to what pins of the ESP device. ESPHome will then make this available in Home Assistant. No extra work necessary. Super simple. From c995bef4839b68458ea2e525e5b5db1b9a9046c7 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 18 Mar 2021 18:18:48 -0700 Subject: [PATCH 26/29] Typo --- .../_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown b/source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown index 96e94d2beb40..0fd07eb7b9c4 100644 --- a/source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown +++ b/source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown @@ -1,7 +1,7 @@ --- layout: post title: "Nabu Casa has acquired ESPHome" -description: "Nabu Casa has acquires ESPHome to ensure that the project can continue to flourish as a free and open source project." +description: "Nabu Casa has acquired ESPHome to ensure that the project can continue to flourish as a free and open source project." date: 2021-03-18 00:00:00 date_formatted: "March 18, 2021" author: Paulus Schoutsen From 6296f4b837fa6e37d4b306cca440d25c035491ed Mon Sep 17 00:00:00 2001 From: jonwaland <33437424+jonwaland@users.noreply.github.com> Date: Fri, 19 Mar 2021 14:37:06 +1100 Subject: [PATCH 27/29] Update using_blueprints.markdown (#16910) Co-authored-by: Paulus Schoutsen --- source/_docs/automation/using_blueprints.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_docs/automation/using_blueprints.markdown b/source/_docs/automation/using_blueprints.markdown index a17617bacd12..61db6a92a1b3 100644 --- a/source/_docs/automation/using_blueprints.markdown +++ b/source/_docs/automation/using_blueprints.markdown @@ -44,3 +44,7 @@ The Home Assistant Community forums have a specific tag for blueprints. This tag [Visit the Home Assistant forums][blueprint-forums] [blueprint-forums]: /get-blueprints + +## Troubleshooting missing automations + +When you're creating automations using blueprints and they don't appear in the UI, make sure that you add back `automation: !include automations.yaml` from the default configuration to your `configuration.yaml`. From 4b5b185cb47ecd1d779aa58a34d3e159bb690071 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Mar 2021 09:55:47 +0100 Subject: [PATCH 28/29] Bump textlint from 11.8.2 to 11.8.3 (#17054) Bumps [textlint](https://github.com/textlint/textlint) from 11.8.2 to 11.8.3. - [Release notes](https://github.com/textlint/textlint/releases) - [Commits](https://github.com/textlint/textlint/compare/textlint@11.8.2...textlint@11.8.3) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 274 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 138 insertions(+), 138 deletions(-) diff --git a/package-lock.json b/package-lock.json index 631b1bc547b0..56134db43f02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -104,56 +104,56 @@ "dev": true }, "@textlint/ast-tester": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-2.3.2.tgz", - "integrity": "sha512-4e1kyqsHks5POcQmuh7ITVrU/dbYyRUfQarQbeVRPP271n2HnlgnoYyZ10yV2Sb/Ksw+lQf7DPSnwNewXdCWww==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-2.3.3.tgz", + "integrity": "sha512-FNV4B0+kbvVuxvKEEf3NdPtArile940wtJeQx6flw6SLabEYDP+ZVwg7FVO17zopyIsOPmT4yPOJbt93BnDHng==", "dev": true, "requires": { - "@textlint/ast-node-types": "^4.4.1" + "@textlint/ast-node-types": "^4.4.2" }, "dependencies": { "@textlint/ast-node-types": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.1.tgz", - "integrity": "sha512-2QBwlqi2SU83vTHibfdTxGiLdIqR0btNyMGfVl0bwA6FI85HnSYoGFLrdCnq2V0nxpbhuvwzcm2Ja81w0VkMGA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz", + "integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==", "dev": true } } }, "@textlint/ast-traverse": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-2.3.2.tgz", - "integrity": "sha512-Dt1s/6x0XWhUNFH2rAa9gL6ODtq232BZuBHuHiOg+SrVwzl+VjOfa3fMQ0LoYixGSyDtwqAlksWcC0KyLz0eSw==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-2.3.3.tgz", + "integrity": "sha512-L+iVejKaethlUKvFyQtBs373GAA5LJCkraAdbL6F6cOiCviKqpFf9HQmdCQAyYOGrjs30LgpsOLsZACgBJ7uOg==", "dev": true, "requires": { - "@textlint/ast-node-types": "^4.4.1" + "@textlint/ast-node-types": "^4.4.2" }, "dependencies": { "@textlint/ast-node-types": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.1.tgz", - "integrity": "sha512-2QBwlqi2SU83vTHibfdTxGiLdIqR0btNyMGfVl0bwA6FI85HnSYoGFLrdCnq2V0nxpbhuvwzcm2Ja81w0VkMGA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz", + "integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==", "dev": true } } }, "@textlint/feature-flag": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-3.3.2.tgz", - "integrity": "sha512-7ErQ/UF0IBAd+PkQNBD7yYCDqL2o6leErMDENSWAgUHWLy5TcHr3Orn7qswtBMW5gIyXW9lh+EpllwLJ5qv35w==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-3.3.3.tgz", + "integrity": "sha512-YLbKeckvIu4a+IZv/nHW+BGyYZBdCSJxtKyEp8HTfKam8AC26bdU0ryzO7xmmHN0FdPNwAn67AfZTWssKcWUVg==", "dev": true, "requires": { "map-like": "^2.0.0" } }, "@textlint/fixer-formatter": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-3.3.2.tgz", - "integrity": "sha512-aTEyH/rHSzxRLrluSjNhDnMSgIYK60J5AAgprKJCkb9h3dDRuNoiJ+BXh5FXVSSm1tGF0d8pu+Ph8OFBgQOchQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-3.3.3.tgz", + "integrity": "sha512-4UF1mNFQHB5iDFNFBSK3ss8c5NiAgGxLXijATXJ3SSjhiTb3sQSX3RcB1wMwI0/gcizRm3r5j16Kelv8IOrbzA==", "dev": true, "requires": { - "@textlint/module-interop": "^1.2.2", - "@textlint/types": "^1.5.2", + "@textlint/module-interop": "^1.2.3", + "@textlint/types": "^1.5.3", "chalk": "^1.1.3", "debug": "^4.3.1", "diff": "^4.0.2", @@ -165,18 +165,18 @@ }, "dependencies": { "@textlint/ast-node-types": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.1.tgz", - "integrity": "sha512-2QBwlqi2SU83vTHibfdTxGiLdIqR0btNyMGfVl0bwA6FI85HnSYoGFLrdCnq2V0nxpbhuvwzcm2Ja81w0VkMGA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz", + "integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==", "dev": true }, "@textlint/types": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.2.tgz", - "integrity": "sha512-IdS0h2MCzdY+wjM0+qvl8IW/IxhmVFAVrGu5TmIBpJkihIV7WMa3ITFXIVb0oqwnePUmyLBRIVsCtC66E3QbfQ==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.3.tgz", + "integrity": "sha512-xWyqdZrBUs66f8hKm3QZO2NEa6mqZAL0nTSBKu2U2Ob9R5r81N/WPvvz5mEqPVPRZrf0hi/lNerFzEIZH4YgnQ==", "dev": true, "requires": { - "@textlint/ast-node-types": "^4.4.1" + "@textlint/ast-node-types": "^4.4.2" } }, "ansi-regex": { @@ -264,18 +264,18 @@ } }, "@textlint/kernel": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-3.4.2.tgz", - "integrity": "sha512-PpxAtvLGI9ewn+Dbt4j0KMfmMM39/AY3cikmZffu59nyTdIymXMeVMEVkpVZTEUk5OlL27RAON9FF+2u+0fshg==", - "dev": true, - "requires": { - "@textlint/ast-node-types": "^4.4.1", - "@textlint/ast-tester": "^2.3.2", - "@textlint/ast-traverse": "^2.3.2", - "@textlint/feature-flag": "^3.3.2", - "@textlint/source-code-fixer": "^3.4.2", - "@textlint/types": "^1.5.2", - "@textlint/utils": "^1.2.2", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-3.4.3.tgz", + "integrity": "sha512-kQUjkVC6kXVuTxVqhPuxgjEaONDH1hliRgi5tMyxGDD3c3IOJVeatutL9vqpbAMgJL7blyTaWSdOJdsqZfCW3g==", + "dev": true, + "requires": { + "@textlint/ast-node-types": "^4.4.2", + "@textlint/ast-tester": "^2.3.3", + "@textlint/ast-traverse": "^2.3.3", + "@textlint/feature-flag": "^3.3.3", + "@textlint/source-code-fixer": "^3.4.3", + "@textlint/types": "^1.5.3", + "@textlint/utils": "^1.2.3", "debug": "^4.3.1", "deep-equal": "^1.1.1", "map-like": "^2.0.0", @@ -283,18 +283,18 @@ }, "dependencies": { "@textlint/ast-node-types": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.1.tgz", - "integrity": "sha512-2QBwlqi2SU83vTHibfdTxGiLdIqR0btNyMGfVl0bwA6FI85HnSYoGFLrdCnq2V0nxpbhuvwzcm2Ja81w0VkMGA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz", + "integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==", "dev": true }, "@textlint/types": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.2.tgz", - "integrity": "sha512-IdS0h2MCzdY+wjM0+qvl8IW/IxhmVFAVrGu5TmIBpJkihIV7WMa3ITFXIVb0oqwnePUmyLBRIVsCtC66E3QbfQ==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.3.tgz", + "integrity": "sha512-xWyqdZrBUs66f8hKm3QZO2NEa6mqZAL0nTSBKu2U2Ob9R5r81N/WPvvz5mEqPVPRZrf0hi/lNerFzEIZH4YgnQ==", "dev": true, "requires": { - "@textlint/ast-node-types": "^4.4.1" + "@textlint/ast-node-types": "^4.4.2" } }, "debug": { @@ -309,15 +309,15 @@ } }, "@textlint/linter-formatter": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-3.3.2.tgz", - "integrity": "sha512-MRa8D1/x6pWycKTwb1QLjtY7GyjgcsYRfV0Gu0Aze5szCa3UDwZSewHycpcAGlIqr8AkqPRfyXi653M47eJ0rA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-3.3.3.tgz", + "integrity": "sha512-njm1VwfG1lVuc9TnzSecNaghRtIAdQVXULc1wHlBoingT/w+bz/SgPvw3eec/rUfzde6ms3O4dFAG3zPNdRoIQ==", "dev": true, "requires": { "@azu/format-text": "^1.0.1", "@azu/style-format": "^1.0.0", - "@textlint/module-interop": "^1.2.2", - "@textlint/types": "^1.5.2", + "@textlint/module-interop": "^1.2.3", + "@textlint/types": "^1.5.3", "chalk": "^1.1.3", "concat-stream": "^1.6.2", "debug": "^4.3.1", @@ -334,18 +334,18 @@ }, "dependencies": { "@textlint/ast-node-types": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.1.tgz", - "integrity": "sha512-2QBwlqi2SU83vTHibfdTxGiLdIqR0btNyMGfVl0bwA6FI85HnSYoGFLrdCnq2V0nxpbhuvwzcm2Ja81w0VkMGA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz", + "integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==", "dev": true }, "@textlint/types": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.2.tgz", - "integrity": "sha512-IdS0h2MCzdY+wjM0+qvl8IW/IxhmVFAVrGu5TmIBpJkihIV7WMa3ITFXIVb0oqwnePUmyLBRIVsCtC66E3QbfQ==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.3.tgz", + "integrity": "sha512-xWyqdZrBUs66f8hKm3QZO2NEa6mqZAL0nTSBKu2U2Ob9R5r81N/WPvvz5mEqPVPRZrf0hi/lNerFzEIZH4YgnQ==", "dev": true, "requires": { - "@textlint/ast-node-types": "^4.4.1" + "@textlint/ast-node-types": "^4.4.2" } }, "ansi-regex": { @@ -479,12 +479,12 @@ } }, "@textlint/markdown-to-ast": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-6.3.2.tgz", - "integrity": "sha512-uwndF3PRJ48wTVAEDSy0IAEVJg/scxpdZ1r+QKeGuFfdtaGSrtcgROI6qiVU1g/WNyNfQw+DAA7F8HfM+pmleg==", + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-6.3.3.tgz", + "integrity": "sha512-CG8igvwlmcHb/d2zXDXchXgqofnDsxQDYOMpsk4zv1EN8PL5ycijQgmKJ0yB0ZxFduv0AR22rnJvPtB4ymzCyQ==", "dev": true, "requires": { - "@textlint/ast-node-types": "^4.4.1", + "@textlint/ast-node-types": "^4.4.2", "debug": "^4.3.1", "remark-frontmatter": "^1.3.3", "remark-parse": "^5.0.0", @@ -494,9 +494,9 @@ }, "dependencies": { "@textlint/ast-node-types": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.1.tgz", - "integrity": "sha512-2QBwlqi2SU83vTHibfdTxGiLdIqR0btNyMGfVl0bwA6FI85HnSYoGFLrdCnq2V0nxpbhuvwzcm2Ja81w0VkMGA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz", + "integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==", "dev": true }, "debug": { @@ -597,34 +597,34 @@ } }, "@textlint/module-interop": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-1.2.2.tgz", - "integrity": "sha512-B8HPS129lOqzEpRcafYl/OJ2TDxfBw1jGfEhebzwt3kGoMd5pQVih+hUIOl+SfAmLWqCDEniaKn0gw1s+hjSXA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-1.2.3.tgz", + "integrity": "sha512-BHpF/NSOWZIBJVvwe1Aww9k7lh04lr8xrFpoDfmdp3QolrAakdd5xTso2U1kJpWeZatQgh4naSI2X7IUEM2b2Q==", "dev": true }, "@textlint/source-code-fixer": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-3.4.2.tgz", - "integrity": "sha512-mSGQNO8is21KcHgDh4S8Cx88r7uU+7xpzHLuEuzhgEZfgwz3+tnpk22TrEjNYe1V1+aseU9iCQegVQQr1wroKQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-3.4.3.tgz", + "integrity": "sha512-jXuVMICfnTkg8GKPpuL2gLgUt2IicgKIOAQHw8BN9vGRstdPDth37Qc9iIjM6b68TPbRnDLb7GCENdXYEQKpcg==", "dev": true, "requires": { - "@textlint/types": "^1.5.2", + "@textlint/types": "^1.5.3", "debug": "^4.3.1" }, "dependencies": { "@textlint/ast-node-types": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.1.tgz", - "integrity": "sha512-2QBwlqi2SU83vTHibfdTxGiLdIqR0btNyMGfVl0bwA6FI85HnSYoGFLrdCnq2V0nxpbhuvwzcm2Ja81w0VkMGA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz", + "integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==", "dev": true }, "@textlint/types": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.2.tgz", - "integrity": "sha512-IdS0h2MCzdY+wjM0+qvl8IW/IxhmVFAVrGu5TmIBpJkihIV7WMa3ITFXIVb0oqwnePUmyLBRIVsCtC66E3QbfQ==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.3.tgz", + "integrity": "sha512-xWyqdZrBUs66f8hKm3QZO2NEa6mqZAL0nTSBKu2U2Ob9R5r81N/WPvvz5mEqPVPRZrf0hi/lNerFzEIZH4YgnQ==", "dev": true, "requires": { - "@textlint/ast-node-types": "^4.4.1" + "@textlint/ast-node-types": "^4.4.2" } }, "debug": { @@ -639,38 +639,38 @@ } }, "@textlint/text-to-ast": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-3.3.2.tgz", - "integrity": "sha512-+DKAP62ho21KID8IcKy1kP6K+kUZk+Z0MwvS9u2l39J0cK+vX523KI+sA6AXxEhOMDA8zhdIsBf3onGvrAtyhA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-3.3.3.tgz", + "integrity": "sha512-Y1hRnI+PoCbomQZtnog31DCUgz/diW4X72F7x/bn/VkUg6xq55GAsn2OB4qWvduQMrA+71lOfBMK3tcGJ8Q4Mg==", "dev": true, "requires": { - "@textlint/ast-node-types": "^4.4.1" + "@textlint/ast-node-types": "^4.4.2" }, "dependencies": { "@textlint/ast-node-types": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.1.tgz", - "integrity": "sha512-2QBwlqi2SU83vTHibfdTxGiLdIqR0btNyMGfVl0bwA6FI85HnSYoGFLrdCnq2V0nxpbhuvwzcm2Ja81w0VkMGA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz", + "integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==", "dev": true } } }, "@textlint/textlint-plugin-markdown": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.3.2.tgz", - "integrity": "sha512-6Ph7ESKR48tEz5Pnog3PpvF84LU3jkADvr4iBkkVz9vLQt3KbqGnmk8EV94Y0hLEX+UrZKWmH3cJfh6O1Zy/eA==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.3.3.tgz", + "integrity": "sha512-AnScn1Qt7NMw3K0wNUtJYyGYr6DLe/wsnQbtLd3xjS+6Ky8C+6Ohd+ms1DKH0vRztc8huM/wmV7n5Bx+1qBevA==", "dev": true, "requires": { - "@textlint/markdown-to-ast": "^6.3.2" + "@textlint/markdown-to-ast": "^6.3.3" } }, "@textlint/textlint-plugin-text": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.3.2.tgz", - "integrity": "sha512-xnjad0bXaM6ZtgffuFKogHYkzXymUK3VTLP5MGA00kLitADlNUtwXQk82TebkXFcSPRhePU9+2XFipXNQDsg7g==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.3.3.tgz", + "integrity": "sha512-NKbCbiSYA8mdg74HR+GQDO9q7RRHimnQ88YL0vBtP2oq2x1HZccq0mHlw6dlL775YardBAoHu/qxyJbkxSXBgw==", "dev": true, "requires": { - "@textlint/text-to-ast": "^3.3.2" + "@textlint/text-to-ast": "^3.3.3" } }, "@textlint/types": { @@ -683,9 +683,9 @@ } }, "@textlint/utils": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-1.2.2.tgz", - "integrity": "sha512-7Mqcl9G9YYrPBv5d/tZ2NlWC66hTUpQEQxZEHDMTdF3gPmQUSNRNGjqUR9mhw00Wy8Wo6i3LUWuxwMT6heHNBQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-1.2.3.tgz", + "integrity": "sha512-jN0pbdOJkIAuqyBqsDvk3FYP6BF+YLMlVzE8xbjDhpw7dpr36iEGKGIuRQJZ0+8nq3CPY7W0EcK6o63QoPuPvQ==", "dev": true }, "@types/mdast": { @@ -1156,9 +1156,9 @@ } }, "graceful-fs": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.5.tgz", - "integrity": "sha512-kBBSQbz2K0Nyn+31j/w36fUfxkBW9/gfwRWdUY1ULReH3iokVJgddZAFcD1D0xlgTmFxJCbUkUclAlc6/IDJkw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, "has": { @@ -1194,9 +1194,9 @@ "dev": true }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "hosted-git-info": { @@ -1823,12 +1823,12 @@ "dev": true }, "object-is": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", - "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, @@ -2276,12 +2276,12 @@ "dev": true }, "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "is-core-module": "^2.1.0", + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, @@ -2534,22 +2534,22 @@ "dev": true }, "textlint": { - "version": "11.8.2", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-11.8.2.tgz", - "integrity": "sha512-YrTGagGzWKXYw6VjW4uhJ1y7LoW8zqWZIr8sWgeQVIFE84+G/cHPoZ8RhFlia+RZ4YryZPNOqevuF4vG+dbKNQ==", - "dev": true, - "requires": { - "@textlint/ast-node-types": "^4.4.1", - "@textlint/ast-traverse": "^2.3.2", - "@textlint/feature-flag": "^3.3.2", - "@textlint/fixer-formatter": "^3.3.2", - "@textlint/kernel": "^3.4.2", - "@textlint/linter-formatter": "^3.3.2", - "@textlint/module-interop": "^1.2.2", - "@textlint/textlint-plugin-markdown": "^5.3.2", - "@textlint/textlint-plugin-text": "^4.3.2", - "@textlint/types": "^1.5.2", - "@textlint/utils": "^1.2.2", + "version": "11.8.3", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-11.8.3.tgz", + "integrity": "sha512-UrknrF3Sgkksq9aI3Y0gs4FBRgAy2oaonAhLOufWs7kA0ulmj3FVYGPA5UPVEKQHUWbnuOaqDteLDs+/9hRc9g==", + "dev": true, + "requires": { + "@textlint/ast-node-types": "^4.4.2", + "@textlint/ast-traverse": "^2.3.3", + "@textlint/feature-flag": "^3.3.3", + "@textlint/fixer-formatter": "^3.3.3", + "@textlint/kernel": "^3.4.3", + "@textlint/linter-formatter": "^3.3.3", + "@textlint/module-interop": "^1.2.3", + "@textlint/textlint-plugin-markdown": "^5.3.3", + "@textlint/textlint-plugin-text": "^4.3.3", + "@textlint/types": "^1.5.3", + "@textlint/utils": "^1.2.3", "debug": "^4.3.1", "deep-equal": "^1.1.1", "file-entry-cache": "^5.0.1", @@ -2571,18 +2571,18 @@ }, "dependencies": { "@textlint/ast-node-types": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.1.tgz", - "integrity": "sha512-2QBwlqi2SU83vTHibfdTxGiLdIqR0btNyMGfVl0bwA6FI85HnSYoGFLrdCnq2V0nxpbhuvwzcm2Ja81w0VkMGA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz", + "integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==", "dev": true }, "@textlint/types": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.2.tgz", - "integrity": "sha512-IdS0h2MCzdY+wjM0+qvl8IW/IxhmVFAVrGu5TmIBpJkihIV7WMa3ITFXIVb0oqwnePUmyLBRIVsCtC66E3QbfQ==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.3.tgz", + "integrity": "sha512-xWyqdZrBUs66f8hKm3QZO2NEa6mqZAL0nTSBKu2U2Ob9R5r81N/WPvvz5mEqPVPRZrf0hi/lNerFzEIZH4YgnQ==", "dev": true, "requires": { - "@textlint/ast-node-types": "^4.4.1" + "@textlint/ast-node-types": "^4.4.2" } }, "debug": { @@ -3064,4 +3064,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 9024bd4959af..0e2ec72a7711 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "remark-lint-fenced-code-flag": "^2.0.1", "remark-lint-no-shell-dollars": "^2.0.2", "remark-stringify": "^9.0.1", - "textlint": "^11.8.2", + "textlint": "^11.8.3", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^2.1.5" }, From 08f8a98f60bf93986bd508ebf745c97f1bb959c6 Mon Sep 17 00:00:00 2001 From: Gerardo Castillo <32140109+altersis@users.noreply.github.com> Date: Fri, 19 Mar 2021 10:28:21 -0400 Subject: [PATCH 29/29] Original doc for the Leviosa Zone hub --- source/_integrations/leviosa_shades.markdown | 55 ++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 source/_integrations/leviosa_shades.markdown diff --git a/source/_integrations/leviosa_shades.markdown b/source/_integrations/leviosa_shades.markdown new file mode 100644 index 000000000000..091f956244f8 --- /dev/null +++ b/source/_integrations/leviosa_shades.markdown @@ -0,0 +1,55 @@ +--- +title: Leviosa Motor Blinds Zone hub +description: Instructions on how to integrate the Leviosa Zone hub into Home Assistant. +ha_category: + - Cover +ha_iot_class: Local Push +ha_release: 2021.4 +ha_domain: leviosa_shades +ha_codeowners: + - '@altersis' +ha_config_flow: true +ha_platforms: + - cover +--- + +This integration allows you to control [Leviosa Zone hubs](https://leviosashades.com/products/leviosa-zone) from [Leviosa Motor Shades](https://leviosashades.com/). + +## Configuration + +To Add Leviosa Shades to your Home Assistant instance, please configure your Leviosa Shades and Zones with the app before doing it in Home Assistant. Once done, take the following steps: + +- Browse to your Home Assistant instance. +- In the sidebar click on [Configuration](https://my.home-assistant.io/redirect/config). +- From the configuration menu select [Integrations](https://my.home-assistant.io/redirect/integrations). +- In the bottom right, click on the [Add Integration](https://my.home-assistant.io/redirect/config_flow_start?domain=leviosa_shades) button. +- From the list, search and select *Leviosa Motor Shades Zone*. +- Follow the instruction on screen to complete the set up. Each Leviosa Zone manages up to 6 groups of shades. +- If you have more than one Leviosa Zone in your Network, Home Assistant will display a list, with one IP address for each Leviosa Zone discovered in your network, in the same order as they were discovered. Once a Leviosa Zone is configured in Home Assistant, it will not appear in this list. Refer to the next section to find the IP address of each zone group. +- If you have only one Leviosa Zone, then you'll be taken directly to the screen to enter the Leviosa Zone name and shade group names. +- You can name the shade groups as you wish. They do not have to match the names already in the Leviosa App. + +After completing the steps above, the {{ name }} integration will be immediately available for use. A `cover` entity for each shade group will be ready for you. An additional `cover` entity is created with the name of the zone (prefixed `all_`) to move all groups in a Leviosa Zone at the same time. + +## Retrieving the IP Address of the Leviosa Zone (WiFi bridge) + +This is needed when multiple Leviosa Zones are detected, to identify each Leviosa Zone: + +- Open the Leviosa App. +- Press/hold on any group name. After 1 second, a new screen will appear. +- Select the ‘Name’ tab at the top. +- The screen will now show the IP address of the Leviosa Zone that shade group is on. + +## Services that allow you to move your blinds to intermediate positions + +The Home Assistant user interface is useful to completely open or close your blinds. When you want your blinds to go to well defined intermediate positions, please [set](https://cdn.shopify.com/s/files/1/1346/0347/files/Leviosa_Shades_Programming_instructions.pdf?) the Mid-point positions with the Leviosa remote controller. These positions are stored in the Leviosa shade motor. If you do not program intermediate points, the shade will travel fully to the pre-set upper or lower limit. when using the following services: + +- Use `leviosa_shades.next_up_pos` to move Leviosa shades up to the next mid-point position. +- Use `leviosa_shades.next_down_pos` to move Leviosa shades down to the next mid-point position. + +Both services need the `entity_id` of the shade group that you want to move + +## Troubleshooting + +- Keep in mind that you cannot use the Home Assistant UI to move your blinds to arbitrary positions, only to completely open/close them. Use the services explained above to move to pre-set positions programmed directly into the motors using a Leviosa remote. +- If Home Assistant cannot find your Leviosa Zone hubs, double check that you can ping your Home Assistant instance as well as your Leviosa Zones from the same node in your network, on the same subnet. If you have a network switch that can filter multicast packets, check that it is not filtering SSDP traffic. Home Assistant can only discover your Leviosa Zone hubs if the SSDP advertisements can reach the Home Assistant instance.