mirror of
https://github.com/home-assistant/home-assistant.io.git
synced 2025-07-19 15:26:59 +00:00
Merge branch 'current' into next
This commit is contained in:
commit
e885acfcc2
@ -87,7 +87,7 @@ GEM
|
|||||||
rb-inotify (0.10.1)
|
rb-inotify (0.10.1)
|
||||||
ffi (~> 1.0)
|
ffi (~> 1.0)
|
||||||
rexml (3.2.5)
|
rexml (3.2.5)
|
||||||
rouge (3.29.0)
|
rouge (3.30.0)
|
||||||
ruby2_keywords (0.0.5)
|
ruby2_keywords (0.0.5)
|
||||||
safe_yaml (1.0.5)
|
safe_yaml (1.0.5)
|
||||||
sass (3.4.25)
|
sass (3.4.25)
|
||||||
|
@ -41,15 +41,37 @@ $primary-color: #049cdb;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.integration-alert {
|
.integration-alert-container {
|
||||||
margin: -1em 0;
|
margin: -1em 0;
|
||||||
background-color: wheat;
|
}
|
||||||
padding: 4px;
|
|
||||||
|
|
||||||
a {
|
a.integration-alert {
|
||||||
text-decoration: none !important;
|
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) {
|
@media only screen and (max-width: $menu-collapse) {
|
||||||
@ -136,6 +158,7 @@ $primary-color: #049cdb;
|
|||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
border: 1px solid rgba(0, 0, 0, .12);
|
border: 1px solid rgba(0, 0, 0, .12);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
|
||||||
h4 {
|
h4 {
|
||||||
margin: 0 0 8px !important;
|
margin: 0 0 8px !important;
|
||||||
|
|
||||||
@ -144,6 +167,7 @@ $primary-color: #049cdb;
|
|||||||
color: #000;
|
color: #000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.links a {
|
.links a {
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
text-transform: none;
|
text-transform: none;
|
||||||
@ -186,12 +210,13 @@ $primary-color: #049cdb;
|
|||||||
background-color: lighten(#038fc7, 10%);
|
background-color: lighten(#038fc7, 10%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.events {
|
.events {
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.event {
|
.event {
|
||||||
display: flex;
|
display: flex;
|
||||||
@ -199,28 +224,28 @@ $primary-color: #049cdb;
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: inherit;
|
color: inherit;
|
||||||
|
|
||||||
.caption {
|
.caption {
|
||||||
padding: 0 12px;
|
padding: 0 12px;
|
||||||
max-width: 450px;
|
max-width: 450px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
.secondary {
|
.secondary {
|
||||||
color: rgba(0, 0, 0, 0.54);
|
color: rgba(0, 0, 0, 0.54);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
.subtitle {
|
.subtitle {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-weight: initial;
|
font-weight: initial;
|
||||||
}
|
}
|
||||||
|
|
||||||
img {
|
img {
|
||||||
width: 200px;
|
width: 200px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@ -282,9 +307,9 @@ $primary-color: #049cdb;
|
|||||||
}
|
}
|
||||||
|
|
||||||
.sponsors-and-press {
|
.sponsors-and-press {
|
||||||
margin-top:24px;
|
margin-top: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sponsored-by {
|
.sponsored-by {
|
||||||
img {
|
img {
|
||||||
border: 0;
|
border: 0;
|
||||||
@ -293,10 +318,10 @@ $primary-color: #049cdb;
|
|||||||
margin: 15px;
|
margin: 15px;
|
||||||
max-width: 40%;
|
max-width: 40%;
|
||||||
max-height: 80px;
|
max-height: 80px;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.seen-press {
|
.seen-press {
|
||||||
|
|
||||||
img {
|
img {
|
||||||
@ -324,10 +349,10 @@ $primary-color: #049cdb;
|
|||||||
}
|
}
|
||||||
|
|
||||||
img {
|
img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// https://fortawesome.github.io/Font-Awesome/3.2.1/icons/
|
// https://fortawesome.github.io/Font-Awesome/3.2.1/icons/
|
||||||
@ -365,7 +390,7 @@ dt:hover a.title-link {
|
|||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
a > * {
|
a>* {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -408,8 +433,8 @@ article.listing {
|
|||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
& > table,
|
&>table,
|
||||||
& > .entry-content > table {
|
&>.entry-content>table {
|
||||||
background-color: #f3fcf5;
|
background-color: #f3fcf5;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -431,7 +456,7 @@ article.listing {
|
|||||||
li {
|
li {
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
|
|
||||||
& > p:last-child {
|
&>p:last-child {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,8 +473,7 @@ article.listing {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {}
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
font-size: 1.5em;
|
font-size: 1.5em;
|
||||||
@ -562,17 +586,19 @@ div.note {
|
|||||||
|
|
||||||
li.toc-entry {
|
li.toc-entry {
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
|
|
||||||
li {
|
li {
|
||||||
list-style-type: circle;
|
list-style-type: circle;
|
||||||
margin-left: 1em;
|
margin-left: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
margin-left: 1em;
|
margin-left: 1em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.brand-logo-container {
|
.brand-logo-container {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@ -594,7 +620,7 @@ lite-youtube {
|
|||||||
position: relative;
|
position: relative;
|
||||||
display: block;
|
display: block;
|
||||||
padding-bottom: calc(100% / (16 / 9));
|
padding-bottom: calc(100% / (16 / 9));
|
||||||
background-color: rgba(0,0,0,.1);
|
background-color: rgba(0, 0, 0, .1);
|
||||||
}
|
}
|
||||||
|
|
||||||
lite-youtube::before {
|
lite-youtube::before {
|
||||||
@ -610,7 +636,8 @@ lite-youtube::before {
|
|||||||
// https://css-tricks.com/NetMag/FluidWidthVideo/Article-FluidWidthVideo.php
|
// https://css-tricks.com/NetMag/FluidWidthVideo/Article-FluidWidthVideo.php
|
||||||
.videoWrapper {
|
.videoWrapper {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding-bottom: 56.25%; /* 16:9 */
|
padding-bottom: 56.25%;
|
||||||
|
/* 16:9 */
|
||||||
height: 0;
|
height: 0;
|
||||||
margin-bottom: 25px;
|
margin-bottom: 25px;
|
||||||
background: #000;
|
background: #000;
|
||||||
@ -773,10 +800,8 @@ code {
|
|||||||
hyphens: none;
|
hyphens: none;
|
||||||
|
|
||||||
background-color: #fdfdfd;
|
background-color: #fdfdfd;
|
||||||
background-image: linear-gradient(
|
background-image: linear-gradient(transparent 50%,
|
||||||
transparent 50%,
|
rgba(69, 142, 209, 0.04) 50%);
|
||||||
rgba(69, 142, 209, 0.04) 50%
|
|
||||||
);
|
|
||||||
background-size: 3em 3em;
|
background-size: 3em 3em;
|
||||||
background-origin: content-box;
|
background-origin: content-box;
|
||||||
background-attachment: local;
|
background-attachment: local;
|
||||||
@ -812,6 +837,7 @@ code {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
footer {
|
footer {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
@ -829,6 +855,6 @@ a.my {
|
|||||||
:target {
|
:target {
|
||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
top: -100px;
|
top: -100px;
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
|
@ -641,10 +641,10 @@ the select value.
|
|||||||

|

|
||||||
|
|
||||||
On the user interface, the input can either be in a slider or number mode.
|
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.
|
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
|
```yaml
|
||||||
number:
|
number:
|
||||||
@ -654,7 +654,7 @@ number:
|
|||||||
|
|
||||||
{% configuration number %}
|
{% configuration number %}
|
||||||
min:
|
min:
|
||||||
description: The minimal user-settable number value.
|
description: The minimum user-settable number value.
|
||||||
type: [integer, float]
|
type: [integer, float]
|
||||||
required: true
|
required: true
|
||||||
max:
|
max:
|
||||||
|
@ -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:
|
Content-Security-Policy: form-action https:
|
||||||
Feature-Policy: geolocation 'none'; midi 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; payment 'none'
|
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=()
|
Permissions-Policy: geolocation=(), midi=(), microphone=(), camera=(), magnetometer=(), gyroscope=(), payment=()
|
||||||
@ -7,14 +7,14 @@
|
|||||||
X-Content-Type-Options: nosniff
|
X-Content-Type-Options: nosniff
|
||||||
X-XSS-Protection: 1; mode=block
|
X-XSS-Protection: 1; mode=block
|
||||||
/*.css
|
/*.css
|
||||||
Cache-Control: public, max-age: 604800, s-maxage=604800
|
Cache-Control: public, max-age=604800, s-maxage=604800
|
||||||
/*.js
|
/*.js
|
||||||
Cache-Control: public, max-age: 604800, s-maxage=604800
|
Cache-Control: public, max-age=604800, s-maxage=604800
|
||||||
/assets/*
|
/assets/*
|
||||||
Cache-Control: public, max-age: 0, s-maxage=604800, must-revalidate
|
Cache-Control: public, max-age=0, s-maxage=604800, must-revalidate
|
||||||
/fonts/*
|
/fonts/*
|
||||||
Cache-Control: public, max-age: 1800, s-maxage=604800, must-revalidate
|
Cache-Control: public, max-age=1800, s-maxage=604800, must-revalidate
|
||||||
/images/*
|
/images/*
|
||||||
Cache-Control: public, max-age: 1800, s-maxage=604800, must-revalidate
|
Cache-Control: public, max-age=1800, s-maxage=604800, must-revalidate
|
||||||
/static/*
|
/static/*
|
||||||
Cache-Control: public, max-age: 1800, s-maxage=604800, must-revalidate
|
Cache-Control: public, max-age=1800, s-maxage=604800, must-revalidate
|
||||||
|
@ -15,10 +15,11 @@ A partial backup consists of any number of the above default directories and ins
|
|||||||
### Making a Backup from the UI
|
### Making a Backup from the UI
|
||||||
|
|
||||||
1. Go to {% my supervisor_backups title="Settings > System > Backups" %} in the UI.
|
1. Go to {% my supervisor_backups title="Settings > System > Backups" %} in the UI.
|
||||||
2. Provide a name for the backup.
|
2. Click the **Create backup** button in the lower right.
|
||||||
3. Choose full or partial.
|
3. Provide a name for the backup.
|
||||||
4. Choose to password protect or not. Password-protected backups cannot easily be browsed outside of Home Assistant OS.
|
4. Choose full or partial.
|
||||||
5. Click "Create" to begin the backup.
|
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
|
### Restoring a Backup on a new install
|
||||||
|
|
||||||
|
@ -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`.
|
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
|
required: false
|
||||||
type: string
|
type: string
|
||||||
|
default: gps
|
||||||
{% endconfiguration %}
|
{% endconfiguration %}
|
||||||
|
|
||||||
{% enddetails %}
|
{% enddetails %}
|
||||||
|
@ -170,6 +170,8 @@ data:
|
|||||||
aiohttp: error
|
aiohttp: error
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Viewing logs
|
||||||
|
|
||||||
The log information are stored in the
|
The log information are stored in the
|
||||||
[configuration directory](/docs/configuration/) as `home-assistant.log`
|
[configuration directory](/docs/configuration/) as `home-assistant.log`
|
||||||
and you can read it with the command-line tool `cat` or follow it dynamically
|
and you can read it with the command-line tool `cat` or follow it dynamically
|
||||||
|
@ -26,6 +26,15 @@ ha_platforms:
|
|||||||
ha_integration_type: integration
|
ha_integration_type: integration
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<a class="integration-alert" href="/more-info/nest-auth-deprecation">
|
||||||
|
<svg preserveAspectRatio="xMidYMid meet" focusable="false" role="img" aria-hidden="true" viewBox="0 0 24 24" color="currentColor">
|
||||||
|
<g><path d="M12,2L1,21H23M12,6L19.53,19H4.47M11,10V14H13V10M11,16V18H13V16"></path></g>
|
||||||
|
</svg>
|
||||||
|
<div class="content">Existing users: Nest authentication is changing.</div>
|
||||||
|
<div class="learn-more">LEARN MORE</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
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.
|
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:
|
There is currently support for the following device types within Home Assistant:
|
||||||
@ -425,7 +434,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. Make sure to upgrade to the latest version of Home Assistant.
|
||||||
1. In the sidebar click on _**{% my config icon %}**_.
|
1. In the sidebar click on _**{% my config icon %}**_.
|
||||||
1. From the configuration menu select: _**{% my integrations %}**_.
|
1. From the configuration menu select: _**{% my integrations %}**_.
|
||||||
1. The *Nest* integration should appear with alert.
|
1. The *Nest* integration should appear with alert.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@ -98,26 +98,40 @@ Perform an on-demand update of OpenUV `uv_protection_window` data, but not the s
|
|||||||
|
|
||||||
## Examples of Updating Data
|
## Examples of Updating Data
|
||||||
|
|
||||||
One method to retrieve data every 30 minutes and still leave plenty of API key
|
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:
|
||||||
usage is to only retrieve data during the daytime:
|
|
||||||
|
{% raw %}
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
automation:
|
automation:
|
||||||
- alias: "Update OpenUV every 30 minutes during the daytime"
|
- alias: "Update OpenUV"
|
||||||
trigger:
|
trigger:
|
||||||
platform: time_pattern
|
# Time pattern of /45 will not work as expected, it will trigger on the whole hour and on the whole hour + 45 minutes.
|
||||||
minutes: "/30"
|
# Using more frequent time pattern and a condition to get the intended behavior.
|
||||||
|
- platform: time_pattern
|
||||||
|
minutes: "/15"
|
||||||
condition:
|
condition:
|
||||||
condition: and
|
- condition: sun
|
||||||
conditions:
|
after: sunrise
|
||||||
- condition: sun
|
before: sunset
|
||||||
after: sunrise
|
# The last call will most likely fall before the sunset, thus leaving an UV index value not at 0 for the remaining night.
|
||||||
- condition: sun
|
# To fix this, we allow one more service call after the sun has set.
|
||||||
before: sunset
|
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:
|
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:
|
Update the UV index data every 20 minutes while the sun is at least 10 degrees above the horizon:
|
||||||
|
|
||||||
{% raw %}
|
{% raw %}
|
||||||
@ -157,7 +171,7 @@ etc.) might be to simply query the API less often:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
automation:
|
automation:
|
||||||
- alias: "Update OpenUV every hour (24 of 50 calls per day)"
|
- alias: "Update OpenUV every hour (48 of 50 calls per day)"
|
||||||
trigger:
|
trigger:
|
||||||
platform: time_pattern
|
platform: time_pattern
|
||||||
hours: "*"
|
hours: "*"
|
||||||
|
@ -66,7 +66,6 @@ tts:
|
|||||||
cache: true
|
cache: true
|
||||||
cache_dir: /tmp/tts
|
cache_dir: /tmp/tts
|
||||||
time_memory: 300
|
time_memory: 300
|
||||||
base_url: http://192.168.0.10:8123
|
|
||||||
service_name: google_say
|
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.
|
* 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
|
## Service say
|
||||||
|
|
||||||
|
@ -20,8 +20,14 @@ layout: default
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if active_alert != "" %}
|
{% if active_alert != "" %}
|
||||||
<div class="integration-alert">
|
<div class="integration-alert-container">
|
||||||
<a href="{{active_alert}}" target="_blank">⚠️ There is an active alert for this integration!</a>
|
<a class="integration-alert" href="{{active_alert}}" target="_blank">
|
||||||
|
<svg preserveAspectRatio="xMidYMid meet" focusable="false" role="img" aria-hidden="true" viewBox="0 0 24 24" color="currentColor">
|
||||||
|
<g><path d="M12,2L1,21H23M12,6L19.53,19H4.47M11,10V14H13V10M11,16V18H13V16"></path></g>
|
||||||
|
</svg>
|
||||||
|
<div class="content">There is an active alert for this integration!</div>
|
||||||
|
<div class="learn-more">LEARN MORE</div>
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -30,4 +36,4 @@ layout: default
|
|||||||
{{ content }}
|
{{ content }}
|
||||||
|
|
||||||
{% include feedback.html %}
|
{% include feedback.html %}
|
||||||
</article>
|
</article>
|
||||||
|
@ -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 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/).
|
||||||
|
31
source/more-info/nest-auth-deprecation.markdown
Normal file
31
source/more-info/nest-auth-deprecation.markdown
Normal file
@ -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.
|
Loading…
x
Reference in New Issue
Block a user