Merge branch 'current' into next
4
.github/workflows/test.yml
vendored
@ -10,7 +10,7 @@ jobs:
|
||||
- name: Check out files from GitHub
|
||||
uses: actions/checkout@v4.2.2
|
||||
- name: Setting up Node.js
|
||||
uses: actions/setup-node@v4.2.0
|
||||
uses: actions/setup-node@v4.3.0
|
||||
with:
|
||||
node-version: 20
|
||||
cache: "npm"
|
||||
@ -27,7 +27,7 @@ jobs:
|
||||
- name: Check out files from GitHub
|
||||
uses: actions/checkout@v4.2.2
|
||||
- name: Setting up Node.js
|
||||
uses: actions/setup-node@v4.2.0
|
||||
uses: actions/setup-node@v4.3.0
|
||||
with:
|
||||
node-version: 20
|
||||
cache: "npm"
|
||||
|
8
Gemfile
@ -10,9 +10,9 @@ group :development do
|
||||
gem 'stringex', '2.8.6'
|
||||
# > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189
|
||||
gem 'sassc', '2.1.0'
|
||||
gem 'sass-embedded', '1.85.1'
|
||||
gem 'rubocop', '1.73.2'
|
||||
gem 'ruby-lsp', '0.23.11'
|
||||
gem 'sass-embedded', '1.86.0'
|
||||
gem 'rubocop', '1.74.0'
|
||||
gem 'ruby-lsp', '0.23.12'
|
||||
gem 'rackup', '2.2.1'
|
||||
end
|
||||
|
||||
@ -24,7 +24,7 @@ group :jekyll_plugins do
|
||||
end
|
||||
|
||||
gem 'sinatra', '4.1.1'
|
||||
gem 'nokogiri', '1.18.3'
|
||||
gem 'nokogiri', '1.18.5'
|
||||
|
||||
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||
# and associated library
|
||||
|
51
Gemfile.lock
@ -3,7 +3,7 @@ GEM
|
||||
specs:
|
||||
addressable (2.8.7)
|
||||
public_suffix (>= 2.0.2, < 7.0)
|
||||
ast (2.4.2)
|
||||
ast (2.4.3)
|
||||
base64 (0.2.0)
|
||||
bigdecimal (3.1.9)
|
||||
chunky_png (1.4.0)
|
||||
@ -22,7 +22,7 @@ GEM
|
||||
compass-import-once (1.0.5)
|
||||
sass (>= 3.2, < 3.5)
|
||||
concurrent-ruby (1.3.5)
|
||||
csv (3.3.2)
|
||||
csv (3.3.3)
|
||||
em-websocket (0.5.3)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0)
|
||||
@ -30,10 +30,10 @@ GEM
|
||||
ffi (1.17.1-arm64-darwin)
|
||||
ffi (1.17.1-x86_64-linux-gnu)
|
||||
forwardable-extended (2.6.0)
|
||||
google-protobuf (4.30.0-arm64-darwin)
|
||||
google-protobuf (4.30.1-arm64-darwin)
|
||||
bigdecimal
|
||||
rake (>= 13)
|
||||
google-protobuf (4.30.0-x86_64-linux)
|
||||
google-protobuf (4.30.1-x86_64-linux)
|
||||
bigdecimal
|
||||
rake (>= 13)
|
||||
http_parser.rb (0.8.0)
|
||||
@ -70,7 +70,7 @@ GEM
|
||||
nokogiri (~> 1.12)
|
||||
jekyll-watch (2.2.1)
|
||||
listen (~> 3.0)
|
||||
json (2.10.1)
|
||||
json (2.10.2)
|
||||
kramdown (2.5.1)
|
||||
rexml (>= 3.3.9)
|
||||
kramdown-parser-gfm (1.1.0)
|
||||
@ -86,20 +86,20 @@ GEM
|
||||
multi_json (1.15.0)
|
||||
mustermann (3.0.3)
|
||||
ruby2_keywords (~> 0.0.1)
|
||||
nokogiri (1.18.3-arm64-darwin)
|
||||
nokogiri (1.18.5-arm64-darwin)
|
||||
racc (~> 1.4)
|
||||
nokogiri (1.18.3-x86_64-linux-gnu)
|
||||
nokogiri (1.18.5-x86_64-linux-gnu)
|
||||
racc (~> 1.4)
|
||||
parallel (1.26.3)
|
||||
parser (3.3.7.1)
|
||||
parser (3.3.7.2)
|
||||
ast (~> 2.4.1)
|
||||
racc
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
prism (1.3.0)
|
||||
prism (1.4.0)
|
||||
public_suffix (6.0.1)
|
||||
racc (1.8.1)
|
||||
rack (3.1.11)
|
||||
rack (3.1.12)
|
||||
rack-protection (4.1.1)
|
||||
base64 (>= 0.1.0)
|
||||
logger (>= 1.6.0)
|
||||
@ -114,12 +114,12 @@ GEM
|
||||
rb-fsevent (0.11.2)
|
||||
rb-inotify (0.11.1)
|
||||
ffi (~> 1.0)
|
||||
rbs (3.8.1)
|
||||
rbs (3.9.1)
|
||||
logger
|
||||
regexp_parser (2.10.0)
|
||||
rexml (3.4.1)
|
||||
rouge (4.5.1)
|
||||
rubocop (1.73.2)
|
||||
rubocop (1.74.0)
|
||||
json (~> 2.3)
|
||||
language_server-protocol (~> 3.17.0.2)
|
||||
lint_roller (~> 1.1.0)
|
||||
@ -130,9 +130,9 @@ GEM
|
||||
rubocop-ast (>= 1.38.0, < 2.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (>= 2.4.0, < 4.0)
|
||||
rubocop-ast (1.38.1)
|
||||
parser (>= 3.3.1.0)
|
||||
ruby-lsp (0.23.11)
|
||||
rubocop-ast (1.41.0)
|
||||
parser (>= 3.3.7.2)
|
||||
ruby-lsp (0.23.12)
|
||||
language_server-protocol (~> 3.17.0)
|
||||
prism (>= 1.2, < 2.0)
|
||||
rbs (>= 3, < 4)
|
||||
@ -141,9 +141,10 @@ GEM
|
||||
ruby2_keywords (0.0.5)
|
||||
safe_yaml (1.0.5)
|
||||
sass (3.4.25)
|
||||
sass-embedded (1.85.1)
|
||||
google-protobuf (~> 4.29)
|
||||
rake (>= 13)
|
||||
sass-embedded (1.86.0-arm64-darwin)
|
||||
google-protobuf (~> 4.30)
|
||||
sass-embedded (1.86.0-x86_64-linux-gnu)
|
||||
google-protobuf (~> 4.30)
|
||||
sass-globbing (1.1.5)
|
||||
sass (>= 3.1)
|
||||
sassc (2.1.0)
|
||||
@ -157,14 +158,14 @@ GEM
|
||||
rack-protection (= 4.1.1)
|
||||
rack-session (>= 2.0.0, < 3)
|
||||
tilt (~> 2.0)
|
||||
sorbet-runtime (0.5.11899)
|
||||
sorbet-runtime (0.5.11953)
|
||||
stringex (2.8.6)
|
||||
terminal-table (3.0.2)
|
||||
unicode-display_width (>= 1.1.1, < 3)
|
||||
tilt (2.6.0)
|
||||
tzinfo (2.0.6)
|
||||
concurrent-ruby (~> 1.0)
|
||||
tzinfo-data (1.2025.1)
|
||||
tzinfo-data (1.2025.2)
|
||||
tzinfo (>= 1.0.0)
|
||||
unicode-display_width (2.6.0)
|
||||
webrick (1.9.1)
|
||||
@ -180,12 +181,12 @@ DEPENDENCIES
|
||||
jekyll-paginate (= 1.1.0)
|
||||
jekyll-sitemap (= 1.4.0)
|
||||
jekyll-toc (= 0.19.0)
|
||||
nokogiri (= 1.18.3)
|
||||
nokogiri (= 1.18.5)
|
||||
rackup (= 2.2.1)
|
||||
rake (= 13.2.1)
|
||||
rubocop (= 1.73.2)
|
||||
ruby-lsp (= 0.23.11)
|
||||
sass-embedded (= 1.85.1)
|
||||
rubocop (= 1.74.0)
|
||||
ruby-lsp (= 0.23.12)
|
||||
sass-embedded (= 1.86.0)
|
||||
sass-globbing (= 1.1.5)
|
||||
sassc (= 2.1.0)
|
||||
sinatra (= 4.1.1)
|
||||
@ -197,4 +198,4 @@ RUBY VERSION
|
||||
ruby 2.6.2p47
|
||||
|
||||
BUNDLED WITH
|
||||
2.5.3
|
||||
2.5.3
|
@ -108,8 +108,8 @@ social:
|
||||
# Home Assistant release details
|
||||
current_major_version: 2025
|
||||
current_minor_version: 3
|
||||
current_patch_version: 0
|
||||
date_released: 2025-03-05
|
||||
current_patch_version: 4
|
||||
date_released: 2025-03-21
|
||||
|
||||
# Either # or the anchor link to latest release notes in the blog post.
|
||||
# Must be prefixed with a # and have double quotes around it.
|
||||
|
403
package-lock.json
generated
@ -15,7 +15,7 @@
|
||||
"remark-lint-prohibited-strings": "^4.0.0",
|
||||
"remark-lint-unordered-list-marker-style": "^4.0.1",
|
||||
"remark-stringify": "^11.0.0",
|
||||
"textlint": "^14.4.2",
|
||||
"textlint": "^14.5.0",
|
||||
"textlint-filter-rule-comments": "^1.2.2",
|
||||
"textlint-rule-common-misspellings": "^1.0.1",
|
||||
"textlint-rule-terminology": "^5.0.13"
|
||||
|
@ -124,6 +124,11 @@ module Jekyll
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def case_insensitive_sort(input, key)
|
||||
return input unless input.is_a?(Array)
|
||||
input.sort_by { |item| item[key].to_s.downcase }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -5,22 +5,156 @@
|
||||
font-weight: 500;
|
||||
letter-spacing: .005em;
|
||||
color: $gray;
|
||||
padding-top: 8px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
}
|
||||
|
||||
.component-search {
|
||||
margin-bottom: 24px;
|
||||
min-height: 80px;
|
||||
|
||||
input {
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
|
||||
background-color: #fefefe;
|
||||
border-radius: 8px;
|
||||
border: 1px solid;
|
||||
border-color: #7c7c7c #c3c3c3 #ddd;
|
||||
}
|
||||
}
|
||||
|
||||
.grid-filters {
|
||||
@media only screen and (min-width: $desk-start) {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
.integration-filter-radio {
|
||||
display: flex;
|
||||
border: none;
|
||||
padding: 0;
|
||||
grid-gap: 10px;
|
||||
}
|
||||
|
||||
.filter-button {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 0;
|
||||
width: fit-content;
|
||||
font-size: 1rem;
|
||||
box-shadow: none;
|
||||
background-color: $blueDark;
|
||||
color: white;
|
||||
border-radius: 24px;
|
||||
|
||||
input {
|
||||
appearance: none;
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
padding-left: 16px;
|
||||
display: block;
|
||||
margin-left: 10px;
|
||||
flex-shrink: 0;
|
||||
height: 1rem;
|
||||
width: 1rem;
|
||||
border-radius: 100%;
|
||||
border-color: transparent;
|
||||
background-color: white;
|
||||
|
||||
&:checked {
|
||||
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22%23007fa8%22%20transform%3D%22rotate(90)%22%3E%3Ccircle%20cx%3D%228%22%20cy%3D%228%22%20r%3D%223%22%2F%3E%3C%2Fsvg%3E");
|
||||
}
|
||||
}
|
||||
|
||||
label {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 4px 16px 4px 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.integration-filter.integration-filter-select {
|
||||
position: relative;
|
||||
|
||||
&::after {
|
||||
content: " ";
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
margin-top: 2px;
|
||||
right: 8px;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-left: 5px solid transparent;
|
||||
border-right: 5px solid transparent;
|
||||
border-top: 5px solid black;
|
||||
}
|
||||
|
||||
.ha_category {
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
color: #222;
|
||||
width: 100%;
|
||||
margin-bottom: 15px;
|
||||
text-align-last: center;
|
||||
font-size: 16px;
|
||||
line-height: 24px;
|
||||
border: 2px solid $blueDark;
|
||||
border-top-right-radius: 0px;
|
||||
border-top-left-radius: 0px;
|
||||
border-bottom-right-radius: 5px;
|
||||
border-bottom-left-radius: 5px;
|
||||
border-top: 0;
|
||||
position: relative;
|
||||
top: -2px;
|
||||
padding: 5px 5px 2px;
|
||||
|
||||
&:focus-visible {
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.filter-title {
|
||||
background: $blueDark;
|
||||
color: white;
|
||||
text-align: center;
|
||||
border-top-right-radius: 5px;
|
||||
border-top-left-radius: 5px;
|
||||
padding: 5px;
|
||||
margin-top: 0;
|
||||
margin-bottom: -2px;
|
||||
text-transform: capitalize;
|
||||
font-size: 18px;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.active-filter {
|
||||
margin: 10px 5px 0px 0px;
|
||||
padding: 5px 10px;
|
||||
min-width: 100px;
|
||||
background-color: $blueDark;
|
||||
border-radius: 28px;
|
||||
border: none;
|
||||
color: white;
|
||||
font-size: 14px;
|
||||
letter-spacing: 0.5px;
|
||||
text-transform: capitalize;
|
||||
line-height: 18px;
|
||||
|
||||
span {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
iconify-icon {
|
||||
display: inline-block;
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
select {
|
||||
font-family: $sans-serif;
|
||||
border: 0;
|
||||
@ -44,6 +178,10 @@
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
div.alert {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.option-card {
|
||||
flex: 0 0 auto;
|
||||
aspect-ratio: 1;
|
||||
@ -147,7 +285,7 @@ a.option-card:hover {
|
||||
img {
|
||||
max-width: 48px;
|
||||
max-height: 48px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
@ -201,7 +339,7 @@ a.option-card:hover {
|
||||
}
|
||||
.category_select {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
.category_list {
|
||||
display: none;
|
||||
}
|
||||
@ -330,4 +468,4 @@ a.option-card:hover {
|
||||
to {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -19,7 +19,7 @@ related:
|
||||
The map card allows you to display your home zone, entities, and other predefined zones on a map. This card is used on the [Map dashboard](/dashboards/dashboards/#map-dashboard), which is one of the default dashboards.
|
||||
|
||||
<p class='img'>
|
||||
<img src='/images/dashboards/map_card.png' alt='Screenshot of the map card'>
|
||||
<img src='/images/dashboards/map_card.webp' alt='Screenshot of the map card'>
|
||||
Screenshot of the map card.
|
||||
</p>
|
||||
|
||||
|
@ -39,8 +39,10 @@ You can group cards without using horizontal or vertical stack cards.
|
||||
5. When you are done, select **Save**.
|
||||
- You are now presented with a new, empty view.
|
||||
- If you chose a background image, the page is filled with that image.
|
||||
|
||||
Once you have created a sections view, you can populate it sections and cards. You can also add a header with a title and badges.
|
||||
6. Once you have created a sections view, you can start curating it:
|
||||
- [Add sections and cards](#adding-sections-and-cards-to-a-sections-view).
|
||||
- [Rearrange](#rearranging-sections-and-cards) and [show or hide sections conditionally](#show-or-hide-section-conditionally).
|
||||
- [Add a dashboard header with a title and badges](#editing-the-header).
|
||||
|
||||
## Editing the header
|
||||
|
||||
|
@ -16,7 +16,7 @@ The tile card gives you a quick overview of your {% term entity %}. The card all
|
||||
|
||||
<p class='img'>
|
||||
<img src='/images/dashboards/tile_card_tap_action.webp' alt='Screenshot of tile cards'>
|
||||
The circular background behind an icon indicates that there is a tap action.
|
||||
The circular background behind an icon indicates that there is a tap action.
|
||||
The "Downstairs" and "Upstairs" climate entities have a badge and a feature that is bottom-aligned.
|
||||
</p>
|
||||
|
||||
@ -152,15 +152,4 @@ features:
|
||||
|
||||
You want to colorize the tile card? Choose one of the following colors: `primary`, `accent`, `disabled`, `red`, `pink`, `purple`, `deep-purple`, `indigo`, `blue`, `light-blue`, `cyan`, `teal`, `green`, `light-green`, `lime`, `yellow`, `amber`, `orange`, `deep-orange`, `brown`, `grey`, `blue-grey`, `black` and `white`.
|
||||
|
||||
## Reordering features
|
||||
|
||||
Some features of the tile card, such as the presets or the HVAC modes of a
|
||||
thermostat, can show many buttons. While you can limit the buttons you’d
|
||||
like to see, they may not be in the desired order.
|
||||
|
||||
For your thermostat, that means you can reorder the HVAC modes or presets.
|
||||
|
||||
<p class='img'>
|
||||
<img src="/images/blog/2024-05/tile-card-reorder-features.gif" alt=" Screen recording showing how you can now reorder the HVAC modes on the thermostat shown in a tile card."/>
|
||||
You can now reorder the features of the tile card.
|
||||
</p>
|
||||
|
@ -222,6 +222,11 @@ yellow:
|
||||
ship_to: Europe
|
||||
url: https://thepihut.com/products/home-assistant-yellow
|
||||
logo: /images/distributors/pi-hut.webp
|
||||
- name: Domadoo
|
||||
ship_from: France
|
||||
ship_to: Europe
|
||||
url: https://www.domadoo.fr/en/smart-home-hub/7113-nabu-casa-home-assistant-yellow-kit-with-power-supply.html
|
||||
logo: /images/distributors/domadoo.jpg
|
||||
zbt-1:
|
||||
name: "<strong>Home Assistant Connect ZBT-1</strong>"
|
||||
distributors:
|
||||
@ -416,7 +421,7 @@ voice-pe:
|
||||
ship_to: Europe
|
||||
url: https://www.domadoo.fr/fr/box-domotique/7558-nabu-casa-home-assistant-voice-preview-edition-0860011789727.html
|
||||
logo: /images/distributors/domadoo.jpg
|
||||
- name: Mediarath
|
||||
- name: mediarath
|
||||
ship_from: Germany
|
||||
ship_to: Europe
|
||||
url: https://mediarath.de/products/home-assistant-voice-preview-edition-open-source-privacy-focused-voice-assistant-with-esphome
|
||||
|
@ -797,6 +797,8 @@ automation:
|
||||
|
||||
It's also possible to use [limited templates](/docs/configuration/templating/#limited-templates) for times.
|
||||
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
blueprint:
|
||||
input:
|
||||
@ -821,6 +823,8 @@ blueprint:
|
||||
- "{{ my_hour }}:30:00"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
||||
## Time pattern trigger
|
||||
|
||||
With the time pattern trigger, you can match if the hour, minute or second of the current time matches a specific value. You can prefix the value with a `/` to match whenever the value is divisible by that number. You can specify `*` to match any value (when using the web interface this is required, the fields cannot be left empty).
|
||||
|
@ -12,13 +12,14 @@ You need to have a compatible Z-Wave stick or module installed. The following de
|
||||
The firmwares of 700 and 800 series Z-Wave controllers have several bugs which impact the stability of the mesh and can cause the controller to become unresponsive. Because there is no known firmware version that is completely fixed, it is recommended to choose a firmware based on the following criteria:
|
||||
|
||||
- 700 series:
|
||||
- prefer SDK versions 7.17.2 to 7.18.x
|
||||
- prefer SDK versions 7.17.2 to 7.18.x or 7.21.6 and newer
|
||||
- SDK versions 7.19.x are okay
|
||||
- avoid SDK versions before 7.17.2
|
||||
- avoid SDK versions 7.20 to 7.21.3
|
||||
- avoid SDK versions 7.20 to 7.21.5
|
||||
|
||||
- 800 series
|
||||
- prefer SDK versions 7.22.x
|
||||
- prefer SDK versions 7.23.x and newer
|
||||
- SDK versions 7.22.x are okay
|
||||
- SDK versions 7.17.2 to 7.19.x are okay
|
||||
- avoid SDK versions before 7.17.2
|
||||
- avoid SDK versions 7.20 to 7.21.3
|
||||
|
@ -29,10 +29,10 @@
|
||||
<div class="ha-buy-dialog-tab-content-wrapper">
|
||||
{% for distributor_region in distributor_regions %}
|
||||
<div class="ha-buy-dialog-tab-content {% if forloop.first %}active{% endif %}" id="{{ distributor_region.name | slugify }}">
|
||||
{% assign az_ship_distributors = distributor_region.items | sort: 'name' | sort: 'ship_from'%}
|
||||
{% assign az_ship_distributors = distributor_region.items | case_insensitive_sort: 'name' | sort: 'ship_from' %}
|
||||
<div class="ha-buy-dialog-distributor-items">
|
||||
{% for distributor in az_ship_distributors %}
|
||||
<a href="{{ distributor.url }}" target="_blank" rel="noreferrer" class="ha-buy-dialog-distributor-item">
|
||||
<a href="{{ distributor.url }}" target="_blank" class="ha-buy-dialog-distributor-item">
|
||||
{% if distributor.logo %}
|
||||
<img src="{{ distributor.logo }}" alt="{{ distributor.name }} logo" class="ha-buy-dialog-distributor-logo">
|
||||
{% else %}
|
||||
|
@ -10,4 +10,4 @@ To add the {{ title | downcase }} to your user interface:
|
||||
- This means that it is no longer automatically updated when new dashboard elements become available.
|
||||
- Once you've taken control, you can't get this specific dashboard back to update automatically. However, you can create a new default dashboard.
|
||||
- To continue, in the dialog, select the three dots {% icon "mdi:dots-vertical" %} menu, then select **Take control**.
|
||||
2. [Add a card](/dashboards/cards/#adding-cards-to-your-dashboard) to your dashboard.
|
||||
2. [Add a card and customize actions and features](/dashboards/cards/#adding-cards-to-your-dashboard) to your dashboard.
|
||||
|
@ -462,7 +462,7 @@ Minimum recommended assignments:
|
||||
|
||||
1. Start the virtual machine.
|
||||
2. Observe the boot process of the Home Assistant Operating System.
|
||||
3. Once completed, you will be able to reach Home Assistant on <a href="http://homeassistant.local:8123" target="_blank">homeassistant.local:8123</a>. If you are running an older Windows version or have a stricter network configuration, you might need to access Home Assistant at <a href="http://homeassistant:8123" target="_blank">homeassistant:8123</a> or `http://X.X.X.X:8123` (replace X.X.X.X with your {{site.installation.types[page.installation_type].board}}’s IP address).
|
||||
3. Once completed, you will be able to reach Home Assistant on <a href="http://homeassistant.local:8123" target="_blank">homeassistant.local:8123</a>. If you are running an older Windows version or have a stricter network configuration, you might need to access Home Assistant at <a href="http://homeassistant:8123" target="_blank">homeassistant:8123</a> or `http://X.X.X.X:8123` (replace X.X.X.X with your virtual machine’s IP address).
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
@ -25,6 +25,7 @@ ha_zeroconf: true
|
||||
---
|
||||
|
||||
The AirGradient integration will fetch data from your [AirGradient devices](https://www.airgradient.com/).
|
||||
AirGradient creates indoor and outdoor air quality monitors that enable you know if the air quality is healthy or not. They measure metrics such as PM2.5, CO2, TVOCs, and NOx. Both the software and hardware are open-source, allowing you to customize or extend the device functionality.
|
||||
|
||||
{% important %}
|
||||
In order for the device to be set up or discovered by Home Assistant, the [firmware](https://www.airgradient.com/documentation/firmwares) version should be at least 3.1.1.
|
||||
@ -32,6 +33,11 @@ In order for the device to be set up or discovered by Home Assistant, the [firmw
|
||||
|
||||
{% include integrations/config_flow.md %}
|
||||
|
||||
{% configuration_basic %}
|
||||
Host:
|
||||
description: "The IP address or hostname for your AirGradient device."
|
||||
{% endconfiguration_basic %}
|
||||
|
||||
## Available sensors
|
||||
|
||||
The integration will fetch data from each device. The following sensors are supported:
|
||||
@ -61,3 +67,9 @@ The following entities are supported:
|
||||
- Requesting CO2 calibration
|
||||
- Requesting LED bar test
|
||||
- Toggling sharing metrics with AirGradient
|
||||
|
||||
## Remove integration
|
||||
|
||||
This integration follows standard integration removal, no extra steps are required.
|
||||
|
||||
{% include integrations/remove_device_service.md %}
|
@ -62,7 +62,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -71,7 +71,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -98,7 +98,7 @@ code_trigger_required:
|
||||
type: boolean
|
||||
default: true
|
||||
command_template:
|
||||
description: "The [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) used for the command payload. Available variables: `action` and `code`."
|
||||
description: "The [template](/docs/configuration/templating/#using-command-templates-with-mqtt) used for the command payload. Available variables: `action` and `code`."
|
||||
required: false
|
||||
type: template
|
||||
default: action
|
||||
@ -182,7 +182,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -271,7 +271,7 @@ unique_id:
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value."
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
@ -46,6 +46,10 @@ For devices that support Auto Comfort and are running firmware 3.1 or later, an
|
||||
|
||||
For devices that support Auto Comfort, a climate {% term entity %} allows adjusting the target temperature.
|
||||
|
||||
{% note %}
|
||||
**Climate and Climate Sensors Become Unavailable:** Climate and some sensors like temperature are provided by the remote, not the fan itself on certain models. When the fan loses connection to the remote, these entities may become unavailable while the fan remains available. Consult vendor documentation on how to re-establish connectivity between the fan and remote and reload the integration to restore entities availability.
|
||||
{% endnote %}
|
||||
|
||||
### Number
|
||||
|
||||
Adjusting the minimum and maximum speed for devices that support Auto Comfort is available.
|
||||
|
@ -51,7 +51,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -60,7 +60,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -156,7 +156,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -214,7 +214,7 @@ unique_id:
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that returns a string to be compared to `payload_on`/`payload_off` or an empty string, in which case the MQTT message will be removed. Remove this option when `payload_on` and `payload_off` are sufficient to match your payloads (i.e no preprocessing of original message is required)."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that returns a string to be compared to `payload_on`/`payload_off` or an empty string, in which case the MQTT message will be removed. Remove this option when `payload_on` and `payload_off` are sufficient to match your payloads (i.e no preprocessing of original message is required)."
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
@ -40,7 +40,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -49,7 +49,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -57,7 +57,7 @@ availability_topic:
|
||||
required: false
|
||||
type: string
|
||||
command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
command_topic:
|
||||
@ -144,7 +144,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
|
@ -50,7 +50,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -59,7 +59,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -146,7 +146,7 @@ image_encoding:
|
||||
required: false
|
||||
type: string
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
|
@ -54,9 +54,11 @@ Home Assistant Cast requires your Home Assistant installation to be accessible v
|
||||
|
||||
{% note %}
|
||||
|
||||
Chromecasts generally ignore DNS servers from DHCP and will instead use Google's DNS servers, 8.8.8.8 and 8.8.4.4. This means media URLs must either be specifying the IP-address of the server directly, e.g. `http://192.168.1.1:8123/movie.mp4`, or be publicly resolvable, e.g. `http://homeassistant.internal.mydomain.com:8123/movie.mp4` where `homeassistant.internal.mydomain.com` resolves to `192.168.1.1`. A hostname which can't be publicly resolved, e.g. `http://homeassistant.local:8123/movie.mp4` will fail to play.
|
||||
Chromecasts generally don't resolve hosts through mDNS and also ignore DNS servers from DHCP, they instead use Google's public DNS servers, 8.8.8.8 and 8.8.4.4.
|
||||
|
||||
This is important when casting TTS or local media sources; the cast integration will cast such media from the `external_url` if [configured](/integrations/homeassistant/#editing-the-general-settings-in-yaml), otherwise from the Home Assistant Cloud if configured, otherwise from the [`internal_url`](/integrations/homeassistant/#editing-the-general-settings-in-yaml). Note that the Home Assistant Cloud will not be used if an `external_url` is configured.
|
||||
This means media URLs must either be specifying the IP-address of the server directly, e.g. `http://192.168.1.1:8123/movie.mp4`, or be publicly resolvable, e.g. `http://homeassistant.internal.mydomain.com:8123/movie.mp4` where `homeassistant.internal.mydomain.com` resolves to `192.168.1.1` using Google's DNS servers. A hostname which can't be publicly resolved, e.g. `http://homeassistant.local:8123/movie.mp4` will fail to play.
|
||||
|
||||
This is important when casting TTS or local media sources; the cast integration will cast such media from the local Home Assistant URL, which can be configured by navigating to **{% my network title="Settings > System > Network" %}** or by configuring an [`internal_url`](/integrations/homeassistant/#editing-the-general-settings-in-yaml).
|
||||
|
||||
{% endnote %}
|
||||
|
||||
|
@ -54,7 +54,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -63,7 +63,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -187,7 +187,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -281,7 +281,7 @@ precision:
|
||||
type: float
|
||||
default: 0.1 for Celsius and 1.0 for Fahrenheit.
|
||||
preset_mode_command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `preset_mode_command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `preset_mode_command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
preset_mode_command_topic:
|
||||
@ -293,7 +293,7 @@ preset_mode_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
preset_mode_value_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the `preset_mode` value from the payload received on `preset_mode_state_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the `preset_mode` value from the payload received on `preset_mode_state_topic`.
|
||||
required: false
|
||||
type: template
|
||||
preset_modes:
|
||||
@ -354,7 +354,7 @@ swing_modes:
|
||||
default: ['on', 'off']
|
||||
type: list
|
||||
target_humidity_command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `target_humidity_command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `target_humidity_command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
target_humidity_command_topic:
|
||||
@ -366,7 +366,7 @@ target_humidity_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
target_humidity_state_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value for the climate `target_humidity` state.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value for the climate `target_humidity` state.
|
||||
required: false
|
||||
type: template
|
||||
temperature_command_template:
|
||||
|
@ -28,7 +28,9 @@ ha_platforms:
|
||||
ha_integration_type: hub
|
||||
---
|
||||
|
||||
The Comelit SimpleHome integration allows you to control your [Comelit home automation devices](https://comelitgroup.it/installatore/offerta/domotica-e-smart-home).
|
||||
The **Comelit SimpleHome** {% term integration %} allows you to control your [Comelit home automation devices](https://comelitgroup.it/installatore/offerta/home-building-automation/).
|
||||
|
||||
## Supported devices
|
||||
|
||||
There is support for the following platform types within Home Assistant:
|
||||
|
||||
@ -37,6 +39,36 @@ There is support for the following platform types within Home Assistant:
|
||||
|
||||
{% include integrations/config_flow.md %}
|
||||
|
||||
## Alarm control panel
|
||||
{% configuration_basic %}
|
||||
host:
|
||||
description: The IP address of the Comelit SmartHome device.
|
||||
port:
|
||||
description: The TCP port of the Comelit SmartHome device. The default is port 80 (standard for HTTP).
|
||||
pin:
|
||||
description: The PIN of the Comelit SmartHome device.
|
||||
type:
|
||||
description: The type of Comelit SmartHome device.
|
||||
keys:
|
||||
bridge:
|
||||
description: Comelit Serial Bridge.
|
||||
vedo:
|
||||
description: Comelit VEDO System.
|
||||
{% endconfiguration_basic %}
|
||||
|
||||
## Data updates
|
||||
|
||||
This integration {% term polling polls %} data from the device every 5 seconds by default.
|
||||
|
||||
## Supported functionality
|
||||
|
||||
The **Comelit SimpleHome** {% term integration %} provides the following entities:
|
||||
|
||||
### Alarm control panel
|
||||
|
||||
The integration will create an alarm entity for each area. Additionally, it will create a sensor and a presence detection binary sensor for each zone, enhancing monitoring capabilities.
|
||||
|
||||
## Removing the integration
|
||||
|
||||
This integration follows standard integration removal. No extra steps are required.
|
||||
|
||||
{% include integrations/remove_device_service.md %}
|
||||
|
@ -57,7 +57,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -66,7 +66,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -131,7 +131,7 @@ device:
|
||||
required: false
|
||||
type: string
|
||||
device_class:
|
||||
description: Sets the [class of the device](/integrations/cover/), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`.
|
||||
description: Sets the [class of the device](/integrations/cover/#device_class), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`.
|
||||
required: false
|
||||
type: string
|
||||
enabled_by_default:
|
||||
@ -157,7 +157,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -223,7 +223,7 @@ position_open:
|
||||
type: integer
|
||||
default: 100
|
||||
position_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `position_topic` topic. Within the template the following variables are available: `entity_id`, `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;"
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that can be used to extract the payload for the `position_topic` topic. Within the template the following variables are available: `entity_id`, `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;"
|
||||
required: false
|
||||
type: template
|
||||
position_topic:
|
||||
@ -241,7 +241,7 @@ retain:
|
||||
type: boolean
|
||||
default: false
|
||||
set_position_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define the position to be sent to the `set_position_topic` topic. Incoming position value is available for use in the template `{% raw %}{{ position }}{% endraw %}`. Within the template the following variables are available: `entity_id`, `position`, the target position in percent; `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;"
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to define the position to be sent to the `set_position_topic` topic. Incoming position value is available for use in the template `{% raw %}{{ position }}{% endraw %}`. Within the template the following variables are available: `entity_id`, `position`, the target position in percent; `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;"
|
||||
required: false
|
||||
type: template
|
||||
set_position_topic:
|
||||
@ -283,7 +283,7 @@ tilt_closed_value:
|
||||
type: integer
|
||||
default: 0
|
||||
tilt_command_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `tilt_command_topic` topic. Within the template the following variables are available: `entity_id`, `tilt_position`, the target tilt position in percent; `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;"
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) that can be used to extract the payload for the `tilt_command_topic` topic. Within the template the following variables are available: `entity_id`, `tilt_position`, the target tilt position in percent; `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;"
|
||||
required: false
|
||||
type: template
|
||||
tilt_command_topic:
|
||||
@ -311,7 +311,7 @@ tilt_optimistic:
|
||||
type: boolean
|
||||
default: "`true` if `tilt_status_topic` is not defined, else `false`"
|
||||
tilt_status_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `tilt_status_topic` topic. Within the template the following variables are available: `entity_id`, `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;"
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that can be used to extract the payload for the `tilt_status_topic` topic. Within the template the following variables are available: `entity_id`, `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;"
|
||||
required: false
|
||||
type: template
|
||||
tilt_status_topic:
|
||||
@ -323,7 +323,7 @@ unique_id:
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `state_topic` topic."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that can be used to extract the payload for the `state_topic` topic."
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
@ -50,7 +50,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -59,7 +59,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -120,7 +120,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -189,7 +189,7 @@ unique_id:
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that returns a device tracker state."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that returns a device tracker state."
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
@ -97,7 +97,7 @@ device:
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value."
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
@ -42,7 +42,7 @@ This integration does not work with:
|
||||
## Prerequisites
|
||||
|
||||
- The <abbr title="IQ Gateway">Envoy</abbr> must be configured and commissioned.
|
||||
- The <abbr title="IQ Gateway">Envoy</abbr> must be on your local network with IPV4 connectivity from Home Assistant. (Also See troubleshooting, [single network](#single-network))
|
||||
- The <abbr title="IQ Gateway">Envoy</abbr> must be on your local network with IPV4 connectivity from Home Assistant. (Also See troubleshooting, [periodic network connection issues](#periodic-network-connection-issues))
|
||||
- <abbr title="IQ Gateway">Envoy</abbr> firmware version 3.9 or newer.
|
||||
- With <abbr title="IQ Gateway">Envoy</abbr> firmware 7 and greater:
|
||||
- an Enlighten cloud username and password.
|
||||
@ -193,7 +193,7 @@ CT measure multiple properties of the energy exchange which are available as Env
|
||||
- **Envoy <abbr title="Envoy serial number">SN</abbr> Production CT current**: Current in A.
|
||||
- **Envoy <abbr title="Envoy serial number">SN</abbr> Powerfactor production CT**: Powerfactor, ratio of active to apparent power.
|
||||
- **Envoy <abbr title="Envoy serial number">SN</abbr> Metering status production CT**: Status of the metering process: `normal`, `not-metering`, `check-wiring`.
|
||||
- **Envoy <abbr title="Envoy serial number">SN</abbr> Meter status flags active production CT**: Count of CT status flags active. See troubleshooting [CT Active flag count](#ct-active-flag-count) when non-zero.
|
||||
- **Envoy <abbr title="Envoy serial number">SN</abbr> Meter status flags active production CT**: Count of CT status flags active. See troubleshooting [CT Active flag count is non-zero](#ct-active-flag-count-is-non-zero) when non-zero.
|
||||
|
||||
##### Net-consumption CT sensor entities
|
||||
|
||||
@ -202,7 +202,7 @@ CT measure multiple properties of the energy exchange which are available as Env
|
||||
- **Envoy <abbr title="Envoy serial number">SN</abbr> net consumption CT current**: Current in A.
|
||||
- **Envoy <abbr title="Envoy serial number">SN</abbr> Powerfactor net consumption CT**: Power factor, ratio of active to apparent power.
|
||||
- **Envoy <abbr title="Envoy serial number">SN</abbr> Metering status net consumption CT**: Status of the metering process: `normal`, `not-metering`, `check-wiring`.
|
||||
- **Envoy <abbr title="Envoy serial number">SN</abbr> Meter status flags active net consumption CT**: Count of CT status flags active. See troubleshooting [CT Active flag count](#ct-active-flag-count) when non-zero.
|
||||
- **Envoy <abbr title="Envoy serial number">SN</abbr> Meter status flags active net consumption CT**: Count of CT status flags active. See troubleshooting [CT Active flag count is non-zero](#ct-active-flag-count-is-non-zero) when non-zero.
|
||||
|
||||
##### Storage CT sensor entities
|
||||
|
||||
@ -211,7 +211,7 @@ CT measure multiple properties of the energy exchange which are available as Env
|
||||
- **Envoy <abbr title="Envoy serial number">SN</abbr> storage CT current**: Current in A.
|
||||
- **Envoy <abbr title="Envoy serial number">SN</abbr> Powerfactor storage CT**: Power factor, ratio of active to apparent power.
|
||||
- **Envoy <abbr title="Envoy serial number">SN</abbr> Metering status storage CT**: Status of the metering process: `normal`, `not-metering`, `check-wiring`.
|
||||
- **Envoy <abbr title="Envoy serial number">SN</abbr> Meter status flags active storage CT**: Count of CT status flags active. See troubleshooting [CT Active flag count](#ct-active-flag-count) when non-zero.
|
||||
- **Envoy <abbr title="Envoy serial number">SN</abbr> Meter status flags active storage CT**: Count of CT status flags active. See troubleshooting [CT Active flag count is non-zero](#ct-active-flag-count-is-non-zero) when non-zero.
|
||||
|
||||
For storage CT energy entities refer to [battery sensor](#aggregated-iq-battery-sensor-entities) description.
|
||||
|
||||
@ -403,7 +403,7 @@ With installed <abbr title="current transformers">CT</abbr>, data granularity in
|
||||
|
||||
This integration supports updating the Envoy configuration through a `reconfigure` menu option. The reconfiguration allows for changing the Envoy IP address, username, and/or password. Use this menu option if your Enlighten credentials or the device's IP address has changed and needs to be manually updated. The latter is typically automatically detected and updated.
|
||||
|
||||
Use this menu option also when an Envoy firmware upgrade requires a switch from local Envoy username/password to token-based authentication with Enlighten username/password (refer to [authentication requirements](#envoy-authentication-requirements)).
|
||||
Use this menu option also when an Envoy firmware upgrade requires a switch from local Envoy username/password to token-based authentication with Enlighten username/password (refer to [required manual input](#required-manual-input)).
|
||||
|
||||
## Firmware updates
|
||||
|
||||
|
@ -36,8 +36,7 @@ The integration will create the entities listed below. Some of the entities are
|
||||
|
||||
### Weather
|
||||
|
||||
- Current conditions and daily forecast
|
||||
- Current conditions and hourly forecast (disabled by default)
|
||||
- Current conditions, daily forecast, and hourly forecast
|
||||
|
||||
### Camera
|
||||
|
||||
@ -108,9 +107,13 @@ Not all weather stations provide a complete set of weather/sensor data. The data
|
||||
|
||||
## Template sensors
|
||||
|
||||
The configuration snippet below adds a useful [template sensors](/integrations/template/) showing the current "feels like" temperature among air temperature, humidex, and wind chill.
|
||||
The configuration snippets below add [template sensors](/integrations/template/). See the [weather integration](/integrations/weather/) for additional examples.
|
||||
|
||||
Replace `NAME` with the name used to configure your integration.
|
||||
Replace `NAME` with the weather entity used in your configuration.
|
||||
|
||||
### Feels Like
|
||||
|
||||
A sensor that takes into account the humidex or wind chill for what the temperature feels like.
|
||||
|
||||
{% raw %}
|
||||
|
||||
@ -132,6 +135,8 @@ template:
|
||||
|
||||
{% endraw %}
|
||||
|
||||
### Additional Forecast Data
|
||||
|
||||
The configuration snippet below adds a template sensor containing the current forecast information as attributes and the text summary of the forecast for the current day.
|
||||
|
||||
{% raw %}
|
||||
@ -152,12 +157,12 @@ The configuration snippet below adds a template sensor containing the current fo
|
||||
sensor:
|
||||
- name: Weather Forecast Daily
|
||||
unique_id: weather_forecast_daily
|
||||
state: "{{ states('weather.ottawa_kanata_orleans_forecast') }}"
|
||||
state: "{{ states('weather.NAME') }}"
|
||||
attributes:
|
||||
daily: "{{ forecasts['weather.ottawa_kanata_orleans_forecast']['daily_forecast'] }}"
|
||||
hourly: "{{ forecasts['weather.ottawa_kanata_orleans_forecast']['hourly_forecast'] }}"
|
||||
summary: "{{ forecasts['weather.ottawa_kanata_orleans_forecast']['daily_forecast'][0]['text_summary'] }}"
|
||||
temperature_unit: "{{ state_attr('weather.ottawa_kanata_orleans_forecast', 'temperature_unit') }}"
|
||||
daily: "{{ forecasts['weather.NAME']['daily_forecast'] }}"
|
||||
hourly: "{{ forecasts['weather.NAME']['hourly_forecast'] }}"
|
||||
summary: "{{ forecasts['weather.NAME']['daily_forecast'][0]['text_summary'] }}"
|
||||
temperature_unit: "{{ state_attr('weather.NAME', 'temperature_unit') }}"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
@ -42,7 +42,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -51,7 +51,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -142,7 +142,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -186,7 +186,7 @@ unique_id:
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value and render it to a valid JSON event payload. If the template throws an error, the current state will be used instead."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value and render it to a valid JSON event payload. If the template throws an error, the current state will be used instead."
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
@ -49,7 +49,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -58,7 +58,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -66,7 +66,7 @@ availability_topic:
|
||||
required: false
|
||||
type: string
|
||||
command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
command_topic:
|
||||
@ -149,7 +149,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -171,7 +171,7 @@ optimistic:
|
||||
type: boolean
|
||||
default: "`true` if no state topic defined, else `false`."
|
||||
direction_command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `direction_command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `direction_command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
direction_command_topic:
|
||||
@ -183,11 +183,11 @@ direction_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
direction_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the direction."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value from the direction."
|
||||
required: false
|
||||
type: template
|
||||
oscillation_command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `oscillation_command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `oscillation_command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
oscillation_command_topic:
|
||||
@ -199,7 +199,7 @@ oscillation_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
oscillation_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the oscillation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value from the oscillation."
|
||||
required: false
|
||||
type: template
|
||||
payload_available:
|
||||
@ -243,7 +243,7 @@ payload_reset_preset_mode:
|
||||
type: string
|
||||
default: '"None"'
|
||||
percentage_command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `percentage_command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `percentage_command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
percentage_command_topic:
|
||||
@ -255,7 +255,7 @@ percentage_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
percentage_value_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the `percentage` value from the payload received on `percentage_state_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the `percentage` value from the payload received on `percentage_state_topic`.
|
||||
required: false
|
||||
type: template
|
||||
platform:
|
||||
@ -263,7 +263,7 @@ platform:
|
||||
required: true
|
||||
type: string
|
||||
preset_mode_command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `preset_mode_command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `preset_mode_command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
preset_mode_command_topic:
|
||||
@ -275,7 +275,7 @@ preset_mode_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
preset_mode_value_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the `preset_mode` value from the payload received on `preset_mode_state_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the `preset_mode` value from the payload received on `preset_mode_state_topic`.
|
||||
required: false
|
||||
type: template
|
||||
preset_modes:
|
||||
@ -308,7 +308,7 @@ state_topic:
|
||||
required: false
|
||||
type: string
|
||||
state_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the state."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value from the state."
|
||||
required: false
|
||||
type: template
|
||||
unique_id:
|
||||
|
@ -144,5 +144,6 @@ This video tutorial explains how Google Generative AI can be set up, how you can
|
||||
logger:
|
||||
logs:
|
||||
homeassistant.components.conversation: debug
|
||||
homeassistant.components.conversation.chat_log: debug
|
||||
homeassistant.components.google_generative_ai_conversation: debug
|
||||
```
|
||||
|
@ -632,11 +632,11 @@ Both entities can use these options, but the availability of these will depend o
|
||||
<summary><b>Options:</b> (click to view)</summary>
|
||||
|
||||
- **Fan off** `cooking_hood_enum_type_stage_fan_off`
|
||||
- **Fan stage 1** `cooking_hood_enum_type_stage_fan_stage01`
|
||||
- **Fan stage 2** `cooking_hood_enum_type_stage_fan_stage02`
|
||||
- **Fan stage 3** `cooking_hood_enum_type_stage_fan_stage03`
|
||||
- **Fan stage 4** `cooking_hood_enum_type_stage_fan_stage04`
|
||||
- **Fan stage 5** `cooking_hood_enum_type_stage_fan_stage05`
|
||||
- **Fan stage 1** `cooking_hood_enum_type_stage_fan_stage_01`
|
||||
- **Fan stage 2** `cooking_hood_enum_type_stage_fan_stage_02`
|
||||
- **Fan stage 3** `cooking_hood_enum_type_stage_fan_stage_03`
|
||||
- **Fan stage 4** `cooking_hood_enum_type_stage_fan_stage_04`
|
||||
- **Fan stage 5** `cooking_hood_enum_type_stage_fan_stage_05`
|
||||
|
||||
</details>
|
||||
- **Intensive level**:
|
||||
@ -668,14 +668,14 @@ Both entities can use these options, but the availability of these will depend o
|
||||
<summary><b>Options:</b> (click to view)</summary>
|
||||
|
||||
- **Cold**: `laundry_care_washer_enum_type_temperature_cold`
|
||||
- **20ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c20`
|
||||
- **30ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c30`
|
||||
- **40ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c40`
|
||||
- **50ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c50`
|
||||
- **60ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c60`
|
||||
- **70ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c70`
|
||||
- **80ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c80`
|
||||
- **90ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c90`
|
||||
- **20ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_20`
|
||||
- **30ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_30`
|
||||
- **40ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_40`
|
||||
- **50ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_50`
|
||||
- **60ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_60`
|
||||
- **70ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_70`
|
||||
- **80ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_80`
|
||||
- **90ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_90`
|
||||
- **Cold**: `laundry_care_washer_enum_type_temperature_ul_cold`
|
||||
- **Warm**: `laundry_care_washer_enum_type_temperature_ul_warm`
|
||||
- **Hot**: `laundry_care_washer_enum_type_temperature_ul_hot`
|
||||
@ -689,13 +689,15 @@ Both entities can use these options, but the availability of these will depend o
|
||||
<summary><b>Options:</b> (click to view)</summary>
|
||||
|
||||
- **Off**: `laundry_care_washer_enum_type_spin_speed_off`
|
||||
- **400 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m400`
|
||||
- **600 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m600`
|
||||
- **800 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m800`
|
||||
- **1000 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m1000`
|
||||
- **1200 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m1200`
|
||||
- **1400 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m1400`
|
||||
- **1600 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m1600`
|
||||
- **400 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_400`
|
||||
- **600 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_600`
|
||||
- **700 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_700`
|
||||
- **800 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_800`
|
||||
- **900 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_900`
|
||||
- **1000 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_1000`
|
||||
- **1200 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_1200`
|
||||
- **1400 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_1400`
|
||||
- **1600 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_1600`
|
||||
- **Off**: `laundry_care_washer_enum_type_spin_speed_ul_off`
|
||||
- **Low**: `laundry_care_washer_enum_type_spin_speed_ul_low`
|
||||
- **Medium**: `laundry_care_washer_enum_type_spin_speed_ul_medium`
|
||||
@ -1086,6 +1088,35 @@ To solve the above issue, follow these steps:
|
||||
3. Select the three dots {% icon "mdi:dots-vertical" %} menu from the application credentials you created for the Home Connect integration and select **Delete**.
|
||||
4. Add the Home Connect integration again under {% my integrations title="**Settings** > **Devices & services**" %}
|
||||
|
||||
### Missing options at the "active program" and "selected program" entities
|
||||
|
||||
#### Symptom: "Although I have options, some programs that are available on the app are not in the list of options at the "active program" and "selected program" entities"
|
||||
|
||||
Some programs that are available to select on the app, on the physical device or in the diagnostics file from the device are missing at the "active program" and "selected program" entities.
|
||||
|
||||
##### Description
|
||||
|
||||
If you see programs in the app or the physical device that are missing in the integration, first check if they are available in the [diagnostics file](https://www.home-assistant.io/docs/configuration/troubleshooting/#download-diagnostics). If they are in the diagnostics file, it means the API can send them to the integration, but the integration can't recognize them.
|
||||
|
||||
##### Solution
|
||||
|
||||
The program key needs to be added to the integration. To help with that, you can open an issue at [aiohomeconnect](https://github.com/MartinHjelmare/aiohomeconnect) about the missing program key.
|
||||
|
||||
#### Symptom: "No programs available at the "active program" and "selected program" entities nor in the diagnostics file"
|
||||
|
||||
There are no programs available to select at the "active program" and "selected program" entities, and the downloaded device diagnostics file does not list any programs.
|
||||
|
||||
##### Description
|
||||
|
||||
The Home Connect API is not sending any programs to the integration.
|
||||
|
||||
##### Solution
|
||||
|
||||
There's no solution for this issue. The only thing that can be done is reporting the issue to Home Connect through these channels:
|
||||
|
||||
- [Home Connect service and contact](https://www.home-connect.com/us/en/support/contact-and-service)
|
||||
- [Home Connect developer Help & Support](https://developer.home-connect.com/support)
|
||||
|
||||
### Unavailable entities for a device
|
||||
|
||||
#### Symptom: "The entities related to an appliance were available but no longer are"
|
||||
|
@ -47,8 +47,6 @@ To get started with the general settings in YAML, follow these steps:
|
||||
currency: USD
|
||||
country: US
|
||||
time_zone: "America/Los_Angeles"
|
||||
external_url: "https://www.example.com"
|
||||
internal_url: "http://homeassistant.local:8123"
|
||||
allowlist_external_dirs:
|
||||
- "/usr/var/dumping-ground"
|
||||
- "/tmp"
|
||||
@ -101,11 +99,11 @@ currency:
|
||||
type: string
|
||||
default: "EUR"
|
||||
external_url:
|
||||
description: "The URL that Home Assistant is available on from the internet. For example: `https://example.duckdns.org:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported."
|
||||
description: "The URL that Home Assistant is available on from the internet. For example: `https://example.duckdns.org:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported. This can also be configured by navigating to **{% my network title="Settings > System > Network" %}**."
|
||||
required: false
|
||||
type: string
|
||||
internal_url:
|
||||
description: "The URL that Home Assistant is available on from your local network. For example: `http://homeassistant.local:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported."
|
||||
description: "The URL that Home Assistant is available on from your local network. For example: `http://192.168.0.10:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported. This can also be configured by navigating to **{% my network title="Settings > System > Network" %}**."
|
||||
required: false
|
||||
type: string
|
||||
customize:
|
||||
|
@ -59,7 +59,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -68,7 +68,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -84,7 +84,7 @@ current_humidity_topic:
|
||||
required: false
|
||||
type: string
|
||||
command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
command_topic:
|
||||
@ -145,7 +145,7 @@ device:
|
||||
required: false
|
||||
type: string
|
||||
device_class:
|
||||
description: The device class of the MQTT device. Must be either `humidifier`, `dehumidifier` or `null`.
|
||||
description: The [device class](/integrations/humidifier/#device-class) of the MQTT device. Must be either `humidifier`, `dehumidifier` or `null`.
|
||||
required: false
|
||||
type: string
|
||||
default: humidifier
|
||||
@ -172,7 +172,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -234,7 +234,7 @@ payload_reset_mode:
|
||||
type: string
|
||||
default: '"None"'
|
||||
target_humidity_command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `target_humidity_command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `target_humidity_command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
target_humidity_command_topic:
|
||||
@ -246,11 +246,11 @@ target_humidity_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
target_humidity_state_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value for the humidifier `target_humidity` state.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value for the humidifier `target_humidity` state.
|
||||
required: false
|
||||
type: template
|
||||
mode_command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `mode_command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `mode_command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
mode_command_topic:
|
||||
@ -262,7 +262,7 @@ mode_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
mode_state_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value for the humidifier `mode` state.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value for the humidifier `mode` state.
|
||||
required: false
|
||||
type: template
|
||||
modes:
|
||||
@ -289,7 +289,7 @@ state_topic:
|
||||
required: false
|
||||
type: string
|
||||
state_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the state."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value from the state."
|
||||
required: false
|
||||
type: template
|
||||
unique_id:
|
||||
|
@ -48,7 +48,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -57,7 +57,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -153,7 +153,7 @@ image_topic:
|
||||
required: exclusive
|
||||
type: string
|
||||
json_attributes_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`.
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -173,7 +173,7 @@ unique_id:
|
||||
required: false
|
||||
type: string
|
||||
url_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the image URL from a message received at `url_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the image URL from a message received at `url_topic`.
|
||||
required: false
|
||||
type: template
|
||||
url_topic:
|
||||
|
@ -6,7 +6,6 @@ ha_category:
|
||||
ha_release: 0.108
|
||||
ha_iot_class: Local Polling
|
||||
ha_config_flow: true
|
||||
ha_quality_scale: platinum
|
||||
ha_codeowners:
|
||||
- '@ctalkington'
|
||||
ha_domain: ipp
|
||||
|
@ -28,7 +28,7 @@ activity_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
activity_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value."
|
||||
required: false
|
||||
type: template
|
||||
availability:
|
||||
@ -51,7 +51,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -64,7 +64,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
device:
|
||||
@ -121,7 +121,7 @@ device:
|
||||
required: false
|
||||
type: string
|
||||
dock_command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `dock_command_topic`. The `value` parameter in the template will be set to `dock`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `dock_command_topic`. The `value` parameter in the template will be set to `dock`.
|
||||
required: false
|
||||
type: template
|
||||
dock_command_topic:
|
||||
@ -151,7 +151,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -172,7 +172,7 @@ optimistic:
|
||||
type: boolean
|
||||
default: "`true` if no `activity_state_topic` defined, else `false`."
|
||||
pause_command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `pause_command_topic`. The `value` parameter in the template will be set to `pause`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `pause_command_topic`. The `value` parameter in the template will be set to `pause`.
|
||||
required: false
|
||||
type: template
|
||||
pause_command_topic:
|
||||
@ -189,7 +189,7 @@ qos:
|
||||
type: integer
|
||||
default: 0
|
||||
start_mowing_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `start_mowing_command_topic`. The `value` parameter in the template will be set to `start_mowing`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `start_mowing_command_topic`. The `value` parameter in the template will be set to `start_mowing`.
|
||||
required: false
|
||||
type: template
|
||||
start_mowing_command_topic:
|
||||
|
@ -284,10 +284,109 @@ entities:
|
||||
```
|
||||
|
||||
### 2. Automation
|
||||
**- Notification, Error event**
|
||||
|
||||
#### 1) Air conditioner, climate
|
||||
|
||||
> - Currently the Climate's set_hvac_mode, set_temperature service is not working properly. Each control must operate sequentially, but conditional wait for this has not yet been implemented in ThinQ integration.
|
||||
> - We provide a script that can do turn_on, set_hvac_mode, and set_temperature at once, so please use it for automation.
|
||||
> - Create a new script in 'CREATE SCRIPT' using the code below, then select the script in the 'Action' field.
|
||||
> - This conditional wait is scheduled to be implemented in core 2025.4.
|
||||
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
alias: LG ThinQ climate
|
||||
description: "Action turn_on, set_hvac_mode, set_temperature"
|
||||
fields:
|
||||
input_device:
|
||||
selector:
|
||||
device:
|
||||
filter:
|
||||
- integration: lg_thinq
|
||||
name: Device
|
||||
required: true
|
||||
input_entity:
|
||||
selector:
|
||||
entity:
|
||||
filter:
|
||||
- integration: lg_thinq
|
||||
domain: climate
|
||||
name: Entity
|
||||
required: true
|
||||
input_hvac:
|
||||
selector:
|
||||
select:
|
||||
options:
|
||||
- label: Off
|
||||
value: off
|
||||
- label: Auto
|
||||
value: auto
|
||||
- label: Cool
|
||||
value: cool
|
||||
- label: Dry
|
||||
value: dry
|
||||
- label: Fan only
|
||||
value: fan_only
|
||||
- label: Heat/cool
|
||||
value: heat_cool
|
||||
- label: Heat
|
||||
value: heat
|
||||
name: HVAC mode
|
||||
required: true
|
||||
default: cool
|
||||
input_temperature:
|
||||
selector:
|
||||
number:
|
||||
min: 1
|
||||
max: 100
|
||||
name: Target temperature
|
||||
required: true
|
||||
default: 18
|
||||
sequence:
|
||||
- sequence:
|
||||
- variables:
|
||||
entity_name: "{{ input_entity.split('.')[1] }}"
|
||||
- if:
|
||||
- condition: template
|
||||
value_template: >-
|
||||
{{ input_hvac != 'off' and states('climate.'+ entity_name) == 'off' }}
|
||||
then:
|
||||
- action: climate.turn_on
|
||||
target:
|
||||
device_id: "{{ input_device }}"
|
||||
data: {}
|
||||
- wait_template: "{{ states('climate.'+ entity_name) != 'off' }}"
|
||||
- if:
|
||||
- condition: template
|
||||
value_template: "{{ states('climate.'+ entity_name) != input_hvac }}"
|
||||
then:
|
||||
- action: climate.set_hvac_mode
|
||||
data:
|
||||
hvac_mode: "{{ input_hvac }}"
|
||||
target:
|
||||
device_id: "{{ input_device }}"
|
||||
- wait_template: "{{ states('climate.'+ entity_name) == input_hvac }}"
|
||||
- if:
|
||||
- condition: template
|
||||
value_template: "{{ input_hvac != 'off' }}"
|
||||
then:
|
||||
- action: climate.set_temperature
|
||||
data:
|
||||
temperature: "{{ input_temperature }}"
|
||||
target:
|
||||
device_id: "{{ input_device }}"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
||||
#### 2) Notification, error event
|
||||
|
||||
> - Guide: [Automating on event](https://www.home-assistant.io/integrations/event/#automating-on-a-button-press)
|
||||
> - Important: guide's step 3, 4
|
||||
> - You can select the state change you want to act as trigger in step 4
|
||||
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
alias: lack of water example
|
||||
description: Toggle switch when air purifier's lack_of_water
|
||||
@ -306,6 +405,8 @@ actions:
|
||||
domain: switch
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Setup
|
||||
|
@ -70,7 +70,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -79,7 +79,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -91,7 +91,7 @@ brightness_command_topic:
|
||||
required: false
|
||||
type: string
|
||||
brightness_command_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `brightness_command_topic`. Available variables: `value`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `brightness_command_topic`. Available variables: `value`."
|
||||
required: false
|
||||
type: template
|
||||
brightness_scale:
|
||||
@ -104,7 +104,7 @@ brightness_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
brightness_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the brightness value."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the brightness value."
|
||||
required: false
|
||||
type: template
|
||||
color_mode_state_topic:
|
||||
@ -112,11 +112,11 @@ color_mode_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
color_mode_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the color mode."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the color mode."
|
||||
required: false
|
||||
type: template
|
||||
color_temp_command_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `color_temp_command_topic`. Available variables: `value`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `color_temp_command_topic`. Available variables: `value`."
|
||||
required: false
|
||||
type: template
|
||||
color_temp_command_topic:
|
||||
@ -133,7 +133,7 @@ color_temp_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
color_temp_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the color temperature value."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the color temperature value."
|
||||
required: false
|
||||
type: template
|
||||
command_topic:
|
||||
@ -216,7 +216,7 @@ effect_command_topic:
|
||||
required: false
|
||||
type: string
|
||||
effect_command_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `effect_command_topic`. Available variables: `value`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `effect_command_topic`. Available variables: `value`."
|
||||
required: false
|
||||
type: template
|
||||
effect_list:
|
||||
@ -228,11 +228,11 @@ effect_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
effect_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the effect value."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the effect value."
|
||||
required: false
|
||||
type: template
|
||||
hs_command_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `hs_command_topic`. Available variables: `hue` and `sat`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `hs_command_topic`. Available variables: `hue` and `sat`."
|
||||
required: false
|
||||
type: template
|
||||
hs_command_topic:
|
||||
@ -247,7 +247,7 @@ hs_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
hs_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the HS value."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the HS value."
|
||||
required: false
|
||||
type: template
|
||||
icon:
|
||||
@ -255,7 +255,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -309,12 +309,12 @@ payload_not_available:
|
||||
type: string
|
||||
default: offline
|
||||
payload_off:
|
||||
description: The payload that represents disabled state.
|
||||
description: The payload that represents the off state.
|
||||
required: false
|
||||
type: string
|
||||
default: "OFF"
|
||||
payload_on:
|
||||
description: The payload that represents enabled state.
|
||||
description: The payload that represents the on state.
|
||||
required: false
|
||||
type: string
|
||||
default: "ON"
|
||||
@ -333,7 +333,7 @@ retain:
|
||||
type: boolean
|
||||
default: false
|
||||
rgb_command_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `rgb_command_topic`. Available variables: `red`, `green` and `blue`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `rgb_command_topic`. Available variables: `red`, `green` and `blue`."
|
||||
required: false
|
||||
type: template
|
||||
rgb_command_topic:
|
||||
@ -345,11 +345,11 @@ rgb_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
rgb_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the RGB value."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the RGB value."
|
||||
required: false
|
||||
type: template
|
||||
rgbw_command_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `rgbw_command_topic`. Available variables: `red`, `green`, `blue` and `white`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `rgbw_command_topic`. Available variables: `red`, `green`, `blue` and `white`."
|
||||
required: false
|
||||
type: template
|
||||
rgbw_command_topic:
|
||||
@ -361,11 +361,11 @@ rgbw_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
rgbw_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the RGBW value."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the RGBW value."
|
||||
required: false
|
||||
type: template
|
||||
rgbww_command_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `rgbww_command_topic`. Available variables: `red`, `green`, `blue`, `cold_white` and `warm_white`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `rgbww_command_topic`. Available variables: `red`, `green`, `blue`, `cold_white` and `warm_white`."
|
||||
required: false
|
||||
type: template
|
||||
rgbww_command_topic:
|
||||
@ -377,20 +377,20 @@ rgbww_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
rgbww_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the RGBWW value."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the RGBWW value."
|
||||
required: false
|
||||
type: template
|
||||
schema:
|
||||
description: The schema to use. Must be `default` or omitted to select the default schema.
|
||||
description: The schema to use. Must be `basic` or omitted to select the default schema.
|
||||
required: false
|
||||
type: string
|
||||
default: default
|
||||
default: basic
|
||||
state_topic:
|
||||
description: "The MQTT topic subscribed to receive state updates. A \"None\" payload resets to an `unknown` state. An empty payload is ignored. By default, valid state payloads are `OFF` and `ON`. The accepted payloads can be overridden with the `payload_off` and `payload_on` config options."
|
||||
required: false
|
||||
type: string
|
||||
state_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the state value. The template should return the `payload_on` and `payload_off` values, so if your light uses `power on` to turn on, your `state_value_template` string should return `power on` when the switch is on. For example, if the message is just `on`, your `state_value_template` should be `power {{ value }}`. When your `payload_on = 27` and `payload_off = 'off'`, then this template might be `'off' if value_json.my_custom_brightness_field <= 0 else 27`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the state value. The template should return the values defined by `payload_on` (defaults to \"ON\") and `payload_off` (defaults to \"OFF\") settings, or \"None\"."
|
||||
required: false
|
||||
type: template
|
||||
unique_id:
|
||||
@ -407,7 +407,7 @@ white_scale:
|
||||
type: integer
|
||||
default: 255
|
||||
xy_command_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `xy_command_topic`. Available variables: `x` and `y`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `xy_command_topic`. Available variables: `x` and `y`."
|
||||
required: false
|
||||
type: template
|
||||
xy_command_topic:
|
||||
@ -419,7 +419,7 @@ xy_state_topic:
|
||||
required: false
|
||||
type: string
|
||||
xy_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the XY value."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the XY value."
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
@ -571,7 +571,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -580,7 +580,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -681,7 +681,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -748,7 +748,7 @@ schema:
|
||||
description: The schema to use. Must be `json` to select the JSON schema.
|
||||
required: false
|
||||
type: string
|
||||
default: default
|
||||
default: basic
|
||||
state_topic:
|
||||
description: 'The MQTT topic subscribed to receive state updates in a JSON-format. The JSON payload may contain the elements: `"state"`: `"ON"` the light is on, `"OFF"` the light is off, `null` the state is `unknown`; `"color_mode"`: one of the `supported_color_modes`; `"color"`: A dict with the color attributes*; `"brightness"`: The brightness; `"color_temp"`: The color temperature; `"effect"`: The effect of the light.'
|
||||
required: false
|
||||
@ -969,7 +969,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -978,7 +978,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -986,11 +986,11 @@ availability_topic:
|
||||
required: false
|
||||
type: string
|
||||
blue_template:
|
||||
description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract blue color from the state payload value. Expected result of the template is an integer from 0-255 range."
|
||||
description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract blue color from the state payload value. Expected result of the template is an integer from 0-255 range."
|
||||
required: false
|
||||
type: template
|
||||
brightness_template:
|
||||
description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract brightness from the state payload value. Expected result of the template is an integer from 0-255 range."
|
||||
description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract brightness from the state payload value. Expected result of the template is an integer from 0-255 range."
|
||||
required: false
|
||||
type: template
|
||||
color_temp_kelvin:
|
||||
@ -999,15 +999,15 @@ color_temp_kelvin:
|
||||
type: boolean
|
||||
default: false
|
||||
color_temp_template:
|
||||
description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract color temperature from the state payload value. Expected result of the template is an integer. If `color_temp_kelvin` is `true` the expected value is in Kelvin else mireds are expected."
|
||||
description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract color temperature from the state payload value. Expected result of the template is an integer. If `color_temp_kelvin` is `true` the expected value is in Kelvin else mireds are expected."
|
||||
required: false
|
||||
type: template
|
||||
command_off_template:
|
||||
description: "The [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) for *off* state changes. Available variables: `state` and `transition`."
|
||||
description: "The [template](/docs/configuration/templating/#using-command-templates-with-mqtt) for *off* state changes. Available variables: `state` and `transition`."
|
||||
required: true
|
||||
type: template
|
||||
command_on_template:
|
||||
description: "The [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) for *on* state changes. Available variables: `state`, `brightness`, `color_temp`, `red`, `green`, `blue`, `hue`, `sat`, `flash`, `transition` and `effect`. Values `red`, `green`, `blue`, `brightness` are provided as integers from range 0-255. Value of `hue` is provided as float from range 0-360. Value of `sat` is provided as float from range 0-100. Value of `color_temp` is provided as integer representing mired or Kelvin units if `color_temp_kelvin` is `true`."
|
||||
description: "The [template](/docs/configuration/templating/#using-command-templates-with-mqtt) for *on* state changes. Available variables: `state`, `brightness`, `color_temp`, `red`, `green`, `blue`, `hue`, `sat`, `flash`, `transition` and `effect`. Values `red`, `green`, `blue`, `brightness` are provided as integers from range 0-255. Value of `hue` is provided as float from range 0-360. Value of `sat` is provided as float from range 0-100. Value of `color_temp` is provided as integer representing mired or Kelvin units if `color_temp_kelvin` is `true`."
|
||||
required: true
|
||||
type: template
|
||||
command_topic:
|
||||
@ -1070,11 +1070,11 @@ effect_list:
|
||||
required: false
|
||||
type: [string, list]
|
||||
effect_template:
|
||||
description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract effect from the state payload value."
|
||||
description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract effect from the state payload value."
|
||||
required: false
|
||||
type: template
|
||||
green_template:
|
||||
description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract green color from the state payload value. Expected result of the template is an integer from 0-255 range."
|
||||
description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract green color from the state payload value. Expected result of the template is an integer from 0-255 range."
|
||||
required: false
|
||||
type: template
|
||||
icon:
|
||||
@ -1082,7 +1082,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -1141,16 +1141,16 @@ qos:
|
||||
type: integer
|
||||
default: 0
|
||||
red_template:
|
||||
description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract red color from the state payload value. Expected result of the template is an integer from 0-255 range."
|
||||
description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract red color from the state payload value. Expected result of the template is an integer from 0-255 range."
|
||||
required: false
|
||||
type: template
|
||||
schema:
|
||||
description: The schema to use. Must be `template` to select the template schema.
|
||||
required: false
|
||||
type: string
|
||||
default: default
|
||||
default: basic
|
||||
state_template:
|
||||
description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract state from the state payload value."
|
||||
description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract state from the state payload value."
|
||||
required: false
|
||||
type: template
|
||||
state_topic:
|
||||
|
@ -51,7 +51,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -60,7 +60,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -72,7 +72,7 @@ code_format:
|
||||
required: false
|
||||
type: string
|
||||
command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. The lock command template accepts the parameters `value` and `code`. The `value` parameter will contain the configured value for either `payload_open`, `payload_lock` or `payload_unlock`. The `code` parameter is set during the action to `open`, `lock` or `unlock` the MQTT lock and will be set `None` if no code was passed.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. The lock command template accepts the parameters `value` and `code`. The `value` parameter will contain the configured value for either `payload_open`, `payload_lock` or `payload_unlock`. The `code` parameter is set during the action to `open`, `lock` or `unlock` the MQTT lock and will be set `None` if no code was passed.
|
||||
required: false
|
||||
type: template
|
||||
command_topic:
|
||||
@ -155,7 +155,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -253,7 +253,7 @@ unique_id:
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a state value from the payload.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a state value from the payload.
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
@ -1047,7 +1047,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -1060,7 +1060,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
payload_available:
|
||||
@ -1416,6 +1416,18 @@ If you have a large number of manually configured items, you might want to consi
|
||||
Documentation on the MQTT components that support YAML [can be found here](/integrations/mqtt/#configuration-via-yaml).
|
||||
{% endnote %}
|
||||
|
||||
## Entity state updates
|
||||
|
||||
Entities receive state updates via MQTT subscriptions. The payloads received on the state topics are processed to determine whether there is a significant change. If a change is detected, the entity will be updated.
|
||||
|
||||
Note that MQTT device payloads often contain information for updating multiple entities that subscribe to the same topics. For example, a light status update might include information about link quality. This data can update a link quality sensor but is not used to update the light itself. MQTT filters out entity state updates when there are no changes.
|
||||
|
||||
### The last reported state attribute
|
||||
|
||||
Because MQTT state updates are often repeated frequently, even when no actual changes exist, it is up to the MQTT subscriber to determine whether a status update was received. If the latest update is missed, it might take some time before the next one arrives. If a retained payload exists at the broker, that value will be replayed first, but it will be an update of a previous last state.
|
||||
|
||||
MQTT devices often continuously generate numerous state updates. MQTT does not update `last_reported` to avoid impacting system stability unless `force_update` is set. Alternatively, an MQTT sensor can be created to measure the last update.
|
||||
|
||||
## Using Templates
|
||||
|
||||
The MQTT integration supports templating. Read more [about using templates with the MQTT integration](/docs/configuration/templating/#using-templates-with-the-mqtt-integration).
|
||||
@ -1480,7 +1492,7 @@ The MQTT integration will register the `mqtt.publish` action, which allows publi
|
||||
| `retain` | yes | If message should have the retain flag set. (default: false) |
|
||||
|
||||
{% note %}
|
||||
When `payload` is rendered from [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) in a YAML script or automation, and the template renders to a `bytes` literal, the outgoing MQTT payload will only be sent as `raw` data, if the `evaluate_payload` option flag is set to `true`.
|
||||
When `payload` is rendered from [template](/docs/configuration/templating/#using-value-templates-with-mqtt) in a YAML script or automation, and the template renders to a `bytes` literal, the outgoing MQTT payload will only be sent as `raw` data, if the `evaluate_payload` option flag is set to `true`.
|
||||
{% endnote %}
|
||||
|
||||
```yaml
|
||||
|
@ -82,7 +82,13 @@ The scene platform lets you activate a nexia automation.
|
||||
|
||||
### Switch
|
||||
|
||||
The switch platform lets you enable or disable hold mode for each thermostat.
|
||||
The following enable/disable switches are added for each thermostat:
|
||||
|
||||
- Emergency heat (if the device supports it)
|
||||
|
||||
The following enable/disable switches are added for each thermostat zone:
|
||||
|
||||
- Hold mode
|
||||
|
||||
### Action `nexia.set_aircleaner_mode`
|
||||
|
||||
|
@ -40,7 +40,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -49,7 +49,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `availability_topic`. To determine the device's availability result, the template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the device's availability from the `availability_topic`. To determine the device's availability result, the template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -57,7 +57,7 @@ availability_topic:
|
||||
required: false
|
||||
type: string
|
||||
command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
command_topic:
|
||||
@ -140,7 +140,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
|
@ -51,7 +51,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
command_topic:
|
||||
@ -138,7 +138,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -210,7 +210,7 @@ unit_of_measurement:
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value."
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
@ -25,8 +25,41 @@ ha_integration_type: device
|
||||
|
||||
The Network UPS Tools (NUT) integration allows you to monitor and manage a UPS (battery backup) using a [NUT](https://networkupstools.org/) server. It lets you view their status, receives notifications about important events, and execute commands as device actions.
|
||||
|
||||
## Supported devices
|
||||
|
||||
This integration supports hardware devices compatible with
|
||||
NUT. NUT's hardware compatibility list is available from the [Network
|
||||
UPS Tools](https://networkupstools.org/) website.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
You must have a NUT server configured to monitor one or more supported
|
||||
power device(s).
|
||||
|
||||
It is not possible to automatically detect a NUT server IP address
|
||||
change. You should therefore configure the NUT server with a static
|
||||
IP address, assign a fixed IP address reservation with DHCP, or use
|
||||
DNS as appropriate for your network.
|
||||
|
||||
In addition, you will need a username and password for
|
||||
this integration to log into the NUT server if authentication is
|
||||
required.
|
||||
|
||||
{% include integrations/config_flow.md %}
|
||||
|
||||
Setting up the integration requires the following information:
|
||||
|
||||
{% configuration_basic %}
|
||||
Host:
|
||||
description: "The IP address or hostname of your NUT server."
|
||||
Port:
|
||||
description: "The network port of your NUT server. The NUT server's default port is '3493'."
|
||||
Username:
|
||||
description: "The username to log into the NUT server. This is configured in NUT."
|
||||
Password:
|
||||
description: "The password associated with the username to log into the NUT server. This is configured in NUT."
|
||||
{% endconfiguration_basic %}
|
||||
|
||||
## Supported functionality
|
||||
|
||||
{% important %}
|
||||
@ -60,6 +93,11 @@ The following switches are available for each switchable outlet:
|
||||
|---------------------------|:------------------------------------------------|
|
||||
| Power outlet `name` | Turn power on/off for named outlet |
|
||||
|
||||
## Data updates
|
||||
|
||||
The integration uses {% term polling %} to retrieve data from the NUT
|
||||
server. The default polling interval is once every 60 seconds.
|
||||
|
||||
## Example Resources
|
||||
|
||||
Given the following example output from NUT (your variables may differ):
|
||||
@ -144,3 +182,10 @@ Ensure the user you specify has the required permissions to execute the desired
|
||||
In this example, the user `my_user` has permission to execute all commands (`instcmds = ALL`).
|
||||
|
||||
Please note that Home Assistant cannot determine whether a user can access a specific action without executing it. If you attempt to perform an action for which the user does not have permission, an exception will be thrown at runtime.
|
||||
|
||||
## Remove integration
|
||||
|
||||
This integration follows standard integration removal. No extra steps
|
||||
are required.
|
||||
|
||||
{% include integrations/remove_device_service.md %}
|
||||
|
@ -80,7 +80,7 @@ Alternatively, you can create a new TOTP secret for your account and use the "no
|
||||
|
||||
When using Opower with any of the Exelon subsidiaries, such as BGE, ComEd, PECO, Pepco, etc., you need to actively disable two-factor authentication.
|
||||
Before proceeding, make sure you understand the security implications of disabling 2FA.
|
||||
Log onto the website, select **Don't use 2FA** and **Don't ask me again**. If you have already enabled 2FA, disable it.
|
||||
Log onto the website, select **Don't use 2FA** and **Don't ask me again**. If you have already enabled 2FA, you most likely cannot disable it, which unfortunately means you cannot use this integration.
|
||||
|
||||
{% include integrations/config_flow.md %}
|
||||
|
||||
|
@ -18,8 +18,6 @@ This integration is installed automatically when the **Open Thread Border Router
|
||||
- [Enabling Thread on Home Assistant Yellow](https://yellow.home-assistant.io/procedures/enable-thread/)
|
||||
- [Enabling Thread on Home Assistant Connect ZBT-1](https://connectzbt1.home-assistant.io/procedures/enable-thread/)
|
||||
|
||||
The integration is also installed automatically when enabling the experimental **Silicon Labs Multiprotocol** support.
|
||||
|
||||
Installing this integration manually is an advanced use case, for example if you run your own border router. If you do have such a use case, follow these steps:
|
||||
|
||||
{% include integrations/config_flow.md %}
|
||||
|
@ -24,10 +24,24 @@ ha_integration_type: integration
|
||||
|
||||
The `philips_js` platform allows you to control Philips TVs which expose the [jointSPACE](http://jointspace.sourceforge.net/) JSON-API.
|
||||
|
||||
If your TV responds to `http://IP_ADDRESS_OF_TV:1925/system` then this integration can be used. In the response, you should also be able to see the version of the API the TV uses (`"api_version":{"Major":6...`).
|
||||
For older TVs follow instructions on how to activate the API and if your model is supported [here](http://jointspace.sourceforge.net/download.html). Note that not all listed, jointSPACE-enabled devices will have JSON-interface running on port 1925. This is true at least for some models before year 2011.
|
||||
|
||||
Also, note that version 6 of the API needs to be authenticated by a PIN code displayed on your TV.
|
||||
## Prerequisites
|
||||
|
||||
Before adding the integration, it is worth checking if this integration works for you. As there are differences between TVs, you may need to try different addresses:
|
||||
|
||||
- Some TVs use `https://` and port 1926, other TVs use `http://` and port 1925.
|
||||
|
||||
### Check if this integration can be used
|
||||
|
||||
1. Check if your TV responds to one of the following combinations:
|
||||
- `http://IP_ADDRESS_OF_TV:1925/system`
|
||||
- `https://IP_ADDRESS_OF_TV:1926/system`
|
||||
2. If you get a response, then this integration can be used.
|
||||
- In the response, you should also be able to see the version of the API the TV uses (`"api_version":{"Major":6...`).
|
||||
3. For older TVs, follow instructions on how to activate the API and if your model is supported [here](http://jointspace.sourceforge.net/download.html).
|
||||
- Note that not all listed, jointSPACE-enabled devices will have JSON-interface running on port 1925.
|
||||
- This is true at least for some models before year 2011.
|
||||
- Also, note that version 6 of the API needs to be authenticated by a PIN code displayed on your TV.
|
||||
|
||||
{% include integrations/config_flow.md %}
|
||||
|
||||
|
@ -56,6 +56,18 @@ Alternatively, the IRK of an Android phone and/or secondary device can be obtain
|
||||
8. Select one of the frames and expand the "Bluetooth Security Manager Protocol." The hex dump will show either the sending or receiving device IRK.
|
||||
9. Reverse the value displayed. For example, if it is `763af6c7f7d94ad6c262158e2320544e`, the IRK to use would be: `4e5420238e1562c2d64ad9f7c7f63a76`.
|
||||
|
||||
### On Windows - for any devices that will connect to a computer
|
||||
|
||||
1. Get the PsExec tool from Microsoft. It's available in the [Sysinternals Suite](https://learn.microsoft.com/en-us/sysinternals/downloads/psexec). Download and extract the `PsExec.exe` or `PsExec64.exe`.
|
||||
2. Open Command Prompt as Administrator: Press the Windows key, type `cmd`, right-click on **Command Prompt**, and select **Run as administrator**.
|
||||
3. Run PsExec: Navigate to the folder where PsExec is located and run `psexec -i -s cmd` or `psexec64 -i -s cmd`. This command will open a new command prompt window with SYSTEM rights.
|
||||
4. Verify SYSTEM Rights: In the new command prompt window, type `whoami` to confirm that you have SYSTEM rights.
|
||||
5. Open Registry Editor with SYSTEM Rights: In the new command prompt window, type `regedit` to open the Registry Editor with SYSTEM rights.
|
||||
6. Locate the IRK: Navigate to `HKLM\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys`. There is one subfolder that probably holds the computer's Bluetooth radio's MAC address, look inside it for the folder corresponding to the MAC address of your Bluetooth device.
|
||||
7. Right-click the key(folder) and select export. Save the `.reg` file somewhere.
|
||||
8. Open the `.reg` file in Notepad. To open the **Replace** window, press Ctrl+H. **Find what:** "," and **Replace with** "". Select **Replace All**. This removes all commas from the hex value.
|
||||
9. Copy the IRK value (only the part after `hex:`) and it can be used as-is. No reversing of byte order needs to be done.
|
||||
|
||||
## ESPresense
|
||||
|
||||
If you already use Identity Resolving Key tracking with ESPresence then you already have a hex-encoded version of your Identity Resolving Key. Home Assistant can use the key in this format directly.
|
||||
|
@ -28,7 +28,8 @@ Other imports like `min`, `max` are available as builtins. See the [python_scrip
|
||||
[logger-api]: https://docs.python.org/3.7/library/logging.html#logger-objects
|
||||
|
||||
{% note %}
|
||||
It is not possible to use Python imports with this integration. If you want to do more advanced scripts, you can take a look at [AppDaemon](https://appdaemon.readthedocs.io/en/latest/) or [pyscript](https://github.com/custom-components/pyscript)
|
||||
- It is not possible to use Python imports with this integration. If you want to do more advanced scripts, you can take a look at [AppDaemon](https://appdaemon.readthedocs.io/en/latest/) or [pyscript](https://github.com/custom-components/pyscript)
|
||||
- It is not possible to include your script as a button on the dashboard. A workaround is to create a [helper button](/integrations/input_button/) and create automation to run your script when the button state changes.
|
||||
{% endnote %}
|
||||
|
||||
## Writing your first script, reading input and logging the activity
|
||||
|
@ -747,6 +747,7 @@ Prerequisites:
|
||||
- Test if you can access the camera by its IP address in your browser `https://<your-camera-ip>`. If you cannot, in the [Reolink mobile app, Windows, or Mac client](https://reolink.com/software-and-manual/) ensure at least one of the HTTP/HTTPS ports are enabled under **Settings** > **top camera model box** > **Network Information** > **Advanced** (mobile) or **Settings** > **Network** > **Advanced** > **Port Settings** (PC). See [additional instructions](https://support.reolink.com/hc/en-us/articles/900000621783-How-to-Set-up-Reolink-Ports-Settings/) on the Reolink site.
|
||||
- On some camera models, the RTMP port needs to be enabled in order for the HTTP(S) port to function properly. Make sure this port is also enabled if you get a `Cannot connect to host` error while one of the HTTP/HTTPS ports is already enabled.
|
||||
- If the integration and the browser can't connect to the camera even after you enable the HTTP/HTTPS ports, try to create a new user on the camera; that fixes the problem in some cases.
|
||||
- Using a VLAN or other network restrictions between the Home Assistant device and the Reolink device is possible, but is also known to cause issues when not properly configured. Ensure HTTP (port 80), HTTPS (port 443), RTMP (port 1935), RTSP (port 554), ONVIF (port 8000) and TCP (port 9000) communication is not being blocked. When experiencing issues, please first test if moving the Reolink device to the same VLAN as the Home Assistant device and lifting all restrictions between them solves the issue.
|
||||
|
||||
### Entities intermittently become unavailable
|
||||
|
||||
|
@ -33,115 +33,229 @@ ha_platforms:
|
||||
ha_integration_type: integration
|
||||
---
|
||||
|
||||
The Roborock integration allows you to control your [Roborock](https://us.roborock.com/pages/robot-vacuum-cleaner) vacuum while using the Roborock app.
|
||||
|
||||
This integration requires a continuous cloud connection while using the device. However, excluding map data and routines, communication between the integration and the device is conducted locally.
|
||||
The Roborock {% term integration %} allows you to connect your [Roborock](https://us.roborock.com/pages/robot-vacuum-cleaner) robotic vacuums to your Home Assistant. Roborock vacuums are
|
||||
intelligent home cleaning robots and, depending on the specific device, may have features
|
||||
like mopping capabilities, laser navigation, and options for changing cleaning
|
||||
performance or location in the home. This integration enables you to control and
|
||||
monitor your Roborock vacuum directly from Home Assistant.
|
||||
|
||||
Once you log in with your Roborock account, the integration will automatically discover your Roborock devices and get the needed information to communicate locally with them. Please ensure your Home Assistant instance can communicate with the local IP of your device. We recommend setting a static IP for your Roborock Vacuum to help prevent future issues. The device communicates on port 58867. Depending on your firewall, you may need to allow communication from Home Assistant to your vacuum on that port.
|
||||
The integration also allows for automation and integration with other smart home
|
||||
devices. For example, you could send a notification when the vacuum is stuck, or
|
||||
pause the vacuum when a media player starts playing music.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. Download the Roborock App for iOS or Android.
|
||||
2. Create an account and log in.
|
||||
3. Add your Roborock device to the Roborock App (for example, by scanning a QR code).
|
||||
|
||||
{% include integrations/config_flow.md %}
|
||||
|
||||
{% configuration_basic %}
|
||||
Email address:
|
||||
description: "The email address used to sign in to the Roborock app. A verification code will be sent to this email address when adding the Roborock integration."
|
||||
Verification code:
|
||||
description: "The verification code that is sent to your email address when adding the Roborock integration."
|
||||
{% endconfiguration_basic %}
|
||||
|
||||
## Robovac entities
|
||||
{% include integrations/option_flow.md %}
|
||||
|
||||
The integration can be configured to specify which Roborock App features are drawn
|
||||
on the map.
|
||||
|
||||
{% configuration_basic %}
|
||||
Charger:
|
||||
description: Show the charger on the map.
|
||||
Cleaned area:
|
||||
description: Show the area cleaned on the map.
|
||||
Go-to path:
|
||||
description: Show the go-to path on the map.
|
||||
Ignored obstacles:
|
||||
description: Show ignored obstacles on the map.
|
||||
Ignored obstacles with photo:
|
||||
description: Show ignored obstacles with photos on the map.
|
||||
Mop path:
|
||||
description: Show the mop path on the map.
|
||||
No carpet zones:
|
||||
description: Show the no carpet zones on the map.
|
||||
No-go zones:
|
||||
description: Show the no-go zones on the map
|
||||
No mopping zones:
|
||||
description: Show the no-mop zones on the map.
|
||||
Obstacles:
|
||||
description: Show obstacles on the map.
|
||||
Obstacles with photo:
|
||||
description: Show obstacles with photos on the map.
|
||||
Path:
|
||||
description: Show the path on the map.
|
||||
Predicted path:
|
||||
description: Show the predicted path on the map.
|
||||
Vacuum position:
|
||||
description: Show the vacuum position on the map.
|
||||
Virtual walls:
|
||||
description: Show virtual walls on the map.
|
||||
Zones:
|
||||
description: Show zones on the map.
|
||||
{% endconfiguration_basic %}
|
||||
|
||||
## Data Updates
|
||||
|
||||
This integration uses both local and cloud {% term polling %} and also receives
|
||||
cloud push events using MQTT. Local communication is preferred when possible.
|
||||
Map data is always fetched through the cloud, and Dyad and Zeo devices are cloud only.
|
||||
|
||||
The integration will automatically discover your Roborock devices using the cloud APIs and get
|
||||
the needed information to communicate locally with them, if supported. Please ensure your Home Assistant
|
||||
instance can communicate with the local IP of your device. We recommend setting a static IP
|
||||
for your Roborock Vacuum to help prevent future issues. The device communicates on port 58867.
|
||||
Depending on your firewall, you may need to allow communication from Home Assistant to your vacuum on that port.
|
||||
|
||||
|
||||
## Supported functionality
|
||||
|
||||
Roborock devices have a variety of features that are supported on some devices but not on others. Only entities that your device supports will be added to your integration.
|
||||
|
||||
### Vacuum
|
||||
### Robovac devices
|
||||
|
||||
#### Vacuum
|
||||
|
||||
The vacuum entity holds the ability to control most things the vacuum can do, such as start a clean, return to the dock, or set the fan speed.
|
||||
|
||||
### Select
|
||||
#### Image
|
||||
|
||||
Mop mode - Describes how to mop the floor. On some firmware, it is called 'mop route'.
|
||||
- **Map**
|
||||
- **Description**: Displays a live map of your Roborock vacuum's cleaning area.
|
||||
|
||||
Mop intensity - How hard you would like your vacuum to mop.
|
||||
#### Select
|
||||
|
||||
### Binary sensor
|
||||
- **Mop mode**
|
||||
- **Description**: Describes how to mop the floor. On some firmware, it is called 'mop route'.
|
||||
|
||||
Charging - States if the vacuum is currently charging or not.
|
||||
- **Mop intensity**
|
||||
- **Description**: How hard you would like your vacuum to mop.
|
||||
|
||||
Cleaning - States if the vacuum has a clean currently active. This is on when the robot is actively moving around or when the robot returns to the dock when the battery is low but a clean is still active and will resume later.
|
||||
- **Selected map**
|
||||
- **Description**: Choose the map that is loaded on the vacuum.
|
||||
|
||||
Mop attached - States if the mop is currently attached.
|
||||
- **Empty mode**
|
||||
- **Description**: You can set the "empty mode" setting including Max, Light, Balanced, and Smart.
|
||||
- **Availability**: For vacuum equipped with an auto-empty dock
|
||||
|
||||
Mop drying status - Only available on docks with drying capabilites - States if the mop is currently being driven.
|
||||
#### Binary sensor
|
||||
|
||||
Water box attached - States if the water box is currently attached.
|
||||
- **Charging**
|
||||
- **Description**: States if the vacuum is currently charging or not.
|
||||
|
||||
Water shortage - States if the water box is low on water - 'Ok' if it has not detected a water shortage.
|
||||
- **Cleaning**
|
||||
- **Description**: States if the vacuum is currently cleaning or not. This is on when the robot is actively moving around or when the robot returns to the dock when the battery is low but a clean is still active and will resume later.
|
||||
|
||||
- **Mop attached**
|
||||
- **Description**: States if the mop is currently attached.
|
||||
|
||||
- **Mop drying status**
|
||||
- **Description**: Only available on docks with drying capabilites - States if the mop is currently being driven.
|
||||
|
||||
- **Water box attached**
|
||||
- **Description**: States if the water box is currently attached.
|
||||
|
||||
- **Water shortage**
|
||||
- **Description**: States if the water box is low on water - 'Ok' if it has not detected a water shortage.
|
||||
|
||||
|
||||
### Sensor
|
||||
#### Sensor
|
||||
|
||||
Cleaning area - How much area the vacuum has cleaned in its current run. If the vacuum is not currently cleaning, how much area it has cleaned during its last run.
|
||||
- **Cleaning area**
|
||||
- **Description**: How much area the vacuum has cleaned in its current run. If the vacuum is not currently cleaning, how much area it has cleaned during its last run.
|
||||
|
||||
Cleaning time - How long the vacuum has been cleaning for. If the vacuum is not currently cleaning, how long it cleaned for in its last run.
|
||||
- **Cleaning time**
|
||||
- **Description**: How long the vacuum has been cleaning for. If the vacuum is not currently cleaning, how long it cleaned for in its last run.
|
||||
|
||||
Cleaning progress - Only available on some newer devices - what percent of the current cleaning is completed.
|
||||
- **Cleaning progress**
|
||||
- **Description**: Only available on some newer devices - what percent of the current cleaning is completed.
|
||||
|
||||
Current room - This is the room the vacuum currently is in. It utilizes the currently selected map, so if the map is incorrect, the room will be incorrect as well.
|
||||
- **Dock error**
|
||||
- **Description**: Only available on the non-basic docks - The current error of the vacuum or 'Ok' if none exists.
|
||||
|
||||
Dock error - Only available on the non-basic docks - The current error of the vacuum or 'Ok' if none exist
|
||||
- **Main brush time left**
|
||||
- **Description**: How much time is left before Roborock recommends you replace your main brush.
|
||||
|
||||
Main brush time left - How much time is left before Roborock recommends you replace your main brush.
|
||||
- **Mop drying remaining time**
|
||||
- **Description**: Only available on the non-basic docks - How much time is left until the mop is dry and ready to continue cleaning.
|
||||
|
||||
Mop drying remaining time - Only available on the non-basic docks - How much time is left until the mop is dry and ready to continue cleaning.
|
||||
- **Side brush time left**
|
||||
- **Description**: How much time is left before Roborock recommends you replace your side brush.
|
||||
|
||||
Side brush time left - How much time is left before Roborock recommends you replace your side brush.
|
||||
- **Filter time left**
|
||||
- **Description**: How much time is left before Roborock recommends you replace your vacuum's air filter.
|
||||
|
||||
Filter time left - How much time is left before Roborock recommends you replace your vacuum's air filter.
|
||||
- **Status**
|
||||
- **Description**: The current status of your vacuum. This typically describes the action that is currently being run. For example, 'spot_cleaning' or 'docking'.
|
||||
|
||||
Status - The current status of your vacuum. This typically describes the action that is currently being run. For example, 'spot_cleaning' or 'docking'.
|
||||
- **Last clean begin**
|
||||
- **Description**: the last time that your vacuum started cleaning.
|
||||
|
||||
Last clean begin - the last time that your vacuum started cleaning.
|
||||
- **Last clean end**
|
||||
- **Description**: The last time that your vacuum finished cleaning.
|
||||
|
||||
Last clean end - The last time that your vacuum finished cleaning.
|
||||
- **Total cleaning time**
|
||||
- **Description**: The lifetime cleaning duration of your vacuum.
|
||||
|
||||
Total cleaning time - The lifetime cleaning duration of your vacuum.
|
||||
- **Total cleaning area**
|
||||
- **Description**: The lifetime cleaning area of your vacuum.
|
||||
|
||||
Total cleaning area - The lifetime cleaning area of your vacuum.
|
||||
- **Total cleaning count**
|
||||
- **Description**: The lifetime cleaning count of your vacuum.
|
||||
|
||||
Total cleaning count - The lifetime cleaning count of your vacuum.
|
||||
- **Vacuum error**
|
||||
- **Description**: The current error with your vacuum, if there is one.
|
||||
|
||||
Vacuum error - The current error with your vacuum, if there is one.
|
||||
#### Time
|
||||
|
||||
### Time
|
||||
- **Do not disturb begin**
|
||||
- **Description**: When _Do not disturb_ is enabled, the vacuum does not run or speak after this point.
|
||||
|
||||
Do not disturb begin - When _Do not disturb_ is enabled, the vacuum does not run or speak after this point.
|
||||
- **Do not disturb end**
|
||||
- **Description**: When _Do not disturb_ is enabled, the vacuum does not run or speak before this point.
|
||||
|
||||
Do not disturb end - When _Do not disturb_ is enabled, the vacuum does not run or speak before this point.
|
||||
#### Switch
|
||||
|
||||
### Switch
|
||||
- **Child lock**
|
||||
- **Description**: This disables the buttons on the vacuum. Nothing happens when the buttons are pushed.
|
||||
|
||||
Child lock - This disables the buttons on the vacuum. Nothing happens when the buttons are pushed.
|
||||
- **Status indicator light**
|
||||
- **Description**: This is the LED on the top of your vacuum. The color changes depending on the status of your vacuum.
|
||||
|
||||
Status indicator light - This is the LED on the top of your vacuum. The color changes depending on the status of your vacuum.
|
||||
- **Do not disturb**
|
||||
- **Description**: This enables _Do not disturb_ during the time frame you have set in the app or on the time entity. When _Do not disturb_ is enabled, the vacuum does not run or speak.
|
||||
|
||||
Do not disturb - This enables _Do not disturb_ during the time frame you have set in the app or on the time entity. When _Do not disturb_ is enabled, the vacuum does not run or speak.
|
||||
#### Number
|
||||
|
||||
### Number
|
||||
- **Volume**
|
||||
- **Description**: This allows you to control the volume of the robot's voice. For example, when it states "Starting cleaning". This allows you to set the volume to 0%, while the app limits it to 20%.
|
||||
|
||||
Volume - This allows you to control the volume of the robot's voice. For example, when it states "Starting cleaning". This allows you to set the volume to 0%, while the app limits it to 20%.
|
||||
|
||||
### Button
|
||||
#### Button
|
||||
|
||||
There are currently four buttons that allow you to reset the various maintenance items on your vacuum. Pressing the button cannot be undone. For this reason, the buttons are disabled by default to make sure they are not pressed unintentionally.
|
||||
|
||||
Reset sensor consumable - The sensors on your vacuum are expected to be cleaned after 30 hours of use.
|
||||
- **Reset sensor consumable**
|
||||
- **Description**: The sensors on your vacuum are expected to be cleaned after 30 hours of use.
|
||||
|
||||
Reset side brush consumable - The side brush is expected to be replaced every 200 hours.
|
||||
- **Reset side brush consumable**
|
||||
- **Description**: The side brush is expected to be replaced every 200 hours.
|
||||
|
||||
Reset main brush consumable - The main brush/ roller is expected to be replaced every 300 hours.
|
||||
- **Reset main brush consumable**
|
||||
- **Description**: The main brush/ roller is expected to be replaced every 300 hours.
|
||||
|
||||
Reset air filter - The air filter is expected to be replaced every 150 hours.
|
||||
- **Reset air filter**
|
||||
- **Description**: The air filter is expected to be replaced every 150 hours.
|
||||
|
||||
In addition, some vacuums allow routines to be set up in the app. For each of those routines, a button entity will be created, allowing you to trigger it.
|
||||
#### Actions
|
||||
|
||||
### Actions
|
||||
##### Action Set Vacuum Goto Position
|
||||
|
||||
#### Action `roborock.set_vacuum_goto_position`
|
||||
|
||||
Go the specified coordinates.
|
||||
The `roborock.set_vacuum_goto_position` action will set the vacuum to go to
|
||||
the specified coordinates.
|
||||
|
||||
- **Data attribute**: `entity_id`
|
||||
- **Description**: Only act on a specific robot.
|
||||
@ -153,9 +267,11 @@ Go the specified coordinates.
|
||||
- **Description**: Y-coordinate, integer value. The dock is located at y-coordinate 25500.
|
||||
- **Optional**: No.
|
||||
|
||||
#### Action `roborock.get_vacuum_current_position`
|
||||
##### Action Get Vacuum Current Position
|
||||
|
||||
Get the current position of the vacuum. This is a cloud call and should only be used for diagnostics. This is not meant to be used for automations. Frequent requests can lead to rate limiting.
|
||||
The `roborock.get_vacuum_current_position` action will get the current position of the vacuum. This
|
||||
is a cloud call and should only be used for diagnostics. This is not meant to be used for
|
||||
automations. Frequent requests can lead to rate limiting.
|
||||
|
||||
- **Data attribute**: `entity_id`
|
||||
- **Description**: Only act on a specific robot.
|
||||
@ -178,43 +294,66 @@ data: {}
|
||||
y: 25168
|
||||
```
|
||||
|
||||
### Image
|
||||
##### Action Get Maps
|
||||
|
||||
You can see all the maps within your Roborock account. Keep in mind that they are device-specific. The maps require the cloud API to communicate as the maps are seemingly stored on the cloud. If someone can figure out a way around this - contributions are always welcome.
|
||||
The `roborock.get_maps` action will return the maps available on the device and
|
||||
details about any named rooms on each map.
|
||||
|
||||
- **Data attribute**: `entity_id`
|
||||
- **Description**: Get maps for a specific device
|
||||
- **Optional**: No.
|
||||
|
||||
## Dyad entities
|
||||
This will return the name of the map, and the room names and id numbers. See [How can I clean a specific room? ](#how-can-i-clean-a-specific-room) for more details on how to use the maps response.
|
||||
|
||||
### Dyad devices
|
||||
|
||||
Roborock wet/dry vacuums currently expose some entities through an MQTT connection - it is currently cloud dependent.
|
||||
|
||||
### Sensor
|
||||
#### Sensor
|
||||
|
||||
Status - The current status of your vacuum. This typically describes the action that is currently being run. For example, 'drying' or 'charging'.
|
||||
- **Status**
|
||||
- **Description**: The current status of your vacuum. This typically describes the action that is currently being run. For example, 'drying' or 'charging'.
|
||||
|
||||
Battery - The current charge of your device.
|
||||
- **Battery**
|
||||
- **Description**: The current charge of your device.
|
||||
|
||||
Filter time left - how long until Roborock recommends cleaning/replacing your filter.
|
||||
- **Filter time left**
|
||||
- **Description**: how long until Roborock recommends cleaning/replacing your filter.
|
||||
|
||||
Brush time left - how long until Roborock recommends cleaning/replacing your brush.
|
||||
- **Brush time left**
|
||||
- **Description**: how long until Roborock recommends cleaning/replacing your brush.
|
||||
|
||||
Error - the current error of the device - if one exists - "None" otherwise.
|
||||
- **Error**
|
||||
- **Description**: the current error of the device - if one exists - "None" otherwise.
|
||||
|
||||
Total cleaning time - how long you have cleaned with your wet/dry vacuum.
|
||||
- **Total cleaning time**
|
||||
- **Description**: how long you have cleaned with your wet/dry vacuum.
|
||||
|
||||
|
||||
## Zeo Entities
|
||||
### Zeo Entities
|
||||
|
||||
Roborock Zeo One currently exposes some entities through an MQTT connection - it is currently cloud dependent.
|
||||
|
||||
### Sensor
|
||||
#### Sensor
|
||||
|
||||
State - The current state of your washing machine. For example, 'washing' or 'rinsing'.
|
||||
- **State**
|
||||
- **Description**: The current state of your washing machine. For example, 'washing' or 'rinsing'.
|
||||
|
||||
Countdown - Countdown for how long until the machine starts.
|
||||
- **Countdown**
|
||||
- **Description**: Countdown for how long until the machine starts.
|
||||
|
||||
Washing left - The amount of time until your machine is done washing.
|
||||
- **Washing left**
|
||||
- **Description**: The amount of time until your machine is done washing.
|
||||
|
||||
- **Error**
|
||||
- **Description**: The current error of the Zeo, if one exists.
|
||||
|
||||
## Removing the integration
|
||||
|
||||
This integration follows standard integration removal. No extra steps are required.
|
||||
|
||||
{% include integrations/remove_device_service.md %}
|
||||
|
||||
Error - The current error of the Zeo, if one exists.
|
||||
|
||||
## FAQ
|
||||
|
||||
@ -222,7 +361,7 @@ Error - The current error of the Zeo, if one exists.
|
||||
No. This integration requires information from your Roborock app to set up and uses Roborock's protocols to communicate with your device. You must have your vacuum synced to the Roborock app.
|
||||
|
||||
### Can I block internet access for this device?
|
||||
As of right now - no. When the vacuum is disconnected from the internet, it will attempt to disconnect itself from Wi-Fi and reconnect itself until it can reach the Roborock servers. We are looking for the best way to handle this and see what can be blocked while still allowing the vacuum to function.
|
||||
As of right now - no. When the vacuum is disconnected from the internet, it will attempt to disconnect itself from Wi-Fi and reconnect itself until it can reach the Roborock servers.
|
||||
|
||||
### What devices are supported?
|
||||
If you can add your device to the Roborock app - it is supported. However, some older vacuums like the Roborock S5 must be connected using the Mi Home app and can be set up in Home Assistant through the [Xiaomi Miio](/integrations/xiaomi_miio/) integration.
|
||||
|
@ -54,6 +54,6 @@ rocketchat_notification:
|
||||
#### Message variables
|
||||
|
||||
- **message** (*Required*): Message to be displayed.
|
||||
- **data** (*Optional*): Dictionary containing any of the variables defined in the [Rocket.Chat documentation](https://developer.rocket.chat/reference/api/rest-api/endpoints/core-endpoints/chat-endpoints/postmessage)
|
||||
- **data** (*Optional*): Dictionary containing any of the variables defined in the [Rocket.Chat documentation](https://developer.rocket.chat/apidocs/post-message)
|
||||
|
||||
To use notifications, please see the [getting started with automation page](/getting-started/automation/).
|
||||
|
@ -42,7 +42,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -51,7 +51,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -138,7 +138,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
|
@ -46,7 +46,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -59,11 +59,11 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
command_topic:
|
||||
@ -146,7 +146,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -193,7 +193,7 @@ unique_id:
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value."
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
@ -43,7 +43,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -52,7 +52,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -149,7 +149,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -157,7 +157,7 @@ json_attributes_topic:
|
||||
required: false
|
||||
type: string
|
||||
last_reset_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the last_reset. When `last_reset_value_template` is set, the `state_class` option must be `total`. Available variables: `entity_id`. The `entity_id` can be used to reference the entity's attributes."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the last_reset. When `last_reset_value_template` is set, the `state_class` option must be `total`. Available variables: `entity_id`. The `entity_id` can be used to reference the entity's attributes."
|
||||
required: false
|
||||
type: template
|
||||
name:
|
||||
@ -213,7 +213,7 @@ unit_of_measurement:
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value. If the template throws an error, the current state will be used instead."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value. If the template throws an error, the current state will be used instead."
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
@ -48,7 +48,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -57,7 +57,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -69,11 +69,11 @@ available_tones:
|
||||
required: false
|
||||
type: list
|
||||
command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate a custom payload to send to `command_topic`. The variable `value` will be assigned with the configured `payload_on` or `payload_off` setting. The siren turn on action parameters `tone`, `volume_level` or `duration` can be used as variables in the template. When operation in optimistic mode the corresponding state attributes will be set. Turn on parameters will be filtered if a device misses the support.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate a custom payload to send to `command_topic`. The variable `value` will be assigned with the configured `payload_on` or `payload_off` setting. The siren turn on action parameters `tone`, `volume_level` or `duration` can be used as variables in the template. When operation in optimistic mode the corresponding state attributes will be set. Turn on parameters will be filtered if a device misses the support.
|
||||
required: false
|
||||
type: template
|
||||
command_off_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate a custom payload to send to `command_topic` when the siren turn off action is called. By default `command_template` will be used as template for action turn off. The variable `value` will be assigned with the configured `payload_off` setting.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate a custom payload to send to `command_topic` when the siren turn off action is called. By default `command_template` will be used as template for action turn off. The variable `value` will be assigned with the configured `payload_off` setting.
|
||||
required: false
|
||||
type: template
|
||||
command_topic:
|
||||
@ -157,7 +157,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -227,7 +227,7 @@ state_topic:
|
||||
required: false
|
||||
type: string
|
||||
state_value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's state from the `state_topic`. To determine the siren's state result of this template will be compared to `state_on` and `state_off`. Alternatively `value_template` can be used to render to a valid JSON payload."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's state from the `state_topic`. To determine the siren's state result of this template will be compared to `state_on` and `state_off`. Alternatively `value_template` can be used to render to a valid JSON payload."
|
||||
required: false
|
||||
type: template
|
||||
support_duration:
|
||||
|
@ -156,4 +156,4 @@ The `media_content_id` value can be obtained from the Spotify desktop app by cli
|
||||
|
||||
## Unsupported devices
|
||||
|
||||
- **Sonos**: Although Sonos is a Spotify Connect device, it is not supported by the official Spotify API.
|
||||
- **Sonos**: Although Sonos is a Spotify Connect device, it is not supported by the official Spotify API. One workaround to use Sonos players with Spotify is through [Music Assistant](https://www.music-assistant.io/) using the action `music_assistant.play_media`. Music Assistant creates another media_player entity named after the original media_player, which you can use to play from Spotify.
|
||||
|
@ -26,6 +26,12 @@ Right now, it's impossible to add a device -- all of them are discovered from SU
|
||||
|
||||
For more complete Home Assistant support based on MQTT autodiscovery, consider switching your Supla devices to MQTT (through the setup interface). Or use the MQTT broker provided by [Supla Cloud](https://cloud.supla.org/integrations/mqtt-broker).
|
||||
|
||||
{% important %}
|
||||
|
||||
The Supla Cloud MQTT broker requires [changing the default MQTT protocol setting](https://www.home-assistant.io/integrations/mqtt/#broker-configuration) at version 3.1.
|
||||
|
||||
{% endimportant %}
|
||||
|
||||
## Configuration
|
||||
|
||||
To use SUPLA devices in your installation, add the following to your {% term "`configuration.yaml`" %}:
|
||||
|
@ -48,7 +48,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -57,7 +57,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -65,7 +65,7 @@ availability_topic:
|
||||
required: false
|
||||
type: string
|
||||
command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. The switch command template accepts the parameters `value`. The `value` parameter will contain the configured value for either `payload_on` or `payload_off`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. The switch command template accepts the parameters `value`. The `value` parameter will contain the configured value for either `payload_on` or `payload_off`.
|
||||
required: false
|
||||
type: template
|
||||
command_topic:
|
||||
@ -152,7 +152,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -226,7 +226,7 @@ unique_id:
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's state from the `state_topic`. To determine the switches's state result of this template will be compared to `state_on` and `state_off`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's state from the `state_topic`. To determine the switches's state result of this template will be compared to `state_on` and `state_off`."
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
@ -170,3 +170,13 @@ This media browser supports multiple Synology Photos instances. `<unique_id>` is
|
||||
To find the `<album_id>` you need to go to the album in your photos instance, and the id will be in the URL ex: `https://192.168.0.100:5001/#/album/19`, where 19 is the album id. An `<album_id>` of 0 will contain all images.
|
||||
|
||||
For performance reasons, a maximum of 1000 images will be shown in the Media Browser.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
In any case, when reporting an issue, please enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), restart the integration, and as soon as the issue re-occurs stop the debug logging again (_download of debug log file will start automatically_). Further _if still possible_, please also download the [diagnostics](/integrations/diagnostics) data. If you have collected the debug log and the diagnostics data, provide them with the issue report.
|
||||
|
||||
## Remove the integration
|
||||
|
||||
{% include integrations/remove_device_service.md %}
|
||||
|
||||
If you don't use the separate created user anymore (_see [Separate User Configuration](#separate-user-configuration) above_), then remove it from the NAS under to **Control Panel** > **User & Group** > **User**. Don't forget to backup any data from the users home directory, if you want to keep them (_eq. Home Assistant backups_)
|
||||
|
@ -21,7 +21,7 @@ topic:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that returns a tag ID."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that returns a tag ID."
|
||||
required: false
|
||||
type: template
|
||||
device:
|
||||
|
@ -73,7 +73,7 @@ Entities (sensors, binary sensors, buttons, images, numbers, and selections) are
|
||||
|
||||
_For old sensor/binary sensor configuration format, [see below](#legacy-binary-sensor-configuration-format)._
|
||||
|
||||
### State-based template binary sensors, buttons, images, numbers, selects and sensors
|
||||
### State-based template binary sensors, buttons, images, numbers, selects, sensors, and weathers
|
||||
|
||||
Template entities will by default update as soon as any of the referenced data in the template updates.
|
||||
|
||||
@ -95,8 +95,7 @@ template:
|
||||
|
||||
{% endraw %}
|
||||
|
||||
|
||||
### Trigger-based template binary sensors, buttons, images, numbers, selects and sensors
|
||||
### Trigger-based template binary sensors, images, numbers, selects, sensors, and weathers
|
||||
|
||||
If you want more control over when an entity updates, you can define a trigger. Triggers follow the same format and work exactly the same as [triggers in automations][trigger-doc]. This feature is a great way to create entities based on webhook data ([example](#trigger-based-sensor-and-binary-sensor-storing-webhook-information)), or update entities based on a schedule.
|
||||
|
||||
@ -106,6 +105,10 @@ Trigger-based entities do not automatically update when states referenced in the
|
||||
|
||||
The state, including attributes, of trigger-based sensors and binary sensors is restored when Home Assistant is restarted. The state of other trigger-based template entities is not restored.
|
||||
|
||||
{% note %}
|
||||
Buttons do not support using `trigger` or `action` options.
|
||||
{% endnote %}
|
||||
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
|
@ -42,7 +42,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -55,11 +55,11 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
command_topic:
|
||||
@ -138,7 +138,7 @@ entity_picture:
|
||||
required: false
|
||||
type: string
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -196,7 +196,7 @@ unique_id:
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the text state value from the payload received on `state_topic`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the text state value from the payload received on `state_topic`."
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
@ -83,7 +83,7 @@ Unlike other protocols, Thread can use multiple border routers in a single netwo
|
||||
|
||||
OpenThread is an open source implementation of Thread, originally released by Google. Almost all commercially available Thread border routers are based on the open source implementation. However, the configuration of <abbr title="Thread border routers">TBRs</abbr> is not part of the Thread standard. This means that Google and Apple <abbr title="Thread border routers">TBRs</abbr> implementation setup and configured by their respective ecosystems.
|
||||
|
||||
While Home Assistant can *use* any border router, it can *configure* and *control* only OpenThread border routers built with the REST API available in the open source implementation. The OpenThread Border Router add-on (as well as the OpenThread Border Router bundled in the experimental Silicon Labs Multiprotocol add-on) are built from this open source OpenThread code and have the REST API enabled.
|
||||
While Home Assistant can *use* any border router, it can *configure* and *control* only OpenThread border routers built with the REST API available in the open source implementation. The OpenThread Border Router add-on is built from this open source OpenThread code and has the REST API enabled.
|
||||
|
||||
### List of Thread border router devices
|
||||
|
||||
|
@ -141,7 +141,8 @@ $ curl -X POST -H "Authorization: Bearer <ACCESS TOKEN>" \
|
||||
## Troubleshooting
|
||||
|
||||
{% important %}
|
||||
Depending on your setup, you might need to set an external URL (`external_url`) inside the [configuration](/integrations/homeassistant/#external_url).
|
||||
Playing TTS media will prioritize the local Home Assistant URL, which can be configured by navigating to **{% my network title="Settings > System > Network" %}**.
|
||||
It is highly recommended to set the local Home Assistant URL to automatic, in which case the generated URL will be `http://<local_ip>:<local_port>`.
|
||||
{% endimportant %}
|
||||
|
||||
The following sections describe some of the problems encountered with media devices.
|
||||
@ -154,10 +155,14 @@ The `tts` action will send an `https://` URL to the media device, which will che
|
||||
|
||||
### Google cast devices
|
||||
|
||||
The Google cast devices (Google Home, Chromecast, etc.) present the following problems:
|
||||
Google cast devices (Google Home, Chromecast, etc.) require the host in media URLs to be resolvable using Google's public DNS servers, and if the URL is specifying the `https` protocol, the certificate must be valid and not self-signed.
|
||||
|
||||
These requirements present the following problems, all of which create problems if the local Home Assistant URL is not `http://<local_ip>:<local_port>`:
|
||||
|
||||
- They [reject self-signed certificates](#self-signed-certificates).
|
||||
|
||||
- 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` action 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 use Google's public DNS servers to resolve names, not DNS servers provided via DHCP. Additionally, they do not resolve local names through mDNS. This means 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` (via local DNS) and `homeassistant.local` (via mDNS). All machines on your local network can access it as `ha` or `homeassistant.local`. 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` action 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 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.
|
||||
|
||||
The recommended way to overcome these obstacles is to not manually configure a local Home Assistant URL.
|
||||
|
@ -43,7 +43,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -56,7 +56,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
command_topic:
|
||||
@ -148,7 +148,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -156,7 +156,7 @@ json_attributes_topic:
|
||||
required: false
|
||||
type: string
|
||||
latest_version_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the latest version value. Use `state_topic` with a `value_template` if all update state values can be extracted from a single JSON payload."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the latest version value. Use `state_topic` with a `value_template` if all update state values can be extracted from a single JSON payload."
|
||||
required: false
|
||||
type: template
|
||||
latest_version_topic:
|
||||
@ -210,7 +210,7 @@ unique_id:
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the `installed_version` state value or to render to a valid JSON payload on from the payload received on `state_topic`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the `installed_version` state value or to render to a valid JSON payload on from the payload received on `state_topic`."
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
@ -65,7 +65,7 @@ Sensor always available:
|
||||
You need to understand that with this option activated, when the source entity becomes unavailable, the utility meter sensor will have the last totalized value and will not change until the source entity returns to a valid state.
|
||||
{% endconfiguration_basic %}
|
||||
|
||||
If the meter reset cycle and reset offsets are to limited for your use case,
|
||||
If the meter reset cycle and reset offsets are too limited for your use case,
|
||||
consider using the YAML configuration below, which support CRON-style patterns
|
||||
that provide a greater flexibility.
|
||||
|
||||
|
@ -35,7 +35,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -44,7 +44,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -118,7 +118,7 @@ fan_speed_list:
|
||||
required: false
|
||||
type: [string, list]
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
|
@ -77,7 +77,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the device's availability from the `topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -86,7 +86,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `availability_topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the device's availability from the `availability_topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -94,7 +94,7 @@ availability_topic:
|
||||
required: false
|
||||
type: string
|
||||
command_template:
|
||||
description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`.
|
||||
description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`.
|
||||
required: false
|
||||
type: template
|
||||
command_topic:
|
||||
@ -155,7 +155,7 @@ device:
|
||||
required: false
|
||||
type: string
|
||||
device_class:
|
||||
description: Sets the [class of the device](/integrations/valve/), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`.
|
||||
description: Sets the [class of the device](/integrations/valve/#device_class), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`.
|
||||
required: false
|
||||
type: string
|
||||
enabled_by_default:
|
||||
@ -181,7 +181,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. A usage example can be found in the [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. A usage example can be found in the [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
@ -284,7 +284,7 @@ unique_id:
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `state_topic` topic. The rendered value should be a defined state payload or, if reporting a `position` is supported and `reports_position` is set to `true`, a numeric value is expected representing the position. See also `state_topic`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that can be used to extract the payload for the `state_topic` topic. The rendered value should be a defined state payload or, if reporting a `position` is supported and `reports_position` is set to `true`, a numeric value is expected representing the position. See also `state_topic`."
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
@ -18,13 +18,46 @@ ha_platforms:
|
||||
- diagnostics
|
||||
- sensor
|
||||
ha_integration_type: hub
|
||||
ha_quality_scale: silver
|
||||
---
|
||||
|
||||
The **Vodafone Station** {% term integration %} allows you to control your [Vodafone Station](https://www.vodafone.it/privati/area-supporto/assistenza-dispositivi/vodafone-station.html) based router.
|
||||
|
||||
{% note %}
|
||||
The integration provides information about your internet connection and the connected devices.
|
||||
|
||||
## Supported devices
|
||||
|
||||
The integration supports only Sercomm models so far.
|
||||
{% endnote %}
|
||||
|
||||
### Tested models
|
||||
|
||||
This {% term integration %} was tested against the following models from Sercomm:
|
||||
|
||||
- Vodafone Power Station (SHG3000)
|
||||
- Vodafone Power Station WiFi 6 (SHG3060)
|
||||
- Vodafone WiFi 6 Station (RHG3006)
|
||||
- Vodafone Gigabox (SHG3000) - supplied by [Vodafone Ireland](https://deviceguides.vodafone.ie/vodafone/gigabox-windows-10/)
|
||||
- Vodafone H300S
|
||||
|
||||
{% include integrations/config_flow.md %}
|
||||
|
||||
{% configuration_basic %}
|
||||
host:
|
||||
description: The IP address of the Vodafone Station router.
|
||||
username:
|
||||
description: The username of the Vodafone Station router.
|
||||
password:
|
||||
description: The password of the Vodafone Station router.
|
||||
{% endconfiguration_basic %}
|
||||
|
||||
{% include integrations/option_flow.md %}
|
||||
|
||||
{% configuration_basic %}
|
||||
consider home:
|
||||
description: Number of seconds that must elapse before considering a disconnected device "not at home".
|
||||
{% endconfiguration_basic %}
|
||||
|
||||
## Supported functionality
|
||||
|
||||
There is support for the following platform types within Home Assistant:
|
||||
|
||||
@ -32,14 +65,55 @@ There is support for the following platform types within Home Assistant:
|
||||
- **Sensor** - external IP address, uptime, firmware, resources and network monitors.
|
||||
- **Button** - restart router, dsl/fiber/internet key connections.
|
||||
|
||||
{% include integrations/config_flow.md %}
|
||||
## Examples
|
||||
|
||||
## Integration options
|
||||
### Automation: reconnect / get new IP every night
|
||||
|
||||
It is possible to change some behaviors through the {% term integration %} options.
|
||||
To change the settings, go to {% my integrations title="**Settings** > **Devices & services**" %}. On the **Vodafone Station** integration, select the cogwheel. Then select **Configure**.
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Reconnect Vodafone Station (Fiber)"
|
||||
triggers:
|
||||
- trigger: time
|
||||
at: "05:00:00"
|
||||
actions:
|
||||
- action: button.press
|
||||
target:
|
||||
entity_id: button.vodafone_station_xxxx_reconnect_fiber
|
||||
```
|
||||
|
||||
- **Consider home**: Number of seconds that must elapse before considering a disconnected device "not at home".
|
||||
### Automation: notify connected device not home
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Apple TV disconnect"
|
||||
triggers:
|
||||
- platform: state
|
||||
entity_id: device_tracker.appletv
|
||||
to: "not_home"
|
||||
actions:
|
||||
- action: notify.mobile_app_phone
|
||||
data:
|
||||
message: "TV lost network connection"
|
||||
```
|
||||
|
||||
### Automation: notify router CPU usage too high
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Vodafone Station CPU high cpu usage"
|
||||
triggers:
|
||||
- platform: numeric_state
|
||||
entity_id: sensor.vodafone_station_xxxx_cpu_usage
|
||||
above: 80
|
||||
actions:
|
||||
- action: notify.mobile_app_phone
|
||||
data:
|
||||
message: "Router CPU above 80%."
|
||||
```
|
||||
|
||||
## Data updates
|
||||
|
||||
This integration {% term polling polls %} data from the device every 30 seconds by default.
|
||||
|
||||
## Additional info
|
||||
|
||||
@ -47,10 +121,24 @@ To change the settings, go to {% my integrations title="**Settings** > **Devices
|
||||
|
||||
**Note**: If you don't want to automatically track newly detected devices, disable the {% term integration %} system option `Enable new added entities`.
|
||||
|
||||
### Tested models
|
||||
## Troubleshooting
|
||||
|
||||
This {% term integration %} was tested against the following models from Sercomm:
|
||||
### Can’t set up the device
|
||||
|
||||
- Vodafone Power Station (SHG3000)
|
||||
- Vodafone WiFi 6 Station (RHG3006)
|
||||
- Vodafone Gigabox (SHG3000) - supplied by [Vodafone Ireland](https://deviceguides.vodafone.ie/vodafone/gigabox-windows-10/)
|
||||
#### Symptom: "User already logged-in"
|
||||
|
||||
When trying to set up the integration, the form shows the message "User already logged-in".
|
||||
|
||||
##### Description
|
||||
|
||||
This means that there is already a logged session to the Vodafone Station router.
|
||||
|
||||
##### Resolution
|
||||
|
||||
To resolve this issue, log out from all active sessions, or, if the session was abruptly closed, wait for the router timeout (usually 60 seconds).
|
||||
|
||||
## Removing the integration
|
||||
|
||||
This integration follows standard integration removal. No extra steps are required.
|
||||
|
||||
{% include integrations/remove_device_service.md %}
|
||||
|
@ -43,7 +43,7 @@ availability:
|
||||
required: true
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_mode:
|
||||
@ -52,7 +52,7 @@ availability_mode:
|
||||
type: string
|
||||
default: latest
|
||||
availability_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`."
|
||||
required: false
|
||||
type: template
|
||||
availability_topic:
|
||||
@ -147,7 +147,7 @@ icon:
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
|
@ -36,7 +36,8 @@ Verify SSL:
|
||||
|
||||
### Common WebDAV URLs
|
||||
|
||||
- [Nextcloud](https://nextcloud.com/): `https://<your-nextcloud-domain>/remote.php/webdav/`
|
||||
- [Nextcloud](https://nextcloud.com/): `https://<your-nextcloud-domain>/remote.php/webdav/` alternatively this can be found in the interface of your Nextcloud instance.
|
||||
To do this, open the file overview and click on ‘Settings’ in the left-hand column.
|
||||
- [Owncloud](https://owncloud.com/): `https://<your-owncloud-domain>/remote.php/webdav/`
|
||||
- [Hetzner Storage Box](https://www.hetzner.com/storage/storage-box): `https://<username>.your-storagebox.de`
|
||||
- [Strato HiDrive](https://www.strato.de/): `https://webdav.hidrive.strato.com`
|
||||
@ -48,3 +49,14 @@ This integration follows standard integration removal. No extra steps are requir
|
||||
{% include integrations/remove_device_service.md %}
|
||||
|
||||
- If you remove the integration, the backup folder is not automatically deleted. You have to manually delete it.
|
||||
|
||||
## Known issues / limitations
|
||||
|
||||
Due to the nature of WebDAV, it is required to have a fairly high file upload limit on the server.
|
||||
If you experience issues with the backup, please check the server configuration or with your WebDAV service provider.
|
||||
|
||||
Following WebDAV services are known to have issues with Home Assistant backups:
|
||||
|
||||
- Yandex Disk is not supported, as the speed is artificially slowed down when using WebDAV.
|
||||
- mail.ru Cloud is not supported due to the lack of support for WebDAV properties.
|
||||
- pCloud WebDAV implementation proved to be unstable and is not recommended for backups.
|
@ -48,7 +48,7 @@ Devices must have a Yale Access module installed to function with this {% term i
|
||||
|
||||
These devices do not send updates, but can be locked and unlocked.
|
||||
|
||||
- MD-04I (Yale Conexis L1, Yale Conexis L2)
|
||||
- MD-04I (Yale Conexis L1 (requires yale access module), Yale Conexis L2)
|
||||
- YRCB-490 (Yale Smart Cabinet Lock)
|
||||
|
||||
## Troubleshooting
|
||||
|
@ -48,9 +48,7 @@ ha_zeroconf: true
|
||||
ha_integration_type: integration
|
||||
---
|
||||
|
||||
The ZHA (Zigbee Home Automation) {% term integration %} allows you to wirelessly connect many off-the-shelf [Zigbee-based devices](https://csa-iot.org/csa-iot_products/) directly to Home Assistant, using one of the many available Zigbee coordinators.
|
||||
|
||||
ZHA uses an open-source Python library implementing a hardware-independent Zigbee stack called [zigpy](https://github.com/zigpy/zigpy). All coordinators compatible with zigpy can be used with ZHA.
|
||||
The Zigbee Home Automation (ZHA) {% term integration %} allows you to wirelessly connect many off-the-shelf [Zigbee-based devices](https://csa-iot.org/csa-iot_products/) directly to Home Assistant, using one of many compatible hardware adapters called _Zigbee coordinators_.
|
||||
|
||||
This {% term integration %} currently supports the following device types within Home Assistant:
|
||||
|
||||
@ -69,30 +67,33 @@ This {% term integration %} currently supports the following device types within
|
||||
- [Switch](/integrations/switch/)
|
||||
- [Update](/integrations/update/)
|
||||
|
||||
In addition, it has support for "Zigbee groups" that enable native on-device grouping of multiple Zigbee lights, switches, and fans that enable controlling all entities for those devices in those groups with one command. At least two entities must be added to a Zigbee group inside the ZHA {% term integration %} before a group entity is created. There is also support for native on-device binding. Refer to the [Zigbee groups and binding devices](#zigbee-groups-and-binding-devices) section for more information.
|
||||
|
||||
## Introduction
|
||||
|
||||
This ZHA integration is a hardware-independent Zigbee gateway implementation that can replace most proprietary Zigbee gateways/bridges/hubs/controllers. Zigbee is a low-bandwidth communication protocol that relies on using small low-power digital radios to connect compatible devices to local Zigbee wireless private area networks. ZHA will create a single Zigbee network to which you can then pair/join most Zigbee-based devices that are made for home automation and lighting.
|
||||
The ZHA integration is a hardware-independent Zigbee gateway implementation that can replace most proprietary Zigbee gateways (or bridges, hubs, or controllers). ZHA creates a single Zigbee network to which you can add most Zigbee-based devices.
|
||||
|
||||
Before installing the ZHA integration in Home Assistant, you need to connect a Zigbee Coordinator radio adapter that will connect to your Zigbee network. Those normally come in the form of a USB dongle that plugs directly into the same computer that is running your Home Assistant installation. The ZHA integration is compatible with many different "Zigbee Coordinator" adapters from various manufacturers. Be sure to [note the recommendations in the respective sections below before buying a Zigbee Coordinator](#compatible-hardware). A Zigbee network always needs to have one Zigbee Coordinator (it can never have more than one), and Zigbee devices can never be connected to more than a single Zigbee network, however, a Zigbee network can have multiple "Zigbee Router" devices and "Zigbee End Device" products.
|
||||
ZHA uses an open-source Python library called [zigpy](https://github.com/zigpy/zigpy), so any coordinator that is compatible with zigpy can be used with ZHA. Review [compatible hardware](#compatible-hardware) recommendations before purchasing Zigbee devices.
|
||||
|
||||
Once ZHA has been set up with a Zigbee Coordinator it will automatically create a Zigbee network and you will be able to join/pair any Zigbee Router devices and Zigbee End Devices. With only a few [limitations](#limitations), most devices will join/pair directly regardless of brand and manufacturer. Technically almost all devices that are compliant with the official Zigbee specifications should offer interoperability, though a newer Zigbee Coordinator with support for later firmware often offers better compatibility with both new and older devices. Still, be aware that [all functionality might not always be supported or exposed for every device out-of-the-box](#knowing-which-devices-are-supported) as some devices that use manufacturer-specific extensions to add non-standard functions and features could sometimes need [device-specific code to fully work with ZHA](#how-to-add-support-for-new-and-unsupported-devices).
|
||||
### Zigbee terminology
|
||||
|
||||
Note that because Zigbee relies on "mesh networking" technology it depends heavily on having [Zigbee Router devices](#using-router-devices-to-add-more-devices) to expand the network coverage and extend its size. These are always mains-powered devices that route messages to other devices that are located close to them within the Zigbee network mesh to improve the range and increase the total amount of devices you can add. You should therefore make sure that you add many Zigbee Router devices and not just Zigbee End Devices or else its network mesh connection routes will be limited due to the short range and poor wall penetration of Zigbee radio signals. It is highly recommended that you read and follow all the general tips below about [Zigbee interference avoidance and network range/coverage optimization](#zigbee-interference-avoidance-and-network-rangecoverage-optimization).
|
||||
- **Zigbee network**: A mesh-network of devices with low-power digital radios using a low-bandwidth communication protocol.
|
||||
- **Zigbee coordinator**: A hardware radio adapter (typically a USB dongle) that plugs directly into the same computer running your Home Assistant installation.
|
||||
- **Zigbee router device**: A hardware device that is always mains-powered (AC) such as outlets or fans.
|
||||
- **Zigbee end device**: A hardware device that is typically battery-powered (DC) such as remotes or motion sensors.
|
||||
- **Zigbee group**: A collection of two or more Zigbee devices of the same type, different from Home Assistant's [Groups](/integrations/group/).
|
||||
|
||||
### Zigbee concepts
|
||||
|
||||
- A Zigbee network can have **only one** Zigbee coordinator,
|
||||
- The Zigbee coordinator can have multiple **Zigbee router** or **Zigbee end devices** connected,
|
||||
- Each Zigbee router device can have multiple **Zigbee end devices** connected to it,
|
||||
- A Zigbee device can only be connected to a single Zigbee network,
|
||||
- Zigbee networks depend heavily on having multiple [Zigbee Router devices](#using-router-devices-to-add-more-devices) to expand coverage and increase device capacity.
|
||||
- Router devices help pass messages to other nearby devices in the Zigbee network and therefore can improve range and increase the number of devices you can add.
|
||||
|
||||
## Compatible hardware
|
||||
|
||||
The hardware-independent design of this integration provides support for many Zigbee coordinators available from different manufacturers, as long as the coordinator is compatible with the [zigpy](https://github.com/zigpy/zigpy) library.
|
||||
|
||||
### Zigbee 3.0 support
|
||||
|
||||
Some coordinators may not support firmware capable of Zigbee 3.0, but they can still be fully functional and feature-complete for your needs. Support for Zigbee 3.0 depends primarily on your coordinator hardware and firmware.
|
||||
|
||||
{% note %}
|
||||
Newer coordinators generally support Zigbee 3.0 firmware, but it is up to the manufacturer to make such firmware available to them. If your coordinator was shipped with an older firmware version, you may want to manually upgrade the firmware.
|
||||
{% endnote %}
|
||||
|
||||
### Recommended Zigbee radio adapters and modules
|
||||
|
||||
- Silicon Labs EmberZNet based radios using the EZSP protocol (via the [bellows](https://github.com/zigpy/bellows) library for zigpy)
|
||||
@ -177,6 +178,10 @@ If you find an opportunity to improve this information, refer to the section on
|
||||
|
||||
Be sure to connect a compatible radio module and restart Home Assistant before proceeding with configuration.
|
||||
|
||||
ZHA will automatically create a Zigbee network once it is configured with a Zigbee coordinator; you can then add compatible devices.
|
||||
|
||||
It is highly recommended to review the guidance for [Zigbee interference avoidance and network range/coverage optimization)](#zigbee-interference-avoidance-and-network-rangecoverage-optimization).
|
||||
|
||||
{% include integrations/config_flow.md %}
|
||||
|
||||
In the popup:
|
||||
@ -223,6 +228,156 @@ If you are use ZiGate or Sonoff ZBBridge you have to use some special usb_path c
|
||||
- Wifi Zigate : `socket://[IP]:[PORT]` for example `socket://192.168.1.10:9999`
|
||||
- Sonoff ZBBridge : `socket://[IP]:[PORT]` for example `socket://192.168.1.11:8888`
|
||||
|
||||
### Global Options
|
||||
|
||||
There are a few global options available once ZHA has been configured. Press **Configure** to access these settings.
|
||||
|
||||
The options are as follows:
|
||||
|
||||
{% configuration_basic %}
|
||||
Enable enhanced light color/temperature transition from an off-state:
|
||||
description: "For older non Zigbee 3.0 lights, this still allows a proper transition from an off-state to a new color (without seeing the old color). _(default: off)_"
|
||||
Enable enhanced brightness slider during light transition:
|
||||
description: "This avoids seeing intermediary brightness state when turning on lights with a transition. _(default: on)_"
|
||||
Group members assume state of group:
|
||||
description: "When using ZHA groups, turning on a ZHA group light makes the ZHA group members optimistically change their state to \"on\", instead of waiting and polling the lights when off. _(default: on)_"
|
||||
{% endconfiguration_basic %}
|
||||
|
||||
### Configuration - YAML
|
||||
|
||||
For more advanced configuration, you can modify {% term "`configuration.yaml`" %} and restart Home Assistant
|
||||
|
||||
{% configuration %}
|
||||
database_path:
|
||||
description: _Full_ path to the database which will keep persistent network data.
|
||||
required: false
|
||||
type: string
|
||||
enable_quirks:
|
||||
description: Enable quirks mode for devices where manufacturers didn't follow specs.
|
||||
required: false
|
||||
type: boolean
|
||||
default: true
|
||||
custom_quirks_path:
|
||||
description: Full path to a directory containing custom quirk modules that will take precedence over any built-in quirks matching a device.
|
||||
required: false
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
#### Defining Zigbee channel to use
|
||||
|
||||
{% important %}
|
||||
The best practice is to **not change the Zigbee channel** from the ZHA default.
|
||||
{% endimportant %}
|
||||
|
||||
{% note %}
|
||||
**Before changing the Zigbee channel on an existing network**, review the following sections on this page:
|
||||
|
||||
- [Best practices to avoid pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties)
|
||||
- [Zigbee interference avoidance and network range/coverage optimization](#zigbee-interference-avoidance-and-network-rangecoverage-optimization)
|
||||
|
||||
These sections both provide helpful advice on improving your Zigbee network performance.
|
||||
{% endnote %}
|
||||
|
||||
ZHA prefers to use Zigbee channel 15 by default. You can change this using YAML configuration, but this only works
|
||||
if there's no existing network. To change the channel for an existing network, radio has to be factory reset and a new network to be formed. This requires re-pairing of all the devices.
|
||||
|
||||
```yaml
|
||||
zha:
|
||||
zigpy_config:
|
||||
network:
|
||||
channel: 15 # What channel the radio should try to use.
|
||||
channels: [15, 20, 25] # Channel mask
|
||||
```
|
||||
|
||||
|
||||
|
||||
The related troubleshooting segments mentioned above will, among other things, inform that if you have issues with overlapping frequencies between Wi-Fi and Zigbee, then it is usually better to first only try changing and setting a static Wi-Fi channel on your Wi-Fi router or all your Wi-Fi access points (instead of just changing to another Zigbee channel).
|
||||
|
||||
MetaGeek Support has a good reference article about channel selection for [Zigbee and WiFi coexistence](https://support.metageek.com/hc/en-us/articles/203845040-ZigBee-and-WiFi-Coexistence).
|
||||
|
||||
The Zigbee specification standards divide the 2.4 GHz ISM radio band into 16 Zigbee channels (i.e. distinct radio frequencies for Zigbee). For all Zigbee devices to be able to communicate, they must support the same Zigbee channel (i.e. Zigbee radio frequency) that is set on the Zigbee Coordinator as the channel to use for its Zigbee network. Not all Zigbee devices support all Zigbee channels. Channel support usually depends on the age of the hardware and firmware, as well as on the device's power ratings.
|
||||
|
||||
The general recommendation is to only use channels 15, 20, or 25 in order to avoid interoperability problems with Zigbee devices. Not only because there is less chance of Wi-Fi networks interfering too much with the Zigbee network on other channels, but also because not all Zigbee devices support all channels. Some devices, for example, are limited to only being compatible with ZLL (Zigbee Light Link) channels. It is therefore especially not recommended to use Zigbee channels 11, 24, 25, or 26 on your Zigbee coordinator. These Zigbee channels are commonly only supported by relatively modern Zigbee hardware devices with newer Zigbee firmware. If using those channels, your coordinator may not be usable with older Zigbee devices.
|
||||
|
||||
#### Modifying the device type
|
||||
|
||||
As not all device manufacturers follow the Zigbee standard, at times a device can be incorrectly classified. For example, a switch could be classified as a light.
|
||||
|
||||
To correct the device type, also called domain, add the following to your {% term "`configuration.yaml`" %} and restart Home Assistant:
|
||||
|
||||
```yaml
|
||||
zha:
|
||||
device_config:
|
||||
84:71:27:ff:fe:93:17:24-1: # format: {ieee}-{endpoint_id}
|
||||
type: "switch" # corrected device type
|
||||
```
|
||||
|
||||
`{ieee}` is the device hardware address which can be read from the Home Assistant UI when looking at _Device info_. From device info, you can find the `{endpoint_id}` by viewing the _Zigbee device signature_.
|
||||
|
||||
### OTA updates of Zigbee device firmware
|
||||
|
||||
The ZHA integration has the ability to perform OTA (over-the-air) firmware updates of Zigbee devices. This feature is enabled by default. As it uses standard [Update](/integrations/update/) entities in Home Assistant, users will get a UI notification if and when an OTA firmware update is available for a specific device, with an option to initiate the update or ignore that specific update for the device.
|
||||
|
||||
To see OTA updates for a device, it must support OTA updates and firmware images for the device must be publicly provided by the manufacturer. ZHA currently only includes OTA providers for a few manufacturers that provide these updates publicly.
|
||||
|
||||
**Included manufacturers:**
|
||||
|
||||
- IKEA
|
||||
- Inovelli
|
||||
- Ledvance/OSRAM
|
||||
- SALUS/Computime
|
||||
- Sonoff/iTead
|
||||
- Third Reality
|
||||
|
||||
{% warning %}
|
||||
Before updating a device, you should search for any disadvantages or if you even need to install an available update. Some firmware updates can break features you might use (e.g. group binding for IKEA devices). Some updates might also require changes to ZHA. In rare cases, you can even brick devices by installing a firmware update.
|
||||
{% endwarning %}
|
||||
|
||||
#### Advanced OTA configuration
|
||||
|
||||
OTA for a few manufacturers is enabled by default, currently Ledvance, Sonoff, Inovelli, and ThirdReality. Other manufacturers are supported but disabled by default because their updates may change or remove device functionality, may require you to reconfigure devices, or are contributed by the community and may be minimally tested.
|
||||
|
||||
Refer to the [zigpy documentation for OTA configuration](https://github.com/zigpy/zigpy/wiki/OTA-Configuration) for more information on additional OTA providers.
|
||||
|
||||
## Adding devices
|
||||
|
||||
{% tip %}
|
||||
When adding devices, review the following sections on this page:
|
||||
|
||||
- [Best practices to avoid pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties)
|
||||
- [Zigbee interference avoidance and network range/coverage optimization](#zigbee-interference-avoidance-and-network-rangecoverage-optimization)
|
||||
|
||||
These sections both provide helpful advice on improving your Zigbee network performance.
|
||||
{% endtip %}
|
||||
|
||||
**To add a new Zigbee device:**
|
||||
|
||||
1. Go to {% my integrations title="**Settings** > **Devices & services**" %}.
|
||||
2. Select the **Zigbee Home Automation** {% term integration %}. Then, select **Configure**.
|
||||
3. To start a scan for new devices, on the bottom right corner of the screen, select **Add device**.
|
||||
4. Reset your Zigbee devices to factory default settings according to the device instructions provided by the manufacturer (e.g., turn on/off lights up to 10 times; switches usually have a reset button/pin). It might take a few seconds for the devices to appear. You can click on **Show logs** for more verbose output.
|
||||
5. Once the device is found, it will appear on that page and will be automatically added to your devices. You can optionally change its name and add it to an area (you can change this later). You can search again to add another device, or you can go back to the list of added devices.
|
||||
|
||||
### Using router devices to add more devices
|
||||
|
||||
Most mains-powered devices, e.g., many always-powered wall plugs or light bulbs in your Zigbee network will automatically act as a Zigbee router device (sometimes also referred to as a Zigbee "signal repeater" or "range extender").
|
||||
|
||||
Because Zigbee should use a [wireless mesh network](https://en.wikipedia.org/wiki/Wireless_mesh_network) to be effective, you will need to add Zigbee router devices to increase the number of Zigbee devices that can be used in your Zigbee network, both in the total number of devices that can be added as well as the total range and coverage of the network. Some Zigbee router devices do a much better job at routing and repeating Zigbee signals and messages than some other devices. You should not have a setup where Zigbee router devices (e.g. light bulbs) are often powered-off. Zigbee router devices are meant to be always available.
|
||||
|
||||
All Zigbee coordinator firmware will only allow you to directly connect a certain amount of devices. That limit is set for two reasons; firstly, to not overload the Zigbee coordinator, and secondly, to encourage your Zigbee network to quickly begin to utilize a "[mesh networking](https://en.wikipedia.org/wiki/Mesh_networking)" topology instead of only a "[star network](https://en.wikipedia.org/wiki/Star_network)" topology.
|
||||
|
||||
The total number of Zigbee devices that you can have on a Zigbee network depends on a few things. The Zigbee coordinator hardware and its firmware only play a larger role in Zigbee networks with a lot of devices. More important is the number of directly connected devices ("direct children") versus the number of routers that are connected to your Zigbee coordinator. The Zigpy library, which the ZHA {% term integration %} depends on, has an upper limit that is 32 direct children, but you can still have hundreds of Zigbee devices in total connected indirectly through routes via Zigbee router devices.
|
||||
|
||||
In this theoretical example, a CC2652-based Zigbee coordinator has three CC2530 Zigbee router devices for a total limit of 77 devices:
|
||||
|
||||
- Coordinator: 32 Zigbee End devices - 3 routers = 29
|
||||
- Router one: + 16 devices
|
||||
- Router two: + 16 devices
|
||||
- Router three: + 16 devices
|
||||
- Total device limit = **77 devices**
|
||||
|
||||
In practice, you will likely need to add a lot more Zigbee router devices than in this example in order to extend the coverage of the network to reach that many devices.
|
||||
|
||||
### Discovery via USB or Zeroconf
|
||||
|
||||
Some devices can be auto-discovered, which can simplify the ZHA setup process. The following devices have been tested with discovery and offer a quick setup experience.
|
||||
@ -290,108 +445,6 @@ Some devices can be auto-discovered, which can simplify the ZHA setup process. T
|
||||
|
||||
Additional devices in the [Compatible hardware](#compatible-hardware) section may be discoverable, however, only devices that have been confirmed discoverable are listed above.
|
||||
|
||||
### OTA updates of Zigbee device firmware
|
||||
|
||||
The ZHA integration has the ability to perform OTA (over-the-air) firmware updates of Zigbee devices. This feature is enabled by default. As it uses standard [Update](/integrations/update/) entities in Home Assistant, users will get a UI notification if and when an OTA firmware update is available for a specific device, with an option to initiate the update or ignore that specific update for the device.
|
||||
|
||||
To see OTA updates for a device, it must support OTA updates and firmware images for the device must be publicly provided by the manufacturer. ZHA currently only includes OTA providers for a few manufacturers that provide these updates publicly.
|
||||
|
||||
**Included manufacturers:**
|
||||
|
||||
- IKEA
|
||||
- Inovelli
|
||||
- Ledvacnce/OSRAM
|
||||
- SALUS/Computime
|
||||
- Sonoff/iTead
|
||||
- Third Reality
|
||||
|
||||
{% warning %}
|
||||
Before updating a device, you should search for any disadvantages or if you even need to install an available update. Some firmware updates can break features you might use (e.g. group binding for IKEA devices). Some updates might also require changes to ZHA. In rare cases, you can even brick devices by installing a firmware update.
|
||||
{% endwarning %}
|
||||
|
||||
### Global Options
|
||||
|
||||
There are a few global options available once ZHA has been configured. Press **Configure** to access these settings.
|
||||
|
||||
The options are as follows:
|
||||
|
||||
{% configuration_basic %}
|
||||
Enable enhanced light color/temperature transition from an off-state:
|
||||
description: "For older non Zigbee 3.0 lights, this still allows a proper transition from an off-state to a new color (without seeing the old color). _(default: off)_"
|
||||
Enable enhanced brightness slider during light transition:
|
||||
description: "This avoids seeing intermediary brightness state when turning on lights with a transition. _(default: on)_"
|
||||
Group members assume state of group:
|
||||
description: "When using ZHA groups, turning on a ZHA group light makes the ZHA group members optimistically change their state to \"on\", instead of waiting and polling the lights when off. _(default: on)_"
|
||||
{% endconfiguration_basic %}
|
||||
|
||||
### Configuration - YAML
|
||||
|
||||
For more advanced configuration, you can modify {% term "`configuration.yaml`" %} and restart Home Assistant
|
||||
|
||||
{% configuration %}
|
||||
database_path:
|
||||
description: _Full_ path to the database which will keep persistent network data.
|
||||
required: false
|
||||
type: string
|
||||
enable_quirks:
|
||||
description: Enable quirks mode for devices where manufacturers didn't follow specs.
|
||||
required: false
|
||||
type: boolean
|
||||
default: true
|
||||
custom_quirks_path:
|
||||
description: Full path to a directory containing custom quirk modules that will take precedence over any built-in quirks matching a device.
|
||||
required: false
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
#### Advanced OTA configuration
|
||||
|
||||
OTA for a few manufacturers is enabled by default, currently Ledvance, Sonoff, Inovelli, and ThirdReality. Other manufacturers are supported but disabled by default because their updates may change or remove device functionality, may require you to reconfigure devices, or are contributed by the community and may be minimally tested.
|
||||
|
||||
Refer to the [zigpy documentation for OTA configuration](https://github.com/zigpy/zigpy/wiki/OTA-Configuration) for more information on additional OTA providers.
|
||||
|
||||
#### Defining Zigbee channel to use
|
||||
|
||||
Tip! Before considering to change to an other Zigbee channel on an existing Zigbee network, it is highly recommended that you read through the two segments under the [troubleshooting](#troubleshooting) section below about _Best practices to avoid pairing/connection difficulties_ and _Zigbee interference avoidance and network range/coverage optimization_. These sections provide prerequisite information and advice on how to achieve the best possible Zigbee network in your environment.
|
||||
|
||||
ZHA prefers to use Zigbee channel 15 by default. You can change this using YAML configuration, but this only works
|
||||
if there's no existing network. To change the channel for an existing network, radio has to be factory reset and a new network to be formed. This requires re-pairing of all the devices.
|
||||
|
||||
```yaml
|
||||
zha:
|
||||
zigpy_config:
|
||||
network:
|
||||
channel: 15 # What channel the radio should try to use.
|
||||
channels: [15, 20, 25] # Channel mask
|
||||
```
|
||||
|
||||
{% note %}
|
||||
The best practice is to not change the Zigbee channel from the ZHA default.
|
||||
{% endnote %}
|
||||
|
||||
The related troubleshooting segments mentioned above will, among other things, inform that if you have issues with overlapping frequencies between Wi-Fi and Zigbee, then it is usually better to first only try changing and setting a static Wi-Fi channel on your Wi-Fi router or all your Wi-Fi access points (instead of just changing to another Zigbee channel).
|
||||
|
||||
MetaGeek Support has a good reference article about channel selection for [Zigbee and WiFi coexistence](https://support.metageek.com/hc/en-us/articles/203845040-ZigBee-and-WiFi-Coexistence).
|
||||
|
||||
The Zigbee specification standards divide the 2.4 GHz ISM radio band into 16 Zigbee channels (i.e. distinct radio frequencies for Zigbee). For all Zigbee devices to be able to communicate, they must support the same Zigbee channel (i.e. Zigbee radio frequency) that is set on the Zigbee Coordinator as the channel to use for its Zigbee network. Not all Zigbee devices support all Zigbee channels. Channel support usually depends on the age of the hardware and firmware, as well as on the device's power ratings.
|
||||
|
||||
The general recommendation is to only use channels 15, 20, or 25 in order to avoid interoperability problems with Zigbee devices. Not only because there is less chance of Wi-Fi networks interfering too much with the Zigbee network on other channels, but also because not all Zigbee devices support all channels. Some devices, for example, are limited to only being compatible with ZLL (Zigbee Light Link) channels. It is therefore especially not recommended to use Zigbee channels 11, 24, 25, or 26 on your Zigbee coordinator. These Zigbee channels are commonly only supported by relatively modern Zigbee hardware devices with newer Zigbee firmware. If using those channels, your coordinator may not be usable with older Zigbee devices.
|
||||
|
||||
#### Modifying the device type
|
||||
|
||||
As not all device manufacturers follow the Zigbee standard, at times a device can be incorrectly classified. For example, a switch could be classified as a light.
|
||||
|
||||
To correct the device type, also called domain, add the following to your {% term "`configuration.yaml`" %} and restart Home Assistant:
|
||||
|
||||
```yaml
|
||||
zha:
|
||||
device_config:
|
||||
84:71:27:ff:fe:93:17:24-1: # format: {ieee}-{endpoint_id}
|
||||
type: "switch" # corrected device type
|
||||
```
|
||||
|
||||
`{ieee}` is the device hardware address which can be read from the Home Assistant UI when looking at _Device info_. From device info, you can find the `{endpoint_id}` by viewing the _Zigbee device signature_.
|
||||
|
||||
## Actions
|
||||
|
||||
### Action `zha.permit`
|
||||
@ -463,38 +516,6 @@ This action disables a lock code on a Zigbee lock.
|
||||
| ----------- | -------- | ------------------------------- |
|
||||
| `code_slot` | no | Which lock code slot to disable |
|
||||
|
||||
## Adding devices
|
||||
|
||||
Tip! It is highly recommended that you read through the two segments under the troubleshooting section below about _Best practices to avoid pairing/connection difficulties_ and _Zigbee interference avoidance and network range/coverage optimization_ for general prerequisite knowledge and advice on how to achieve the best possible Zigbee network in your environment.
|
||||
|
||||
**To add a new Zigbee device:**
|
||||
|
||||
1. Go to {% my integrations title="**Settings** > **Devices & services**" %}.
|
||||
2. Select the **Zigbee Home Automation** {% term integration %}. Then, select **Configure**.
|
||||
3. To start a scan for new devices, on the bottom right corner of the screen, select **Add device**.
|
||||
4. Reset your Zigbee devices to factory default settings according to the device instructions provided by the manufacturer (e.g., turn on/off lights up to 10 times; switches usually have a reset button/pin). It might take a few seconds for the devices to appear. You can click on **Show logs** for more verbose output.
|
||||
5. Once the device is found, it will appear on that page and will be automatically added to your devices. You can optionally change its name and add it to an area (you can change this later). You can search again to add another device, or you can go back to the list of added devices.
|
||||
|
||||
### Using router devices to add more devices
|
||||
|
||||
Most mains-powered devices, e.g., many always-powered wall plugs or light bulbs in your Zigbee network will automatically act as a Zigbee router device (sometimes also referred to as a Zigbee "signal repeater" or "range extender").
|
||||
|
||||
Because Zigbee should use a [wireless mesh network](https://en.wikipedia.org/wiki/Wireless_mesh_network) to be effective, you will need to add Zigbee router devices to increase the number of Zigbee devices that can be used in your Zigbee network, both in the total number of devices that can be added as well as the total range and coverage of the network. Some Zigbee router devices do a much better job at routing and repeating Zigbee signals and messages than some other devices. You should not have a setup where Zigbee router devices (e.g. light bulbs) are often powered-off. Zigbee router devices are meant to be always available.
|
||||
|
||||
All Zigbee coordinator firmware will only allow you to directly connect a certain amount of devices. That limit is set for two reasons; firstly, to not overload the Zigbee coordinator, and secondly, to encourage your Zigbee network to quickly begin to utilize a "[mesh networking](https://en.wikipedia.org/wiki/Mesh_networking)" topology instead of only a "[star network](https://en.wikipedia.org/wiki/Star_network)" topology.
|
||||
|
||||
The total number of Zigbee devices that you can have on a Zigbee network depends on a few things. The Zigbee coordinator hardware and its firmware only play a larger role in Zigbee networks with a lot of devices. More important is the number of directly connected devices ("direct children") versus the number of routers that are connected to your Zigbee coordinator. The Zigpy library, which the ZHA {% term integration %} depends on, has an upper limit that is 32 direct children, but you can still have hundreds of Zigbee devices in total connected indirectly through routes via Zigbee router devices.
|
||||
|
||||
In this theoretical example, a CC2652-based Zigbee coordinator has three CC2530 Zigbee router devices for a total limit of 77 devices:
|
||||
|
||||
- Coordinator: 32 Zigbee End devices - 3 routers = 29
|
||||
- Router one: + 16 devices
|
||||
- Router two: + 16 devices
|
||||
- Router three: + 16 devices
|
||||
- Total device limit = **77 devices**
|
||||
|
||||
In practice, you will likely need to add a lot more Zigbee router devices than in this example in order to extend the coverage of the network to reach that many devices.
|
||||
|
||||
## Zigbee groups and binding devices
|
||||
|
||||
ZHA supports the creation of Zigbee groups (different from Home Assistant's [Group](/integrations/group/) integration), as well as binding devices to each other. Groups and device binding can be set up independently of each other, but they can be also used in combination (such as binding a device to another group of devices).
|
||||
@ -558,16 +579,22 @@ ZHA supports migrating the Zigbee network between different Zigbee Coordinators
|
||||
|
||||
#### Prerequisites
|
||||
|
||||
To migrate your Zigbee network from one Zigbee Coordinator to another, confirm you meet the following requirements before proceeding with the migration process:
|
||||
Confirm you meet the following requirements before migrating:
|
||||
|
||||
- The previous Zigbee Coordinator is used in the ZHA {% term integration %} and _not_ in deCONZ or MQTT.
|
||||
- The previous coordinator is used in the ZHA {% term integration %} and _not_ in deCONZ or MQTT.
|
||||
- The radio type is one of the following:
|
||||
- ezsp (Silicon Labs EmberZnet)
|
||||
- znp (Texas Instruments Z-Stack ZNP)
|
||||
- deCONZ (ConBee/RaspBee from dresden elektronik)
|
||||
- For deCONZ (ConBee/RaspBee) radio adapters, make sure it is running [firmware 0x26700700 (from 2021-08-18)](https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/Firmware-Changelog) or later.
|
||||
- ezsp _(Silicon Labs EmberZnet)_
|
||||
- znp _(Texas Instruments Z-Stack ZNP)_
|
||||
- deCONZ _(ConBee/RaspBee from dresden elektronik)_
|
||||
- Be sure it is running [firmware 0x26700700 (from 2021-08-18)](https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/Firmware-Changelog) or later.
|
||||
|
||||
#### To migrate to a new Zigbee coordinator radio inside ZHA
|
||||
{% details "To migrate to a new Zigbee coordinator radio inside ZHA:" %}
|
||||
|
||||
{% important %}
|
||||
You will not be able to control your existing Zigbee devices until the new coordinator fully joins the network after the migration. **This can take a few minutes.**
|
||||
|
||||
If some existing devices do not resume normal functions after some time, try power-cycling them to attempt rejoining to the network.
|
||||
{% endimportant %}
|
||||
|
||||
1. Go to **{% my integrations title="Settings > Devices & services" %}** and select the ZHA {% term integration %}. Then select **Configure**.
|
||||
2. Under **Network settings**, select **Migrate radio**.
|
||||
@ -599,42 +626,74 @@ To migrate your Zigbee network from one Zigbee Coordinator to another, confirm y
|
||||
11. Finally, a **Success!** message should pop up with information that all options were successfully saved.
|
||||
- Select **Finish** to confirm.
|
||||
|
||||
{% important %}
|
||||
You will not be able to control your existing Zigbee devices until the new coordinator fully joins the network after the migration. **This can take a few minutes.**
|
||||
|
||||
If some existing devices do not resume normal functions after some time, try power-cycling them to attempt rejoining to the network.
|
||||
{% endimportant %}
|
||||
{% enddetails %}
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
Please note the current limitations and follow the instructions in this troubleshooting section.
|
||||
|
||||
{% note %}
|
||||
To help resolve any kinks or compatibility problems, report bugs as issues with debug logs.
|
||||
{% endnote %}
|
||||
|
||||
### Limitations
|
||||
|
||||
ZHA only supports connecting a single dedicated Zigbee Coordinator radio adapter or module with a single Zigbee network. The Zigbee Coordinator cannot already be connected or used by any other application. Devices currently or previously connected to another Zigbee implementation will need to be reset to their factory default settings before they can be paired/joined to ZHA. Refer to each device manufacturer's documentation for reset steps.
|
||||
The list of ZHA limitations may not be exhaustive.
|
||||
|
||||
Any Zigbee device can only be connected to a single Zigbee Coordinator (only one Zigbee gateway). This is a limitation in the Zigbee protocol specifications, governed by the [CSA (Connectivity Standards Alliance)](https://csa-iot.org/all-solutions/zigbee/), applying to all Zigbee implementations and not just the ZHA implementation.
|
||||
{% details "List of ZHA limitations:" %}
|
||||
|
||||
Support for commissioning Zigbee 3.0 devices via "Install Code" or "QR Code" via the `zha.permit` action has so far only been implemented for 'ezsp' (Silicon Labs EmberZNet) or 'znp' (Texas Instruments) radio type in ZHA. Other radio types are missing support in their respective [radio libraries for zigpy](https://github.com/zigpy/) or manufacturer's firmware commands/APIs.
|
||||
**ZHA only supports connecting a single dedicated Zigbee coordinator with a single Zigbee network:**
|
||||
|
||||
ZHA currently does not support devices that can only use the ZGP ("Zigbee Green Power") profile which is used in a few batteryless self-powered or energy harvesting devices, (such as for example; Philips Hue Click, Philips Hue Tap, and some "Friends of Hue" partnership switches).
|
||||
- The Zigbee Coordinator cannot already be connected or used by any other application.
|
||||
- Devices currently or previously connected to another Zigbee implementation will need to be reset to their factory default settings before they can be paired/joined to ZHA.
|
||||
- Refer to each device manufacturer's documentation for reset steps.
|
||||
|
||||
ZHA does not currently support devices that can only use the ZSE ("Zigbee Smart Energy") profile, that is however due to the "Zigbee SE" specification not being part of the standard Zigbee 3.0 specification and thus not implemented in most of the Zigbee protocol stacks that are commonly available Zigbee Coordinator radio adapters and modules.
|
||||
**A Zigbee device can only be connected to a single Zigbee Coordinator (only one Zigbee gateway):**
|
||||
|
||||
- This is a limitation in the Zigbee protocol specifications, governed by the [CSA (Connectivity Standards Alliance)](https://csa-iot.org/all-solutions/zigbee/), applying to all Zigbee implementations and not just the ZHA implementation.
|
||||
|
||||
**Support for commissioning Zigbee 3.0 devices via "Install Code" or "QR Code" via the `zha.permit` action:**
|
||||
|
||||
- This has so far only been implemented for 'ezsp' (Silicon Labs EmberZNet) or 'znp' (Texas Instruments) radio type in ZHA.
|
||||
- Other radio types are missing support in their respective [radio libraries for zigpy](https://github.com/zigpy/) or manufacturer's firmware commands/APIs.
|
||||
|
||||
**ZHA does _not_ currently support devices that can only use:**
|
||||
|
||||
- The ZGP ("Zigbee Green Power") profile:
|
||||
- This is used in a few batteryless self-powered or energy harvesting devices, (such as Philips Hue Click, Philips Hue Tap, and some "Friends of Hue" partnership switches).
|
||||
- The ZSE ("Zigbee Smart Energy") profile:
|
||||
- This is due to the "Zigbee SE" specification not being part of the standard Zigbee 3.0 specification and thus not implemented in most of the Zigbee protocol stacks that are commonly available Zigbee Coordinator radio adapters and modules.
|
||||
|
||||
{% enddetails %}
|
||||
|
||||
### Knowing which devices are supported
|
||||
|
||||
Home Assistant's ZHA {% term integration %} supports all standard Zigbee device types. It should be compatible with most Zigbee devices as long as they fully conform to the official ZCL (Zigbee Cluster Library) specifications defined by the [CSA (Connectivity Standards Alliance, formerly the Zigbee Alliance)](https://csa-iot.org/all-solutions/zigbee/). There is therefore no official compatibility list of devices that will work out-of-the-box with the ZHA {% term integration %}
|
||||
Not all hardware manufacturers always fully comply with the standard specifications. Sometimes, they may also implement unique features. For this reason, some Zigbee devices pair/join fine with ZHA but then only show none or only a few entities in the {% term integration %}. Developers can work around most such interoperability issues by adding conversion/translation code in custom device handlers. For more information, refer to the section below on [How to add support for new and unsupported devices](#how-to-add-support-for-new-and-unsupported-devices).
|
||||
Home Assistant's ZHA {% term integration %} supports all standard Zigbee device types as defined by the [CSA (Connectivity Standards Alliance, formerly the Zigbee Alliance)](https://csa-iot.org/all-solutions/zigbee/).
|
||||
|
||||
For clarification, normally only devices that do not fully conform to CSA's ZCL specifications that will not present all standard attributes as entities for configuration in the ZHA {% term integration %}. Zigbee devices that only use the standard clusters and attributes that are Zigbee specifications set by the Connectivity Standards Alliance should not need custom device handlers.
|
||||
**There is therefore no official compatibility list of devices that will work out-of-the-box with the ZHA {% term integration %}.**
|
||||
|
||||
Before continuing with this section: If a device does not join/pair at all, read the troubleshooting sections about how to avoid pairing/connection difficulties, interference avoidance, and network range/coverage optimization.
|
||||
{% tip %}
|
||||
Check out [blakadder's unofficial Zigbee Device Compatibility Repository](https://zigbee.blakadder.com).
|
||||
|
||||
Tip to new Zigbee users: Checkout [blakadder's unofficial Zigbee Device Compatibility Repository](https://zigbee.blakadder.com). Anyone can help maintain the site by submitting device compatibility information to it. The repository contains independent community member's reports or device-specific pairing tips for several home automation gateway/bridge/hub software, including open-source Zigbee implementations, such as ZHA, Zigbee2MQTT, and Tasmota (Zigbee2Tasmota).
|
||||
This unofficial list contains independent community members' reports _(or device-specific pairing tips)_ for several home automation gateway/bridge/hub software (including open-source Zigbee implementations such as ZHA, Zigbee2MQTT, and Tasmota/Zigbee2Tasmota).
|
||||
|
||||
Anyone can help maintain the site by submitting device compatibility information to it.
|
||||
{% endtip %}
|
||||
|
||||
Not all hardware manufacturers fully comply with the standard. This can include:
|
||||
|
||||
- Implementing unique (but non-standard) features,
|
||||
- Not showing all expected entities within the Home Assistant {% term integration %} overview.
|
||||
- Showing no entities within Home Assistant at all.
|
||||
|
||||
Developers (or even advanced users) might be able to work around such interoperability issues by adding conversion/translation code in custom device handlers. For more information, refer to [How to add support for new and unsupported devices](#how-to-add-support-for-new-and-unsupported-devices).
|
||||
|
||||
{% note %}
|
||||
**If a device will not join/pair** at all, review the following sections on this page:
|
||||
|
||||
- [Best practices to avoid pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties)
|
||||
- [Zigbee interference avoidance and network range/coverage optimization](#zigbee-interference-avoidance-and-network-rangecoverage-optimization)
|
||||
|
||||
These sections both provide helpful advice on improving your Zigbee network performance.
|
||||
{% endnote %}
|
||||
|
||||
### How to add support for new and unsupported devices
|
||||
|
||||
@ -770,7 +829,12 @@ When reporting potential bugs related to the ZHA integration on the issues track
|
||||
3. If the issue is related to a specific Zigbee device, provide both the **Zigbee Device Signature** and the **Diagnostics** information.
|
||||
- Both the **Zigbee Device Signature** and the **Diagnostics** information can be found under {% my integrations title="**Settings** > **Devices & services**" %}. Select the **Zigbee Home Automation** integration. Then, select **Configure** > **Devices** (pick your device). Select **Zigbee Device Signature** and **Download Diagnostics**, respectively.
|
||||
|
||||
Note: Please also make sure you give it your best effort to follow the recommended best practices for avoiding both [pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties) and [Zigbee interference](#zigbee-interference-avoidance-and-network-rangecoverage-optimization), (which helps free up time for developers).
|
||||
{% tip %}
|
||||
For troubleshooting, read the following sections on this page. They provide information on improving your Zigbee network performance.
|
||||
|
||||
- [Best practices to avoid pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties)
|
||||
- [Zigbee interference avoidance and network range/coverage optimization](#zigbee-interference-avoidance-and-network-rangecoverage-optimization)
|
||||
{% endtip %}
|
||||
|
||||
### Debug logging
|
||||
|
||||
@ -895,3 +959,11 @@ services:
|
||||
When you see `NCP entered failed state. Requesting APP controller restart` in logs during normal operation, it indicates a drop in communication between ZHA and the serial interface of the Silabs EmberZNet Zigbee Coordinator.
|
||||
|
||||
The EZSP (EmberZNet Serial Protocol) interface used by Silicon Labs EmberZNet Zigbee Coordinator adapters requires a stable connection to the serial port; therefore, it is not recommended to use a connection over Wi-Fi, WAN, VPN, etc.
|
||||
|
||||
### Zigbee 3.0 support
|
||||
|
||||
Some coordinators may not support firmware capable of Zigbee 3.0, but they can still be fully functional and feature-complete for your needs.
|
||||
|
||||
{% note %}
|
||||
It is up to hardware manufacturers to make such firmware available to them. If your coordinator was shipped with an older firmware version, you be able to manually upgrade the firmware.
|
||||
{% endnote %}
|
||||
|
@ -67,6 +67,11 @@ Enjoy the release!
|
||||
- [Other noteworthy changes](#other-noteworthy-changes)
|
||||
- [Iterating on the legends of graphs](#iterating-on-the-legends-of-graphs)
|
||||
- [Grouping/clustering of trackables on the maps](#groupingclustering-of-trackables-on-the-maps)
|
||||
- [Patch releases](#patch-releases)
|
||||
- [2025.3.1 - March 7](#202531---march-7)
|
||||
- [2025.3.2 - March 11](#202532---march-11)
|
||||
- [2025.3.3 - March 14](#202533---march-14)
|
||||
- [2025.3.4 - March 21](#202534---march-21)
|
||||
- [Need help? Join the community!](#need-help-join-the-community)
|
||||
- [Backward-incompatible changes](#backward-incompatible-changes)
|
||||
- [All changes](#all-changes)
|
||||
@ -309,7 +314,7 @@ changes to existing integrations:
|
||||
The [SmartThings] integration has been completely rewritten! 🎉 In December,
|
||||
SmartThings shut down the old authentication method, but thanks to
|
||||
SmartThings' hard work and close collaboration with us, [@joostlek] was able to
|
||||
bring back the integration is back—better than ever.
|
||||
bring back the integration—better than ever.
|
||||
|
||||
No more setting up routing, exposing ports, or creating developer accounts with
|
||||
access tokens—**just log in with your Samsung account**, and you’re good to go!
|
||||
@ -407,6 +412,312 @@ Thanks [@jpbede] and [@marcinbauer85] for this awesome improvement!
|
||||
[@jpbede]: https://github.com/jpbede
|
||||
[@marcinbauer85]: https://github.com/marcinbauer85
|
||||
|
||||
## Patch releases
|
||||
|
||||
We will also release patch releases for Home Assistant 2025.3 in March.
|
||||
These patch releases only contain bug fixes. Our goal is to release a patch
|
||||
release every Friday.
|
||||
|
||||
### 2025.3.1 - March 7
|
||||
|
||||
- Check support for demand load control in SmartThings AC ([@Ishima] - [#139616])
|
||||
- Fix Unit of Measurement for Squeezebox duration sensor entity on LMS service ([@peteS-UK] - [#139861])
|
||||
- Trim the Schema allowed keys to match the Public Gemini API docs. ([@IvanLH] - [#139876])
|
||||
- Bump thermobeacon-ble to 0.8.1 ([@bdraco] - [#139919])
|
||||
- Deduplicate climate modes in SmartThings ([@joostlek] - [#139930])
|
||||
- Check if the unit of measurement is valid before creating the entity ([@jbouwh] - [#139932])
|
||||
- Bump pysmartthings to 2.6.1 ([@joostlek] - [#139936])
|
||||
- Bump aiowebdav2 to 0.4.0 ([@jpbede] - [#139938])
|
||||
- Add config entry level diagnostics to SmartThings ([@joostlek] - [#139939])
|
||||
- Set content length when uploading files to WebDAV ([@jpbede] - [#139950])
|
||||
- Bump to python-snoo 0.6.1 ([@Lash-L] - [#139954])
|
||||
- Fix SmartThings fan ([@joostlek] - [#139962])
|
||||
- Update frontend to 20250306.0 ([@bramkragten] - [#139965])
|
||||
- Fix SmartThings dust sensor UoM ([@joostlek] - [#139977])
|
||||
- Bump nexia to 2.2.2 ([@bdraco] - [#139986])
|
||||
- Bump aiowebdav2 to 0.4.1 ([@jpbede] - [#139988])
|
||||
- Correctly retrieve only loaded Google Generative AI config_entries ([@IvanLH] - [#139999])
|
||||
- Fix regression to evohome debug logging ([@zxdavb] - [#140000])
|
||||
- Check operation state on Home Connect program sensor update ([@Diegorro98] - [#140011])
|
||||
- Bump aiohomeconnect to 0.16.3 ([@MartinHjelmare] - [#140014])
|
||||
- Fix powerwall 0% in Tessie and Tesla Fleet ([@Bre77] - [#140017])
|
||||
- Fix shift state default in Teslemetry and Tessie ([@Bre77] - [#140018])
|
||||
- Add description for HomematicIP HCU1 in homematicip_cloud setup config flow ([@hahn-th] - [#140025])
|
||||
- Fix evohome to gracefully handle null schedules ([@zxdavb] - [#140036])
|
||||
- Fix SmartThings disabling working capabilities ([@joostlek] - [#140039])
|
||||
- Fix SmartThings thermostat climate check ([@joostlek] - [#140046])
|
||||
- Bump pysmartthings to 2.7.0 ([@joostlek] - [#140047])
|
||||
- Only keep valid powerConsumptionReports in SmartThings ([@joostlek] - [#140049])
|
||||
- Bump py-synologydsm-api to 2.7.1 ([@mib1185] - [#140052])
|
||||
- Restore SmartThings button event ([@joostlek] - [#140044])
|
||||
|
||||
[#139616]: https://github.com/home-assistant/core/pull/139616
|
||||
[#139859]: https://github.com/home-assistant/core/pull/139859
|
||||
[#139861]: https://github.com/home-assistant/core/pull/139861
|
||||
[#139876]: https://github.com/home-assistant/core/pull/139876
|
||||
[#139919]: https://github.com/home-assistant/core/pull/139919
|
||||
[#139930]: https://github.com/home-assistant/core/pull/139930
|
||||
[#139932]: https://github.com/home-assistant/core/pull/139932
|
||||
[#139936]: https://github.com/home-assistant/core/pull/139936
|
||||
[#139938]: https://github.com/home-assistant/core/pull/139938
|
||||
[#139939]: https://github.com/home-assistant/core/pull/139939
|
||||
[#139950]: https://github.com/home-assistant/core/pull/139950
|
||||
[#139954]: https://github.com/home-assistant/core/pull/139954
|
||||
[#139962]: https://github.com/home-assistant/core/pull/139962
|
||||
[#139965]: https://github.com/home-assistant/core/pull/139965
|
||||
[#139977]: https://github.com/home-assistant/core/pull/139977
|
||||
[#139986]: https://github.com/home-assistant/core/pull/139986
|
||||
[#139988]: https://github.com/home-assistant/core/pull/139988
|
||||
[#139999]: https://github.com/home-assistant/core/pull/139999
|
||||
[#140000]: https://github.com/home-assistant/core/pull/140000
|
||||
[#140011]: https://github.com/home-assistant/core/pull/140011
|
||||
[#140014]: https://github.com/home-assistant/core/pull/140014
|
||||
[#140017]: https://github.com/home-assistant/core/pull/140017
|
||||
[#140018]: https://github.com/home-assistant/core/pull/140018
|
||||
[#140025]: https://github.com/home-assistant/core/pull/140025
|
||||
[#140036]: https://github.com/home-assistant/core/pull/140036
|
||||
[#140039]: https://github.com/home-assistant/core/pull/140039
|
||||
[#140044]: https://github.com/home-assistant/core/pull/140044
|
||||
[#140046]: https://github.com/home-assistant/core/pull/140046
|
||||
[#140047]: https://github.com/home-assistant/core/pull/140047
|
||||
[#140049]: https://github.com/home-assistant/core/pull/140049
|
||||
[#140052]: https://github.com/home-assistant/core/pull/140052
|
||||
[@Bre77]: https://github.com/Bre77
|
||||
[@Diegorro98]: https://github.com/Diegorro98
|
||||
[@Ishima]: https://github.com/Ishima
|
||||
[@IvanLH]: https://github.com/IvanLH
|
||||
[@Lash-L]: https://github.com/Lash-L
|
||||
[@MartinHjelmare]: https://github.com/MartinHjelmare
|
||||
[@bdraco]: https://github.com/bdraco
|
||||
[@bramkragten]: https://github.com/bramkragten
|
||||
[@frenck]: https://github.com/frenck
|
||||
[@hahn-th]: https://github.com/hahn-th
|
||||
[@jbouwh]: https://github.com/jbouwh
|
||||
[@joostlek]: https://github.com/joostlek
|
||||
[@jpbede]: https://github.com/jpbede
|
||||
[@mib1185]: https://github.com/mib1185
|
||||
[@peteS-UK]: https://github.com/peteS-UK
|
||||
[@zxdavb]: https://github.com/zxdavb
|
||||
|
||||
### 2025.3.2 - March 11
|
||||
|
||||
- Don't allow creating backups if Home Assistant is not running ([@emontnemery] - [#139499])
|
||||
- Bump govee_ble to 0.43.1 ([@moosilauke18] - [#139862])
|
||||
- Label emergency heat switch ([@jrhillery] - [#139872])
|
||||
- Bump sense-energy lib to 0.13.7 ([@kbickar] - [#140068])
|
||||
- Update jinja to 3.1.6 ([@frenck] - [#140069])
|
||||
- Update evohome-async to 1.0.3 ([@zxdavb] - [#140083])
|
||||
- Fix HEOS discovery error when previously ignored ([@andrewsayre] - [#140091])
|
||||
- Map prewash job state in SmartThings ([@joostlek] - [#140097])
|
||||
- Check support for thermostat operating state in SmartThings ([@joostlek] - [#140103])
|
||||
- Handle None options in SmartThings ([@joostlek] - [#140110])
|
||||
- Fix MQTT JSON light not reporting color temp status if color is not supported ([@jbouwh] - [#140113])
|
||||
- Fix HEOS user initiated setup when discovery is waiting confirmation ([@andrewsayre] - [#140119])
|
||||
- Support null supported Thermostat modes in SmartThings ([@joostlek] - [#140101])
|
||||
- Set device class for Oven Completion time in SmartThings ([@joostlek] - [#140139])
|
||||
- Revert "Check if the unit of measurement is valid before creating the entity" ([@jbouwh] - [#140155])
|
||||
- Fix the order of the group members attribute of the Music Assistant integration ([@msm595] - [#140204])
|
||||
- Fix events without user in Bring integration ([@tr4nt0r] - [#140213])
|
||||
- Log broad exception in Electricity Maps config flow ([@jpbede] - [#140219])
|
||||
- Bump evohome-async to 1.0.4 to fix #140194 ([@zxdavb] - [#140230])
|
||||
- Refresh Home Connect token during config entry setup ([@Diegorro98] - [#140233])
|
||||
- Add 900 RPM option to washer spin speed options at Home Connect ([@Diegorro98] - [#140234])
|
||||
- Fix todo tool broken with Gemini 2.0 models. ([@Lash-L] - [#140246])
|
||||
- Fix version not always available in onewire ([@epenet] - [#140260])
|
||||
- Fix `client_id` not generated when connecting to the MQTT broker ([@jbouwh] - [#140264])
|
||||
- Bump velbusaio to 2025.3.0 ([@cereal2nd] - [#140267])
|
||||
- Fix dryer operating state in SmartThings ([@joostlek] - [#140277])
|
||||
- FGLair : Upgrade to ayla-iot-unofficial 1.4.7 ([@crevetor] - [#140296])
|
||||
- Bump pyheos to v1.0.3 ([@andrewsayre] - [#140310])
|
||||
- Bump ZHA to 0.0.52 ([@puddly] - [#140325])
|
||||
- Bump pydrawise to 2025.3.0 ([@dknowles2] - [#140330])
|
||||
- Bump teslemetry-stream ([@Bre77] - [#140335])
|
||||
- Fix no temperature unit in SmartThings ([@joostlek] - [#140363])
|
||||
- Fix double space quoting in WebDAV ([@jpbede] - [#140364])
|
||||
- Bump python-roborock to 2.12.2 ([@Lash-L] - [#140368])
|
||||
- Handle incomplete power consumption reports in SmartThings ([@joostlek] - [#140370])
|
||||
- Fix browsing Audible Favorites in Sonos ([@PeteRager] - [#140378])
|
||||
- Make sure SmartThings light can deal with unknown states ([@joostlek] - [#140190])
|
||||
- Delete subscription on shutdown of SmartThings ([@joostlek] - [#140135])
|
||||
|
||||
[#139499]: https://github.com/home-assistant/core/pull/139499
|
||||
[#139859]: https://github.com/home-assistant/core/pull/139859
|
||||
[#139862]: https://github.com/home-assistant/core/pull/139862
|
||||
[#139872]: https://github.com/home-assistant/core/pull/139872
|
||||
[#140061]: https://github.com/home-assistant/core/pull/140061
|
||||
[#140068]: https://github.com/home-assistant/core/pull/140068
|
||||
[#140069]: https://github.com/home-assistant/core/pull/140069
|
||||
[#140083]: https://github.com/home-assistant/core/pull/140083
|
||||
[#140091]: https://github.com/home-assistant/core/pull/140091
|
||||
[#140097]: https://github.com/home-assistant/core/pull/140097
|
||||
[#140101]: https://github.com/home-assistant/core/pull/140101
|
||||
[#140103]: https://github.com/home-assistant/core/pull/140103
|
||||
[#140110]: https://github.com/home-assistant/core/pull/140110
|
||||
[#140113]: https://github.com/home-assistant/core/pull/140113
|
||||
[#140119]: https://github.com/home-assistant/core/pull/140119
|
||||
[#140135]: https://github.com/home-assistant/core/pull/140135
|
||||
[#140139]: https://github.com/home-assistant/core/pull/140139
|
||||
[#140155]: https://github.com/home-assistant/core/pull/140155
|
||||
[#140190]: https://github.com/home-assistant/core/pull/140190
|
||||
[#140204]: https://github.com/home-assistant/core/pull/140204
|
||||
[#140213]: https://github.com/home-assistant/core/pull/140213
|
||||
[#140219]: https://github.com/home-assistant/core/pull/140219
|
||||
[#140230]: https://github.com/home-assistant/core/pull/140230
|
||||
[#140233]: https://github.com/home-assistant/core/pull/140233
|
||||
[#140234]: https://github.com/home-assistant/core/pull/140234
|
||||
[#140246]: https://github.com/home-assistant/core/pull/140246
|
||||
[#140260]: https://github.com/home-assistant/core/pull/140260
|
||||
[#140264]: https://github.com/home-assistant/core/pull/140264
|
||||
[#140267]: https://github.com/home-assistant/core/pull/140267
|
||||
[#140277]: https://github.com/home-assistant/core/pull/140277
|
||||
[#140296]: https://github.com/home-assistant/core/pull/140296
|
||||
[#140310]: https://github.com/home-assistant/core/pull/140310
|
||||
[#140325]: https://github.com/home-assistant/core/pull/140325
|
||||
[#140330]: https://github.com/home-assistant/core/pull/140330
|
||||
[#140335]: https://github.com/home-assistant/core/pull/140335
|
||||
[#140363]: https://github.com/home-assistant/core/pull/140363
|
||||
[#140364]: https://github.com/home-assistant/core/pull/140364
|
||||
[#140368]: https://github.com/home-assistant/core/pull/140368
|
||||
[#140370]: https://github.com/home-assistant/core/pull/140370
|
||||
[#140378]: https://github.com/home-assistant/core/pull/140378
|
||||
[@Bre77]: https://github.com/Bre77
|
||||
[@Diegorro98]: https://github.com/Diegorro98
|
||||
[@Lash-L]: https://github.com/Lash-L
|
||||
[@PeteRager]: https://github.com/PeteRager
|
||||
[@andrewsayre]: https://github.com/andrewsayre
|
||||
[@cereal2nd]: https://github.com/cereal2nd
|
||||
[@crevetor]: https://github.com/crevetor
|
||||
[@dknowles2]: https://github.com/dknowles2
|
||||
[@emontnemery]: https://github.com/emontnemery
|
||||
[@epenet]: https://github.com/epenet
|
||||
[@frenck]: https://github.com/frenck
|
||||
[@jbouwh]: https://github.com/jbouwh
|
||||
[@joostlek]: https://github.com/joostlek
|
||||
[@jpbede]: https://github.com/jpbede
|
||||
[@jrhillery]: https://github.com/jrhillery
|
||||
[@kbickar]: https://github.com/kbickar
|
||||
[@moosilauke18]: https://github.com/moosilauke18
|
||||
[@msm595]: https://github.com/msm595
|
||||
[@puddly]: https://github.com/puddly
|
||||
[@tr4nt0r]: https://github.com/tr4nt0r
|
||||
[@zxdavb]: https://github.com/zxdavb
|
||||
|
||||
### 2025.3.3 - March 14
|
||||
|
||||
- Fix bug with all Roborock maps being set to the wrong map when empty ([@Lash-L] - [#138493])
|
||||
- Bump pysuezV2 to 2.0.4 ([@jb101010-2] - [#139824])
|
||||
- Bump upb-lib to 0.6.1 ([@gwww] - [#140212])
|
||||
- Use only IPv4 for zeroconf in bluesound integration ([@LouisChrist] - [#140226])
|
||||
- Only do WebDAV path migration when path differs ([@jpbede] - [#140402])
|
||||
- Bump velbusaio to 2025.3.1 ([@cereal2nd] - [#140443])
|
||||
- Mark value in number.set_value action as required ([@joostlek] - [#140445])
|
||||
- Bump Tesla Fleet API to 0.9.13 ([@Bre77] - [#140485])
|
||||
- Update xknxproject to 3.8.2 ([@farmio] - [#140499])
|
||||
- Fix Shelly diagnostics for devices without WebSocket Outbound support ([@bieniu] - [#140501])
|
||||
- Fix windowShadeLevel capability in SmartThings ([@joostlek] - [#140552])
|
||||
- Set unit of measurement for SmartThings oven setpoint ([@joostlek] - [#140560])
|
||||
- Fix missing UnitOfPower.MILLIWATT in sensor and number allowed units ([@ashionky] - [#140567])
|
||||
|
||||
[#138493]: https://github.com/home-assistant/core/pull/138493
|
||||
[#139824]: https://github.com/home-assistant/core/pull/139824
|
||||
[#139859]: https://github.com/home-assistant/core/pull/139859
|
||||
[#140061]: https://github.com/home-assistant/core/pull/140061
|
||||
[#140212]: https://github.com/home-assistant/core/pull/140212
|
||||
[#140226]: https://github.com/home-assistant/core/pull/140226
|
||||
[#140392]: https://github.com/home-assistant/core/pull/140392
|
||||
[#140402]: https://github.com/home-assistant/core/pull/140402
|
||||
[#140443]: https://github.com/home-assistant/core/pull/140443
|
||||
[#140445]: https://github.com/home-assistant/core/pull/140445
|
||||
[#140485]: https://github.com/home-assistant/core/pull/140485
|
||||
[#140499]: https://github.com/home-assistant/core/pull/140499
|
||||
[#140501]: https://github.com/home-assistant/core/pull/140501
|
||||
[#140552]: https://github.com/home-assistant/core/pull/140552
|
||||
[#140560]: https://github.com/home-assistant/core/pull/140560
|
||||
[#140567]: https://github.com/home-assistant/core/pull/140567
|
||||
[@Bre77]: https://github.com/Bre77
|
||||
[@Lash-L]: https://github.com/Lash-L
|
||||
[@LouisChrist]: https://github.com/LouisChrist
|
||||
[@ashionky]: https://github.com/ashionky
|
||||
[@bieniu]: https://github.com/bieniu
|
||||
[@cereal2nd]: https://github.com/cereal2nd
|
||||
[@farmio]: https://github.com/farmio
|
||||
[@frenck]: https://github.com/frenck
|
||||
[@gwww]: https://github.com/gwww
|
||||
[@jb101010-2]: https://github.com/jb101010-2
|
||||
[@joostlek]: https://github.com/joostlek
|
||||
[@jpbede]: https://github.com/jpbede
|
||||
|
||||
### 2025.3.4 - March 21
|
||||
|
||||
- Fix initial fetch of Home Connect appliance data to handle API rate limit errors ([@Diegorro98] - [#139379])
|
||||
- Handle API rate limit error on Home Connect entities fetch ([@Diegorro98] - [#139384])
|
||||
- Album art not available for Sonos media library favorites ([@PeteRager] - [#140557])
|
||||
- Change max ICP value to fixed value for Wallbox Integration ([@hesselonline] - [#140592])
|
||||
- Add 700 RPM option to washer spin speed options at Home Connect ([@Diegorro98] - [#140607])
|
||||
- Handle non documented options at Home Connect select entities ([@Diegorro98] - [#140608])
|
||||
- Fix optional password in Velbus config flow ([@cereal2nd] - [#140615])
|
||||
- Make Oven setpoint follow temperature UoM in SmartThings ([@joostlek] - [#140666])
|
||||
- Fix Elk-M1 missing TLS 1.2 check ([@gwww] - [#140672])
|
||||
- Bump PySwitchBot to 0.57.1 ([@bdraco] - [#140681])
|
||||
- Check Celsius in SmartThings oven setpoint ([@joostlek] - [#140687])
|
||||
- Fix broken core integration Smart Meter Texas by switching it to use HA's SSL Context ([@adamfeldman] - [#140694])
|
||||
- Don't reload onedrive on options flow ([@zweckj] - [#140712])
|
||||
- Bump pySmartThings to 2.7.4 ([@joostlek] - [#140720])
|
||||
- Fix SmartThings ACs without supported AC modes ([@joostlek] - [#140744])
|
||||
- Bump pylamarzocco to 1.4.9 ([@zweckj] - [#140916])
|
||||
- Log SmartThings subscription error on exception ([@joostlek] - [#140939])
|
||||
- Ensure file is correctly uploaded by the GenAI SDK ([@IvanLH] - [#140969])
|
||||
- Reolink fix playback headers ([@starkillerOG] - [#141015])
|
||||
- Fix some Home Connect options keys ([@Diegorro98] - [#141023])
|
||||
- Bump ZHA to 0.0.53 ([@puddly] - [#141025])
|
||||
- Bump Python-Snoo to 0.6.3 ([@Lash-L] - [#140628])
|
||||
- Bump python-snoo to 0.6.4 ([@Lash-L] - [#141030])
|
||||
- Improve Home Connect appliances test fixture ([@MartinHjelmare] - [#139787])
|
||||
|
||||
[#139379]: https://github.com/home-assistant/core/pull/139379
|
||||
[#139384]: https://github.com/home-assistant/core/pull/139384
|
||||
[#139787]: https://github.com/home-assistant/core/pull/139787
|
||||
[#139859]: https://github.com/home-assistant/core/pull/139859
|
||||
[#140061]: https://github.com/home-assistant/core/pull/140061
|
||||
[#140392]: https://github.com/home-assistant/core/pull/140392
|
||||
[#140557]: https://github.com/home-assistant/core/pull/140557
|
||||
[#140583]: https://github.com/home-assistant/core/pull/140583
|
||||
[#140592]: https://github.com/home-assistant/core/pull/140592
|
||||
[#140607]: https://github.com/home-assistant/core/pull/140607
|
||||
[#140608]: https://github.com/home-assistant/core/pull/140608
|
||||
[#140615]: https://github.com/home-assistant/core/pull/140615
|
||||
[#140628]: https://github.com/home-assistant/core/pull/140628
|
||||
[#140666]: https://github.com/home-assistant/core/pull/140666
|
||||
[#140672]: https://github.com/home-assistant/core/pull/140672
|
||||
[#140681]: https://github.com/home-assistant/core/pull/140681
|
||||
[#140687]: https://github.com/home-assistant/core/pull/140687
|
||||
[#140694]: https://github.com/home-assistant/core/pull/140694
|
||||
[#140712]: https://github.com/home-assistant/core/pull/140712
|
||||
[#140720]: https://github.com/home-assistant/core/pull/140720
|
||||
[#140744]: https://github.com/home-assistant/core/pull/140744
|
||||
[#140916]: https://github.com/home-assistant/core/pull/140916
|
||||
[#140939]: https://github.com/home-assistant/core/pull/140939
|
||||
[#140969]: https://github.com/home-assistant/core/pull/140969
|
||||
[#141015]: https://github.com/home-assistant/core/pull/141015
|
||||
[#141023]: https://github.com/home-assistant/core/pull/141023
|
||||
[#141025]: https://github.com/home-assistant/core/pull/141025
|
||||
[#141030]: https://github.com/home-assistant/core/pull/141030
|
||||
[@Diegorro98]: https://github.com/Diegorro98
|
||||
[@IvanLH]: https://github.com/IvanLH
|
||||
[@Lash-L]: https://github.com/Lash-L
|
||||
[@MartinHjelmare]: https://github.com/MartinHjelmare
|
||||
[@PeteRager]: https://github.com/PeteRager
|
||||
[@adamfeldman]: https://github.com/adamfeldman
|
||||
[@bdraco]: https://github.com/bdraco
|
||||
[@cereal2nd]: https://github.com/cereal2nd
|
||||
[@frenck]: https://github.com/frenck
|
||||
[@gwww]: https://github.com/gwww
|
||||
[@hesselonline]: https://github.com/hesselonline
|
||||
[@joostlek]: https://github.com/joostlek
|
||||
[@puddly]: https://github.com/puddly
|
||||
[@starkillerOG]: https://github.com/starkillerOG
|
||||
[@zweckj]: https://github.com/zweckj
|
||||
|
||||
## Need help? Join the community!
|
||||
|
||||
Home Assistant has a great community of users who are all more than willing
|
||||
|
78
source/_posts/2025-03-10-matter-certification.markdown
Normal file
@ -0,0 +1,78 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Home Assistant officially Matters"
|
||||
description: "Home Assistant gains certification, but also a powerful tool for any open source project"
|
||||
date: 2025-03-10 00:00:01
|
||||
date_formatted: "March 10, 2025"
|
||||
author: Marcel van der Veldt
|
||||
comments: true
|
||||
categories:
|
||||
- Announcements
|
||||
- Matter
|
||||
og_image: /images/blog/2025-03-matter-certification/art.jpg
|
||||
---
|
||||
|
||||
<p><img src='/images/blog/2025-03-matter-certification/art.jpg' alt="Home Assistant is officially matter certified" class='no-shadow' /></p>
|
||||
|
||||
Matter in Home Assistant has been officially certified! 🎉 The Connectivity Standards Alliance (CSA) has certified [Home Assistant](https://csa-iot.org/csa_product/home-assistant/) and the [Open Home Foundation Matter Server](https://csa-iot.org/csa_product/open-home-foundation-matter-server/), the first open-source project to receive this certification. Certification is proof that open source projects can sit among, or even above, big tech when it comes to providing the best smart home experience.
|
||||
|
||||
Home Assistant, as part of the [Open Home Foundation](https://www.openhomefoundation.org/), strongly believes in open standards. They embody our values of choice, privacy, and sustainability in the smart home. When a standard is well supported, consumers get access to a wide range of smart home devices that should work far into the future, which is great for sustainability. Best of all, they work locally, keeping your smart home data in your home.
|
||||
|
||||
All these benefits led us to include open standards certification [in our roadmap](/blog/2024/06/12/roadmap-2024h1/#open-standards-certified-quality). Home Assistant's implementations of Matter, Zigbee, and Z-Wave are already industry-leading, so it only makes sense to clearly signal and give users peace of mind that we provide true compatibility. This most recent certification is not just big for Home Assistant, but read on to see how it also helps any open source project looking to use Matter.
|
||||
|
||||
<!--more-->
|
||||
|
||||
## Matter matters
|
||||
|
||||
<p class="img"><lite-youtube videoid="rEugjMk-4II" videotitle="State of Matter 2024"></lite-youtube>Our live stream from 2024 explains Matter in depth</p>
|
||||
|
||||
Matter is the latest smart home open standard, which is looking to connect and control smart home devices regardless of their manufacturer or which ecosystem you want to control them from. Like the other open standards we support, it can be controlled fully locally, meaning these devices are not reliant on the cloud to work. The Connectivity Standards Alliance (CSA) is the body behind the Matter standard, representing its many members. They certify devices and set the rules on how they work together.
|
||||
|
||||
If you're not familiar with Matter, I'm not surprised. Though its adoption is growing, it's only a [couple of years old](https://csa-iot.org/newsroom/matter-arrives/). The most important companies in the smart home space have joined this standard, but support is still growing and becoming more consistent. If it fulfills its promise, any smart home product should work with your ecosystem of choice, and that makes us optimistic about its future.
|
||||
|
||||
More and more Matter devices are entering the market, and if you're buying new smart devices, it will just be a matter of time 😉 before you own one. To this point, Matter devices are even a part of our [Works With Home Assistant](https://partner.home-assistant.io/) program. [Aqara was the first](/blog/2024/09/03/aqara-joins-works-with-home-assistant/) to join our program with Matter devices, and we tested these devices ourselves to ensure they give the best experience possible in Home Assistant. This year, we expect many more Matter devices to join the program, and we should have more updates soon.
|
||||
|
||||
From a technical perspective, Matter is really interesting---it can work with different smart home systems at the same time. It also keeps the way devices connect and communicate separate, allowing it to connect to devices over Wi-Fi, Ethernet, and [Thread](/integrations/thread/) (a new mesh network technology for smart devices). Read our [State of Matter blog](/blog/2024/01/25/matter-livestream-blog/) or watch Paulus' appearance on [the Vergecast Matter Holiday Spec-Tacular](https://youtu.be/0Y75XEXAXfY?si=nSDpP6THkWhkARuc&t=3493) for a deeper dive into the standard.
|
||||
|
||||
## What certification brings
|
||||
|
||||
<p class="img"><img src='/images/blog/2025-03-matter-certification/ha-matter.png' alt="Home Assistant Matter certification"/>Well, this is a bit... awesome</p>
|
||||
|
||||
First and foremost, from a usability perspective, nothing will change for you. We are consistently the first to adopt the newest Matter versions, currently providing the highest version available. We'll keep on improving the Matter Server and the Matter integration at the same pace, ensuring that all device types in the Matter spec will work perfectly with Home Assistant---just from now on it will come with this certification badge.
|
||||
|
||||
The [Open Home Foundation Matter Server](https://csa-iot.org/csa_product/open-home-foundation-matter-server/) is now an officially trusted/certified software component, while [Home Assistant](https://csa-iot.org/csa_product/home-assistant/) is a certified "User Interface Component" (more on this distinction below). This allows us to clearly show this with a logo, along with being listed on the Matter website. For new Home Assistant users, this helps build confidence, knowing it is a supported way to use Matter. Similarly, for brands that don't know much about Home Assistant, these references can be surprisingly helpful, and it's our goal to have more brands target Home Assistant in their development. Another handy part of being certified is getting more access to pre-test new devices and SDK revisions, which will help development going forward.
|
||||
|
||||
### Why two certifications (and the server add-on)
|
||||
|
||||
<p class="img"><img src='/images/blog/2025-03-matter-certification/ohf-matter.png' alt="Open Home Foundation Matter Server is certified"/>So much fun we did it twice</p>
|
||||
|
||||
If you're confused why we certified both Home Assistant and Open Home Foundation Matter Server, there are a couple of legal/procedural reasons, but it comes with some useful benefits. We certified the server as a standalone component to allow any project to use it. Each project that uses it, including Home Assistant, will have to go through a certification process to acknowledge that it uses a certified component as a "User Interface Component". Certification for the Open Home Foundation Matter Server means it properly connects and communicates with other Matter devices, while certification for Home Assistant is about being able to display the Matter trademark.
|
||||
|
||||
This separation is important because it means that we won't need to go through recertification every time we update Home Assistant. This way we can keep the Matter-related backend isolated in both a software and certification sense. This is also why we will need to continue to have the Open Home Foundation Matter Server as an add-on, and it cannot be built into [Home Assistant Core](/installation/#advanced-installation-methods).
|
||||
|
||||
## The road to certification
|
||||
|
||||
Becoming Matter certified was not easy. When we started certification, the process was tooled up to test and certify devices, not Matter controllers, let alone completely software-based (and open source) controllers. We chose to collaborate with [Resillion](https://www.resillion.com/services/conformance-interoperability/wireless-product-testing/matter-certification/) for our certification. They are a testing and certification house based in Belgium with a lot of experience certifying Matter products. They do the formal testing and submit the results to the CSA. Together, we collaborated to write thousands of lines of test scripts, ensuring that as many test cases as possible were automated.
|
||||
|
||||
<p class="img"><img src='/images/blog/2025-03-matter-certification/lab.jpg' alt="Marcel van der Veldt at the Resillion lab"/>My visit to Resillion's lab, I brought my own lab coat</p>
|
||||
|
||||
We really appreciate Resillion for taking on this challenge. Not only were we the first controller they certified, but we also went for all the device types in the Matter 1.3 specification. This was a huge effort for all involved, but now that these test scripts exist, they only require minor updates for each new version; we can reuse them whenever we need to recertify.
|
||||
|
||||
<div class="alert">
|
||||
<p>“At Resillion, we strongly support interoperability in connected home technology, and assure, secure and innovate to help make this technology work for everyone. For us, this was not only a fantastic way to contribute to the Home Assistant open-source project, but also upgrade our own Home Assistant instances with Matter, as enthusiasts of the project running active instances of HA in our own homes.</p>
|
||||
<p>“Working on a controller utilizing the full Matter 1.3 feature set presents a great opportunity to advance HA and Matter, and we look forward to supporting the developed codebase and further contributing to an open smart home.”</p>
|
||||
<em style="text-align: right; display: block;">- Jan Claes, Head of testing services - C&I Global, Resillion</em>
|
||||
</div>
|
||||
|
||||
This is another example of something that's only possible because of the support we get from users subscribing to [Home Assistant Cloud](/cloud/). Certification would be very difficult for any other open-source project, but we have the funding first to build a great server and also to pay for the required testing. Now this open source implementation exists and can be used by any project looking to add Matter.
|
||||
|
||||
## The future Matters
|
||||
|
||||
As we continue improving our Matter implementation, the Matter standard itself is also evolving. Even with the progress it has made in the past year, there are still challenges to overcome. Matter is completely built on IPv6, and its rollout is uncovering the poor state of IPv6 support in today's network hardware. Also, as it's a complicated standard, it can be difficult to explain concepts like Thread and Fabrics to the average user, but hopefully users won't need to be experts in the future to get the most out of Matter in their homes.
|
||||
|
||||
Some might call Matter the smart home standard to replace all others, but we believe that there's room for multiple standards, each providing its own unique benefits. We are focused on providing the highest support for all local smart home standards ([certifying other standards is on our roadmap](/blog/2024/11/15/roadmap-2024h2/#open-protocols)) and ensuring they work far into the future, which is great for consumer choice and sustainability.
|
||||
|
||||
As Home Assistant grows and takes important steps like certification, the more credibility we gain in the industry---it's a virtuous circle that helps us and Open Home projects continuously improve. Thanks for your support and helping us make this possible 🙏.
|
||||
|
||||
**Try the Matter in Home Assistant today:**
|
||||
[<img src='https://my.home-assistant.io/badges/config_flow_start.svg' style='border: 0;box-shadow: none;' alt="!Open your Home Assistant instance and show the dashboard of an add-on.">](https://my.home-assistant.io/redirect/config_flow_start?domain=matter)
|
@ -1162,6 +1162,306 @@ For a summary in a more readable format:
|
||||
- Bump intents to 2025.3.5 ([@synesthesiam] - [#139851])
|
||||
- Fix no disabled capabilities in SmartThings ([@joostlek] - [#139860])
|
||||
|
||||
## Release 2025.3.1 - March 7
|
||||
|
||||
- Check support for demand load control in SmartThings AC ([@Ishima] - [#139616])
|
||||
- Fix Unit of Measurement for Squeezebox duration sensor entity on LMS service ([@peteS-UK] - [#139861])
|
||||
- Trim the Schema allowed keys to match the Public Gemini API docs. ([@IvanLH] - [#139876])
|
||||
- Bump thermobeacon-ble to 0.8.1 ([@bdraco] - [#139919])
|
||||
- Deduplicate climate modes in SmartThings ([@joostlek] - [#139930])
|
||||
- Check if the unit of measurement is valid before creating the entity ([@jbouwh] - [#139932])
|
||||
- Bump pysmartthings to 2.6.1 ([@joostlek] - [#139936])
|
||||
- Bump aiowebdav2 to 0.4.0 ([@jpbede] - [#139938])
|
||||
- Add config entry level diagnostics to SmartThings ([@joostlek] - [#139939])
|
||||
- Set content length when uploading files to WebDAV ([@jpbede] - [#139950])
|
||||
- Bump to python-snoo 0.6.1 ([@Lash-L] - [#139954])
|
||||
- Fix SmartThings fan ([@joostlek] - [#139962])
|
||||
- Update frontend to 20250306.0 ([@bramkragten] - [#139965])
|
||||
- Fix SmartThings dust sensor UoM ([@joostlek] - [#139977])
|
||||
- Bump nexia to 2.2.2 ([@bdraco] - [#139986])
|
||||
- Bump aiowebdav2 to 0.4.1 ([@jpbede] - [#139988])
|
||||
- Correctly retrieve only loaded Google Generative AI config_entries ([@IvanLH] - [#139999])
|
||||
- Fix regression to evohome debug logging ([@zxdavb] - [#140000])
|
||||
- Check operation state on Home Connect program sensor update ([@Diegorro98] - [#140011])
|
||||
- Bump aiohomeconnect to 0.16.3 ([@MartinHjelmare] - [#140014])
|
||||
- Fix powerwall 0% in Tessie and Tesla Fleet ([@Bre77] - [#140017])
|
||||
- Fix shift state default in Teslemetry and Tessie ([@Bre77] - [#140018])
|
||||
- Add description for HomematicIP HCU1 in homematicip_cloud setup config flow ([@hahn-th] - [#140025])
|
||||
- Fix evohome to gracefully handle null schedules ([@zxdavb] - [#140036])
|
||||
- Fix SmartThings disabling working capabilities ([@joostlek] - [#140039])
|
||||
- Fix SmartThings thermostat climate check ([@joostlek] - [#140046])
|
||||
- Bump pysmartthings to 2.7.0 ([@joostlek] - [#140047])
|
||||
- Only keep valid powerConsumptionReports in SmartThings ([@joostlek] - [#140049])
|
||||
- Bump py-synologydsm-api to 2.7.1 ([@mib1185] - [#140052])
|
||||
- Restore SmartThings button event ([@joostlek] - [#140044])
|
||||
|
||||
[#139616]: https://github.com/home-assistant/core/pull/139616
|
||||
[#139859]: https://github.com/home-assistant/core/pull/139859
|
||||
[#139861]: https://github.com/home-assistant/core/pull/139861
|
||||
[#139876]: https://github.com/home-assistant/core/pull/139876
|
||||
[#139919]: https://github.com/home-assistant/core/pull/139919
|
||||
[#139930]: https://github.com/home-assistant/core/pull/139930
|
||||
[#139932]: https://github.com/home-assistant/core/pull/139932
|
||||
[#139936]: https://github.com/home-assistant/core/pull/139936
|
||||
[#139938]: https://github.com/home-assistant/core/pull/139938
|
||||
[#139939]: https://github.com/home-assistant/core/pull/139939
|
||||
[#139950]: https://github.com/home-assistant/core/pull/139950
|
||||
[#139954]: https://github.com/home-assistant/core/pull/139954
|
||||
[#139962]: https://github.com/home-assistant/core/pull/139962
|
||||
[#139965]: https://github.com/home-assistant/core/pull/139965
|
||||
[#139977]: https://github.com/home-assistant/core/pull/139977
|
||||
[#139986]: https://github.com/home-assistant/core/pull/139986
|
||||
[#139988]: https://github.com/home-assistant/core/pull/139988
|
||||
[#139999]: https://github.com/home-assistant/core/pull/139999
|
||||
[#140000]: https://github.com/home-assistant/core/pull/140000
|
||||
[#140011]: https://github.com/home-assistant/core/pull/140011
|
||||
[#140014]: https://github.com/home-assistant/core/pull/140014
|
||||
[#140017]: https://github.com/home-assistant/core/pull/140017
|
||||
[#140018]: https://github.com/home-assistant/core/pull/140018
|
||||
[#140025]: https://github.com/home-assistant/core/pull/140025
|
||||
[#140036]: https://github.com/home-assistant/core/pull/140036
|
||||
[#140039]: https://github.com/home-assistant/core/pull/140039
|
||||
[#140044]: https://github.com/home-assistant/core/pull/140044
|
||||
[#140046]: https://github.com/home-assistant/core/pull/140046
|
||||
[#140047]: https://github.com/home-assistant/core/pull/140047
|
||||
[#140049]: https://github.com/home-assistant/core/pull/140049
|
||||
[#140052]: https://github.com/home-assistant/core/pull/140052
|
||||
[@Bre77]: https://github.com/Bre77
|
||||
[@Diegorro98]: https://github.com/Diegorro98
|
||||
[@Ishima]: https://github.com/Ishima
|
||||
[@IvanLH]: https://github.com/IvanLH
|
||||
[@Lash-L]: https://github.com/Lash-L
|
||||
[@MartinHjelmare]: https://github.com/MartinHjelmare
|
||||
[@bdraco]: https://github.com/bdraco
|
||||
[@bramkragten]: https://github.com/bramkragten
|
||||
[@frenck]: https://github.com/frenck
|
||||
[@hahn-th]: https://github.com/hahn-th
|
||||
[@jbouwh]: https://github.com/jbouwh
|
||||
[@joostlek]: https://github.com/joostlek
|
||||
[@jpbede]: https://github.com/jpbede
|
||||
[@mib1185]: https://github.com/mib1185
|
||||
[@peteS-UK]: https://github.com/peteS-UK
|
||||
[@zxdavb]: https://github.com/zxdavb
|
||||
|
||||
## Release 2025.3.2 - March 11
|
||||
|
||||
- Don't allow creating backups if Home Assistant is not running ([@emontnemery] - [#139499])
|
||||
- Bump govee_ble to 0.43.1 ([@moosilauke18] - [#139862])
|
||||
- Label emergency heat switch ([@jrhillery] - [#139872])
|
||||
- Bump sense-energy lib to 0.13.7 ([@kbickar] - [#140068])
|
||||
- Update jinja to 3.1.6 ([@frenck] - [#140069])
|
||||
- Update evohome-async to 1.0.3 ([@zxdavb] - [#140083])
|
||||
- Fix HEOS discovery error when previously ignored ([@andrewsayre] - [#140091])
|
||||
- Map prewash job state in SmartThings ([@joostlek] - [#140097])
|
||||
- Check support for thermostat operating state in SmartThings ([@joostlek] - [#140103])
|
||||
- Handle None options in SmartThings ([@joostlek] - [#140110])
|
||||
- Fix MQTT JSON light not reporting color temp status if color is not supported ([@jbouwh] - [#140113])
|
||||
- Fix HEOS user initiated setup when discovery is waiting confirmation ([@andrewsayre] - [#140119])
|
||||
- Support null supported Thermostat modes in SmartThings ([@joostlek] - [#140101])
|
||||
- Set device class for Oven Completion time in SmartThings ([@joostlek] - [#140139])
|
||||
- Revert "Check if the unit of measurement is valid before creating the entity" ([@jbouwh] - [#140155])
|
||||
- Fix the order of the group members attribute of the Music Assistant integration ([@msm595] - [#140204])
|
||||
- Fix events without user in Bring integration ([@tr4nt0r] - [#140213])
|
||||
- Log broad exception in Electricity Maps config flow ([@jpbede] - [#140219])
|
||||
- Bump evohome-async to 1.0.4 to fix #140194 ([@zxdavb] - [#140230])
|
||||
- Refresh Home Connect token during config entry setup ([@Diegorro98] - [#140233])
|
||||
- Add 900 RPM option to washer spin speed options at Home Connect ([@Diegorro98] - [#140234])
|
||||
- Fix todo tool broken with Gemini 2.0 models. ([@Lash-L] - [#140246])
|
||||
- Fix version not always available in onewire ([@epenet] - [#140260])
|
||||
- Fix `client_id` not generated when connecting to the MQTT broker ([@jbouwh] - [#140264])
|
||||
- Bump velbusaio to 2025.3.0 ([@cereal2nd] - [#140267])
|
||||
- Fix dryer operating state in SmartThings ([@joostlek] - [#140277])
|
||||
- FGLair : Upgrade to ayla-iot-unofficial 1.4.7 ([@crevetor] - [#140296])
|
||||
- Bump pyheos to v1.0.3 ([@andrewsayre] - [#140310])
|
||||
- Bump ZHA to 0.0.52 ([@puddly] - [#140325])
|
||||
- Bump pydrawise to 2025.3.0 ([@dknowles2] - [#140330])
|
||||
- Bump teslemetry-stream ([@Bre77] - [#140335])
|
||||
- Fix no temperature unit in SmartThings ([@joostlek] - [#140363])
|
||||
- Fix double space quoting in WebDAV ([@jpbede] - [#140364])
|
||||
- Bump python-roborock to 2.12.2 ([@Lash-L] - [#140368])
|
||||
- Handle incomplete power consumption reports in SmartThings ([@joostlek] - [#140370])
|
||||
- Fix browsing Audible Favorites in Sonos ([@PeteRager] - [#140378])
|
||||
- Make sure SmartThings light can deal with unknown states ([@joostlek] - [#140190])
|
||||
- Delete subscription on shutdown of SmartThings ([@joostlek] - [#140135])
|
||||
|
||||
[#139499]: https://github.com/home-assistant/core/pull/139499
|
||||
[#139859]: https://github.com/home-assistant/core/pull/139859
|
||||
[#139862]: https://github.com/home-assistant/core/pull/139862
|
||||
[#139872]: https://github.com/home-assistant/core/pull/139872
|
||||
[#140061]: https://github.com/home-assistant/core/pull/140061
|
||||
[#140068]: https://github.com/home-assistant/core/pull/140068
|
||||
[#140069]: https://github.com/home-assistant/core/pull/140069
|
||||
[#140083]: https://github.com/home-assistant/core/pull/140083
|
||||
[#140091]: https://github.com/home-assistant/core/pull/140091
|
||||
[#140097]: https://github.com/home-assistant/core/pull/140097
|
||||
[#140101]: https://github.com/home-assistant/core/pull/140101
|
||||
[#140103]: https://github.com/home-assistant/core/pull/140103
|
||||
[#140110]: https://github.com/home-assistant/core/pull/140110
|
||||
[#140113]: https://github.com/home-assistant/core/pull/140113
|
||||
[#140119]: https://github.com/home-assistant/core/pull/140119
|
||||
[#140135]: https://github.com/home-assistant/core/pull/140135
|
||||
[#140139]: https://github.com/home-assistant/core/pull/140139
|
||||
[#140155]: https://github.com/home-assistant/core/pull/140155
|
||||
[#140190]: https://github.com/home-assistant/core/pull/140190
|
||||
[#140204]: https://github.com/home-assistant/core/pull/140204
|
||||
[#140213]: https://github.com/home-assistant/core/pull/140213
|
||||
[#140219]: https://github.com/home-assistant/core/pull/140219
|
||||
[#140230]: https://github.com/home-assistant/core/pull/140230
|
||||
[#140233]: https://github.com/home-assistant/core/pull/140233
|
||||
[#140234]: https://github.com/home-assistant/core/pull/140234
|
||||
[#140246]: https://github.com/home-assistant/core/pull/140246
|
||||
[#140260]: https://github.com/home-assistant/core/pull/140260
|
||||
[#140264]: https://github.com/home-assistant/core/pull/140264
|
||||
[#140267]: https://github.com/home-assistant/core/pull/140267
|
||||
[#140277]: https://github.com/home-assistant/core/pull/140277
|
||||
[#140296]: https://github.com/home-assistant/core/pull/140296
|
||||
[#140310]: https://github.com/home-assistant/core/pull/140310
|
||||
[#140325]: https://github.com/home-assistant/core/pull/140325
|
||||
[#140330]: https://github.com/home-assistant/core/pull/140330
|
||||
[#140335]: https://github.com/home-assistant/core/pull/140335
|
||||
[#140363]: https://github.com/home-assistant/core/pull/140363
|
||||
[#140364]: https://github.com/home-assistant/core/pull/140364
|
||||
[#140368]: https://github.com/home-assistant/core/pull/140368
|
||||
[#140370]: https://github.com/home-assistant/core/pull/140370
|
||||
[#140378]: https://github.com/home-assistant/core/pull/140378
|
||||
[@Bre77]: https://github.com/Bre77
|
||||
[@Diegorro98]: https://github.com/Diegorro98
|
||||
[@Lash-L]: https://github.com/Lash-L
|
||||
[@PeteRager]: https://github.com/PeteRager
|
||||
[@andrewsayre]: https://github.com/andrewsayre
|
||||
[@cereal2nd]: https://github.com/cereal2nd
|
||||
[@crevetor]: https://github.com/crevetor
|
||||
[@dknowles2]: https://github.com/dknowles2
|
||||
[@emontnemery]: https://github.com/emontnemery
|
||||
[@epenet]: https://github.com/epenet
|
||||
[@frenck]: https://github.com/frenck
|
||||
[@jbouwh]: https://github.com/jbouwh
|
||||
[@joostlek]: https://github.com/joostlek
|
||||
[@jpbede]: https://github.com/jpbede
|
||||
[@jrhillery]: https://github.com/jrhillery
|
||||
[@kbickar]: https://github.com/kbickar
|
||||
[@moosilauke18]: https://github.com/moosilauke18
|
||||
[@msm595]: https://github.com/msm595
|
||||
[@puddly]: https://github.com/puddly
|
||||
[@tr4nt0r]: https://github.com/tr4nt0r
|
||||
[@zxdavb]: https://github.com/zxdavb
|
||||
|
||||
## Release 2025.3.3 - March 14
|
||||
|
||||
- Fix bug with all Roborock maps being set to the wrong map when empty ([@Lash-L] - [#138493])
|
||||
- Bump pysuezV2 to 2.0.4 ([@jb101010-2] - [#139824])
|
||||
- Bump upb-lib to 0.6.1 ([@gwww] - [#140212])
|
||||
- Use only IPv4 for zeroconf in bluesound integration ([@LouisChrist] - [#140226])
|
||||
- Only do WebDAV path migration when path differs ([@jpbede] - [#140402])
|
||||
- Bump velbusaio to 2025.3.1 ([@cereal2nd] - [#140443])
|
||||
- Mark value in number.set_value action as required ([@joostlek] - [#140445])
|
||||
- Bump Tesla Fleet API to 0.9.13 ([@Bre77] - [#140485])
|
||||
- Update xknxproject to 3.8.2 ([@farmio] - [#140499])
|
||||
- Fix Shelly diagnostics for devices without WebSocket Outbound support ([@bieniu] - [#140501])
|
||||
- Fix windowShadeLevel capability in SmartThings ([@joostlek] - [#140552])
|
||||
- Set unit of measurement for SmartThings oven setpoint ([@joostlek] - [#140560])
|
||||
- Fix missing UnitOfPower.MILLIWATT in sensor and number allowed units ([@ashionky] - [#140567])
|
||||
|
||||
[#138493]: https://github.com/home-assistant/core/pull/138493
|
||||
[#139824]: https://github.com/home-assistant/core/pull/139824
|
||||
[#139859]: https://github.com/home-assistant/core/pull/139859
|
||||
[#140061]: https://github.com/home-assistant/core/pull/140061
|
||||
[#140212]: https://github.com/home-assistant/core/pull/140212
|
||||
[#140226]: https://github.com/home-assistant/core/pull/140226
|
||||
[#140392]: https://github.com/home-assistant/core/pull/140392
|
||||
[#140402]: https://github.com/home-assistant/core/pull/140402
|
||||
[#140443]: https://github.com/home-assistant/core/pull/140443
|
||||
[#140445]: https://github.com/home-assistant/core/pull/140445
|
||||
[#140485]: https://github.com/home-assistant/core/pull/140485
|
||||
[#140499]: https://github.com/home-assistant/core/pull/140499
|
||||
[#140501]: https://github.com/home-assistant/core/pull/140501
|
||||
[#140552]: https://github.com/home-assistant/core/pull/140552
|
||||
[#140560]: https://github.com/home-assistant/core/pull/140560
|
||||
[#140567]: https://github.com/home-assistant/core/pull/140567
|
||||
[@Bre77]: https://github.com/Bre77
|
||||
[@Lash-L]: https://github.com/Lash-L
|
||||
[@LouisChrist]: https://github.com/LouisChrist
|
||||
[@ashionky]: https://github.com/ashionky
|
||||
[@bieniu]: https://github.com/bieniu
|
||||
[@cereal2nd]: https://github.com/cereal2nd
|
||||
[@farmio]: https://github.com/farmio
|
||||
[@frenck]: https://github.com/frenck
|
||||
[@gwww]: https://github.com/gwww
|
||||
[@jb101010-2]: https://github.com/jb101010-2
|
||||
[@joostlek]: https://github.com/joostlek
|
||||
[@jpbede]: https://github.com/jpbede
|
||||
|
||||
## Release 2025.3.4 - March 21
|
||||
|
||||
- Fix initial fetch of Home Connect appliance data to handle API rate limit errors ([@Diegorro98] - [#139379])
|
||||
- Handle API rate limit error on Home Connect entities fetch ([@Diegorro98] - [#139384])
|
||||
- Album art not available for Sonos media library favorites ([@PeteRager] - [#140557])
|
||||
- Change max ICP value to fixed value for Wallbox Integration ([@hesselonline] - [#140592])
|
||||
- Add 700 RPM option to washer spin speed options at Home Connect ([@Diegorro98] - [#140607])
|
||||
- Handle non documented options at Home Connect select entities ([@Diegorro98] - [#140608])
|
||||
- Fix optional password in Velbus config flow ([@cereal2nd] - [#140615])
|
||||
- Make Oven setpoint follow temperature UoM in SmartThings ([@joostlek] - [#140666])
|
||||
- Fix Elk-M1 missing TLS 1.2 check ([@gwww] - [#140672])
|
||||
- Bump PySwitchBot to 0.57.1 ([@bdraco] - [#140681])
|
||||
- Check Celsius in SmartThings oven setpoint ([@joostlek] - [#140687])
|
||||
- Fix broken core integration Smart Meter Texas by switching it to use HA's SSL Context ([@adamfeldman] - [#140694])
|
||||
- Don't reload onedrive on options flow ([@zweckj] - [#140712])
|
||||
- Bump pySmartThings to 2.7.4 ([@joostlek] - [#140720])
|
||||
- Fix SmartThings ACs without supported AC modes ([@joostlek] - [#140744])
|
||||
- Bump pylamarzocco to 1.4.9 ([@zweckj] - [#140916])
|
||||
- Log SmartThings subscription error on exception ([@joostlek] - [#140939])
|
||||
- Ensure file is correctly uploaded by the GenAI SDK ([@IvanLH] - [#140969])
|
||||
- Reolink fix playback headers ([@starkillerOG] - [#141015])
|
||||
- Fix some Home Connect options keys ([@Diegorro98] - [#141023])
|
||||
- Bump ZHA to 0.0.53 ([@puddly] - [#141025])
|
||||
- Bump Python-Snoo to 0.6.3 ([@Lash-L] - [#140628])
|
||||
- Bump python-snoo to 0.6.4 ([@Lash-L] - [#141030])
|
||||
- Improve Home Connect appliances test fixture ([@MartinHjelmare] - [#139787])
|
||||
|
||||
[#139379]: https://github.com/home-assistant/core/pull/139379
|
||||
[#139384]: https://github.com/home-assistant/core/pull/139384
|
||||
[#139787]: https://github.com/home-assistant/core/pull/139787
|
||||
[#139859]: https://github.com/home-assistant/core/pull/139859
|
||||
[#140061]: https://github.com/home-assistant/core/pull/140061
|
||||
[#140392]: https://github.com/home-assistant/core/pull/140392
|
||||
[#140557]: https://github.com/home-assistant/core/pull/140557
|
||||
[#140583]: https://github.com/home-assistant/core/pull/140583
|
||||
[#140592]: https://github.com/home-assistant/core/pull/140592
|
||||
[#140607]: https://github.com/home-assistant/core/pull/140607
|
||||
[#140608]: https://github.com/home-assistant/core/pull/140608
|
||||
[#140615]: https://github.com/home-assistant/core/pull/140615
|
||||
[#140628]: https://github.com/home-assistant/core/pull/140628
|
||||
[#140666]: https://github.com/home-assistant/core/pull/140666
|
||||
[#140672]: https://github.com/home-assistant/core/pull/140672
|
||||
[#140681]: https://github.com/home-assistant/core/pull/140681
|
||||
[#140687]: https://github.com/home-assistant/core/pull/140687
|
||||
[#140694]: https://github.com/home-assistant/core/pull/140694
|
||||
[#140712]: https://github.com/home-assistant/core/pull/140712
|
||||
[#140720]: https://github.com/home-assistant/core/pull/140720
|
||||
[#140744]: https://github.com/home-assistant/core/pull/140744
|
||||
[#140916]: https://github.com/home-assistant/core/pull/140916
|
||||
[#140939]: https://github.com/home-assistant/core/pull/140939
|
||||
[#140969]: https://github.com/home-assistant/core/pull/140969
|
||||
[#141015]: https://github.com/home-assistant/core/pull/141015
|
||||
[#141023]: https://github.com/home-assistant/core/pull/141023
|
||||
[#141025]: https://github.com/home-assistant/core/pull/141025
|
||||
[#141030]: https://github.com/home-assistant/core/pull/141030
|
||||
[@Diegorro98]: https://github.com/Diegorro98
|
||||
[@IvanLH]: https://github.com/IvanLH
|
||||
[@Lash-L]: https://github.com/Lash-L
|
||||
[@MartinHjelmare]: https://github.com/MartinHjelmare
|
||||
[@PeteRager]: https://github.com/PeteRager
|
||||
[@adamfeldman]: https://github.com/adamfeldman
|
||||
[@bdraco]: https://github.com/bdraco
|
||||
[@cereal2nd]: https://github.com/cereal2nd
|
||||
[@frenck]: https://github.com/frenck
|
||||
[@gwww]: https://github.com/gwww
|
||||
[@hesselonline]: https://github.com/hesselonline
|
||||
[@joostlek]: https://github.com/joostlek
|
||||
[@puddly]: https://github.com/puddly
|
||||
[@starkillerOG]: https://github.com/starkillerOG
|
||||
[@zweckj]: https://github.com/zweckj
|
||||
|
||||
[#109725]: https://github.com/home-assistant/core/pull/109725
|
||||
[#116024]: https://github.com/home-assistant/core/pull/116024
|
||||
[#116452]: https://github.com/home-assistant/core/pull/116452
|
||||
|
@ -55,9 +55,13 @@ A card can be added to a dashboard directly [from the view](#to-add-a-card-from-
|
||||
|
||||
3. If you want this card to be visible only to specific users or under a certain condition, you can [define those conditions](#showing-or-hiding-a-card-or-badge-conditionally).
|
||||
4. If you are adding this card to a [sections view](/dashboards/sections/), on the **Layout** tab, you can [resize the card](#resizing-a-card).
|
||||
5. If you like, define [card actions, features, header and footer widgets](#card-actions-features-header-and-footer-widgets).
|
||||
5. Customize your card:
|
||||
- [define card actions](/dashboards/actions/).
|
||||
- [define header and footer](/dashboards/header-footer/)
|
||||
- [customize features](/dashboards/features/#customizing-features).
|
||||
- Not all cards support these elements. Refer to the documentation of the specific card type.
|
||||
6. Select **Add to dashboard**.
|
||||
|
||||

|
||||
|
||||
### To add a card from the device page
|
||||
@ -81,7 +85,10 @@ This method is useful if you are on the **Device** page and want to create a car
|
||||
6. If you want this card to be visible only to specific users or under a certain condition, you can [define those conditions](#showing-or-hiding-a-card-or-badge-conditionally).
|
||||
7. If you are adding this card to a [sections view](/dashboards/sections/), on the **Layout** tab, you can [resize the card](#resizing-a-card).
|
||||
|
||||
8. If you like, define [card actions, features, header and footer widgets](#card-actions-features-header-and-footer-widgets).
|
||||
8. Customize your card:
|
||||
- [define card actions or header and footer widgets](#card-actions-features-header-and-footer-widgets).
|
||||
- [define header and footer](/dashboards/header-footer/)
|
||||
- [customize features](/dashboards/features/#customizing-features).
|
||||
- Not all cards support these elements. Refer to the documentation of the specific card type.
|
||||
|
||||
## Showing or hiding a card or badge conditionally
|
||||
|
@ -22,6 +22,25 @@ Features can be enabled on the following cards:
|
||||
- [Thermostat](/dashboards/thermostat/)
|
||||
- [Tile](/dashboards/tile/)
|
||||
|
||||
## Customizing features
|
||||
|
||||
1. Edit the card and open the **Features** section.
|
||||
2. To add an additional feature to your card, select **Add feature**.
|
||||
- **Info**: The available options for a feature depend on the entity and type of feature.
|
||||
- For example, not all entities have a [toggle](#toggle) or a [counter-action](#counter-actions).
|
||||
3. On tile cards, you can adjust the feature position.
|
||||
- Under **Features** > **Feature position**, select **Bottom** or **Inline**:
|
||||
|
||||

|
||||
|
||||
4. Reordering features:
|
||||
- Some features of the tile card, such as the presets or the HVAC modes of a thermostat, can show buttons.
|
||||
- To reorder the buttons, enable **Customize** and drag and drop the buttons into position.
|
||||
- If you don't like the buttons, you can replace them by a **Dropdown** instead.
|
||||
- Under **Style**, select the **Dropdown** option.
|
||||
|
||||

|
||||
|
||||
## Alarm modes
|
||||
|
||||
Widget that displays buttons to arm and disarm an [alarm](/integrations/alarm_control_panel).
|
||||
|
@ -22,7 +22,7 @@ Header and footer can be used on the following cards:
|
||||
|
||||
- [Entity](/dashboards/entity/)
|
||||
- [Entities](/dashboards/entities/)
|
||||
- [Statistics](/dashboards/statistics/)
|
||||
- [Statistic](/dashboards/statistic/)
|
||||
|
||||
## Picture header & footer
|
||||
|
||||
|
BIN
source/images/blog/2025-03-matter-certification/art.jpg
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
source/images/blog/2025-03-matter-certification/ha-matter.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
source/images/blog/2025-03-matter-certification/lab.jpg
Normal file
After Width: | Height: | Size: 99 KiB |
BIN
source/images/blog/2025-03-matter-certification/ohf-matter.png
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
source/images/dashboards/features/tile-card-feature-position.png
Normal file
After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 33 KiB |
BIN
source/images/dashboards/map_card.webp
Normal file
After Width: | Height: | Size: 412 KiB |
Before Width: | Height: | Size: 234 KiB After Width: | Height: | Size: 125 KiB |
BIN
source/images/pi-day/2025-raspberry-pi-recipe.pdf
Normal file
@ -23,68 +23,38 @@ regenerate: false
|
||||
{%- assign components = site.integrations | sort: 'title' -%}
|
||||
{%- assign components_by_version = site.integrations | group_components_by_release -%}
|
||||
{%- assign categories = components | map: 'ha_category' | join: ',' | downcase | split: ',' | uniq | sort -%}
|
||||
{%- assign iot_classes = "Local Push,Local Polling,Cloud Push,Cloud Polling,Assumed State,Calculated,Configurable" |
|
||||
join: ',' | split: ',' -%}
|
||||
{% assign quality_scales =
|
||||
"icon:🏆,name:platinum|icon:🥇,name:gold|icon:🥈,name:silver|icon:🥉,name:bronze|icon:🏠,name:internal|icon:💾,name:legacy"
|
||||
| split: "|"
|
||||
%}
|
||||
|
||||
<div class="grid">
|
||||
<div class="grid__item one-fifth lap-one-whole palm-one-whole">
|
||||
|
||||
<div class="filter-button-group">
|
||||
<div class="all">
|
||||
<a href='#all' class="btn">All <span class="count">{{tot}}</span></a>
|
||||
<div class="grid__item six-sixths lap-one-whole palm-one-whole">
|
||||
<fieldset class="integration-filter integration-filter-radio">
|
||||
<div class="filter-button">
|
||||
<input type="radio" id="brandsAll" name="brands" value="all" data-id="brands" checked="checked" />
|
||||
<label for="brandsAll">All</label>
|
||||
</div>
|
||||
|
||||
<div class="featured">
|
||||
<a href='#featured' class="btn">Featured</a>
|
||||
<a href='#works-with-home-assistant' class="btn">Partner brands</a>
|
||||
<div class="filter-button">
|
||||
<input type="radio" id="brandsFeatured" name="brands" value="featured" data-id="brands" />
|
||||
<label for="brandsFeatured">Featured</label>
|
||||
</div>
|
||||
|
||||
<div class="version_select">
|
||||
<label>By release</label>
|
||||
<select id="versions" name="versions">
|
||||
<option value="#"></option>
|
||||
{%- for group in components_by_version -%}
|
||||
<optgroup label="{{ group.label }} ({{group.new_components_count}})">
|
||||
{%- for version in group.versions -%}
|
||||
<option value="#version/{{ version.label }}">{{ version.label }} ({{ version.new_components_count }})
|
||||
</option>
|
||||
{%- endfor -%}
|
||||
</optgroup>
|
||||
{%- endfor -%}
|
||||
</select>
|
||||
<div class="filter-button">
|
||||
<input type="radio" id="brandsPartners" name="brands" value="partners" data-id="brands" />
|
||||
<label for="brandsPartners">Partners</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div class="category_list">
|
||||
<label>By Categories</label>
|
||||
{%- for category in categories -%}
|
||||
{%- assign category_name = "" -%}
|
||||
{%- assign components_count = 0 -%}
|
||||
{%- for comp in components -%}
|
||||
{%- assign comp_categories = comp.ha_category | join: ',' | downcase -%}
|
||||
{%- if comp_categories contains category -%}
|
||||
{%- if category_name == "" -%}
|
||||
{%- for cat in comp.ha_category -%}
|
||||
{%- assign lower_cat = cat | downcase -%}
|
||||
{%- if lower_cat == category -%}
|
||||
{%- assign category_name = cat -%}
|
||||
{%- endif -%}
|
||||
{%- endfor -%}
|
||||
{%- endif -%}
|
||||
{%- assign components_count = components_count | plus: 1 -%}
|
||||
{%- endif -%}
|
||||
{%- endfor -%}
|
||||
{%- if category != 'other' and components_count != 0 -%}
|
||||
{%- if category_name == "" -%}
|
||||
{%- assign category_name = category | capitalize -%}
|
||||
{%- endif -%}
|
||||
<a href='#{{ category_name | slugify }}' class="btn" onclick="document.querySelector('.page-content').scrollTop = 0">{{ category_name }} <span class="count">{{ components_count }}</span></a>
|
||||
{%- endif -%}
|
||||
{%- endfor -%}
|
||||
<a href='#other' class="btn" onclick="document.querySelector('.page-content').scrollTop = 0">Other <span class="count">{{ components | where: 'ha_category', 'Other' | size }}</span></a>
|
||||
</div>
|
||||
|
||||
<div class="category_select">
|
||||
<label>By Categories</label>
|
||||
<select id="categories" name="categories">
|
||||
<option value="#"></option>
|
||||
<div class="grid-filters">
|
||||
<div class="grid__item one-quarter lap-one-whole palm-one-whole">
|
||||
<div class="integration-filter integration-filter-select">
|
||||
<h3 class="filter-title">Category</h3>
|
||||
<select class="ha_category" name="category" data-id="cat">
|
||||
<option value="#">All</option>
|
||||
{%- for category in categories -%}
|
||||
{%- assign category_name = "" -%}
|
||||
{%- assign components_count = 0 -%}
|
||||
@ -106,154 +76,341 @@ regenerate: false
|
||||
{%- if category_name == "" -%}
|
||||
{%- assign category_name = category | capitalize -%}
|
||||
{%- endif -%}
|
||||
<option value="#{{ category_name | slugify }}">{{ category_name }} ({{ components_count }})
|
||||
</option>
|
||||
<option value='{{ category | slugify }}'>{{ category_name }}</option>
|
||||
{%- endif -%}
|
||||
{%- endfor -%}
|
||||
<option value="#other">Other ({{ components | where: 'ha_category', 'Other' | size }})
|
||||
</option>
|
||||
|
||||
<option value='other'>Other</option>
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid__item one-quarter lap-one-whole palm-one-whole">
|
||||
<div class="integration-filter integration-filter-select">
|
||||
<h3 class="filter-title">Version</h3>
|
||||
<select class="ha_category" name="versions" data-id="version">
|
||||
<option value="#">All</option>
|
||||
{%- for group in components_by_version -%}
|
||||
<optgroup label="{{ group.label }} ({{group.new_components_count}})">
|
||||
{%- for version in group.versions -%}
|
||||
<option value="{{ version.label }}">{{ version.label }}</option>
|
||||
{%- endfor -%}
|
||||
</optgroup>
|
||||
{%- endfor -%}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid__item one-quarter lap-one-whole palm-one-whole">
|
||||
<div class="integration-filter integration-filter-select">
|
||||
<h3 class="filter-title">IoT Class</h3>
|
||||
<select class="ha_category" name="iot_classes" data-id="iot_class">
|
||||
<option value="#">All</option>
|
||||
{%- for iot_class in iot_classes -%}
|
||||
{%- assign iot_class_count = components | where: 'ha_iot_class', iot_class | size -%}
|
||||
{%- if iot_class_count != 0 -%}
|
||||
<option value="{{ iot_class | slugify }}">{{ iot_class }}</option>
|
||||
{%- endif -%}
|
||||
{%- endfor -%}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid__item one-quarter lap-one-whole palm-one-whole">
|
||||
<div class="integration-filter integration-filter-select">
|
||||
<h3 class="filter-title">Quality Scale</h3>
|
||||
<select class="ha_category" name="quality_scales" data-id="quality_scale">
|
||||
<option value="#">All</option>
|
||||
{%- for quality_scale in quality_scales -%}
|
||||
{% assign quality_scale_data = quality_scale | split: "," %}
|
||||
{% assign quality_icon = quality_scale_data[0] | split: ":" | last %}
|
||||
{% assign quality_name = quality_scale_data[1] | split: ":" | last %}
|
||||
{%- assign quality_scale_count = components | where: 'ha_quality_scale', quality_name | size -%}
|
||||
{%- if quality_scale_count != 0 -%}
|
||||
<option value="{{ quality_name | slugify }}">{{quality_icon}} {{ quality_name | capitalize }}</option>
|
||||
{%- endif -%}
|
||||
{%- endfor -%}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid__item four-fifths lap-one-whole palm-one-whole">
|
||||
|
||||
<div class="grid__item six-sixths lap-one-whole palm-one-whole">
|
||||
<div class="component-search">
|
||||
<form onsubmit="event.preventDefault(); return false">
|
||||
<input type="text" name="search" id="search" class="search text-input" placeholder="Search integrations..." autofocus />
|
||||
<input type="text" name="search" id="search" data-id="search" class="search text-input"
|
||||
placeholder="Search integrations..." autofocus />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="grid__item six-sixths lap-one-whole palm-one-whole">
|
||||
<div class="hass-option-cards" id="componentContainer"> </div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
// This object contains all components we have
|
||||
const allComponents = [
|
||||
{%- for component in components -%}
|
||||
{%- if component.ha_category -%}
|
||||
{%- assign sliced_version = component.ha_release | split: '.' -%}
|
||||
{%- assign minor_version = sliced_version[1]|plus: 0 -%}
|
||||
{%- assign major_version = sliced_version[0]|plus: 0 -%}
|
||||
{% assign categories = "" | split: ',' %}
|
||||
{%- for ha_category in component.ha_category -%}
|
||||
{% capture category %}"{{ ha_category | slugify | downcase }}"{% endcapture %}
|
||||
{% assign categories = categories | push: category %}
|
||||
{%- endfor -%}
|
||||
{url:"{{ component.url }}", title:"{{component.title}}", cat: [{{categories|join: ","}}], featured: {% if component.featured %}true{% else %}false{% endif %}, v: "{{major_version}}.{{minor_version}}", logo: "{{component.logo}}", domain: "{{component.ha_domain}}", ha_brand: "{{component.ha_brand}}", wwha: {% if component.works_with %}true{% else %}false{% endif %}},
|
||||
{% endif -%}
|
||||
{%- endfor -%}
|
||||
false
|
||||
];
|
||||
allComponents.pop(); // remove placeholder element at the end
|
||||
// This object contains all components we have
|
||||
const integrations = [
|
||||
{%- for component in components -%}
|
||||
{%- if component.ha_category -%}
|
||||
{%- assign sliced_version = component.ha_release | split: '.' -%}
|
||||
{%- assign minor_version = sliced_version[1] | plus: 0 -%}
|
||||
{%- assign major_version = sliced_version[0] | plus: 0 -%}
|
||||
{%- assign categories = "" | split: ',' -%}
|
||||
{%- for ha_category in component.ha_category -%}
|
||||
{% capture category %} "{{ ha_category | slugify | downcase }}"{% endcapture %}
|
||||
{% assign categories = categories | push: category %}
|
||||
{%- endfor -%}
|
||||
{
|
||||
url: "{{ component.url }}",
|
||||
title: "{{component.title}}",
|
||||
cat: [{{ categories| join: ","}}],
|
||||
featured: {{ component.featured }},
|
||||
version: "{{major_version}}.{{minor_version}}",
|
||||
logo: "{{component.logo}}",
|
||||
domain: "{{component.ha_domain}}",
|
||||
ha_brand: "{{component.ha_brand}}",
|
||||
wwha: {% if component.works_with %} true{% else %} false{% endif %},
|
||||
iot_class: "{{component.ha_iot_class | slugify }}",
|
||||
quality_scale: "{{component.ha_quality_scale}}"
|
||||
},
|
||||
{% endif -%}
|
||||
{%- endfor -%}
|
||||
false
|
||||
];
|
||||
integrations.pop(); // remove placeholder element at the end
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
(function () {
|
||||
const SEARCH_PREFIX = '#search/';
|
||||
const VERSION_PREFIX = '#version/';
|
||||
|
||||
let filteredComponents = {};
|
||||
const baseHashRegex = /(^.*)(?=\?)/;
|
||||
const integrationSelectFilterElements = [...document.querySelectorAll('.integration-filter select')];
|
||||
const integrationRadioFilterElements = [...document.querySelectorAll('.integration-filter input[name="brands"]')];
|
||||
const searchInputEl = document.querySelector('.component-search input');
|
||||
const componentContainerEl = document.querySelector('#componentContainer');
|
||||
let searchInputDirty = false;
|
||||
|
||||
function init() {
|
||||
let queryParams = new URLSearchParams(document.location.search);
|
||||
// do the lowerCase transformation once
|
||||
for (let component of allComponents) {
|
||||
const title = component.title.toLowerCase();
|
||||
const domain = component.domain;
|
||||
const titleNormalized = title
|
||||
.normalize("NFD")
|
||||
.replace(/[\u0300-\u036f]/g, "");
|
||||
const titleDedashed = title.replace(/[-_]/g, " ");
|
||||
const titleNormalizedDedashed = titleNormalized.replace(/[-_]/g, " ");
|
||||
for (let i = 0; i < integrations.length; i++) {
|
||||
const title = integrations[i].title.toLowerCase();
|
||||
const domain = integrations[i].domain;
|
||||
const iot_class = integrations[i].iot_class;
|
||||
const quality_scale = integrations[i].quality_scale;
|
||||
const title_normalized = title.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
||||
const title_dedashed = title.replace(/[-_]/g, " ");
|
||||
const title_normalized_dedashed = title_normalized.replace(/[-_]/g, " ");
|
||||
|
||||
component.titleLC = title;
|
||||
component.search = `${title} ${titleNormalized} ${titleDedashed} ${titleNormalizedDedashed} ${domain}`;
|
||||
integrations[i].titleLC = title;
|
||||
integrations[i].search = `${title} ${title_normalized} ${title_dedashed} ${title_normalized_dedashed} ${domain} ${iot_class} ${quality_scale}`;
|
||||
}
|
||||
|
||||
// sort the components alphabetically
|
||||
allComponents.sort((a, b) => a.titleLC.localeCompare(b.titleLC));
|
||||
integrations.sort(function (a, b) {
|
||||
return a.titleLC.localeCompare(b.titleLC);
|
||||
});
|
||||
|
||||
if (location.hash !== '' && location.hash.indexOf(SEARCH_PREFIX) === 0) {
|
||||
// set default value in search from URL
|
||||
const search = decodeURIComponent(location.hash).substring(SEARCH_PREFIX.length);
|
||||
searchInputEl.value = search;
|
||||
//add these to the window for dynamic grabbing in matchFilterElementToQuery()
|
||||
window.$catFilter = document.querySelector('.integration-filter select[data-id="cat"]');
|
||||
window.$versionFilter = document.querySelector('.integration-filter select[data-id="version"]');
|
||||
window.$iot_classFilter = document.querySelector('.integration-filter select[data-id="iot_class"]');
|
||||
window.$quality_scaleFilter = document.querySelector('.integration-filter select[data-id="quality_scale"]');
|
||||
window.$searchFilter = document.querySelector('.component-search input');
|
||||
window.$brandsFilter = [...document.querySelectorAll('.integration-filter input[name="brands"]')]
|
||||
|
||||
//listen for changes in the hash / user clicking back or forward button in browser
|
||||
window.addEventListener('hashchange', applyFilter);
|
||||
window.addEventListener('popstate', applyFilter);
|
||||
|
||||
//on initial page load, if there's no active filters set the default to featured
|
||||
let query = buildQueryFromURL();
|
||||
|
||||
if (query !== null) {
|
||||
if (Object.keys(query).length === 0) {
|
||||
setQueryURL('brands', 'featured');
|
||||
} else {
|
||||
if (query['brands'] !== 'featured') {
|
||||
searchInputDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
applyFilter();
|
||||
|
||||
// add focus to the search field
|
||||
setTimeout(() => searchInputEl.focus(), 1);
|
||||
}
|
||||
init();
|
||||
|
||||
/**
|
||||
* filter all components, based on the location's hash and render them into the component box
|
||||
*/
|
||||
function applyFilter() {
|
||||
const hash = location.hash || '';
|
||||
let components = [];
|
||||
// get query value pair that matches provided id from url. // for buildQueryFromURL()
|
||||
function getQueryValue(id) {
|
||||
let index = id.length + 2; // id + '#' and '/' => '#search/'
|
||||
if (id === 'cat' || id === 'brands') {
|
||||
index = 1;
|
||||
}
|
||||
|
||||
// get value from #hash url
|
||||
let query = decodeURIComponent(location.hash).substring(index).toLowerCase();
|
||||
|
||||
// get value from ?query url if it's present
|
||||
let queryParams = new URLSearchParams(location.search);
|
||||
if (queryParams.has(id)) {
|
||||
query = queryParams.get(id);
|
||||
}
|
||||
|
||||
// adjust query for wwha # url
|
||||
if (query === 'works-with-home-assistant') {
|
||||
query = 'partners';
|
||||
}
|
||||
|
||||
return query;
|
||||
}
|
||||
|
||||
// build out query object of active filters for applyFilter()
|
||||
function buildQueryFromURL() {
|
||||
let queryFilter = {};
|
||||
let hash = location.hash || '';
|
||||
let queryParams = new URLSearchParams(location.search);
|
||||
|
||||
if (hash.startsWith('#featured') || queryParams.get('brands') === 'featured') {
|
||||
// only show those with featured = true
|
||||
let query = getQueryValue('brands');
|
||||
queryFilter.brands = query;
|
||||
}
|
||||
|
||||
if (hash.startsWith('#works-with-home-assistant') || queryParams.get('brands') === 'partners') {
|
||||
// only show those with partners = true
|
||||
let query = getQueryValue('brands');
|
||||
queryFilter.brands = query;
|
||||
}
|
||||
|
||||
if (hash.startsWith('#search/') || queryParams.has('search')) {
|
||||
let query = getQueryValue('search');
|
||||
queryFilter.search = query;
|
||||
} else {
|
||||
// reset search box when not searching
|
||||
$searchFilter.value = '';
|
||||
}
|
||||
|
||||
if (hash.startsWith('#version/') || queryParams.has('version')) {
|
||||
// filter by a version
|
||||
let query = getQueryValue('version');
|
||||
queryFilter.version = query;
|
||||
}
|
||||
|
||||
if (
|
||||
// check for old # categories urls
|
||||
(hash.startsWith('#') || queryParams.has("cat"))
|
||||
&& !(hash.startsWith('#all'))
|
||||
&& !(hash.startsWith('#featured'))
|
||||
&& !(hash.startsWith('#works-with-home-assistant'))
|
||||
&& !(hash.startsWith('#search'))
|
||||
&& !(hash.startsWith('#version'))
|
||||
&& !(hash.startsWith('#iot_class'))
|
||||
&& !(hash.startsWith('#quality_scale'))
|
||||
) {
|
||||
// regular filter categories
|
||||
let query = getQueryValue('cat');
|
||||
queryFilter.cat = query;
|
||||
}
|
||||
|
||||
if (hash.startsWith('#iot_class/') || queryParams.has('iot_class')) {
|
||||
let query = getQueryValue('iot_class');
|
||||
queryFilter.iot_class = query;
|
||||
}
|
||||
|
||||
if (hash.startsWith('#quality_scale/') || queryParams.has('quality_scale')) {
|
||||
let query = getQueryValue('quality_scale');
|
||||
queryFilter.quality_scale = query;
|
||||
}
|
||||
|
||||
if (hash.startsWith('#all')) {
|
||||
queryFilter = null;
|
||||
}
|
||||
|
||||
// filter all components by comparing against query object
|
||||
return queryFilter;
|
||||
}
|
||||
|
||||
// filter all components, based on the url hash/search query string and render them into the component box
|
||||
// if a custom query is provided, this will override all current filters, and update the url / elements accordingly
|
||||
function applyFilter(query = false) {
|
||||
var data = {
|
||||
components: []
|
||||
};
|
||||
|
||||
// fade-out css effect on the old elements. This is actually not visible on fast browsers
|
||||
componentContainerEl.classList.add('remove-items');
|
||||
|
||||
if (hash.indexOf('#search/') === -1) {
|
||||
// reset search box when not searching
|
||||
searchInputEl.value = null;
|
||||
// make sure no query exists and its not an event object being passed in
|
||||
if (!query || query.target) {
|
||||
query = buildQueryFromURL();
|
||||
} else {
|
||||
//set url to custom query filter
|
||||
overrideQueryURL(query)
|
||||
}
|
||||
|
||||
if (hash === '#all') {
|
||||
// shortcut: no need to filter
|
||||
components = allComponents;
|
||||
} else {
|
||||
let filter, search;
|
||||
if (hash.indexOf(SEARCH_PREFIX) === 0) {
|
||||
// search through title and category
|
||||
search = decodeURIComponent(hash).substring(SEARCH_PREFIX.length).toLowerCase();
|
||||
filter = comp =>
|
||||
comp.search.indexOf(search) !== -1 ||
|
||||
comp.cat.find((c) => c.includes("#")) != undefined;
|
||||
// update dom elements to match new filters
|
||||
updateFilterButtons(query);
|
||||
updateFilterElements(query);
|
||||
|
||||
} else if (hash === '#featured' || hash === '') {
|
||||
// only show those with featured = true
|
||||
filter = comp => comp.featured;
|
||||
data.components = integrations.filter(integration => {
|
||||
for (let key in query) {
|
||||
// compare against search string and categories in integration
|
||||
if (key === 'search') {
|
||||
if (
|
||||
integration[key].indexOf(query[key]) === -1
|
||||
&& integration.cat.find((c) => c.includes(query[key])) == undefined
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
} else if (hash === '#works-with-home-assistant') {
|
||||
// only show those partners of the Works with Home Assistant program
|
||||
filter = comp => comp.wwha;
|
||||
// check for matching categories in integration's category array
|
||||
if (key === 'cat') {
|
||||
if (!integration[key].includes(query[key])) return false;
|
||||
}
|
||||
|
||||
} else if (hash.indexOf(VERSION_PREFIX) === 0) {
|
||||
// compare against a version
|
||||
search = decodeURIComponent(hash).substring(VERSION_PREFIX.length).toLowerCase();
|
||||
// compare version string against version js
|
||||
filter = comp => comp.v === search;
|
||||
// check for matching featured brands in integration
|
||||
if (key === 'brands' && query[key] === 'featured') {
|
||||
if (!(integration['featured'])) return false;
|
||||
}
|
||||
|
||||
} else {
|
||||
// regular filter categories
|
||||
search = hash.substring(1);
|
||||
filter = comp => comp.cat.includes(search);
|
||||
// check for matching partner brands in integration
|
||||
if (key === 'brands' && query[key] === 'partners') {
|
||||
if (!integration['wwha']) return false;
|
||||
}
|
||||
|
||||
// check for version / iot / quality matches
|
||||
if (!(key === 'cat' || key === 'search' || key === 'brands')) {
|
||||
if (
|
||||
integration[key] == undefined // match doesn't exist
|
||||
|| integration[key] != query[key] // strings dont match
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// filter all components using the filter function
|
||||
components = allComponents.filter(filter);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
// let rendered = Mustache.render(template, data);
|
||||
let rendered;
|
||||
if (components.length > 0) {
|
||||
if (data.components.length > 0) {
|
||||
// Note: Assumes all data has already been sanitized
|
||||
rendered = components.map(component => `
|
||||
rendered = data.components.map(component => `
|
||||
<a href="${component.url}" class="option-card">
|
||||
<div class="img-container">${buildImageEl(component)}</div>
|
||||
<div class='title'>${component.title}</div>
|
||||
</a>
|
||||
`).join('\n');
|
||||
} else {
|
||||
rendered = '<div class="alert alert-note"><p class="alert-content">Nothing found!</p></div>';
|
||||
}
|
||||
|
||||
// set active class on active menu item
|
||||
document.querySelector('.filter-button-group a.active')?.classList?.remove?.('active');
|
||||
document.querySelector(`.filter-button-group a[href="${hash}"]`)?.classList?.add?.('active');
|
||||
if (hash === "") {
|
||||
document.querySelector('.filter-button-group a[href*="#featured"]').classList.add('active');
|
||||
rendered = '<div class="alert alert-note"><p class="alert-content">No results matching this filter</p></div>';
|
||||
}
|
||||
|
||||
// remove previous elements and css classes, add the new stuff and then trigger the fade-in css animation
|
||||
@ -264,6 +421,296 @@ allComponents.pop(); // remove placeholder element at the end
|
||||
componentContainerEl.classList.add('show-items');
|
||||
}
|
||||
|
||||
// add / update a filter in the url, upated # urls to query string urls
|
||||
function setQueryURL(id, value) {
|
||||
const hashExists = location.hash !== '';
|
||||
let queryParams = new URLSearchParams(location.search);
|
||||
let query = buildQueryFromURL();
|
||||
|
||||
// append new query string
|
||||
if (hashExists) {
|
||||
location.hash = '';
|
||||
|
||||
if (query !== null) {
|
||||
let currentId = Object.keys(query)[0];
|
||||
let currentVal = Object.values(query)[0];
|
||||
queryParams.set(currentId, currentVal);
|
||||
}
|
||||
}
|
||||
|
||||
queryParams.set(id, value);
|
||||
newURL = `?${queryParams.toString()}`;
|
||||
|
||||
if ('pushState' in history) {
|
||||
history.pushState('', '', newURL);
|
||||
} else {
|
||||
location.search = newURL;
|
||||
}
|
||||
|
||||
//make sure search input keeps text after url is adjusted
|
||||
if (queryParams.has('search')) {
|
||||
let searchText = queryParams.get('search');
|
||||
$searchFilter.value = searchText;
|
||||
}
|
||||
}
|
||||
|
||||
//remove a filter in the url
|
||||
function removeQueryFromURL(queryId) {
|
||||
const hashExists = location.hash !== '';
|
||||
let newURL;
|
||||
const queryParams = new URLSearchParams(location.search);
|
||||
|
||||
if (hashExists) {
|
||||
location.hash = '';
|
||||
} else {
|
||||
queryParams.delete(queryId);
|
||||
if (queryParams.toString() !== '') {
|
||||
let baseURL = getCleanURL();
|
||||
newURL = `${baseURL}?${queryParams.toString()}`
|
||||
} else {
|
||||
newURL = getCleanURL();
|
||||
}
|
||||
}
|
||||
|
||||
if ('pushState' in history) {
|
||||
history.pushState('', '', newURL);
|
||||
} else {
|
||||
location.href = newURL;
|
||||
}
|
||||
}
|
||||
|
||||
//override current url filters with a new custom filter
|
||||
function overrideQueryURL(query) {
|
||||
const hashExists = location.hash !== '';
|
||||
let newURL;
|
||||
const newSearchParams = new URLSearchParams();
|
||||
|
||||
if (hashExists) {
|
||||
location.hash = '';
|
||||
}
|
||||
|
||||
Object.keys(query).forEach(key => {
|
||||
newSearchParams.set(key, query[key])
|
||||
})
|
||||
|
||||
if (newSearchParams.toString() !== '') {
|
||||
let baseURL = getCleanURL();
|
||||
newURL = `${baseURL}?${newSearchParams.toString()}`
|
||||
} else {
|
||||
newURL = getCleanURL();
|
||||
}
|
||||
|
||||
if ('pushState' in history) {
|
||||
history.pushState('', '', newURL);
|
||||
} else {
|
||||
location.href = newURL;
|
||||
}
|
||||
}
|
||||
|
||||
function getCleanURL() {
|
||||
const baseUrlRegex = /(^.*)(?=[\?#])/;
|
||||
let url = '';
|
||||
let urlMatch = location.href.match(baseUrlRegex);
|
||||
|
||||
if (urlMatch !== null) {
|
||||
url = urlMatch[0];
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
function clearURL() {
|
||||
history.pushState({}, '', window.location.pathname);
|
||||
}
|
||||
|
||||
//update a specific filter radio / dropdown / search. used in updateFilterElements()
|
||||
function matchFilterElementToQuery(id, query) {
|
||||
//dynamically grab select variables
|
||||
let $filterElement = window[`$${id}Filter`];
|
||||
if (id === 'search') {
|
||||
if ($filterElement.value !== query) {
|
||||
// set value of search input
|
||||
$filterElement.value = query;
|
||||
}
|
||||
} else if (id === 'brands') {
|
||||
$filterElement.forEach(option => {
|
||||
if (option.value.trim() === query.trim() && !option.checked) {
|
||||
option.checked = true;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
let options = [...$filterElement.querySelectorAll('option')];
|
||||
//set the value of select dropdown if it doesn't currently match the query in the url
|
||||
if ($filterElement.value !== query) {
|
||||
|
||||
// only change the select dropdown if it matches an available dropdown value
|
||||
options.forEach(option => {
|
||||
if (option.value === query) {
|
||||
$filterElement.value = query;
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// update all filter elements to match current filter obj
|
||||
function updateFilterElements(queryFilter) {
|
||||
|
||||
let filterElements = [...document.querySelectorAll('.integration-filter select, input.search, .integration-filter input')];
|
||||
let activeFilterElements = filterElements.filter(el => !(el.value === '#' || el.value === '' || (el.id !== 'search' && el.checked === false)));
|
||||
|
||||
if (queryFilter === null) {
|
||||
// resetFilterElements will match elements to query string filter in url
|
||||
resetFilterElements(activeFilterElements);
|
||||
return;
|
||||
}
|
||||
|
||||
// clear filters if there's more than the current queryFilter
|
||||
if (activeFilterElements.length > Object.keys(queryFilter).length) {
|
||||
// filter out filter elements that don't match query object
|
||||
let filtersToReset = activeFilterElements.filter(el => {
|
||||
for (key in queryFilter) {
|
||||
if (el.getAttribute('data-id') === key) return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
// set filter elements to default 'All' value
|
||||
resetFilterElements(filtersToReset);
|
||||
} else {
|
||||
// update new filters
|
||||
if (Object.keys(queryFilter).length) {
|
||||
for (key in queryFilter) {
|
||||
matchFilterElementToQuery(key, queryFilter[key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function resetFilterElements(elementArray) {
|
||||
elementArray.forEach(element => {
|
||||
let queryId = element.getAttribute('data-id');
|
||||
if (queryId === 'search') {
|
||||
matchFilterElementToQuery(queryId, '');
|
||||
} else if (queryId === 'brands') {
|
||||
matchFilterElementToQuery(queryId, 'all');
|
||||
} else {
|
||||
matchFilterElementToQuery(queryId, '#');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function resetAllFilters() {
|
||||
clearURL();
|
||||
applyFilter()
|
||||
}
|
||||
|
||||
// filter button name cleanup. used in updateFilterButtons()
|
||||
function getButtonText(id, key) {
|
||||
let category;
|
||||
switch (id) {
|
||||
case 'cat':
|
||||
category = 'Category';
|
||||
break;
|
||||
case 'iot_class':
|
||||
category = 'IoT class';
|
||||
break;
|
||||
case 'quality_scale':
|
||||
category = 'Quality scale';
|
||||
break;
|
||||
default:
|
||||
category = id;
|
||||
}
|
||||
|
||||
if (id !== 'search' && id !== 'brands') {
|
||||
let $filterElement = window[`$${id}Filter`];
|
||||
let options = [...$filterElement.querySelectorAll('option')]
|
||||
let filteredOption = options.filter(option => option.value === key)[0];
|
||||
|
||||
if (filteredOption) {
|
||||
return `${category}: ${filteredOption.innerText}`;
|
||||
} else {
|
||||
return `${category}: Not Found`;
|
||||
}
|
||||
|
||||
} else {
|
||||
return `${category}: ${key}`;
|
||||
}
|
||||
}
|
||||
|
||||
// update all filter buttons to match current obj filter
|
||||
function updateFilterButtons(queryFilter) {
|
||||
let filterButtonParent = document.querySelector('.component-search');
|
||||
let currentFilterButtons = [...document.querySelectorAll('.component-search .active-filter')];
|
||||
|
||||
if (queryFilter === null) {
|
||||
currentFilterButtons.forEach(button => button.remove());
|
||||
return;
|
||||
}
|
||||
|
||||
// update text of buttons if filter value has changed
|
||||
updateFilterButtonsText(currentFilterButtons, queryFilter);
|
||||
|
||||
// create a filter button if missing for current filter
|
||||
createFilterButtons(filterButtonParent, queryFilter)
|
||||
|
||||
// remove buttons that don't match current filter
|
||||
if (currentFilterButtons.length >= Object.keys(queryFilter).length) {
|
||||
// filter out buttons that don't match query obj
|
||||
removeFilterButtons(currentFilterButtons, queryFilter)
|
||||
}
|
||||
}
|
||||
|
||||
// update text of buttons if filter value has changed // used in updateFilterButtons
|
||||
function updateFilterButtonsText(buttons, query) {
|
||||
buttons.forEach(button => {
|
||||
for (key in query) {
|
||||
if (button.dataset.id === key) {
|
||||
// check for mismatched filter value
|
||||
if (button.dataset.filter !== query[key]) {
|
||||
button.dataset.filter = query[key];
|
||||
button.innerHTML = `<span>${getButtonText(key, query[key])} <iconify-icon icon="mdi:close-circle"></iconify-icon></span>`;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// create a filter button if it's missing from current applied filter // used in updateFilterButtons
|
||||
function createFilterButtons(buttonParent, query) {
|
||||
for (key in query) {
|
||||
if (document.querySelector(`.component-search .active-filter[data-id="${key}"]`) === null) {
|
||||
let button = document.createElement('button');
|
||||
button.innerHTML = `<span>${getButtonText(key, query[key])} <iconify-icon icon="mdi:close-circle"></iconify-icon></span>`;
|
||||
button.classList.add('active-filter');
|
||||
button.dataset.id = key;
|
||||
button.dataset.filter = query[key]
|
||||
// add click listener to button to remove filter
|
||||
button.addEventListener('click', function () {
|
||||
removeQueryFromURL(this.dataset.id);
|
||||
applyFilter();
|
||||
// remove event listener after click
|
||||
}, { once: true });
|
||||
|
||||
//add button to the dom
|
||||
buttonParent.appendChild(button);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// remove buttons that don't match current filter // used in updateFilterButtons
|
||||
function removeFilterButtons(buttons, query) {
|
||||
let buttonsToRemove = buttons.filter(button => {
|
||||
for (key in query) {
|
||||
if (button.dataset.id === key) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
buttonsToRemove.forEach(button => button.remove());
|
||||
}
|
||||
|
||||
function buildImageEl(component) {
|
||||
const urlBase = [
|
||||
'https://brands.home-assistant.io',
|
||||
@ -275,28 +722,39 @@ allComponents.pop(); // remove placeholder element at the end
|
||||
return `<img src="${urlBase}.png" srcset="${urlBase}@2x.png 2x" loading="lazy">`;
|
||||
}
|
||||
|
||||
// update view by filter selection
|
||||
for (let filterLink of document.querySelectorAll('.filter-button-group a')) {
|
||||
filterLink.addEventListener('click', () => {
|
||||
history.pushState('', '', filterLink.getAttribute('href'));
|
||||
applyFilter();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
// update view on select change
|
||||
const versionsEl = document.getElementById('versions');
|
||||
versionsEl.addEventListener('change', () => {
|
||||
history.pushState('', '', versionsEl.value);
|
||||
applyFilter();
|
||||
});
|
||||
integrationSelectFilterElements.forEach(select => select.addEventListener("change", () => {
|
||||
let id = select.dataset.id;
|
||||
let value = select.value;
|
||||
|
||||
const categoriesEl = document.getElementById('categories');
|
||||
categoriesEl.addEventListener('change', () => {
|
||||
history.pushState('', '', categoriesEl.value);
|
||||
applyFilter();
|
||||
});
|
||||
if (value !== '#') {
|
||||
setQueryURL(id, value);
|
||||
} else {
|
||||
// clear current filter
|
||||
removeQueryFromURL(id);
|
||||
}
|
||||
|
||||
applyFilter();
|
||||
|
||||
return false;
|
||||
}));
|
||||
|
||||
// update view on radio change
|
||||
integrationRadioFilterElements.forEach(radioInput => radioInput.addEventListener("click", () => {
|
||||
let id = radioInput.name;
|
||||
let value = radioInput.value;
|
||||
|
||||
if (radioInput.checked && value !== 'all') {
|
||||
//clear all current filters, append new brand filter selection
|
||||
applyFilter({ 'brands': value });
|
||||
} else if (radioInput.checked && value === 'all') {
|
||||
// clear current filter
|
||||
removeQueryFromURL(id);
|
||||
applyFilter();
|
||||
}
|
||||
|
||||
return false;
|
||||
}))
|
||||
/**
|
||||
* Simple debounce implementation
|
||||
*/
|
||||
@ -310,25 +768,30 @@ allComponents.pop(); // remove placeholder element at the end
|
||||
|
||||
// update view by search text
|
||||
let lastSearchText = '';
|
||||
searchInputEl.addEventListener('keyup', debounce(() => {
|
||||
const text = searchInputEl.value
|
||||
searchInputEl.addEventListener('input', debounce(() => {
|
||||
let value = searchInputEl.value
|
||||
.toLowerCase()
|
||||
// sanitize input
|
||||
.replace(/[(\?|\&\{\}\(\))]/gi, '')
|
||||
.trim();
|
||||
if (typeof value === "string" && value.length >= 1) {
|
||||
if (!searchInputDirty) {
|
||||
resetAllFilters();
|
||||
searchInputDirty = true;
|
||||
}
|
||||
|
||||
// Only apply filter if value has changed
|
||||
if (lastSearchText !== text) {
|
||||
lastSearchText = text;
|
||||
const newHash = typeof text === "string" && text.length >= 1
|
||||
? SEARCH_PREFIX + text
|
||||
: '#all';
|
||||
history.pushState('', '', newHash);
|
||||
if (value !== lastSearchText) {
|
||||
lastSearchText = value;
|
||||
|
||||
setQueryURL('search', value);
|
||||
applyFilter();
|
||||
}
|
||||
}
|
||||
else {
|
||||
removeQueryFromURL('search');
|
||||
applyFilter();
|
||||
}
|
||||
}, 500));
|
||||
|
||||
window.addEventListener('hashchange', applyFilter);
|
||||
applyFilter();
|
||||
})();
|
||||
</script>
|
||||
|
||||
|
@ -66,87 +66,86 @@ Assist aims to support more languages than other voice assistants, but this is s
|
||||
<div class="input-wrapper">
|
||||
<select id="language-select">
|
||||
<option data-display="Select">Choose your language</option>
|
||||
<option value="en-US">English</option>
|
||||
<option value="es-ES">Spanish</option>
|
||||
<option value="pt-BR">Portuguese</option>
|
||||
<option value="de-DE">German</option>
|
||||
<option value="it-IT">Italian</option>
|
||||
<option value="ru-RU">Russian</option>
|
||||
<option value="ja-JP">Japanese</option>
|
||||
<option value="tr-TR">Turkish</option>
|
||||
<option value="ko-KR">Korean</option>
|
||||
<option value="fr-FR">French</option>
|
||||
<option value="af-ZA">Afrikaans</option>
|
||||
<option value="sq-AL">Albanian</option>
|
||||
<option value="am-ET">Amharic</option>
|
||||
<option value="ar-JO">Arabic</option>
|
||||
<option value="hy-AM">Armenian</option>
|
||||
<option value="az-AZ">Azerbaijani</option>
|
||||
<option value="eu-ES">Basque</option>
|
||||
<option value="bn-IN">Bengali</option>
|
||||
<option value="bs-BA">Bosnian</option>
|
||||
<option value="bg-BG">Bulgarian</option>
|
||||
<option value="my-MM">Burmese</option>
|
||||
<option value="yue-CN">Cantonese</option>
|
||||
<option value="ca-ES">Catalan</option>
|
||||
<option value="pl-PL">Polish</option>
|
||||
<option value="nl-BE">Dutch</option>
|
||||
<option value="id-ID">Indonesian</option>
|
||||
<option value="zh-HK">Chinese (Cantonese)</option>
|
||||
<option value="zh-CN">Chinese (Mandarin)</option>
|
||||
<option value="ms-MY">Malay</option>
|
||||
<option value="sv-SE">Swedish</option>
|
||||
<option value="uk-UA">Ukrainian</option>
|
||||
<option value="th-TH">Thai</option>
|
||||
<option value="vi-VN">Vietnamese</option>
|
||||
<option value="fi-FI">Finnish</option>
|
||||
<option value="no-NO">Norwegian</option>
|
||||
<option value="gl-ES">Galician</option>
|
||||
<option value="ar-JO">Arabic</option>
|
||||
<option value="ur-IN">Urdu</option>
|
||||
<option value="el-GR">Greek</option>
|
||||
<option value="ro-RO">Romanian</option>
|
||||
<option value="da-DK">Danish</option>
|
||||
<option value="ta-IN">Tamil</option>
|
||||
<option value="hr-HR">Croatian</option>
|
||||
<option value="mk-MK">Macedonian</option>
|
||||
<option value="sk-SK">Slovak</option>
|
||||
<option value="he-IL">Hebrew</option>
|
||||
<option value="sr-RS">Serbian</option>
|
||||
<option value="hu-HU">Hungarian</option>
|
||||
<option value="bg-BG">Bulgarian</option>
|
||||
<option value="cs-CZ">Czech</option>
|
||||
<option value="bs-BA">Bosnian</option>
|
||||
<option value="sl-SI">Slovenian</option>
|
||||
<option value="az-AZ">Azerbaijani</option>
|
||||
<option value="da-DK">Danish</option>
|
||||
<option value="nl-BE">Dutch</option>
|
||||
<option value="en-US">English</option>
|
||||
<option value="et-EE">Estonian</option>
|
||||
<option value="lv-LV">Latvian</option>
|
||||
<option value="af-ZA">Afrikaans</option>
|
||||
<option value="cy-GB">Welsh</option>
|
||||
<option value="fa-IR">Persian</option>
|
||||
<option value="lt-LT">Lithuanian</option>
|
||||
<option value="fil-PH">Filipino</option>
|
||||
<option value="fi-FI">Finnish</option>
|
||||
<option value="fr-FR">French</option>
|
||||
<option value="gl-ES">Galician</option>
|
||||
<option value="ka-GE">Georgian</option>
|
||||
<option value="de-DE">German</option>
|
||||
<option value="el-GR">Greek</option>
|
||||
<option value="gu-IN">Gujarati</option>
|
||||
<option value="he-IL">Hebrew</option>
|
||||
<option value="hi-IN">Hindi</option>
|
||||
<option value="hu-HU">Hungarian</option>
|
||||
<option value="is-IS">Icelandic</option>
|
||||
<option value="id-ID">Indonesian</option>
|
||||
<option value="ga-IE">Irish</option>
|
||||
<option value="it-IT">Italian</option>
|
||||
<option value="ja-JP">Japanese</option>
|
||||
<option value="jv-ID">Javanese</option>
|
||||
<option value="kn-IN">Kannada</option>
|
||||
<option value="kk-KZ">Kazakh</option>
|
||||
<option value="km-KH">Khmer</option>
|
||||
<option value="ko-KR">Korean</option>
|
||||
<option value="lo-LA">Lao</option>
|
||||
<option value="lv-LV">Latvian</option>
|
||||
<option value="lt-LT">Lithuanian</option>
|
||||
<option value="lb-LU">Luxembourgish</option>
|
||||
<option value="mk-MK">Macedonian</option>
|
||||
<option value="ms-MY">Malay</option>
|
||||
<option value="ml-IN">Malayalam</option>
|
||||
<option value="mt-MT">Maltese</option>
|
||||
<option value="mr-IN">Marathi</option>
|
||||
<option value="mn-MN">Mongolian</option>
|
||||
<option value="ne-NP">Nepali</option>
|
||||
<option value="nb-NO">Norwegian Bokmål</option>
|
||||
<option value="ps-AF">Pashto</option>
|
||||
<option value="fa-IR">Persian</option>
|
||||
<option value="pl-PL">Polish</option>
|
||||
<option value="pt-BR">Portuguese</option>
|
||||
<option value="ro-RO">Romanian</option>
|
||||
<option value="ru-RU">Russian</option>
|
||||
<option value="sr-RS">Serbian</option>
|
||||
<option value="wuu-CN">Shanghainese</option>
|
||||
<option value="si-LK">Sinhala</option>
|
||||
<option value="sk-SK">Slovak</option>
|
||||
<option value="sl-SI">Slovenian</option>
|
||||
<option value="so-SO">Somali</option>
|
||||
<option value="es-ES">Spanish</option>
|
||||
<option value="su-ID">Sundanese</option>
|
||||
<option value="sw-KE">Swahili</option>
|
||||
<option value="sw-TZ">Swahili</option>
|
||||
<option value="is-IS">Icelandic</option>
|
||||
<option value="mt-MT">Maltese</option>
|
||||
<option value="ps-AF">Pashto</option>
|
||||
<option value="mr-IN">Marathi</option>
|
||||
<option value="bn-IN">Bengali</option>
|
||||
<option value="lb-LU">Luxembourgish</option>
|
||||
<option value="hi-IN">Hindi</option>
|
||||
<option value="gu-IN">Gujarati</option>
|
||||
<option value="km-KH">Khmer</option>
|
||||
<option value="ne-NP">Nepali</option>
|
||||
<option value="lo-LA">Lao</option>
|
||||
<option value="sv-SE">Swedish</option>
|
||||
<option value="ta-IN">Tamil</option>
|
||||
<option value="te-IN">Telugu</option>
|
||||
<option value="kn-IN">Kannada</option>
|
||||
<option value="ml-IN">Malayalam</option>
|
||||
<option value="kk-KZ">Kazakh</option>
|
||||
<option value="so-SO">Somali</option>
|
||||
<option value="th-TH">Thai</option>
|
||||
<option value="tr-TR">Turkish</option>
|
||||
<option value="uk-UA">Ukrainian</option>
|
||||
<option value="ur-IN">Urdu</option>
|
||||
<option value="uz-UZ">Uzbek</option>
|
||||
<option value="ka-GE">Georgian</option>
|
||||
<option value="my-MM">Burmese</option>
|
||||
<option value="mn-MN">Mongolian</option>
|
||||
<option value="hy-AM">Armenian</option>
|
||||
<option value="am-ET">Amharic</option>
|
||||
<option value="nb-NO">Norwegian Bokmål</option>
|
||||
<option value="eu-ES">Basque</option>
|
||||
<option value="fil-PH">Filipino</option>
|
||||
<option value="ga-IE">Irish</option>
|
||||
<option value="si-LK">Sinhala</option>
|
||||
<option value="sq-AL">Albanian</option>
|
||||
<option value="su-ID">Sundanese</option>
|
||||
<option value="wuu-CN">Shanghainese</option>
|
||||
<option value="yue-CN">Cantonese</option>
|
||||
<option value="vi-VN">Vietnamese</option>
|
||||
<option value="cy-GB">Welsh</option>
|
||||
<option value="zu-ZA">Zulu</option>
|
||||
</select>
|
||||
</div>
|
||||
@ -411,87 +410,86 @@ function registerLanguageSelectChange() {
|
||||
|
||||
function updateLanguageSupports(locale = null) {
|
||||
let data = {
|
||||
"af-ZA": [0, 0],
|
||||
"am-ET": [0, 0],
|
||||
"ar-JO": [0, 2],
|
||||
"az-AZ": [0, 0],
|
||||
"bg-BG": [0, 2],
|
||||
"bn-IN": [0, 0],
|
||||
"bs-BA": [0, 0],
|
||||
"ca-ES": [0, 3],
|
||||
"cs-CZ": [0, 1],
|
||||
"cy-GB": [0, 0],
|
||||
"da-DK": [0, 2],
|
||||
"de-DE": [3, 3],
|
||||
"el-GR": [0, 1],
|
||||
"en-US": [3, 3],
|
||||
"es-ES": [3, 3],
|
||||
"pt-BR": [3, 3],
|
||||
"de-DE": [3, 3],
|
||||
"it-IT": [2, 2],
|
||||
"ru-RU": [2, 2],
|
||||
"ja-JP": [0, 0],
|
||||
"tr-TR": [0, 1],
|
||||
"ko-KR": [0, 1],
|
||||
"fr-FR": [0, 3],
|
||||
"ca-ES": [0, 3],
|
||||
"pl-PL": [0, 3],
|
||||
"nl-BE": [0, 3],
|
||||
"id-ID": [0, 1],
|
||||
"zh-HK": [0, 2],
|
||||
"zh-CN": [0, 1],
|
||||
"ms-MY": [0, 1],
|
||||
"sv-SE": [0, 2],
|
||||
"uk-UA": [0, 2],
|
||||
"th-TH": [0, 1],
|
||||
"vi-VN": [0, 1],
|
||||
"fi-FI": [0, 3],
|
||||
"no-NO": [0, 0],
|
||||
"gl-ES": [0, 2],
|
||||
"ar-JO": [0, 2],
|
||||
"ur-IN": [0, 0],
|
||||
"el-GR": [0, 1],
|
||||
"ro-RO": [0, 3],
|
||||
"da-DK": [0, 2],
|
||||
"ta-IN": [0, 0],
|
||||
"hr-HR": [0, 3],
|
||||
"mk-MK": [0, 0],
|
||||
"sk-SK": [0, 1],
|
||||
"he-IL": [0, 2],
|
||||
"sr-RS": [0, 1],
|
||||
"hu-HU": [0, 3],
|
||||
"bg-BG": [0, 2],
|
||||
"cs-CZ": [0, 1],
|
||||
"bs-BA": [0, 0],
|
||||
"sl-SI": [0, 2],
|
||||
"az-AZ": [0, 0],
|
||||
"et-EE": [0, 1],
|
||||
"lv-LV": [0, 1],
|
||||
"af-ZA": [0, 0],
|
||||
"cy-GB": [0, 0],
|
||||
"eu-ES": [0, 1],
|
||||
"fa-IR": [0, 1],
|
||||
"lt-LT": [0, 1],
|
||||
"fi-FI": [0, 3],
|
||||
"fil-PH": [0, 0],
|
||||
"fr-FR": [0, 3],
|
||||
"ga-IE": [0, 0],
|
||||
"gl-ES": [0, 2],
|
||||
"gu-IN": [0, 0],
|
||||
"he-IL": [0, 2],
|
||||
"hi-IN": [0, 0],
|
||||
"hr-HR": [0, 3],
|
||||
"hu-HU": [0, 3],
|
||||
"hy-AM": [0, 0],
|
||||
"id-ID": [0, 1],
|
||||
"is-IS": [0, 1],
|
||||
"it-IT": [2, 2],
|
||||
"ja-JP": [0, 0],
|
||||
"jv-ID": [0, 0],
|
||||
"ka-GE": [0, 1],
|
||||
"kk-KZ": [0, 0],
|
||||
"km-KH": [0, 0],
|
||||
"kn-IN": [0, 0],
|
||||
"ko-KR": [0, 1],
|
||||
"lb-LU": [0, 0],
|
||||
"lo-LA": [0, 0],
|
||||
"lt-LT": [0, 1],
|
||||
"lv-LV": [0, 1],
|
||||
"mk-MK": [0, 0],
|
||||
"ml-IN": [0, 1],
|
||||
"mn-MN": [0, 0],
|
||||
"mr-IN": [0, 0],
|
||||
"ms-MY": [0, 1],
|
||||
"mt-MT": [0, 0],
|
||||
"my-MM": [0, 0],
|
||||
"nb-NO": [0, 3],
|
||||
"ne-NP": [0, 0],
|
||||
"nl-BE": [0, 3],
|
||||
"pl-PL": [0, 3],
|
||||
"ps-AF": [0, 0],
|
||||
"pt-BR": [3, 3],
|
||||
"ro-RO": [0, 3],
|
||||
"ru-RU": [2, 2],
|
||||
"si-LK": [0, 0],
|
||||
"sk-SK": [0, 1],
|
||||
"sl-SI": [0, 2],
|
||||
"so-SO": [0, 0],
|
||||
"sq-AL": [0, 0],
|
||||
"sr-RS": [0, 1],
|
||||
"su-ID": [0, 0],
|
||||
"sv-SE": [0, 2],
|
||||
"sw-KE": [0, 0],
|
||||
"sw-TZ": [0, 0],
|
||||
"is-IS": [0, 1],
|
||||
"mt-MT": [0, 0],
|
||||
"ps-AF": [0, 0],
|
||||
"mr-IN": [0, 0],
|
||||
"bn-IN": [0, 0],
|
||||
"lb-LU": [0, 0],
|
||||
"hi-IN": [0, 0],
|
||||
"gu-IN": [0, 0],
|
||||
"km-KH": [0, 0],
|
||||
"ne-NP": [0, 0],
|
||||
"lo-LA": [0, 0],
|
||||
"ta-IN": [0, 0],
|
||||
"te-IN": [0, 1],
|
||||
"kn-IN": [0, 0],
|
||||
"ml-IN": [0, 1],
|
||||
"kk-KZ": [0, 0],
|
||||
"so-SO": [0, 0],
|
||||
"th-TH": [0, 1],
|
||||
"tr-TR": [0, 1],
|
||||
"uk-UA": [0, 2],
|
||||
"ur-IN": [0, 0],
|
||||
"uz-UZ": [0, 0],
|
||||
"ka-GE": [0, 1],
|
||||
"my-MM": [0, 0],
|
||||
"mn-MN": [0, 0],
|
||||
"hy-AM": [0, 0],
|
||||
"am-ET": [0, 0],
|
||||
"nb-NO": [0, 3],
|
||||
"eu-ES": [0, 1],
|
||||
"fil-PH": [0, 0],
|
||||
"ga-IE": [0, 0],
|
||||
"si-LK": [0, 0],
|
||||
"sq-AL": [0, 0],
|
||||
"su-ID": [0, 0],
|
||||
"vi-VN": [0, 1],
|
||||
"wuu-CN": [0, 0],
|
||||
"yue-CN": [0, 0],
|
||||
"zh-CN": [0, 1],
|
||||
"zh-HK": [0, 2],
|
||||
"zu-ZA": [0, 0]
|
||||
};
|
||||
|
||||
|