From 8d1642c1ff4bb5311f8ac38b4a1331aca036c6db Mon Sep 17 00:00:00 2001 From: Zack Barett Date: Thu, 28 Jul 2022 09:10:52 -0500 Subject: [PATCH 01/11] Fix Link in blog post (#23559) --- source/_posts/2022-07-27-leviton-partner.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2022-07-27-leviton-partner.markdown b/source/_posts/2022-07-27-leviton-partner.markdown index f8580909961..18f3c83f3e4 100644 --- a/source/_posts/2022-07-27-leviton-partner.markdown +++ b/source/_posts/2022-07-27-leviton-partner.markdown @@ -31,4 +31,4 @@ Leviton Decora Smart Z-Wave Devices include their DZ6HD dimmer, DZ15S switch, ZW If you would like to learn more about the Leviton products and integration check out their [integration page](/integrations/leviton)! Leviton will also show up in the integrations list in Home Assistant version 2022.8! -If you missed the announcement of the Works with Home Assistant partner program, make sure to check out the [blog post](/partner-program). +If you missed the announcement of the Works with Home Assistant partner program, make sure to check out the [blog post](/blog/2022/07/12/partner-program/). From 3eab13ae6327b79fe993f58512fde6eeeab58e54 Mon Sep 17 00:00:00 2001 From: Dave T <17680170+davet2001@users.noreply.github.com> Date: Fri, 29 Jul 2022 11:24:41 +0100 Subject: [PATCH 02/11] Correct grammar in selectors documentation (#23569) --- source/_docs/blueprint/selectors.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown index 41a4614269b..25147d1f704 100644 --- a/source/_docs/blueprint/selectors.markdown +++ b/source/_docs/blueprint/selectors.markdown @@ -641,10 +641,10 @@ the select value. ![Screenshot of a number selector](/images/blueprints/selector-number.png) 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 +Both modes limit the user input by a minimum and maximum value, and can have a unit of measurement to go with it. -In its most basic form, this selector requires a minimal and maximum value: +In its most basic form, this selector requires a minimum and maximum value: ```yaml number: @@ -654,7 +654,7 @@ number: {% configuration number %} min: - description: The minimal user-settable number value. + description: The minimum user-settable number value. type: [integer, float] required: true max: From 342c450d2fa788db3f63805d870c21e621c2563d Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 29 Jul 2022 13:09:34 -0700 Subject: [PATCH 03/11] Migrate Nest alert (#23578) --- source/_integrations/nest.markdown | 6 +++- .../more-info/nest-auth-deprecation.markdown | 31 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 source/more-info/nest-auth-deprecation.markdown diff --git a/source/_integrations/nest.markdown b/source/_integrations/nest.markdown index 04e685e5e34..e84290c8799 100644 --- a/source/_integrations/nest.markdown +++ b/source/_integrations/nest.markdown @@ -26,6 +26,10 @@ ha_platforms: ha_integration_type: integration --- + + The `nest` integration allows you to integrate your [Google Nest](https://store.google.com/us/category/connected_home?) devices in Home Assistant. This integration uses the [Smart Device Management](https://developers.google.com/nest/device-access/api) API and Google's Cloud Pubsub to efficiently listen for changes in device state or other events. See [Supported Devices](https://developers.google.com/nest/device-access/supported-devices) for all devices supported by the SDM API. There is currently support for the following device types within Home Assistant: @@ -425,7 +429,7 @@ To improve security and reduce phishing risk Google has [deprecated](https://dev 1. Make sure to upgrade to the latest version of Home Assistant. 1. In the sidebar click on _**{% my config icon %}**_. 1. From the configuration menu select: _**{% my integrations %}**_. -1. The *Nest* integration should appear with alert. +1. The *Nest* integration should appear with alert. ![Screenshot of success](/images/integrations/nest/attention.png) diff --git a/source/more-info/nest-auth-deprecation.markdown b/source/more-info/nest-auth-deprecation.markdown new file mode 100644 index 00000000000..22fdf0bad63 --- /dev/null +++ b/source/more-info/nest-auth-deprecation.markdown @@ -0,0 +1,31 @@ +--- +title: "Nest Desktop Auth Deprecation" +description: "The primary authentication method recommended by the Nest Home Assistant integration called Desktop, Installed App or OOB auth was deprecated for new uses on February 28th, 2022 and will be disabled for all users on October 3, 2022." +--- + +The primary authentication method recommended by the Nest Home Assistant integration called *Desktop*, *Installed App* or *OOB* auth was deprecated for new uses on February 28th, 2022 and will be disabled for all users on October 3, 2022. See the [Google Developer blog](https://developers.googleblog.com/2022/02/making-oauth-flows-safer.html#disallowed-oob) +for announcement details. + +**Existing must upgrade to *Web Auth* credentials by October 3, 2022.** + +## New Users + +New users may sign up using *Web Auth* without issue. Follow the [documentation](https://www.home-assistant.io/integrations/nest/) which has been updated to use *Web Auth* and a *My Home Assistant* redirect URL using Home Assistant `2022.6` or newer. + +## Existing Users: App Auth + +If you previously successfully configured Nest and Home Assistant with *App Auth* then follow the instructions for [Deprecated App Auth Credentials](https://www.home-assistant.io/integrations/nest/#deprecated-app-auth-credentials). + +Nest is now configured entirely from the UI using [Application Credentials](https://www.home-assistant.io/integrations/application_credentials/) and the configuration flow will walk you through the steps of creating new credentails the right way. + +You will need to upgrade to *Web Auth* before October to avoid interruption. + +## Existing Users: Web Auth + +Users who signed up using *Web Auth* are not affected by the App Auth deprecation. However, as of `2022.6` the *My Home Assistant* URL is now the default redirect URL and may need to be updated in the Google Cloud Console to avoid a `redirect_uri_mismatch` ([more info](https://www.home-assistant.io/integrations/nest/#troubleshooting)). + +# Background + +The OAuth out-of-band flow was designed to support native applications that cannot support a redirect URI like a Web application, which was convenient for Home Assistant since it is difficult for end Home Assistant users to set up SSL certificates and DNS needed for a secure Web endpoint. However, Google has deprecated the OOB flow as it introduces a phishing risk. New users are no longer allowed to create new Desktop auth credentials and existing users will no longer work starting October 3, 2022. + +As of `2022.6` the *Web Auth* OAuth2 flow uses the *My Home Assistant* redirect URL which handles SSL. This is what allows new signups for *Web Auth* as the new recommended approach. From 42db5c489afe54176a47c436b3fa63f7099f22f8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 30 Jul 2022 10:27:08 -0700 Subject: [PATCH 04/11] Restyle integration alert bar (#23579) --- sass/custom/_paulus.scss | 94 +++++++++++++++++++----------- source/_integrations/nest.markdown | 11 +++- source/_layouts/page.html | 12 +++- 3 files changed, 77 insertions(+), 40 deletions(-) diff --git a/sass/custom/_paulus.scss b/sass/custom/_paulus.scss index 26be359bce4..7ac6c619d7d 100644 --- a/sass/custom/_paulus.scss +++ b/sass/custom/_paulus.scss @@ -41,15 +41,37 @@ $primary-color: #049cdb; } } -.integration-alert { +.integration-alert-container { margin: -1em 0; - background-color: wheat; - padding: 4px; +} - a { - text-decoration: none !important; +a.integration-alert { + margin: 1em 0; + background-color: wheat; + padding: 8px; + text-decoration: none !important; + display: flex; + align-items: center; + color: black; + + svg { + width: 24px; + margin-right: 8px; } + .content { + flex: 1; + } + + .learn-more { + padding: 4px 6px; + border-radius: 2px; + font-size: .8em; + + &:hover { + background-color: rgba(0, 0, 0, .12); + } + } } @media only screen and (max-width: $menu-collapse) { @@ -136,6 +158,7 @@ $primary-color: #049cdb; box-shadow: none; border: 1px solid rgba(0, 0, 0, .12); border-radius: 4px; + h4 { margin: 0 0 8px !important; @@ -144,6 +167,7 @@ $primary-color: #049cdb; color: #000; } } + .links a { font-weight: 400; text-transform: none; @@ -186,12 +210,13 @@ $primary-color: #049cdb; background-color: lighten(#038fc7, 10%); } } + .events { padding: 16px; - + h3 { margin-top: 8px; - } + } .event { display: flex; @@ -199,28 +224,28 @@ $primary-color: #049cdb; align-items: center; text-decoration: none; color: inherit; - + .caption { padding: 0 12px; max-width: 450px; } - + .title { font-size: 20px; font-weight: 400; } - + .secondary { color: rgba(0, 0, 0, 0.54); font-size: 14px; font-weight: 500; } - + .subtitle { font-size: 12px; font-weight: initial; } - + img { width: 200px; height: 100%; @@ -282,9 +307,9 @@ $primary-color: #049cdb; } .sponsors-and-press { - margin-top:24px; + margin-top: 24px; } - + .sponsored-by { img { border: 0; @@ -293,10 +318,10 @@ $primary-color: #049cdb; margin: 15px; max-width: 40%; max-height: 80px; - } + } } - + .seen-press { img { @@ -324,10 +349,10 @@ $primary-color: #049cdb; } img { - width: 100%; - } + width: 100%; + } } - } +} // https://fortawesome.github.io/Font-Awesome/3.2.1/icons/ @@ -365,7 +390,7 @@ dt:hover a.title-link { margin-right: 10px; } - a > * { + a>* { vertical-align: middle; } } @@ -408,8 +433,8 @@ article.listing { box-shadow: none; } - & > table, - & > .entry-content > table { + &>table, + &>.entry-content>table { background-color: #f3fcf5; } @@ -431,7 +456,7 @@ article.listing { li { margin-bottom: 10px; - & > p:last-child { + &>p:last-child { margin-bottom: 0; } @@ -448,8 +473,7 @@ article.listing { } } - h1 { - } + h1 {} h2 { font-size: 1.5em; @@ -562,17 +586,19 @@ div.note { li.toc-entry { list-style-type: none; + li { list-style-type: circle; margin-left: 1em; } + ul { margin-left: 1em; } } } - } + } .brand-logo-container { text-align: center; @@ -594,7 +620,7 @@ lite-youtube { position: relative; display: block; padding-bottom: calc(100% / (16 / 9)); - background-color: rgba(0,0,0,.1); + background-color: rgba(0, 0, 0, .1); } lite-youtube::before { @@ -610,7 +636,8 @@ lite-youtube::before { // https://css-tricks.com/NetMag/FluidWidthVideo/Article-FluidWidthVideo.php .videoWrapper { position: relative; - padding-bottom: 56.25%; /* 16:9 */ + padding-bottom: 56.25%; + /* 16:9 */ height: 0; margin-bottom: 25px; background: #000; @@ -773,10 +800,8 @@ code { hyphens: none; background-color: #fdfdfd; - background-image: linear-gradient( - transparent 50%, - rgba(69, 142, 209, 0.04) 50% - ); + background-image: linear-gradient(transparent 50%, + rgba(69, 142, 209, 0.04) 50%); background-size: 3em 3em; background-origin: content-box; background-attachment: local; @@ -812,6 +837,7 @@ code { } } } + footer { position: absolute; bottom: 0; @@ -829,6 +855,6 @@ a.my { :target { display: block; position: relative; - top: -100px; + top: -100px; visibility: hidden; -} \ No newline at end of file +} diff --git a/source/_integrations/nest.markdown b/source/_integrations/nest.markdown index e84290c8799..ac12be83ece 100644 --- a/source/_integrations/nest.markdown +++ b/source/_integrations/nest.markdown @@ -26,9 +26,14 @@ ha_platforms: ha_integration_type: integration --- - + + +
Existing users: Nest authentication is changing.
+
LEARN MORE
+
+ The `nest` integration allows you to integrate your [Google Nest](https://store.google.com/us/category/connected_home?) devices in Home Assistant. This integration uses the [Smart Device Management](https://developers.google.com/nest/device-access/api) API and Google's Cloud Pubsub to efficiently listen for changes in device state or other events. See [Supported Devices](https://developers.google.com/nest/device-access/supported-devices) for all devices supported by the SDM API. diff --git a/source/_layouts/page.html b/source/_layouts/page.html index 7381c7161c2..7d320b83a06 100644 --- a/source/_layouts/page.html +++ b/source/_layouts/page.html @@ -20,8 +20,14 @@ layout: default {% endfor %} {% endfor %} {% if active_alert != "" %} -
- ⚠️ There is an active alert for this integration! + {% endif %} {% endif %} @@ -30,4 +36,4 @@ layout: default {{ content }} {% include feedback.html %} - \ No newline at end of file + From b93f5937cfa9cfe74e3b6bc2a8414139054f173e Mon Sep 17 00:00:00 2001 From: DJ Adams Date: Sun, 31 Jul 2022 12:24:21 +0100 Subject: [PATCH 05/11] Minor improvement: Add explicit ref to the "Create backup" button (#23589) --- source/_includes/common-tasks/backups.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source/_includes/common-tasks/backups.md b/source/_includes/common-tasks/backups.md index f69a43845af..c64dac9f99d 100644 --- a/source/_includes/common-tasks/backups.md +++ b/source/_includes/common-tasks/backups.md @@ -15,10 +15,11 @@ A partial backup consists of any number of the above default directories and ins ### Making a Backup from the UI 1. Go to {% my supervisor_backups title="Settings > System > Backups" %} in the UI. -2. Provide a name for the backup. -3. Choose full or partial. -4. Choose to password protect or not. Password-protected backups cannot easily be browsed outside of Home Assistant OS. -5. Click "Create" to begin the backup. +2. Click the **Create backup** button in the lower right. +3. Provide a name for the backup. +4. Choose full or partial. +5. Choose to password protect or not. Password-protected backups cannot easily be browsed outside of Home Assistant OS. +6. Click "Create" to begin the backup. ### Restoring a Backup on a new install From 9d385b44bc6665905701352f5ea5a976da055c15 Mon Sep 17 00:00:00 2001 From: uvjustin <46082645+uvjustin@users.noreply.github.com> Date: Sun, 31 Jul 2022 19:31:11 +0800 Subject: [PATCH 06/11] Fix Cache-Control max-age syntax (#23583) --- source/_headers | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/_headers b/source/_headers index d33567d39d7..b1d6e467a2a 100644 --- a/source/_headers +++ b/source/_headers @@ -1,5 +1,5 @@ /* - Cache-Control: public, max-age: 0, s-maxage=3600, must-revalidate + Cache-Control: public, max-age=0, s-maxage=3600, must-revalidate Content-Security-Policy: form-action https: Feature-Policy: geolocation 'none'; midi 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; payment 'none' Permissions-Policy: geolocation=(), midi=(), microphone=(), camera=(), magnetometer=(), gyroscope=(), payment=() @@ -7,14 +7,14 @@ X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block /*.css - Cache-Control: public, max-age: 604800, s-maxage=604800 + Cache-Control: public, max-age=604800, s-maxage=604800 /*.js - Cache-Control: public, max-age: 604800, s-maxage=604800 + Cache-Control: public, max-age=604800, s-maxage=604800 /assets/* - Cache-Control: public, max-age: 0, s-maxage=604800, must-revalidate + Cache-Control: public, max-age=0, s-maxage=604800, must-revalidate /fonts/* - Cache-Control: public, max-age: 1800, s-maxage=604800, must-revalidate + Cache-Control: public, max-age=1800, s-maxage=604800, must-revalidate /images/* - Cache-Control: public, max-age: 1800, s-maxage=604800, must-revalidate + Cache-Control: public, max-age=1800, s-maxage=604800, must-revalidate /static/* - Cache-Control: public, max-age: 1800, s-maxage=604800, must-revalidate + Cache-Control: public, max-age=1800, s-maxage=604800, must-revalidate From c093143ecd400c42c03a902050cd9dc13a0fa4e2 Mon Sep 17 00:00:00 2001 From: Richard van Duijn Date: Sun, 31 Jul 2022 20:44:00 +0200 Subject: [PATCH 07/11] Changed OpenUV update automation example to be more realistic (#23545) --- source/_integrations/openuv.markdown | 40 +++++++++++++++++++--------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/source/_integrations/openuv.markdown b/source/_integrations/openuv.markdown index 9a0cfda2bb7..9be0fd3e4bd 100644 --- a/source/_integrations/openuv.markdown +++ b/source/_integrations/openuv.markdown @@ -98,26 +98,40 @@ Perform an on-demand update of OpenUV `uv_protection_window` data, but not the s ## Examples of Updating Data -One method to retrieve data every 30 minutes and still leave plenty of API key -usage is to only retrieve data during the daytime: +To perform an optimal amount of API calls you need to know the hours of daylight on the longest day of the year. If for example this is 17 hours, you can perform 2 calls around every 45 minutes without running into the 50 API call limit per day: + +{% raw %} ```yaml automation: - - alias: "Update OpenUV every 30 minutes during the daytime" + - alias: "Update OpenUV" trigger: - platform: time_pattern - minutes: "/30" + # Time pattern of /45 will not work as expected, it will trigger on the whole hour and on the whole hour + 45 minutes. + # Using more frequent time pattern and a condition to get the intended behavior. + - platform: time_pattern + minutes: "/15" condition: - condition: and - conditions: - - condition: sun - after: sunrise - - condition: sun - before: sunset + - condition: sun + after: sunrise + before: sunset + # The last call will most likely fall before the sunset, thus leaving an UV index value not at 0 for the remaining night. + # To fix this, we allow one more service call after the sun has set. + before_offset: "+00:45:00" + # We check if the last trigger has been 40 minutes or more ago so we don't run into timing issues. + # By checking for 40 minutes or greater we ensure this is only true at the 45 minute mark. + - condition: template + value_template: >- + {{ + state_attr('automation.openuv_update', 'last_triggered') == None or + (now() - state_attr('automation.openuv_update', 'last_triggered')) >= timedelta(hours = 0, minutes = 40) + }} action: - service: openuv.update_data + - service: openuv.update_data + ``` +{% endraw %} + Update the UV index data every 20 minutes while the sun is at least 10 degrees above the horizon: {% raw %} @@ -157,7 +171,7 @@ etc.) might be to simply query the API less often: ```yaml automation: - - alias: "Update OpenUV every hour (24 of 50 calls per day)" + - alias: "Update OpenUV every hour (48 of 50 calls per day)" trigger: platform: time_pattern hours: "*" From f16e148e4d3352105b3ba66f6f19bfbcbf9980b9 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 2 Aug 2022 09:23:54 +0200 Subject: [PATCH 08/11] Document legacy MQTT device tracker defaults to `gps` source (#23599) --- source/_integrations/device_tracker.mqtt.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/device_tracker.mqtt.markdown b/source/_integrations/device_tracker.mqtt.markdown index 6c794a89e87..80305d04f8e 100644 --- a/source/_integrations/device_tracker.mqtt.markdown +++ b/source/_integrations/device_tracker.mqtt.markdown @@ -78,6 +78,7 @@ source_type: description: Attribute of a device tracker that affects state when being used to track a [person](/integrations/person/). Valid options are `gps`, `router`, `bluetooth`, or `bluetooth_le`. required: false type: string + default: gps {% endconfiguration %} {% enddetails %} From 69db007282487a7befa22c6666a05a0845af9b6a Mon Sep 17 00:00:00 2001 From: Dubh Ad Date: Tue, 2 Aug 2022 08:25:00 +0100 Subject: [PATCH 09/11] Update TTS docs (#23596) --- source/_integrations/tts.markdown | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/_integrations/tts.markdown b/source/_integrations/tts.markdown index 8f906485167..a6d7e659734 100644 --- a/source/_integrations/tts.markdown +++ b/source/_integrations/tts.markdown @@ -66,7 +66,6 @@ tts: cache: true cache_dir: /tmp/tts time_memory: 300 - base_url: http://192.168.0.10:8123 service_name: google_say ``` @@ -87,7 +86,7 @@ The Google cast devices (Google Home, Chromecast, etc.) present the following pr * They do not work with URLs that contain hostnames established by local naming means. Let's say your Home Assistant instance is running on a machine made known locally as `ha`. All your machines on your local network are able to access it as `ha`. However, try as you may, your cast device won't download the media files from your `ha` machine. That's because your cast device ignores your local naming setup. In this example, the `say` service creates a URL like `http://ha/path/to/media.mp3` (or `https://...` if you are using SSL). If you are _not_ using SSL then setting an internal URL that contains the IP address of your server works around this issue. By using an IP address, the cast device does not have to resolve the hostname. -* If you are using an SSL (e.g., `https://yourhost.example.org/...`) then you _must_ use the hostname in the certificate (e.g., `base_url: https://yourhost.example.org`). You cannot use an IP address since the certificate won't be valid for the IP address, and the cast device will refuse the connection. +* If you are using an SSL (e.g., `https://yourhost.example.org/...`) then you _must_ use the hostname in the certificate (e.g., `external_url: https://yourhost.example.org`). You cannot use an IP address since the certificate won't be valid for the IP address, and the cast device will refuse the connection. ## Service say From 922cae3bf5d8272bad57f42d7d6c21cc3ef70eb0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Aug 2022 09:30:12 +0200 Subject: [PATCH 10/11] Bump rouge from 3.29.0 to 3.30.0 (#23595) 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 637b77e97a2..cf2ae70065c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -87,7 +87,7 @@ GEM rb-inotify (0.10.1) ffi (~> 1.0) rexml (3.2.5) - rouge (3.29.0) + rouge (3.30.0) ruby2_keywords (0.0.5) safe_yaml (1.0.5) sass (3.4.25) From b9999b14dcfbd9e0bb3305cf089832866d5d419d Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 2 Aug 2022 09:32:07 +0200 Subject: [PATCH 11/11] Update logger.markdown (#23601) --- source/_integrations/logger.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/logger.markdown b/source/_integrations/logger.markdown index 43710bc8776..7c353245c07 100644 --- a/source/_integrations/logger.markdown +++ b/source/_integrations/logger.markdown @@ -170,6 +170,8 @@ data: aiohttp: error ``` +## Viewing logs + The log information are stored in the [configuration directory](/docs/configuration/) as `home-assistant.log` and you can read it with the command-line tool `cat` or follow it dynamically