Merge branch 'current' into next

This commit is contained in:
Franck Nijhof 2024-09-24 13:57:20 +02:00
commit 95de69ca39
No known key found for this signature in database
GPG Key ID: D62583BA8AB11CA3
222 changed files with 5562 additions and 1396 deletions

View File

@ -1,3 +1,10 @@
<!--
You are amazing! Thanks for contributing to our project!
Please, DO NOT DELETE ANY TEXT from this template! (unless instructed).
Before submitting your pull request, please verify that you have chosen the correct target branch,
and that the PR preview looks fine and does not include unrelated changes.
-->
## Proposed change
<!--
Describe the big picture of your changes here to communicate to the

View File

@ -10,7 +10,7 @@ jobs:
- name: Check out files from GitHub
uses: actions/checkout@v4.1.7
- name: Setting up Node.js
uses: actions/setup-node@v4.0.3
uses: actions/setup-node@v4.0.4
with:
node-version: 20
cache: "npm"
@ -27,7 +27,7 @@ jobs:
- name: Check out files from GitHub
uses: actions/checkout@v4.1.7
- name: Setting up Node.js
uses: actions/setup-node@v4.0.3
uses: actions/setup-node@v4.0.4
with:
node-version: 20
cache: "npm"

View File

@ -4,14 +4,14 @@ ruby '> 2.5.0'
group :development do
gem 'rake', '13.2.1'
gem 'jekyll', '4.3.3'
gem 'jekyll', '4.3.4'
gem 'compass', '1.0.3'
gem 'sass-globbing', '1.1.5'
gem 'stringex', '2.8.6'
# > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189
gem 'sassc', '2.1.0'
gem 'rubocop', '1.65.1'
gem 'ruby-lsp', '0.17.11'
gem 'rubocop', '1.66.1'
gem 'ruby-lsp', '0.18.2'
gem 'rackup', '2.1.0'
end

View File

@ -21,20 +21,24 @@ GEM
sass (>= 3.3.0, < 3.5)
compass-import-once (1.0.5)
sass (>= 3.2, < 3.5)
concurrent-ruby (1.3.3)
concurrent-ruby (1.3.4)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
eventmachine (1.2.7)
ffi (1.17.0-arm64-darwin)
ffi (1.17.0-x86_64-linux-gnu)
forwardable-extended (2.6.0)
google-protobuf (4.27.3-x86_64-linux)
google-protobuf (4.28.2-arm64-darwin)
bigdecimal
rake (>= 13)
google-protobuf (4.28.2-x86_64-linux)
bigdecimal
rake (>= 13)
http_parser.rb (0.8.0)
i18n (1.14.5)
i18n (1.14.6)
concurrent-ruby (~> 1.0)
jekyll (4.3.3)
jekyll (4.3.4)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
@ -72,20 +76,22 @@ GEM
listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
logger (1.6.0)
logger (1.6.1)
mercenary (0.4.0)
multi_json (1.15.0)
mustermann (3.0.1)
mustermann (3.0.3)
ruby2_keywords (~> 0.0.1)
nokogiri (1.16.7-arm64-darwin)
racc (~> 1.4)
nokogiri (1.16.7-x86_64-linux)
racc (~> 1.4)
parallel (1.25.1)
parser (3.3.4.1)
parallel (1.26.3)
parser (3.3.5.0)
ast (~> 2.4.1)
racc
pathutil (0.16.2)
forwardable-extended (~> 2.6)
prism (0.30.0)
prism (1.0.0)
public_suffix (6.0.1)
racc (1.8.1)
rack (3.1.7)
@ -102,38 +108,40 @@ GEM
rb-fsevent (0.11.2)
rb-inotify (0.11.1)
ffi (~> 1.0)
rbs (3.5.2)
rbs (3.5.3)
logger
regexp_parser (2.9.2)
rexml (3.3.4)
strscan
rouge (4.3.0)
rubocop (1.65.1)
rexml (3.3.7)
rouge (4.4.0)
rubocop (1.66.1)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.4, < 3.0)
rexml (>= 3.2.5, < 4.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-ast (>= 1.32.2, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 3.0)
rubocop-ast (1.32.0)
rubocop-ast (1.32.3)
parser (>= 3.3.1.0)
ruby-lsp (0.17.11)
ruby-lsp (0.18.2)
language_server-protocol (~> 3.17.0)
prism (>= 0.29.0, < 0.31)
prism (~> 1.0)
rbs (>= 3, < 4)
sorbet-runtime (>= 0.5.10782)
ruby-progressbar (1.13.0)
ruby2_keywords (0.0.5)
safe_yaml (1.0.5)
sass (3.4.25)
sass-embedded (1.77.8-x86_64-linux-gnu)
google-protobuf (~> 4.26)
sass-embedded (1.79.3-arm64-darwin)
google-protobuf (~> 4.27)
sass-embedded (1.79.3-x86_64-linux-gnu)
google-protobuf (~> 4.27)
sass-globbing (1.1.5)
sass (>= 3.1)
sassc (2.1.0)
ffi (~> 1.9)
sassc (2.1.0-x86_64-linux)
ffi (~> 1.9)
sinatra (4.0.0)
@ -142,25 +150,25 @@ GEM
rack-protection (= 4.0.0)
rack-session (>= 2.0.0, < 3)
tilt (~> 2.0)
sorbet-runtime (0.5.11514)
sorbet-runtime (0.5.11581)
stringex (2.8.6)
strscan (3.1.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
tilt (2.4.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
tzinfo-data (1.2024.1)
tzinfo-data (1.2024.2)
tzinfo (>= 1.0.0)
unicode-display_width (2.5.0)
webrick (1.8.1)
unicode-display_width (2.6.0)
webrick (1.8.2)
PLATFORMS
arm64-darwin-23
x86_64-linux
DEPENDENCIES
compass (= 1.0.3)
jekyll (= 4.3.3)
jekyll (= 4.3.4)
jekyll-commonmark (= 1.4.0)
jekyll-paginate (= 1.1.0)
jekyll-sitemap (= 1.4.0)
@ -168,8 +176,8 @@ DEPENDENCIES
nokogiri (= 1.16.7)
rackup (= 2.1.0)
rake (= 13.2.1)
rubocop (= 1.65.1)
ruby-lsp (= 0.17.11)
rubocop (= 1.66.1)
ruby-lsp (= 0.18.2)
sass-globbing (= 1.1.5)
sassc (= 2.1.0)
sinatra (= 4.0.0)

View File

@ -107,9 +107,9 @@ social:
# Home Assistant release details
current_major_version: 2024
current_minor_version: 8
current_patch_version: 0
date_released: 2024-08-07
current_minor_version: 9
current_patch_version: 3
date_released: 2024-09-24
# Either # or the anchor link to latest release notes in the blog post.
# Must be prefixed with a # and have double quotes around it.

310
package-lock.json generated
View File

@ -20,7 +20,7 @@
"remark-lint-prohibited-strings": "^4.0.0",
"remark-lint-unordered-list-marker-style": "^4.0.0",
"remark-stringify": "^11.0.0",
"textlint": "^14.0.5",
"textlint": "^14.2.0",
"textlint-filter-rule-comments": "^1.2.2",
"textlint-rule-common-misspellings": "^1.0.1",
"textlint-rule-terminology": "^5.0.13"
@ -416,65 +416,65 @@
"dev": true
},
"node_modules/@textlint/ast-tester": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.0.5.tgz",
"integrity": "sha512-fXIffKbOXwULZwMib9BtGf+IkARXs/CnEmFhAGwLhzPjLTB9YgNftjTyxmVvNbpKA02KTMdK3JFpgZ5Vyxsykg==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.2.0.tgz",
"integrity": "sha512-k7HAVjv5hUFNWUeb1h+3yaoSnwhjKJ55FaFVlUPsW5qFRIAkWaZ0Xpo2IEAyGaa5jgulWe8vEX6ZTmvwi6bzUA==",
"dev": true,
"dependencies": {
"@textlint/ast-node-types": "^14.0.5",
"@textlint/ast-node-types": "^14.2.0",
"debug": "^4.3.4"
}
},
"node_modules/@textlint/ast-tester/node_modules/@textlint/ast-node-types": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.5.tgz",
"integrity": "sha512-pOMQX9MGee9VYKYVsmQzJpZxllEiTHUgZgpRxorHDNqojrlU6cBKWDX1+cQhptpP+Ry/wS2VsWK6kHx6u1v7CQ==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz",
"integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==",
"dev": true
},
"node_modules/@textlint/ast-traverse": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.0.5.tgz",
"integrity": "sha512-5q/7vifbG8mqDEpByaUjAfHHjJlFiS737axziNQ8qXVswyrMdmRIRE9Wv0unvrs0W9mLKHcsPHh8JQd1RGpfIg==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.2.0.tgz",
"integrity": "sha512-qmB+bbLTndlgIObMxoXhdE/t1o6JUQxgw1pzLEtd7rvZO7sNH4Agui1ddlWjaIczj+K40tm8jsfi/74NJtJ9fg==",
"dev": true,
"dependencies": {
"@textlint/ast-node-types": "^14.0.5"
"@textlint/ast-node-types": "^14.2.0"
}
},
"node_modules/@textlint/ast-traverse/node_modules/@textlint/ast-node-types": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.5.tgz",
"integrity": "sha512-pOMQX9MGee9VYKYVsmQzJpZxllEiTHUgZgpRxorHDNqojrlU6cBKWDX1+cQhptpP+Ry/wS2VsWK6kHx6u1v7CQ==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz",
"integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==",
"dev": true
},
"node_modules/@textlint/config-loader": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.0.5.tgz",
"integrity": "sha512-nZZGwXei1kizl8+3uvahfHcMg2npMnuE2WWQ8z8c8seNsnHLitoTNoSR8IQYZ0XDQ9Iy3ROOkRX2qUvKCQPgQQ==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.2.0.tgz",
"integrity": "sha512-LDIr0zykTVsIWz/q+NIiYXoF0Fqdl1X+JLGIAG6E2CTKJhsGW4naKvt2d9zWhCjSM7E9ZX6XAdvo16WDJALYlg==",
"dev": true,
"dependencies": {
"@textlint/kernel": "^14.0.5",
"@textlint/module-interop": "^14.0.5",
"@textlint/types": "^14.0.5",
"@textlint/utils": "^14.0.5",
"@textlint/kernel": "^14.2.0",
"@textlint/module-interop": "^14.2.0",
"@textlint/types": "^14.2.0",
"@textlint/utils": "^14.2.0",
"debug": "^4.3.4",
"rc-config-loader": "^4.1.3",
"try-resolve": "^1.0.1"
}
},
"node_modules/@textlint/feature-flag": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.0.5.tgz",
"integrity": "sha512-hTlCE+cyJ6BxsXgDJfe/mF/b/GVKrPUMzgqbd6n5bbGuhdTYO0hDrl/nCAbasQz4oJh6TGq4WH2dNts38TlZng==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.2.0.tgz",
"integrity": "sha512-KjO4ACoKhA10XUi4Wp3dKixfEMFQAE+WLgCDEB5k+cAKPkwaFYjN5vezA1TGe+fSHcQiBjv268F0r3hmtsPf8Q==",
"dev": true
},
"node_modules/@textlint/fixer-formatter": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.0.5.tgz",
"integrity": "sha512-fRXWUQVBbg4Gp2k254YLbEzn42GwBcmAmRUODSJkXkF8oAu91uEQJ6uJlOE0/plQfZUOgQebco9KPmeL8+Jb+A==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.2.0.tgz",
"integrity": "sha512-Ji4Kq0hckDj1WranfNwnN87nUE4EldMyf7z2AEQ51vDSqLeYk+WCQo6/Gc+a+ytQt5s/QPyfcpiHItr75xHF8g==",
"dev": true,
"dependencies": {
"@textlint/module-interop": "^14.0.5",
"@textlint/types": "^14.0.5",
"@textlint/module-interop": "^14.2.0",
"@textlint/types": "^14.2.0",
"chalk": "^4.1.2",
"debug": "^4.3.4",
"diff": "^5.2.0",
@ -485,39 +485,39 @@
}
},
"node_modules/@textlint/kernel": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.0.5.tgz",
"integrity": "sha512-AfCGRSq4XuH1UCAcKKurbBRxxypTJzdWmG3Netpa/cGmkdI4tcL+kfaimG3hSnXvQfv6VIzHASBB6u2WpUAGXg==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.2.0.tgz",
"integrity": "sha512-QYF2ZGnkLhd+GYGWL2wpZNjK0ec8HqwGjAsmc49E0g5NKMDvX3U/TYGwjsM8g6WCxGVGS625wr0tm6UxIAK5+Q==",
"dev": true,
"dependencies": {
"@textlint/ast-node-types": "^14.0.5",
"@textlint/ast-tester": "^14.0.5",
"@textlint/ast-traverse": "^14.0.5",
"@textlint/feature-flag": "^14.0.5",
"@textlint/source-code-fixer": "^14.0.5",
"@textlint/types": "^14.0.5",
"@textlint/utils": "^14.0.5",
"@textlint/ast-node-types": "^14.2.0",
"@textlint/ast-tester": "^14.2.0",
"@textlint/ast-traverse": "^14.2.0",
"@textlint/feature-flag": "^14.2.0",
"@textlint/source-code-fixer": "^14.2.0",
"@textlint/types": "^14.2.0",
"@textlint/utils": "^14.2.0",
"debug": "^4.3.4",
"fast-equals": "^4.0.3",
"structured-source": "^4.0.0"
}
},
"node_modules/@textlint/kernel/node_modules/@textlint/ast-node-types": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.5.tgz",
"integrity": "sha512-pOMQX9MGee9VYKYVsmQzJpZxllEiTHUgZgpRxorHDNqojrlU6cBKWDX1+cQhptpP+Ry/wS2VsWK6kHx6u1v7CQ==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz",
"integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==",
"dev": true
},
"node_modules/@textlint/linter-formatter": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.0.5.tgz",
"integrity": "sha512-Ht9/FNwoZuW95rsgJ4aR+d0LSkVqw5dC+wp5Hab4HtPhdSsDcTEA1Q53JUubjhcpKnwNxv/aNxh1iXMBiNrSqA==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.2.0.tgz",
"integrity": "sha512-9+5n3UIhbKGNCvI5s0BJexHrWqw/TZQnUQLpvbL04SnJqwSH2xlUQfEwPAybPO1Tb9coUGHYlBZObRxy9tRwig==",
"dev": true,
"dependencies": {
"@azu/format-text": "^1.0.2",
"@azu/style-format": "^1.0.1",
"@textlint/module-interop": "^14.0.5",
"@textlint/types": "^14.0.5",
"@textlint/module-interop": "^14.2.0",
"@textlint/types": "^14.2.0",
"chalk": "^4.1.2",
"debug": "^4.3.4",
"js-yaml": "^3.14.1",
@ -531,12 +531,12 @@
}
},
"node_modules/@textlint/markdown-to-ast": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.0.5.tgz",
"integrity": "sha512-m6EIJL/qhvGuB5zXCQNHBF8MdhPpN4s2F2WPxfwFunXb/K58murSEkUTCviuHiDG/7XOFT030dY9eck3Pez0gg==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.2.0.tgz",
"integrity": "sha512-vDcj8fuo1ZJinLtDwMO8yh9hxWujDFQRJ/MDd4Y+vxGDJRnB0c9ZVPOOPlQjaumlVNI7CB1fDsz+jx8z6/d8iw==",
"dev": true,
"dependencies": {
"@textlint/ast-node-types": "^14.0.5",
"@textlint/ast-node-types": "^14.2.0",
"debug": "^4.3.4",
"mdast-util-gfm-autolink-literal": "^0.1.3",
"neotraverse": "^0.6.15",
@ -548,9 +548,9 @@
}
},
"node_modules/@textlint/markdown-to-ast/node_modules/@textlint/ast-node-types": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.5.tgz",
"integrity": "sha512-pOMQX9MGee9VYKYVsmQzJpZxllEiTHUgZgpRxorHDNqojrlU6cBKWDX1+cQhptpP+Ry/wS2VsWK6kHx6u1v7CQ==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz",
"integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==",
"dev": true
},
"node_modules/@textlint/markdown-to-ast/node_modules/bail": {
@ -780,73 +780,73 @@
}
},
"node_modules/@textlint/module-interop": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.0.5.tgz",
"integrity": "sha512-naK1z6omW/1C0UF8kLlnmtx0Ikmnp2DUUm5C2mEt5dpEqpXF39/dKFNbMOrac0nLh/65QCpj8m9GlpbbrKKjHw==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.2.0.tgz",
"integrity": "sha512-1X3DfCwF3y07eVyK41K6As0L+Ekyn5lAh98hVoUNOGDJQtjRvM3aKZ8z0o0BtbCeH7nYTyExo31lUgURWuDWnQ==",
"dev": true
},
"node_modules/@textlint/source-code-fixer": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.0.5.tgz",
"integrity": "sha512-JNSBVFQ09LXxeiebQ4PI72N1XTW/CZb3gVewnojL/un39oAo3yGjzFox/59TL5rdrGAqsijOq4CrWkJ+3Xb2kg==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.2.0.tgz",
"integrity": "sha512-xMFtpwcs5Z1WTiFBmLN2Fe2GQg3u0kEZgF42AvFHKphbmToKYlGUMw1jaMsEXaxrTOTjqwj3SycRR7rrgKgOxg==",
"dev": true,
"dependencies": {
"@textlint/types": "^14.0.5",
"@textlint/types": "^14.2.0",
"debug": "^4.3.4"
}
},
"node_modules/@textlint/text-to-ast": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.0.5.tgz",
"integrity": "sha512-3dq1OL6gU522H+/b+NmE4z8OXMG5aLgKAlBu1zBbcXGAjgtIEdplYn6XGvpkGRM2FnypMzsDIUjzwUS8bjbpWw==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.2.0.tgz",
"integrity": "sha512-i71ksLnlkb6epmeOiRv/xiHHLBWOtCx3gUBiTr8YC/9xbdhzBehFblJ6IjeikIJYPTfpzDECRmDqDNq7Cvos3Q==",
"dev": true,
"dependencies": {
"@textlint/ast-node-types": "^14.0.5"
"@textlint/ast-node-types": "^14.2.0"
}
},
"node_modules/@textlint/text-to-ast/node_modules/@textlint/ast-node-types": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.5.tgz",
"integrity": "sha512-pOMQX9MGee9VYKYVsmQzJpZxllEiTHUgZgpRxorHDNqojrlU6cBKWDX1+cQhptpP+Ry/wS2VsWK6kHx6u1v7CQ==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz",
"integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==",
"dev": true
},
"node_modules/@textlint/textlint-plugin-markdown": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.0.5.tgz",
"integrity": "sha512-QjfATGYKuPkLVT+GsG8WjwrkgNpksKED6Qd4TDL/q2LwNVEZ6ULFLZmufL9z9ENCeBs6y0YDE7IbE26Vhq5zww==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.2.0.tgz",
"integrity": "sha512-TDd132D816R5q+/ZDfxe15Cxua6RNegkQzPv0iaZZKob6t8lhMND6lUHfbXEEGHCtyignxZUXQXZGZcjKtWL4A==",
"dev": true,
"dependencies": {
"@textlint/markdown-to-ast": "^14.0.5"
"@textlint/markdown-to-ast": "^14.2.0"
}
},
"node_modules/@textlint/textlint-plugin-text": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.0.5.tgz",
"integrity": "sha512-OJJP5WXo3rqqL7bXYy44f8z9s1Ssb/2/nmTStbTepSOujQjOoEwehtwV+QBwdzwRkzbQFcZ0HS+dJ/yNdneKWA==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.2.0.tgz",
"integrity": "sha512-5E39BWG9T5c0XOz5Vxdffa17FDwu9Woud29bYyq3OQ+JjwMQXSz3JPQ1MTNsJbqn0R58+ZKXfaWEZ/Gsoau5UA==",
"dev": true,
"dependencies": {
"@textlint/text-to-ast": "^14.0.5"
"@textlint/text-to-ast": "^14.2.0"
}
},
"node_modules/@textlint/types": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.0.5.tgz",
"integrity": "sha512-scrY5Zzz/SSAXaxw6OspbgFuiyQpHq88iK7OhUYE3BMnM90ijKzSohGMUHHK872zenzGTTOepE2sdjkIyXr1pA==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.2.0.tgz",
"integrity": "sha512-lK8HCnkNg+spOHVw1HX0AvwP1BZVlJsbL4OLIHnwfvakfUxLQFXtJ6x2asAXMNMQGqwSWKQrLBCmWZWVsDtReg==",
"dev": true,
"dependencies": {
"@textlint/ast-node-types": "^14.0.5"
"@textlint/ast-node-types": "^14.2.0"
}
},
"node_modules/@textlint/types/node_modules/@textlint/ast-node-types": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.5.tgz",
"integrity": "sha512-pOMQX9MGee9VYKYVsmQzJpZxllEiTHUgZgpRxorHDNqojrlU6cBKWDX1+cQhptpP+Ry/wS2VsWK6kHx6u1v7CQ==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz",
"integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==",
"dev": true
},
"node_modules/@textlint/utils": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.0.5.tgz",
"integrity": "sha512-+EDQlPx4t/DcH4EYXB62J+5mTRdJaMlFEyzCK7QUfZ9u2JeIE+AFt4D7xDAeiXcdxYTAm2ASdJ+lw7z3Z+vasQ==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.2.0.tgz",
"integrity": "sha512-eXRygFRC1CK+BHRqIe2RRFiC8VJMpV7NwsLdBKsFMcivgNRgL6hkhhbrMI6MbPg+jdWM+nK5Z9+QpPYL9c9/pg==",
"dev": true
},
"node_modules/@types/concat-stream": {
@ -3604,9 +3604,9 @@
}
},
"node_modules/minipass": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz",
"integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==",
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"dev": true,
"engines": {
"node": ">=16 || 14 >=14.17"
@ -3637,9 +3637,9 @@
"dev": true
},
"node_modules/neotraverse": {
"version": "0.6.15",
"resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.15.tgz",
"integrity": "sha512-HZpdkco+JeXq0G+WWpMJ4NsX3pqb5O7eR9uGz3FfoFt+LYzU8iRWp49nJtud6hsDoywM8tIrDo3gjgmOqJA8LA==",
"version": "0.6.18",
"resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz",
"integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==",
"dev": true,
"engines": {
"node": ">= 10"
@ -3749,6 +3749,12 @@
"node": ">=4"
}
},
"node_modules/package-json-from-dist": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
"integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
"dev": true
},
"node_modules/parse-entities": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
@ -3823,29 +3829,26 @@
"dev": true
},
"node_modules/path-scurry": {
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
"integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dev": true,
"dependencies": {
"lru-cache": "^9.1.1 || ^10.0.0",
"lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
},
"engines": {
"node": ">=16 || 14 >=14.17"
"node": ">=16 || 14 >=14.18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/path-scurry/node_modules/lru-cache": {
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz",
"integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==",
"dev": true,
"engines": {
"node": "14 || >=16.14"
}
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
},
"node_modules/path-to-glob-pattern": {
"version": "2.0.1",
@ -6027,27 +6030,27 @@
"dev": true
},
"node_modules/textlint": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/textlint/-/textlint-14.0.5.tgz",
"integrity": "sha512-k2x1itoYuUPE6FCodxV7cW0Rcnycx8DVYMGQd8G/iFGPaT8As3XdXMfATTGRQIkMR5TkbCeBVVrWKTNHotCx2g==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/textlint/-/textlint-14.2.0.tgz",
"integrity": "sha512-f3vT1mwpHuP2IWNG7AiE7n4nRKiOI/4Rxz7wQSv6KWaCgigcwi9x4JCMWKn1gpEvC/bssKW1/G0XxzHvKybCKg==",
"dev": true,
"dependencies": {
"@textlint/ast-node-types": "^14.0.5",
"@textlint/ast-traverse": "^14.0.5",
"@textlint/config-loader": "^14.0.5",
"@textlint/feature-flag": "^14.0.5",
"@textlint/fixer-formatter": "^14.0.5",
"@textlint/kernel": "^14.0.5",
"@textlint/linter-formatter": "^14.0.5",
"@textlint/module-interop": "^14.0.5",
"@textlint/textlint-plugin-markdown": "^14.0.5",
"@textlint/textlint-plugin-text": "^14.0.5",
"@textlint/types": "^14.0.5",
"@textlint/utils": "^14.0.5",
"@textlint/ast-node-types": "^14.2.0",
"@textlint/ast-traverse": "^14.2.0",
"@textlint/config-loader": "^14.2.0",
"@textlint/feature-flag": "^14.2.0",
"@textlint/fixer-formatter": "^14.2.0",
"@textlint/kernel": "^14.2.0",
"@textlint/linter-formatter": "^14.2.0",
"@textlint/module-interop": "^14.2.0",
"@textlint/textlint-plugin-markdown": "^14.2.0",
"@textlint/textlint-plugin-text": "^14.2.0",
"@textlint/types": "^14.2.0",
"@textlint/utils": "^14.2.0",
"debug": "^4.3.4",
"file-entry-cache": "^5.0.1",
"get-stdin": "^5.0.1",
"glob": "^7.2.3",
"glob": "^10.4.5",
"md5": "^2.3.0",
"mkdirp": "^0.5.6",
"optionator": "^0.9.3",
@ -6169,11 +6172,70 @@
}
},
"node_modules/textlint/node_modules/@textlint/ast-node-types": {
"version": "14.0.5",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.5.tgz",
"integrity": "sha512-pOMQX9MGee9VYKYVsmQzJpZxllEiTHUgZgpRxorHDNqojrlU6cBKWDX1+cQhptpP+Ry/wS2VsWK6kHx6u1v7CQ==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz",
"integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==",
"dev": true
},
"node_modules/textlint/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/textlint/node_modules/glob": {
"version": "10.4.5",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^3.1.2",
"minimatch": "^9.0.4",
"minipass": "^7.1.2",
"package-json-from-dist": "^1.0.0",
"path-scurry": "^1.11.1"
},
"bin": {
"glob": "dist/esm/bin.mjs"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/textlint/node_modules/jackspeak": {
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
"optionalDependencies": {
"@pkgjs/parseargs": "^0.11.0"
}
},
"node_modules/textlint/node_modules/minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",

View File

@ -15,7 +15,7 @@
"remark-lint-prohibited-strings": "^4.0.0",
"remark-lint-unordered-list-marker-style": "^4.0.0",
"remark-stringify": "^11.0.0",
"textlint": "^14.0.5",
"textlint": "^14.2.0",
"textlint-filter-rule-comments": "^1.2.2",
"textlint-rule-common-misspellings": "^1.0.1",
"textlint-rule-terminology": "^5.0.13"

View File

@ -40,29 +40,17 @@ module Jekyll
end
<<~MARKUP
<script>
function showDetails(el) {
const content = el.parentElement.querySelector(".details-block-content");
const up = el.querySelector("svg#up");
const down = el.querySelector("svg#down");
const shouldExpand = down.style.display === "block";
up.style.display = shouldExpand ? "block" : "none";
down.style.display = !shouldExpand ? "block" : "none";
content.hidden = !shouldExpand;
el.ariaExpanded = shouldExpand;
}
</script>
<div class="details-block">
<div class='details-block-item'>
<button class='details-block-title' onclick='showDetails(this)' aria-controls="content_#{idx}" aria-expanded="false">
<details class='details-block-item'>
<summary class='details-block-title'>
<span>#{icon}#{title}</span>
<div class='details-block-arrow'>
<svg id="down" style="display: block;" width="24" height="24" viewBox="0 0 24 24"><path d="M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z" /></svg>
<svg id="up" style="display: none;" width="24" height="24" viewBox="0 0 24 24"><path d="M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z" /></svg>
</div>
</button>
<div class='details-block-content' id="content_#{idx}" hidden>#{contents}</div>
<svg class="down" width="24" height="24" viewBox="0 0 24 24"><path d="M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z" /></svg>
<svg class="up" width="24" height="24" viewBox="0 0 24 24"><path d="M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z" /></svg>
</div>
</summary>
<div class='details-block-content' id="content_#{idx}">#{contents}</div>
</details>
</div>
MARKUP
end

View File

@ -184,14 +184,14 @@ header .grid {
@include box-sizing(border-box);
@include transition(all 0.5s linear);
content: "";
display: inline-block;
display: flex;
justify-content: center;
align-items: center;
width: 32px;
height: 32px;
padding: 4px 9px;
background: $primary-color;
text-align: center;
font-family: $sans-serif;
font-size: 16px;
color: $white;
white-space: nowrap;
border-radius: 24px;
@ -203,6 +203,7 @@ header .grid {
#toggle:checked + .toggle::after {
content: attr(data-close);
padding-bottom: 2px;
}
/* submenus */

View File

@ -10,6 +10,16 @@ div.details-block {
border: 1px solid rgba(0, 0, 0, .12);
border-radius: 16px;
&[open] .details-block-title {
.up {
display: block;
}
.down {
display: none;
}
}
.details-block-title {
font-weight: bold;
font-size: 18px;
@ -23,6 +33,14 @@ div.details-block {
border: 0px;
width: 100%;
padding: 0;
.up {
display: none;
}
.down {
display: block;
}
}
.details-block-content {
margin: 4px 0 12px 0;

View File

@ -155,6 +155,9 @@
Covers are devices such as blinds, garage doors, etc that can be opened and
closed and optionally set to a specific position.
link: /integrations/cover
- term: Custom integration
definition: >-
A custom integration is an integration that has been created by someone from the Home Assistant community and has been published for others to use at their own risk. Custom integrations are not supported by the Home Assistant project. They are not reviewed or tested by the Home Assistant development team and thus may negatively impact the stability of your Home Assistant instance. An example of a custom integration is the [Spook](https://spook.boo/) integration.
- term: Customize
definition: >-
Customization allows you to overwrite the default parameters of your devices
@ -219,7 +222,7 @@
properties of entities are related to the state. Entities have optional
attributes such as friendly name, unit of measurement, and an icon or
picture that can be displayed in the frontend.
link: /docs/configuration/state_object/
link: /docs/configuration/entities_domains/
excerpt: >
An entity represents a sensor, actor, or function in Home Assistant.
Entities are used to monitor physical properties or to control other
@ -228,7 +231,7 @@
- entities
- term: Event
definition: >-
An event is when something happens.
Every time something happens in Home Assistant, an event is fired. There are different types of events, such as state change events, when an action was triggered, or the time changed. All entities produce state change events. Every time a state changes, a state change event is produced. Events can be used to trigger automations or scripts. For example, you can trigger an automation when a light is turned on, then a speaker turns on in that room. Events can also be used to trigger actions in the frontend. For example, you can trigger an action when a button is pressed.
link: /docs/configuration/events/
aliases:
- events
@ -350,7 +353,7 @@
excerpt: >
Integrations connect and integrate Home Assistant with your devices,
services, and more.
link: /integrations/
link: /getting-started/concepts-terminology/#integrations
aliases:
- integrations
- term: Intent
@ -489,20 +492,19 @@
entities for organic, paper, and packaging waste. In terms of functionality,
the information service is like a device. It is called *service* to avoid
confusion, as it does not come with a piece of hardware.
link: /docs/scripts/service-calls/
link: /docs/scripts/perform-actions/
aliases:
- services
- term: State
definition: |-
The state holds the information of interest of an entity. For example, if a
light is on or off, the current temperature, or the amount of energy used.
The data type of state is `string` (a textual value). Entities store 2
timestamps related to the state: `last_updated` and `last_changed`. Each
light is on or off, the current temperature, or the amount of energy used. Entities store 3
timestamps related to the state: `last_updated`, `last_changed`, and `last_reported`. Each
entity has exactly one state and the state only holds one value at a time.
However, entities can store attributes related to that state. For example,
the state of a light is _on_, and the related state attributes could be its
current brightness and color values. State changes can be used as the source
of triggers. The current state can be used in conditions.
current brightness and color values. State change events can be used as triggers.
The current state can be used in conditions.
link: /docs/configuration/state_object/
aliases:

View File

@ -87,7 +87,7 @@ automation:
## Event trigger
Fires when an event is being received. Events are the raw building blocks of Home Assistant. You can match events on just the event name or also require specific event data or context to be present.
An event trigger fires when an [event](/docs/configuration/events/) is being received. Events are the raw building blocks of Home Assistant. You can match events on just the event name or also require specific event data or context to be present.
Events can be fired by integrations or via the API. There is no limitation to the types. A list of built-in events can be found [here](/docs/configuration/events/).
@ -294,8 +294,8 @@ In the example above, the trigger would fire a single time if a numeric_state go
{% endnote %}
Number helpers (`input_number` entities), `number`, `sensor`, and `zone` entities
that contain a numeric value, can be used in the `above` and `below` thresholds,
making the trigger more dynamic, like:
that contain a numeric value, can be used in the `above` and `below` thresholds.
However, the comparison will only be made when the entity specified in the trigger is updated. This would look like:
```yaml
automation:
@ -359,12 +359,22 @@ If for your use case this is undesired, you could consider using the automation
## State trigger
Fires when the state of any of given entities changes. If only `entity_id` is given, the trigger will fire for all state changes, even if only state attributes change.
If at least one of `from`, `to`, `not_from`, or `not_to` are given, the trigger will fire on any matching state change, but not if only attributes change. To trigger on all state changes, but not on changed attributes, set at least one of `from`, `to`, `not_from`, or `not_to` to `null`.
In general, the state trigger fires when the state of any of given entities **changes**. The behavior is as follows:
{% note %}
The values you see in your overview will often not be the same as the actual state of the entity. For instance, the overview may show `Connected` when the underlying entity is actually `on`. You should check the state of the entity by looking in the _States_ menu under _Developer tools_.
{% endnote %}
- If only the `entity_id` is given, the trigger fires for **all** state changes, even if only a state attribute changed.
- If at least one of `from`, `to`, `not_from`, or `not_to` are given, the trigger fires on any matching state change, but not if only an attribute changed.
- To trigger on all state changes, but not on changed attributes, set at least one of `from`, `to`, `not_from`, or `not_to` to `null`.
- Use of the `for` option doesn't survive a Home Assistant restart or the reload of automations.
- During restart or reload, automations that were awaiting `for` the trigger to pass, are reset.
- If for your use case this is undesired, you could consider using the automation to set an [`input_datetime`](/integrations/input_datetime) to the desired time and then use that [`input_datetime`](/integrations/input_datetime) as an automation trigger to perform the desired actions at the set time.
{% tip %}
The values you see in your overview will often not be the same as the actual state of the entity. For instance, the overview may show `Connected` when the underlying entity is actually `on`. You should check the state of the entity by checking the states in the developer tool, under {% my developer_states title="**Developer Tools** > **States**" %}.
{% endtip %}
### Examples
This automation triggers if either Paulus or Anne-Therese are home for one minute.
```yaml
automation:
@ -397,7 +407,7 @@ automation:
to: "error"
```
Trigger on all state changes, but not attributes by setting `to` to `null`:
If you want to trigger on all state changes, but not on attribute changes, you can `to` to `null` (this would also work by setting `from`, `not_from`, or `not_to` to `null`):
```yaml
automation:
@ -407,7 +417,7 @@ automation:
to:
```
The `not_from` and `not_to` options are the counter parts of `from` and `to`. They can be used to trigger on state changes that are **not** the specified state. This can be useful to trigger on all state changes, except specific ones.
If you want to trigger on all state changes *except* specific ones, use `not_from` or `not_to` The `not_from` and `not_to` options are the counter parts of `from` and `to`. They can be used to trigger on state changes that are **not** the specified state.
```yaml
automation:
@ -425,8 +435,8 @@ You cannot use `from` and `not_from` at the same time. The same applies to `to`
### Triggering on attribute changes
When the `attribute` option is specified, the trigger only fires
when the specified attribute changes. Changes to other attributes or the
state are ignored.
when the specified attribute **changes**. Changes to other attributes or
state changes are ignored.
For example, this trigger only fires when the boiler has been heating for 10 minutes:
@ -467,8 +477,8 @@ automation:
for: "00:00:30"
```
Please note, that when holding a state, changes to attributes are ignored and
do not cancel the hold time.
When holding a state, changes to attributes are ignored. Changes to attributes
don't cancel the hold time.
You can also fire the trigger when the state value changed from a specific
state, but hasn't returned to that state value for the specified time.
@ -530,12 +540,6 @@ The `for` template(s) will be evaluated when an entity changes as specified.
Use quotes around your values for `from` and `to` to avoid the YAML parser from interpreting values as booleans.
{% endtip %}
{% important %}
Use of the `for` option will not survive Home Assistant restart or the reload of automations. During restart or reload, automations that were awaiting `for` the trigger to pass, are reset.
If for your use case this is undesired, you could consider using the automation to set an [`input_datetime`](/integrations/input_datetime) to the desired time and then use that [`input_datetime`](/integrations/input_datetime) as an automation trigger to perform the desired actions at the set time.
{% endimportant %}
## Sun trigger
### Sunset / Sunrise trigger

View File

@ -72,9 +72,10 @@ homeassistant:
keys:
min_version:
description: >
Minimum required version of Home Assistant to use the blueprint. For example,
`2022.4.0`. It is important to set this if the blueprint uses any features
introduced in recent releases to head off issues.
Minimum required version of Home Assistant to use the blueprint in the format of
*major*.*minor*.*patch* (all parts are required). For example, `2022.4.0`. It is
important to set this if the blueprint uses any features introduced in recent
releases to head off issues.
type: string
required: false
input:
@ -149,12 +150,14 @@ A blueprint can have as many inputs as you like.
### Blueprint input sections
One or more input sections can be added under the main `input` key. Each section visually groups the inputs in that section,
allows an optional description, and optionally allows for collapsing those inputs.
allows an optional description, and optionally allows for collapsing those inputs. Note that the section only impacts how
inputs are displayed to the user when they fill in the blueprint. Inputs must have unique names and be referenced directly
by their name; not by section and name.
A section is differentiated from an input by the presence of an additional `input` key within that section.
{% caution %}
Input sections are a new feature in version 2024.6. Set the `min_version` for the blueprint to at least this version if using input sections. Otherwise, the blueprint will generate errors on older versions.
Input sections are a new feature in version 2024.6.0. Set the `min_version` for the blueprint to at least this version if using input sections. Otherwise, the blueprint will generate errors on older versions.
{% endcaution %}
The full configuration for a section is below:

View File

@ -63,7 +63,7 @@ action:
The options that can be used with the `trigger` object are listed under [automation trigger variables](/docs/automation/templating/#available-trigger-data).
In this example, a [state trigger](/docs/automation/templating/#state) is used.
`turn_on` and `turn_off` are [`homeassistant` actions](/docs/scripts/service-calls/#homeassistant-actions). They are not tied to a specific domain. You can use them on lights, switches, and other domains.
`turn_on` and `turn_off` are [`homeassistant` actions](/docs/scripts/perform-actions/#homeassistant-actions). They are not tied to a specific domain. You can use them on lights, switches, and other domains.
### Creating the blueprint file

View File

@ -0,0 +1,51 @@
---
title: "Entities and domains"
description: "Describes what entities and domains are in Home Assistant."
related:
- docs: /docs/configuration/state_object/
title: State object, entity state
---
Your {% term devices %} are represented in Home Assistant as entities. Entities are the basic building blocks to hold data in Home Assistant. An entity represents a {% term sensor %}, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a {% term device %} or a {% term service %}. Entities have [states](/docs/configuration/state_object/) and [attributes](#entity-attributes).
All your entities are listed in the entities table, under {% my entities title="**Settings** > **Devices & services** > **Entities**" %}.
<p class='img'><img src='/images/getting-started/entities.png' style='border: 0;box-shadow: none;' alt="Screenshot showing the Entities table">Screenshot of the Entities table. Each line represents an entity.</p>
## Entity attributes
Many entities have attributes. There are a few attributes that are available on all entities, such as `friendly_name` and `icon`. In addition to those, each integration has its own attributes to represent extra state data about the entity. For example, the light integration has attributes for the current brightness and color of the light. When an attribute is not available, Home Assistant will not write it to the state. The list of available attributes depends on the {% term device %}.
<p class='img'>
<img src='/images/integrations/light/state_light.png' alt='Screenshot showing three lights with different states and attributes'>
Example showing three lights with differents states and different attributes.
</p>
For more information on entity attributes, refer to the [attributes](/docs/configuration/state_object/#attributes) section on the state objects page.
## Domains
Each integration in Home Assistant has a unique identifier: a domain. All entities and actions available in Home Assistant are provided by integrations and thus belong to such a domain. The first part of the entity or action, before the `.` shows the domain they belong to. For example, `light.bed_light` is an entity in the light domain. `bed_light` is the ID of the entity.
The domain provides entities, services, and other functionality that other integrations can use. For example, IKEA and Philips Hue both use functionalities provided by the light integration. This is why the look and feel and behavior is similar in Home Assistant.
There are different types of domains: integration domains and entity domains:
- Integration domains provide functionality primarily for itself: examples are Hue, Matter, or Zigbee.
- Entity domains don't use their own functionality as such. But they provide it for other integrations to use.
The integrations listed below are used as entity domains. They are also referred to as *building block integrations* or *entity integrations*:
<ul>
{%- for integration in site.integrations %}
{%- if integration.ha_integration_type == "entity" %}
{%- assign name = integration.title -%}
{%- assign target = integration.ha_domain | prepend: "/integrations/" -%}
<li><a href="{{target}}">{{name}}</a></li>
{%- endif -%}
{%- endfor %}
</ul>

View File

@ -1,13 +1,24 @@
---
title: "Events"
description: "Describes all there is to know about events in Home Assistant."
related:
- docs: /docs/automation/trigger/#event-trigger
title: Event triggers
- docs: /integrations/event/
title: Event integration
---
The core of Home Assistant is the event bus. The event bus allows any integration to fire or listen for events. It is the core of everything.
The core of Home Assistant is the event bus. The event bus allows any integration to fire or listen for events.
For example, any state change will be announced on the event bus as a `state_changed` event containing the previous and the new state of an entity.
## Events and state changes
Home Assistant contains a few built-in events that are used to coordinate between various integrations.
All {% term entities %} produce state change events. Every time a {% term state %} changes, a state change event is produced. State change events are just one type of event on the event bus, but there are other kinds of events, such as the [built-in events](#built-in-events-core) that are used to coordinate between various integrations.
### State change events versus event entity
State change events are not to be confused with the [event entity](/integrations/event/). The event entity is a specific type of entity that itself produces event state changes, just like all other entities.
Any state change will be announced on the event bus as a `state_changed` event, containing the previous and the new state of an entity.
## Common fields
@ -29,7 +40,7 @@ In addition, all events contain a `data` dictionary with event-specific informat
This event is fired when an service action is performed
| Field | Description |
| ----------------- | ------------------------------------------------------------------------------ |
| ----------------- | ---------------------------------------------------------------------- |
| `domain` | Domain of the action. Example: `light`. |
| `service` | The service action that is performed. Example: `turn_on` |
| `service_data` | Dictionary with the call parameters. Example: `{ 'brightness': 120 }`. |
@ -99,7 +110,7 @@ If you want to trigger automation on a Home Assistant stop event, we recommend u
This event is fired when a new service action has been registered within Home Assistant.
| Field | Description |
| --------- | ----------------------------------------------------------------------- |
| --------- | ------------------------------------------------------------------------ |
| `domain` | The domain of the integration that offers this action. Example: `light`. |
| `service` | The name of the service action. Example: `turn_on` |
@ -108,7 +119,7 @@ This event is fired when a new service action has been registered within Home As
This event is fired when a service action has been removed from Home Assistant.
| Field | Description |
| --------- | ----------------------------------------------------------------------- |
| --------- | ------------------------------------------------------------------------ |
| `domain` | The domain of the integration that offers this action. Example: `light`. |
| `service` | The name of the service action. Example: `turn_on` |

View File

@ -1,6 +1,9 @@
---
title: "State objects"
description: "Describes all there is to know about state objects in Home Assistant."
related:
- docs: /docs/configuration/entities_domains/
title: Entities and domains
---
Your {% term devices %} are represented in Home Assistant as entities. The {% term entities %} will write their current {% term state %} to the state machine for other entities/templates/frontend to access. States are a current representation of the {% term entity %}.
@ -24,7 +27,7 @@ All states will always have an entity id, a state and a timestamp when last upda
## Attributes
The attributes of an {% term entity %} are optional. There are a few attributes that are used by Home Assistant for representing the entity in a specific way. Each integration will also have its own attributes to represent extra state data about the entity. For example, the light integration has attributes for the current brightness and color of the light. When an attribute is not available, Home Assistant will not write it to the state.
The attributes of an {% term entity %} are optional.There are a few attributes that are available on all entities, such as `friendly_name` and `icon`. In addition to those, each integration has its own attributes to represent extra state data about the entity. For example, the light integration has attributes for the current brightness and color of the light. When an attribute is not available, Home Assistant will not write it to the state.
When using templates, attributes will be available by their name. For example `state.attributes.assumed_state`.

View File

@ -722,7 +722,7 @@ For example, if you wanted to select a field from `trigger` in an automation bas
- `utcnow()` returns a datetime object of the current time in the UTC timezone.
- For specific values: `utcnow().second`, `utcnow().minute`, `utcnow().hour`, `utcnow().day`, `utcnow().month`, `utcnow().year`, `utcnow().weekday()` and `utcnow().isoweekday()`.
- Using `utcnow()` will cause templates to be refreshed at the start of every new minute.
- `today_at(value)` converts a string containing a military time format to a datetime object with today's date in your time zone.
- `today_at(value)` converts a string containing a military time format to a datetime object with today's date in your time zone. Defaults to midnight (`00:00`).
- Using `today_at()` will cause templates to be refreshed at the start of every new minute.
@ -736,8 +736,8 @@ For example, if you wanted to select a field from `trigger` in an automation bas
{% endraw %}
- `as_datetime(value, default)` converts a string containing a timestamp, or valid UNIX timestamp, to a datetime object. If that fails, it returns the `default` value or, if omitted, raises an error. When the input is already a datetime object it will be returned as is. in case the input is a datetime.date object, midnight will be added as time. This function can also be used as a filter.
- `as_timestamp(value, default)` converts datetime object or string to UNIX timestamp. If that fails, returns the `default` value, or if omitted raises an error. This function can also be used as a filter.
- `as_local()` converts datetime object to local time. This function can also be used as a filter.
- `as_timestamp(value, default)` converts a datetime object or string to UNIX timestamp. If that fails, returns the `default` value, or if omitted raises an error. This function can also be used as a filter.
- `as_local()` converts a datetime object to local time. This function can also be used as a filter.
- `strptime(string, format, default)` parses a string based on a [format](https://docs.python.org/3.10/library/datetime.html#strftime-and-strptime-behavior) and returns a datetime object. If that fails, it returns the `default` value or, if omitted, raises an error.
- `time_since(datetime, precision)` converts a datetime object into its human-readable time string. The time string can be in seconds, minutes, hours, days, months, and years. `precision` takes an integer (full number) and indicates the number of units returned. The last unit is rounded. For example: `precision = 1` could return "2 years" while `precision = 2` could return "1 year 11 months". This function can also be used as a filter.
If the datetime is in the future, returns 0 seconds.
@ -745,7 +745,7 @@ A precision of 0 returns all available units, default is 1.
- `time_until(datetime, precision)` converts a datetime object into a human-readable time string. The time string can be in seconds, minutes, hours, days, months, and years. `precision` takes an integer (full number) and indicates the number of units returned. The last unit is rounded. For example: `precision = 1` could return "2 years" while `precision = 2` could return "1 year 11 months". This function can also be used as a filter.
If the datetime is in the past, returns 0 seconds.
A precision of 0 returns all available units, default is 1.
- `timedelta` returns a timedelta object and accepts the same arguments as the Python `datetime.timedelta` function -- days, seconds, microseconds, milliseconds, minutes, hours, weeks.
- `timedelta` returns a timedelta object, which represents a duration (an amount of time between two datetimes). It accepts the same arguments as the Python `datetime.timedelta` function -- days, seconds, microseconds, milliseconds, minutes, hours, weeks.
{% raw %}
@ -756,7 +756,7 @@ A precision of 0 returns all available units, default is 1.
{% endraw %}
- `as_timedelta(string)` converts a string to a timedelta object. Expects data in the format `DD HH:MM:SS.uuuuuu`, `DD HH:MM:SS,uuuuuu`, or as specified by ISO 8601 (e.g. `P4DT1H15M20S` which is equivalent to `4 1:15:20`) or PostgreSQLs day-time interval format (e.g. `3 days 04:05:06`) This function can also be used as a filter.
- `as_timedelta(string)` converts a string to a timedelta object, which represents a duration (an amount of time between two datetimes). Expects data in the format `DD HH:MM:SS.uuuuuu`, `DD HH:MM:SS,uuuuuu`, or as specified by ISO 8601 (e.g. `P4DT1H15M20S` which is equivalent to `4 1:15:20`) or PostgreSQLs day-time interval format (e.g. `3 days 04:05:06`). This function can also be used as a filter.
{% raw %}

View File

@ -110,12 +110,18 @@ The first thing you will need before reporting an issue online is debug logs and
### Enabling debug logging
To enable debug logging for an integration, go to **Settings** > **Devices & Services** > **Integrations** and go to the detail page of the integration. Select the **Enable Debug Logging** button on the left side of the integration detail page.
To enable debug logging for a specific integration, follow these steps:
1. Go to {% my integrations title="**Settings** > **Devices & services**" %}.
2. Select the integration card to open the detail page of the integration for which you want to enable debug logging.
3. On the left side of the integration detail page, select **Enable Debug Logging**.
- The screenshot uses the MQTT integration as an example for illustration purposes. It does not mean you need to install the MQTT integration.
<p class='img'>
<img src='/images/docs/configuration/enable-debug-logging.png' alt='Example of Enable debug logging'>
Example of Enable debug logging.
<img src='/images/docs/configuration/enable-debug-logging.png' alt='Screenshot showing the Enable debug logging button on an integration detail page'>
Screenshot showing the <b>Enable debug logging</b> button on an integration detail page. The MQTT integration is used as an example to show where the button can be found.
</p>
4. To see the error in the logs, you need to reproduce the error. Continue with the steps on [disabling debug logging and download logs](#disable-debug-logging-and-download-logs).
### Disable debug logging and download logs

View File

@ -47,20 +47,21 @@ Use this procedure only if the following conditions are met:
- You know the username.
- You can access the [Home Assistant console](/hassio/commandline/) **on the device itself** (not via the SSH terminal from the add-ons).
1. Connect to the console of the Home Assistant server:
- If you are using a virtual machine, connect to your virtual machine console.
1. If you are using a Home Assistant Yellow or Green, refer to their documentation.
- If you are using a Home Assistant Yellow, refer to the following procedure:
- [Using the serial console on Windows](https://yellow.home-assistant.io/guides/use-serial-console-windows/)
- [Using the serial console on macOS / Linux](https://yellow.home-assistant.io/guides/use-serial-console-linux-macos/)
- [Resetting the owner password on Home Assistant Yellow](https://yellow.home-assistant.io/faq/#i-forgot-the-owner-password-for-home-assistant-how-can-i-reset-it)
- If you are using a Home Assistant Green, refer to the following procedure:
- [Using the terminal](https://green.home-assistant.io/guides/use-terminal/)
- If you are using another board, connect a keyboard and monitor to your device and access the terminal. The procedure is likely very similar to the one described for the Green in the step above.
2. Once you have opened the Home Assistant command line, enter the following command:
- [Resetting the owner password on Home Assistant Green](https://green.home-assistant.io/faq/#i-forgot-the-owner-password-for-the-home-assistant-green-how-can-i-reset-it)
2. If you are not using a Yellow or Green: Connect to the console of the Home Assistant server:
- If you are using a virtual machine, connect to your virtual machine console.
- If you are using another board, connect a keyboard and monitor to your device and access the terminal. The procedure is likely very similar to the one described for the Home Assistant Green.
3. Once you have opened the Home Assistant command line, enter the following command:
- Note: `existing_user` is a placeholder. Replace it with your username.
- Note: `new_password` is a placeholder. Replace it with your new password.
- **Command**: `ha auth reset --username existing_user --password new_password`
- **Command**: `auth reset --username existing_user --password new_password`
![Screencast showing how to enter the ha auth reset command](/images/docs/troubleshooting/home-assistant-cli.webp)
- **Troubleshooting**: If you see the message `zsh: command not found: auth`, you likely did not enter the command in the serial console connected to the device itself, but in the terminal within Home Assistant.
3. You can now log in to Home Assistant using this new password.
4. You can now log in to Home Assistant using this new password.
### To reset a user's password, via the container command line

View File

@ -1006,7 +1006,7 @@ will not be used by anything.
[Script integration]: /integrations/script/
[automations]: /docs/automation/action/
[Alexa/Amazon Echo]: /integrations/alexa/
[actions page]: /docs/scripts/service-calls/
[actions page]: /docs/scripts/perform-actions/
[conditions page]: /docs/scripts/conditions/
[shorthand-template]: /docs/scripts/conditions/#template-condition-shorthand-notation
[script variables]: /integrations/script/#configuration-variables

View File

@ -41,7 +41,7 @@
{% icon "mdi:script-text" %} {% active_link /docs/scripts/ Scripts %}
{% if doc == 'scripts' or include.docs_index %}
<ul>
<li>{% active_link /docs/scripts/service-calls/ Actions %}</li>
<li>{% active_link /docs/scripts/perform-actions/ Actions %}</li>
<li>{% active_link /docs/scripts/conditions/ Conditions %}</li>
</ul>
{% endif %}
@ -209,6 +209,7 @@
<li>{% active_link /docs/configuration/secrets/ Storing secrets %}</li>
<li>{% active_link /docs/configuration/events/ Events %}</li>
<li>{% active_link /docs/configuration/state_object/ State objects %}</li>
<li>{% active_link /docs/configuration/entities_domains/ Entities and domains %}</li>
<li>{% active_link /docs/configuration/templating/ Templating %}</li>
<li>{% active_link /docs/configuration/platform_options/ Entity component platform options %}</li>
</ul>

View File

@ -1,6 +1,21 @@
## Enabling or disabling elements
## Enabling or disabling entities
Some entities are disabled by default. To enable them, follow these steps:
Some {% term entities %} are disabled by default. Whether a particular entity of a device is disable or enabled by default, depends on the integration. Diagnostic entities for example are often disabled by default so that they don't clutter Home Assistant. For example, the RSSI entity (representing the RF signal strength) provided by the ZHA integration for each Zigbee device is disabled by default.
There are different ways to enable {% term entities %}. You can enable a single entity in the entity settings, or you can enable multiple entities at once from the list of entities.
### To enable or disable a single entity
1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and select your integration card.
2. Select the device.
3. To see all the entities, you may need to expand the **entity not shown** section.
4. Select the entity of interest, select the cogwheel {% icon "mdi:cog-outline" %}, then select the toggle for **Enable**.
5. Select **Update**.
6. Confirm the notification stating that it will take about 30 seconds for the entity to become enabled. Select **OK**.
![Screencast showing how to enable a single entity](/images/docs/configuration/enable_entity.webp)
### To enable or disable multiple entities
1. In Home Assistant, open the table of interest.
- To enable or disable entities, go to {% my entities title="**Settings** > **Devices & Services** > **Entities**" %}.
@ -12,5 +27,6 @@ Some entities are disabled by default. To enable them, follow these steps:
## Related topics
- [Customizing entities](/docs/configuration/customizing-devices/)
- [Grouping your assets](/docs/organizing/)
- [Working with tables](/docs/organizing/tables)

View File

@ -12,7 +12,7 @@ This installation method **does not have access to add-ons**. If you want to use
<b>Prerequisites</b>
This guide assumes that you already have an operating system setup and a container runtime installed (like Docker).
If you are using Docker then you need to be on at least version 19.03.9, ideally an even higher version, and `libseccomp` 2.4.2 or newer.
If you are using Docker then you need to be on at least version 19.03.9, ideally an even higher version, and `libseccomp` 2.4.2 or newer. Docker _Desktop_ will not work, you must use Docker _Engine_.
{% endimportant %}

View File

@ -12,14 +12,10 @@ As an alternative, Home Assistant OS can be installed in a Linux guest VM. Runni
This is an advanced installation process, and some steps might differ on your system. Considering the nature of this installation type, we assume you can handle subtle differences between this document and the system configuration you are using. When in doubt, please consider one of the [other installation methods](/installation/), as they might be a better fit instead.
{% endcaution %}
{% important %}
<b>Prerequisites</b>
### Prerequisites
This guide assumes that you already have an operating system setup and have installed Python {{site.installation.versions.python}} (including the package `python3-dev`) or newer.
{% endimportant %}
### Install dependencies
Before you start, make sure your system is fully updated, all packages in this guide are installed with `apt`, if your OS does not have that, look for alternatives.
@ -86,6 +82,8 @@ Once you have installed the required Python package, it is now time to install H
pip3 install homeassistant=={{ site.current_major_version }}.{{ site.current_minor_version }}.{{ site.current_patch_version }}
```
**Troubleshooting**: If you do not see the above version of Home Assistant package in your environment, make sure you have the correct Python version installed, as defined under the [Prerequisites](#prerequisites).
Start Home Assistant Core for the first time. This will complete the installation for you, automatically creating the `.homeassistant` configuration directory in the `/home/homeassistant` directory, and installing any basic dependencies.
```bash

View File

@ -479,7 +479,7 @@ With the Home Assistant Operating System installed and accessible, you can conti
{% endif %}
[generic-x86-64]: {{release_url}}/{{site.data.version_data.hassos['ova']}}/haos_generic-x86-64-{{site.data.version_data.hassos['generic-x86-64']}}.img.xz
[generic-x86-64]: {{release_url}}/{{site.data.version_data.hassos['generic-x86-64']}}/haos_generic-x86-64-{{site.data.version_data.hassos['generic-x86-64']}}.img.xz
[vmdk]: {{release_url}}/{{site.data.version_data.hassos['ova']}}/haos_ova-{{site.data.version_data.hassos['ova']}}.vmdk.zip
[vhdx]: {{release_url}}/{{site.data.version_data.hassos['ova']}}/haos_ova-{{site.data.version_data.hassos['ova']}}.vhdx.zip
[vdi]: {{release_url}}/{{site.data.version_data.hassos['ova']}}/haos_ova-{{site.data.version_data.hassos['ova']}}.vdi.zip

View File

@ -1 +1 @@
After changing the {% term "`configuration.yaml`" %} file, [restart Home Assistant](/docs/configuration/#reloading-the-configuration-to-apply-changes) to apply the changes. {% if page.ha_platforms %} {% if page.ha_quality_scale != "internal" or page.ha_domain contains 'generic' %}. The integration is now shown on the integrations page under **{% my integrations title="Settings > Devices & services" %}**. Its entities are listed on the integration card itself and on the {% my entities title="**Entities**" %} tab. {% endif %}{% endif %}
After changing the {% term "`configuration.yaml`" %} file, [restart Home Assistant](/docs/configuration/#reloading-the-configuration-to-apply-changes) to apply the changes. {% if page.ha_platforms %} {% if page.ha_quality_scale != "internal" or page.ha_domain contains 'generic' %} The integration is now shown on the integrations page under **{% my integrations title="Settings > Devices & services" %}**. Its entities are listed on the integration card itself and on the {% my entities title="**Entities**" %} tab. {% endif %}{% endif %}

View File

@ -1,33 +0,0 @@
{% capture product_name %}{{ include.name | default: page.product_name }}{% endcapture %}
2. To connect the {{ product_name }} to your computer, follow these steps:
- In the pop-up window, view the available ports.
- Plug the USB-C cable into the {{ product_name }} and connect it to your computer.{% if page.product_name == 'ESP32-S3-BOX' %}
- If you have an ESP32-S3-BOX-3, plug it into the box directly, not into the docking station (not into the blue part).
- **Troubleshooting**: If your ESP32-S3-BOX-3 does not appear in the list of devices presented by your browser, you need to manually invoke "flash mode":
- Hold the "boot" button (left side upper button) as you tap the "reset" button (left side lower button).
- After a few seconds, the ESP32-S3-BOX-3 should appear in the list of USB devices presented by your browser.
- Follow the steps until step 3. After selecting the **Next** button, on the S3-Box, tap the "Reset" button again.
- Then, select the blue **Connect button** again, select the USB device and follow the prompts to configure the Wi-Fi.{% endif %}
- In the pop-up window, there should now appear a new entry. Select this USB serial port and select **Connect**.{% if page.product_name == 'ATOM Echo' %}
- **Troubleshooting**: If no new port shows, your system may be missing a driver. Close the pop-up window.
- In the dialog, select the CH342 driver, install it, then **Try again**.
![Open My link](/images/assist/esp32-atom-flash-no-port.png){% endif %}
3. Select **Install Voice Assistant**, then **Install**.
- Once the installation is complete, select **Next**.
- Add the {{ product_name }} to your Wi-Fi:
- When prompted, select your network from the list and enter the credentials to your 2.4&nbsp;GHz Wi-Fi network.
- Select **Connect**.
- The {{ product_name }} now joined your network. Select **Add to Home Assistant**.
4. This opens the **My** link to Home Assistant.
- If you have not used My Home Assistant before, you will need to configure it. If your Home Assistant URL is not accessible on `http://homeassistant.local:8123`, replace it with the URL to your Home Assistant instance.
- Open the link.
![Open My link](/images/assist/esp32-atom-flash-06.png)
5. Select **OK**.
![Set up ESPHome](/images/assist/esp32-atom-flash-07.png)
6. To add the newly discovered device, select the {{ product_name }} from the list.
- Add your {{ product_name }} to a room and select **Finish**.
7. You should now see the **ESPHome** integration.
![New ESPHome device discovered](/images/assist/m5stack-atom-echo-discovered-33.png)

View File

@ -27,3 +27,12 @@ The platforms cover the following levels (if they are available):
- The NO2 (nitrogen dioxide) level.
{% include integrations/building_block_integration.md %}
## The state of an air quality entity
The state of an air quality entity represents the concentration of particles in the air that are 2.5 microns or fewer in diameter. The state is a number. The number is followed by the unit of measurement (micrograms per cubic meter: "µg/m³"). For example, *PM2.5: 4 µg/m³*. In this example, the state is 4.
In addition, the entity can have the following states:
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.

View File

@ -9,24 +9,46 @@ ha_domain: alarm_control_panel
ha_codeowners:
- '@home-assistant/core'
ha_integration_type: entity
related:
- docs: /integrations/manual/
title: Manual alarm
- docs: /integrations/alarm_control_panel.template/
title: Template alarm
---
Home Assistant can give you an interface which is similar to a classic alarm system.
Please see [manual alarm](/integrations/manual) or [template alarm](/integrations/alarm_control_panel.template) for alarm configuration.
{% include integrations/building_block_integration.md %}
### Actions
## The state of an alarm panel entity
An alarm panel entity can have the following states. Not all integrations implement all the different states.
- **Disarmed**: The alarm is disarmed (off).
- **Armed home**: The alarm is armed in home mode.
- **Armed away**: The alarm is armed in away mode.
- **Armed night**: The alarm is armed in night mode.
- **Armed vacation**: The alarm is armed in vacation mode.
- **Armed custom bypass**: The alarm is armed in bypass mode.
- **Pending**: The alarm is pending (towards triggered).
- **Arming**: The alarm is in the process of being armed.
- **Disarming**: The alarm is in the process of being disarmed.
- **Triggered**: The alarm has been triggered.
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
## Actions
Depending on features supported by a specific integration alarm may expose the following actions:
| Action | Data | Description |
| ------- | ---- | ----------- |
| `alarm_arm_home` | `entity_id` <br> `code` (optional) | Arm the alarm in the home mode.
| `alarm_arm_away` | `entity_id` <br> `code` (optional) | Arm the alarm in the away mode.
| `alarm_arm_night` | `entity_id` <br> `code` (optional) | Arm the alarm in the night mode.
| `alarm_arm_vacation` | `entity_id` <br> `code` (optional) | Arm the alarm in the vacation mode.
| `alarm_disarm` | `entity_id` <br> `code` (optional) | Disarm the alarm.
| `alarm_trigger` | `entity_id` <br> `code` (optional) | Trigger the alarm manually.
| `alarm_arm_custom_bypass` | `entity_id` <br> `code` (optional) | Send arm custom bypass command.
| ------------------------- | ---------------------------------- | ----------------------------------- |
| `alarm_arm_home` | `entity_id` <br> `code` (optional) | Arm the alarm in the home mode. |
| `alarm_arm_away` | `entity_id` <br> `code` (optional) | Arm the alarm in the away mode. |
| `alarm_arm_night` | `entity_id` <br> `code` (optional) | Arm the alarm in the night mode. |
| `alarm_arm_vacation` | `entity_id` <br> `code` (optional) | Arm the alarm in the vacation mode. |
| `alarm_disarm` | `entity_id` <br> `code` (optional) | Disarm the alarm. |
| `alarm_trigger` | `entity_id` <br> `code` (optional) | Trigger the alarm manually. |
| `alarm_arm_custom_bypass` | `entity_id` <br> `code` (optional) | Send arm custom bypass command. |

View File

@ -317,8 +317,8 @@ cards:
- type: button
icon: mdi:arrow-up-bold
tap_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: DPAD_UP
target:
@ -334,8 +334,8 @@ cards:
- type: button
icon: mdi:arrow-left-bold
tap_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: DPAD_LEFT
target:
@ -345,15 +345,15 @@ cards:
- type: button
icon: mdi:circle
tap_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: DPAD_CENTER
target:
entity_id: remote.living_room_tv
hold_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: DPAD_CENTER
hold_secs: 0.5
@ -362,8 +362,8 @@ cards:
- type: button
icon: mdi:arrow-right-bold
tap_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: DPAD_RIGHT
target:
@ -373,15 +373,15 @@ cards:
- type: button
icon: mdi:arrow-left
tap_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: BACK
target:
entity_id: remote.living_room_tv
hold_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: BACK
hold_secs: 0.5
@ -390,8 +390,8 @@ cards:
- type: button
icon: mdi:arrow-down-bold
tap_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: DPAD_DOWN
target:
@ -401,15 +401,15 @@ cards:
- type: button
icon: mdi:home-outline
tap_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: HOME
target:
entity_id: remote.living_room_tv
hold_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: HOME
hold_secs: 0.5
@ -422,15 +422,15 @@ cards:
- type: button
icon: mdi:skip-previous
tap_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: MEDIA_PREVIOUS
target:
entity_id: remote.living_room_tv
hold_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: MEDIA_REWIND
target:
@ -438,15 +438,15 @@ cards:
- type: button
icon: mdi:play-pause
tap_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: MEDIA_PLAY_PAUSE
target:
entity_id: remote.living_room_tv
hold_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: MEDIA_STOP
target:
@ -454,15 +454,15 @@ cards:
- type: button
icon: mdi:skip-next
tap_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: MEDIA_NEXT
target:
entity_id: remote.living_room_tv
hold_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: MEDIA_FAST_FORWARD
target:
@ -470,8 +470,8 @@ cards:
- type: button
icon: mdi:volume-off
tap_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: MUTE
target:
@ -481,8 +481,8 @@ cards:
- type: button
icon: mdi:volume-medium
tap_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: VOLUME_DOWN
target:
@ -492,8 +492,8 @@ cards:
- type: button
icon: mdi:volume-high
tap_action:
action: call-service
action: remote.send_command
action: perform-action
perform_action: remote.send_command
data:
command: VOLUME_UP
target:
@ -507,8 +507,8 @@ cards:
- type: button
icon: mdi:youtube
tap_action:
action: call-service
action: remote.turn_on
action: perform-action
perform_action: remote.turn_on
data:
activity: https://www.youtube.com
target:
@ -518,8 +518,8 @@ cards:
- type: button
icon: mdi:netflix
tap_action:
action: call-service
action: remote.turn_on
action: perform-action
perform_action: remote.turn_on
data:
activity: com.netflix.ninja
target:
@ -530,8 +530,8 @@ cards:
image: >-
https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Amazon_Prime_Video_logo.svg/450px-Amazon_Prime_Video_logo.svg.png
tap_action:
action: call-service
action: remote.turn_on
action: perform-action
perform_action: remote.turn_on
data:
activity: com.amazon.amazonvideo.livingroom
target:
@ -542,8 +542,8 @@ cards:
image: >-
https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Disney%2B_logo.svg/440px-Disney%2B_logo.svg.png
tap_action:
action: call-service
action: remote.turn_on
action: perform-action
perform_action: remote.turn_on
data:
activity: com.disney.disneyplus
target:

View File

@ -1,17 +1,20 @@
---
title: ArtSound
description: Connect and control your ArtSound media players using the LinkPlay integration
ha_release: 2024.9
ha_category:
- Media player
ha_domain: artsound
ha_zeroconf: true
ha_integration_type: virtual
works_with:
- linkplay
ha_supporting_domain: linkplay
ha_supporting_integration: LinkPlay
ha_release: 2024.9
ha_codeowners:
- '@Velleman'
ha_config_flow: true
ha_platforms:
- media_player
ha_iot_class: Local Polling
---
The **ArtSound** {% term integration %} allows users to control their ArtSound media players through the **LinkPlay** {% term integration %}.
[Learn more about LinkPlay in Home Assistant.](/integrations/linkplay/)
{% include integrations/supported_brand.md %}

View File

@ -29,6 +29,15 @@ or using an [input boolean helper](/integrations/input_boolean).
{% include integrations/building_block_integration.md %}
## The state of binary sensor
A binary sensor can have two states: **on** or **off**. However, in the frontend, they might not be called **on** or **off**, but use an alternative term to be more meaningful in context. For example, hot/cold, locked/unlocked. The meaning of an **on** or **off** state depends on the device class.
In addition, the entity can have the following states:
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
### Device class
{% include integrations/device_class_intro.md %}

View File

@ -20,7 +20,7 @@ related:
title: Configuration file
---
The **BloomSky** {% term integration %} allows you to access your [BloomSky](https://www.bloomsky.com/) weather station's.
The **BloomSky** {% term integration %} allows you to access your [BloomSky](https://www.bloomsky.com/) weather stations.
There is currently support for the following device types within Home Assistant:

View File

@ -13,6 +13,13 @@ ha_integration_type: integration
ha_config_flow: true
ha_platforms:
- diagnostics
related:
- docs: /docs/configuration/
title: Configuration file
- docs: /integrations/default_config/
title: Default config
- url: https://esphome.io/projects/?type=bluetooth
title: Bluetooth proxy page
---
The **Bluetooth** {% term integration %} will detect nearby Bluetooth devices. Discovered devices will show up in the discovered section on the integrations page in the configuration panel.

View File

@ -84,7 +84,6 @@ action:
data:
message: The name of the POI # this is shown on the iDrive dashboard
data:
location:
latitude: 48.177024
longitude: 11.559107
street: Street name # Optional

View File

@ -29,9 +29,17 @@ form of a stateless switch.
The button {% term entity %} is stateless, as in, it cannot have a state like the `on` or
`off` state that, for example, a normal switch entity has.
Every button entity does keep track of the timestamp of when the last time
the button entity has been pressed in the Home Assistant UI or pressed via
an action.
The state of a button is a timestamp showing the date and time of the last time the button had been pressed in the Home Assistant UI or via an action.
<p class='img'>
<img src='/images/integrations/button/state_button.png' alt='Screenshot showing the state of a button entity in the developer tools' />
Screenshot showing the state of a button entity in the developer tools.
</p>
In addition, the entity can have the following states:
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
Because the {% term state %} of a button entity in Home Assistant is a timestamp, it
means we can use it in our automations. For example:

View File

@ -21,7 +21,6 @@ integrations page to find integrations offering calendar entities. For example,
{% include integrations/building_block_integration.md %}
## Viewing and managing calendars
Each calendar is represented as its own {% term entity %} in Home Assistant and can be
@ -34,6 +33,18 @@ the **Add event** button in the lower right corner of the calendar dashboard.
Also see [Actions](#actions) below.
## The state of a calendar entity
The state shows whether or not there is an active event:
- On: The calendar has an active event.
- Off: The calendar does not have an active event.
In addition, the entity can have the following states:
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
## Automation
Calendar [Triggers](/docs/automation/trigger) enable {% term automation %} based on an
@ -142,22 +153,22 @@ automation:
## Actions
Some calendar {% term integrations %} allow Home Assistant to manage your calendars
directly using {% term actions %}. The actions provided by some calendar {% term entity %} are described below or you can read more about [actions](/docs/scripts/service-calls/).
directly using {% term actions %}. The actions provided by some calendar {% term entity %} are described below or you can read more about [actions](/docs/scripts/perform-actions/).
### Action `calendar.create_event`
Add a new calendar event. A calendar `target` is selected with a [Target Selector](/docs/blueprint/selectors/#target-selector) and the `data` payload supports the following fields:
| Data attribute | Optional | Description | Example |
| ---------------------- | -------- | ----------- | --------|
| `summary` | no | Acts as the title of the event. | Bowling
| `description` | yes | The description of the event. | Birthday bowling
| `start_date_time` | yes | The date and time the event should start. | 2019-03-10 20:00:00
| `end_date_time` | yes | The date and time the event should end (exclusive). | 2019-03-10 23:00:00
| `start_date` | yes | The date the whole day event should start. | 2019-03-10
| `end_date` | yes | The date the whole day event should end (exclusive). | 2019-03-11
| `in` | yes | Days or weeks that you want to create the event in. | "days": 2
| `location` | yes | The location of the event. | Bowling center
| ----------------- | -------- | ---------------------------------------------------- | ------------------- |
| `summary` | no | Acts as the title of the event. | Bowling |
| `description` | yes | The description of the event. | Birthday bowling |
| `start_date_time` | yes | The date and time the event should start. | 2019-03-10 20:00:00 |
| `end_date_time` | yes | The date and time the event should end (exclusive). | 2019-03-10 23:00:00 |
| `start_date` | yes | The date the whole day event should start. | 2019-03-10 |
| `end_date` | yes | The date the whole day event should end (exclusive). | 2019-03-11 |
| `in` | yes | Days or weeks that you want to create the event in. | "days": 2 |
| `location` | yes | The location of the event. | Bowling center |
{% note %}
@ -193,14 +204,14 @@ data:
### Action `calendar.get_events`
This action populates [Response Data](/docs/scripts/service-calls#use-templates-to-handle-response-data)
This action populates [Response Data](/docs/scripts/perform-actions#use-templates-to-handle-response-data)
with calendar events within a date range. It can return events from multiple calendars.
| Data attribute | Optional | Description | Example |
| ---------------------- | -------- | ----------- | --------|
| `start_date_time` | yes | Return active events after this time (exclusive). When not set, defaults to now. | 2019-03-10 20:00:00
| `end_date_time` | yes | Return active events before this time (exclusive). Cannot be used with `duration`. You must specify either `end_date_time` or `duration`.| 2019-03-10 23:00:00
| `duration` | yes | Return active events from `start_date_time` until the specified duration. Cannot be used with `end_date_time`. You must specify either `duration` or `end_date_time`. | `days: 2`
| ----------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- |
| `start_date_time` | yes | Return active events after this time (exclusive). When not set, defaults to now. | 2019-03-10 20:00:00 |
| `end_date_time` | yes | Return active events before this time (exclusive). Cannot be used with `duration`. You must specify either `end_date_time` or `duration`. | 2019-03-10 23:00:00 |
| `duration` | yes | Return active events from `start_date_time` until the specified duration. Cannot be used with `end_date_time`. You must specify either `duration` or `end_date_time`. | `days: 2` |
{% note %}
Use only one of `end_date_time` or `duration`.
@ -222,12 +233,12 @@ The response data contains a field for every calendar entity (e.g. `calendar.sch
Every calendar entity has a field `events` containing a list of events with these fields:
| Response data | Description | Example |
| ---------------------- | ----------- | -------- |
| `summary` | The title of the event. | Bowling
| `description` | The description of the event. | Birthday bowling
| `start` | The date or date time the event starts. | 2019-03-10 20:00:00
| `end` | The date or date time the event ends (exclusive). | 2019-03-10 23:00:00
| `location` | The location of the event. | Bowling center
| ------------- | ------------------------------------------------- | ------------------- |
| `summary` | The title of the event. | Bowling |
| `description` | The description of the event. | Birthday bowling |
| `start` | The date or date time the event starts. | 2019-03-10 20:00:00 |
| `end` | The date or date time the event ends (exclusive). | 2019-03-10 23:00:00 |
| `location` | The location of the event. | Bowling center |
This example uses a template with response data in another action:

View File

@ -18,7 +18,7 @@ The camera integration allows you to use IP cameras with Home Assistant.
{% include integrations/building_block_integration.md %}
### Streaming video
## Streaming video
If your camera supports it, and the [`stream`](/integrations/stream) integration is setup, you will be able to stream your cameras in the frontend and on supported media players.
@ -29,34 +29,44 @@ The `Preload stream` option will start the camera feed on Home Assistant startup
Example showing the Preload Stream option in the camera dialog.
</p>
### Actions
## The state of a camera
A camera can have the following states. Not all camera integrations support all states.
- **Streaming**: The camera transmits a live play-back of the video data it is recording.
- **Recording**: The camera is currently capturing video content.
- **Idle**: The camera is not currently capturing video content.
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
## Actions
Once loaded, the `camera` platform will expose actions that can be called to perform various actions.
Available actions: `enable_motion_detection`, `disable_motion_detection`, `play_stream`, `record`, `snapshot`, `turn_off` and `turn_on`.
#### Action `enable_motion_detection`
### Action `enable_motion_detection`
Enable the motion detection in a camera.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------------------------------------------------- |
| -------------- | -------- | ---------------------------------------------------------------------------------- |
| `entity_id` | yes | Name(s) of entities to enable motion detection, e.g., `camera.living_room_camera`. |
#### Action `disable_motion_detection`
### Action `disable_motion_detection`
Disable the motion detection in a camera.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ----------------------------------------------------------------------------------- |
| -------------- | -------- | ----------------------------------------------------------------------------------- |
| `entity_id` | yes | Name(s) of entities to disable motion detection, e.g., `camera.living_room_camera`. |
#### Action `play_stream`
### Action `play_stream`
Play a live stream from a camera to selected media player(s). Requires [`stream`](/integrations/stream) integration to be set up.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------------------------------------------- |
| -------------- | -------- | ------------------------------------------------------------------------------------------- |
| `entity_id` | no | Name of entity to fetch stream from, e.g., `camera.living_room_camera`. |
| `media_player` | no | Name of media player to play stream on, e.g., `media_player.living_room_tv`. |
| `format` | yes | Stream format supported by `stream` integration and selected `media_player`. Default: `hls` |
@ -72,14 +82,14 @@ action:
media_player: media_player.chromecast
```
#### Action `record`
### Action `record`
Make a `.mp4` recording from a camera stream. Requires `stream` integration to be set up.
Both `duration` and `lookback` options are suggestions, but should be consistent per camera. The actual length of the recording may vary. It is suggested that you tweak these settings to fit your needs.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| -------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.living_room_camera`. |
| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/{{ entity_id.name }}.mp4`{% endraw %}. |
| `duration` | yes | Target recording length (in seconds). Default: 30 |
@ -102,12 +112,12 @@ action:
{% endraw %}
#### Action `snapshot`
### Action `snapshot`
Take a snapshot from a camera.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
| -------------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.living_room_camera`. |
| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/snapshot_{{ entity_id.name }}`{% endraw %}. |
@ -128,20 +138,20 @@ action:
{% endraw %}
#### Action `turn_off`
### Action `turn_off`
Turn off camera. Not all camera models support this action, please consult individual camera page.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------------------- |
| -------------- | -------- | ------------------------------------------------------------------- |
| `entity_id` | yes | Name(s) of entities to turn off, e.g., `camera.living_room_camera`. |
#### Action `turn_on`
### Action `turn_on`
Turn on camera. Not all camera models support this action, please consult individual camera page.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------------------ |
| -------------- | -------- | ------------------------------------------------------------------ |
| `entity_id` | yes | Name(s) of entities to turn on, e.g., `camera.living_room_camera`. |
### Test if it works

View File

@ -15,6 +15,20 @@ The **Climate** {% term integration %} allows you to control and monitor HVAC (h
{% include integrations/building_block_integration.md %}
## The state of an HVAC entity
An HVAC entity can have the following states, depending on the specific climate device and its capabilities.
- **Off**: The device is turned off.
- **Heat**: The device is set to heat to a target temperature.
- **Cool**: The device is set to cool to a target temperature.
- **Heat/Cool**: The device is set to heat/cool to a target temperature range.
- **Auto**: The device is set to a schedule, learned behavior, AI.
- **Dry**: The device is set to dry/humidity mode.
- **Fan only**: The device only has the fan on. No heating or cooling is taking place.
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
## Actions
### Climate control actions
@ -165,7 +179,7 @@ automation:
target:
entity_id: climate.kitchen
data:
fan_mode: "On Low"
fan_mode: "low"
```
### Action `climate.set_hvac_mode`

View File

@ -11,11 +11,14 @@ ha_domain: config
ha_platforms:
- scene
ha_integration_type: system
related:
- docs: /docs/configuration/
title: Configuration file
---
The `config` integration is designed to display panels in the frontend to configure and manage parts of Home Assistant.
This integration is by default enabled, unless you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your configuration. If that is the case, the following example shows you how to enable this integration manually:
This integration is by default enabled, unless you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your {% term "`configuration.yaml`" %} file. If that is the case, the following example shows you how to enable this integration manually:
```yaml
# Example configuration.yaml entry

View File

@ -166,7 +166,7 @@ Send a message to a conversation agent for processing.
| `agent_id` | yes | ID of conversation agent. The conversation agent is the brains of the assistant. It processes the incoming text commands. |
| `conversation_id` | yes | ID of a new or previous conversation. Will continue an old conversation or start a new one. |
This action is able to return [response data](/docs/scripts/service-calls/#use-templates-to-handle-response-data). The response is the same response as for the
This action is able to return [response data](/docs/scripts/perform-actions/#use-templates-to-handle-response-data). The response is the same response as for the
[`/api/conversation/process` API](https://developers.home-assistant.io/docs/intent_conversation_api#conversation-response).
## Action `conversation.reload`

View File

@ -20,6 +20,20 @@ Home Assistant can give you an interface to control covers such as rollershutter
{% include integrations/building_block_integration.md %}
## The state of a cover
A can have the following states:
- **Opening**: The cover is in the process of opening to reach a set position.
- **Open**: The cover has reached the open position.
- **Closing**: The cover is in the process of closing to reach a set position.
- **Closed**: The cover has reached the closed position.
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
How the state of a cover is represented in the frontend depends on the device class.
## Device class
{% include integrations/device_class_intro.md %}
@ -54,7 +68,7 @@ The following device classes are supported for covers.
Available actions: `cover.open_cover`, `cover.close_cover`, `cover.stop_cover`, `cover.toggle`, `cover.open_cover_tilt`, `cover.close_cover_tilt`, `cover.stop_cover_tilt`, `cover.toggle_tilt`
| Data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------------------------------------------------------------------- |
| -------------- | -------- | ---------------------------------------------------------------------------------------------------- |
| `entity_id` | yes | String or list of strings that point at `entity_id`'s of covers. Use `entity_id: all` to target all. |
#### Automation example
@ -75,7 +89,7 @@ automation:
Set cover position of one or multiple covers.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------------------------------------------------------------------- |
| -------------- | -------- | ---------------------------------------------------------------------------------------------------- |
| `entity_id` | yes | String or list of strings that point at `entity_id`'s of covers. Use `entity_id: all` to target all. |
| `position` | no | Integer between 0 and 100. |
@ -99,7 +113,7 @@ automation:
Set cover tilt position of one or multiple covers.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------------------------------------------------------------------- |
| --------------- | -------- | ---------------------------------------------------------------------------------------------------- |
| `entity_id` | yes | String or list of strings that point at `entity_id`'s of covers. Use `entity_id: all` to target all. |
| `tilt_position` | no | Integer between 0 and 100. |

View File

@ -17,6 +17,20 @@ The **Date** {% term integration %} is built for the controlling and monitoring
If you are looking for a way to create a similar entity, please take a look at the [Date/Time helper](/integrations/input_datetime).
## The state of a date entity
The state of a date entity is the actual date value.
<p class='img'>
<img src='/images/integrations/date/state_date.png' alt='Screenshot showing the state of a date in the developer tools' />
Screenshot showing the state of a date in the developer tools. In the example shown, the state is January 1, 2020; in the format YYYY-MM-DD.
</p>
In addition, the entity can have the following states:
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
## Actions
### Date actions
@ -28,6 +42,6 @@ Available {% term actions %}: `date.set_value`
Set a new value for the date {% term entity %}.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `entity_id` | no | String or list of strings that point at `entity_id`'s of dates to control.
| `date` | no | New date value to set.
| -------------- | -------- | -------------------------------------------------------------------------- |
| `entity_id` | no | String or list of strings that point at `entity_id`'s of dates to control. |
| `date` | no | New date value to set. |

View File

@ -17,6 +17,20 @@ The **Date/Time** {% term integration %} is built for the controlling and monito
If you are looking for a way to create a Date/Time entity, please take a look at the [Date/Time helper](/integrations/input_datetime).
## The state of a date/time entity
The state of a date/time entity is the actual date and time value.
<p class='img'>
<img src='/images/integrations/datetime/state_datetime.png' alt='Screenshot showing the state of a date/time entity in the developer tools' />
Screenshot showing the state of a date/time entity in the developer tools. In the example shown, the state is January 1, 2020 at 12:00 in the format YYYY-MM-DD T HH:MM:SS.
</p>
In addition, the entity can have the following states:
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
## Actions
### datetime actions
@ -28,6 +42,6 @@ Available {% term actions %}: `datetime.set_value`
Set a new value for the datetime {% term entity %}.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------ |
| -------------- | -------- | ------------------------------------------------------------------------------------------------------------ |
| `entity_id` | no | String or list of strings that point at `entity_id`'s of datetimes to control. |
| `datetime` | no | New datetime value to set. If timezone is not included, the Home Assistant instance's timezone will be used. |

View File

@ -134,10 +134,12 @@ your Visual Studio Code project to connect to the debugger.
{
// Example of attaching to local debug server
"name": "Python: Attach Local",
"type": "python",
"type": "debugpy",
"request": "attach",
"connect": {
"port": 5678,
"host": "localhost",
},
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
@ -148,10 +150,12 @@ your Visual Studio Code project to connect to the debugger.
{
// Example of attaching to my production server
"name": "Python: Attach Remote",
"type": "python",
"type": "debugpy",
"request": "attach",
"connect": {
"port": 5678,
"host": "homeassistant.local",
},
"pathMappings": [
{
"localRoot": "${workspaceFolder}",

View File

@ -47,7 +47,7 @@ Note that setting `track_new_devices: false` will still result in new devices be
{% endnote %}
The extended example from above would look like the following sample:
In the {% term "`configuration.yaml`" %}, the extended example from above would look like the following sample:
```yaml
# Example configuration.yaml entry for Netgear device
@ -96,19 +96,39 @@ In the example above, `devicename` refers to the detected name of the device. F
| `picture` | None | A picture that you can use to easily identify the person or device. You can also save the image file in a folder "www" in the same location (can be obtained from developer tools) where you have your `configuration.yaml` file and just use `picture: /local/favicon-192x192.png`. The path 'local' is mapped to the 'www' folder you create. |
| `icon` | mdi:account | An icon for this device (use as an alternative to `picture`). |
| `gravatar` | None | An email address for the device's owner. If provided, it will override `picture`. |
| `track` | [uses platform setting] | If `yes`/`on`/`true` then the device will be tracked. Otherwise its location and state will not update. |
| `consider_home` | [uses platform setting] | Seconds to wait till marking someone as not home after not being seen. Allows you to override the global `consider_home` setting from the platform configuration on a per device level. |
| `track` | [uses platform setting] | If `yes`/`on`/`true` then the device will be tracked. Otherwise its location and state will not update. The `track` setting only applies for devices that were configured directly in YAML. |
| `consider_home` | [uses platform setting] | Seconds to wait till marking someone as not home after not being seen. Allows you to override the global `consider_home` setting from the platform configuration on a per device level. The `consider_home` setting only applies for devices that were configured directly in YAML. |
## Device states
## The state of a tracked device
The state of your tracked device will be `'home'` if it is in the [home zone](/integrations/zone#home-zone), detected by your network or Bluetooth based presence detection. If you're using a presence detection method that includes coordinates then when it's in a zone the state will be the name of the zone (case sensitive). When a device isn't at home and isn't in any zone, the state will be `'not_home'`.
The type of state a device tracker can have depends on whether it uses GPS or a router as the data source.
A device tracker with **GPS** as a source can have any number of string states. The integration can return one of the following options:
- Report GPS coordinates. The coordinates are then matched to a zone (which is set as state). If the home zone is matched, the state will be **Home**. If no zone was matched the state will be **Not home**.
- Report a location. This could be any string which is set as state.
A device tracker with **router** as a source can have one of two states: **Home**, or **Not home**.
- **Home**: Your tracked device is in the [home zone](/integrations/zone#home-zone), detected by your network or Bluetooth-based presence detection. If you're using a presence detection method that includes coordinates: when it's in a zone, the state equals the name of the zone (case sensitive).
- **Not home**: When a device isn't at home and isn't in any zone.
<p class='img'>
<img src='/images/integrations/device_tracker/state_device_tracker.png' alt='Screenshot showing the state of a device tracker entity in the developer tools' />
Screenshot showing the state of a device tracker entity in the developer tools.
</p>
In addition, the entity can have the following states:
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
## `device_tracker.see` action
The `device_tracker.see` action can be used to manually update the state of a device tracker:
| Data attribute | Optional | Description |
| ---------------------- | -------- | --------------------------------------------------------------------------------------- |
| --------------- | -------- | --------------------------------------------------------------------------------------- |
| `dev_id` | no | The `object_id`, for example `tardis` for `device_tracker.tardis` |
| `location_name` | yes | The location, `home`, `not_home`, or the name of the zone |
| `host_name` | yes | The hostname of the device tracker |

View File

@ -16,7 +16,7 @@ The **DHCP discovery** {% term integration %} will watch the network for DHCP re
## Configuration
This {% term integration %} is by default enabled, unless you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your configuration. If that is the case, the following example shows you how to enable this integration manually:
This {% term integration %} is by default enabled, unless you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your configuration. If that is the case, the following example shows you how to enable this integration manually in the {% term "`configuration.yaml`" %} file:
```yaml
# Example configuration.yaml entry

View File

@ -16,7 +16,7 @@ The **Downloader** {% term integration %} provides an action to download files.
{% include integrations/config_flow.md %}
If the path is not absolute, its assumed to be relative to the Home Assistant configuration directory (for example, .homeassistant/downloads).
If the path is not absolute, its assumed to be relative to the Home Assistant configuration directory (for example, `/config/downloads`). So if you have a folder called `/config/my_download_folder`, when prompted to **Select a location to get to store downloads**, enter `my_download_folder`. Home Assistant checks if the directory exists.
### Use the action

View File

@ -68,7 +68,7 @@ For the dynamic gas prices, only entities are created that display the
## Actions
The energy and gas prices are exposed using [actions](/docs/scripts/service-calls/). The actions populate [response data](/docs/scripts/service-calls#use-templates-to-handle-response-data) with price data.
The energy and gas prices are exposed using [actions](/docs/scripts/perform-actions/). The actions populate [response data](/docs/scripts/perform-actions#use-templates-to-handle-response-data) with price data.
### Action `easyenergy.get_gas_prices`

View File

@ -22,13 +22,17 @@ ha_integration_type: integration
## Ecowitt Weather Station configuration
The following steps must be performed to set up this integration. For security reason, use the token path that you get from the Home Assistant config flow.
The **Ecowitt** {% term integration %} works by first creating a callback endpoint on your Home Assistant instance and then adding this configuration to the Ecowitt console so that it starts sending data.
1. Use the Ecowitt App (on your phone) or access the Ecowitt WebUI in a browser at the station IP address.
2. Pick your station -> Menu Others -> DIY Upload Servers.
3. Hit next and select 'Customized'
4. Pick the protocol Ecowitt, and put in the ip/hostname of your Home Assistant server.
5. Path has to match! If using the Ecowitt App, remove the first forward slash from the API token, as the app will prepend one.
6. Save configuration.
To set up this integration:
1. Add the Ecowitt integration to your Home Assistant instance. When doing so, the config flow will display a Server IP, Path, and Port.
2. Use the Ecowitt App (on your phone) or access the Ecowitt WebUI in a browser at the station IP address.
3. Select your station > Menu **Others** > **DIY Upload Servers**.
4. Select **Next**, then select **Customized**.
5. Select the protocol **Ecowitt**.
6. Enter the Server IP, Path, and Port that were displayed in step 1.
- The path has to match! If using the Ecowitt app, remove the first forward slash from the path, as the app will prepend one.
7. Save the configuration.
Ecowitt doesn't support TLS/SSL, you can use the NGINX TLS Proxy Add-on to support HTTPS and HTTP at the same time.

View File

@ -122,7 +122,7 @@ entities:
type: list
{% endconfiguration %}
A full configuration sample looks like the one below.
A full configuration sample looks like the one below. Configuration entries are added to the {% term "`configuration.yaml`" %} file.
```yaml
# Example configuration.yaml entry

View File

@ -57,18 +57,18 @@ For the dynamic gas prices, only entities are created that display the
## Actions
The energy and gas prices are exposed using [actions](/docs/scripts/service-calls/). The actions populate [Response Data](/docs/scripts/service-calls#use-templates-to-handle-response-data) with price data.
The energy and gas prices are exposed using [actions](/docs/scripts/perform-actions/). The actions populate [Response Data](/docs/scripts/perform-actions#use-templates-to-handle-response-data) with price data.
### Action `energyzero.get_gas_prices`
Fetches the gas prices. The `config_entry` value be found using the **Actions** tab in the **Developer Tools**, selecting the desired entity and then switching to YAML.
| Data attribute | Optional | Description | Example |
| ---------------------- | -------- | ----------- | --------|
| `config_entry` | no | Config entry to use. | 1b4a46c6cba0677bbfb5a8c53e8618b0
| `incl_vat` | no | Defines whether the prices include or exclude VAT. | false
| `start` | yes | Start time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00
| `end` | yes | End time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00
| -------------- | -------- | ---------------------------------------------------- | -------------------------------- |
| `config_entry` | no | Config entry to use. | 1b4a46c6cba0677bbfb5a8c53e8618b0 |
| `incl_vat` | no | Defines whether the prices include or exclude VAT. | false |
| `start` | yes | Start time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00 |
| `end` | yes | End time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00 |
### Response data
@ -99,11 +99,11 @@ The response data is a dictionary with the gas timestamps and prices as string a
Fetches the energy prices. The `config_entry` value be found using the **Actions** tab in the **Developer Tools**, selecting the desired entity and then switching to YAML.
| Data attribute | Optional | Description | Example |
| ---------------------- | -------- | ----------- | --------|
| `config_entry` | no | Config entry to use. Can be found using the **Actions** tab in the **Developer Tools** and switching to YAML. | 1b4a46c6cba0677bbfb5a8c53e8618b0
| `incl_vat` | no | Defines whether the prices include or exclude VAT. | false
| `start` | yes | Start time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00
| `end` | yes | End time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00
| -------------- | -------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------- |
| `config_entry` | no | Config entry to use. Can be found using the **Actions** tab in the **Developer Tools** and switching to YAML. | 1b4a46c6cba0677bbfb5a8c53e8618b0 |
| `incl_vat` | no | Defines whether the prices include or exclude VAT. | false |
| `start` | yes | Start time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00 |
| `end` | yes | End time to get prices. Defaults to today 00:00:00 | 2023-01-01 00:00:00 |
### Response data

View File

@ -18,3 +18,7 @@ ha_iot_class: Cloud Polling
---
{% include integrations/supported_brand.md %}
## Limitations
Unlike other utilities that use the [{{ page.ha_supporting_integration }}](/integrations/{{ page.ha_supporting_domain }}) integration, {{ name }} only publishes monthly data.

View File

@ -23,7 +23,16 @@ ha_platforms:
ha_integration_type: integration
---
An integration for the [Enphase Envoy](https://enphase.com/en-us/products-and-services/envoy-and-combiner) solar energy gateway. This integration works with older models that only have production metrics (ie. Envoy-C) and newer models that offer both production and consumption metrics (ie. Envoy-S). Firmware version 3.9 or newer is required.
An integration for the [Enphase Envoy](https://enphase.com/en-us/products-and-services/envoy-and-combiner) solar energy gateway. This integration works with older models that only have production metrics (ie. Envoy-C) and newer models that offer both production and consumption metrics (ie. Envoy-S).
## Prerequisites
- The Envoy must be configured and commissioned.
- The Envoy must be on your local network with IPV4 connectivity from Home Assistant.
- Envoy firmware version 3.9 or newer.
- With Envoy firmware 7 and greater
- an Enlighten cloud username and password.
- Home Assistant 2023.9 or newer.
{% include integrations/config_flow.md %}

View File

@ -10,6 +10,8 @@ ha_codeowners:
- '@home-assistant/core'
ha_integration_type: entity
related:
- docs: /docs/automation/trigger/#event-trigger
title: Event triggers
- docs: /docs/configuration/customizing-devices/
title: Customizing devices
- docs: /dashboards/
@ -18,6 +20,8 @@ related:
Events are signals that are emitted when something happens, for example, when a user presses a physical button like a doorbell or when a button on a remote control is pressed.
The **Event** {% term integration %} provides {% term entities %} that trigger state change events, as do all other entity integrations.
These events do not capture a state in the traditional sense. For example, a doorbell does not have a state such as "on" or "off" but instead is momentarily pressed. Some events can have variations in the type of event that is emitted. For example, maybe your remote control is capable of emitting a single press, a double press, or a long press.
The event entity can capture these events in the physical world and makes them available in Home Assistant as an entity.
@ -26,13 +30,18 @@ The event entity can capture these events in the physical world and makes them a
## The state of an event entity
The event entity does not capture a state such as `on` or `off`. Instead, an event entity keeps track of the timestamp when the emitted event has last been detected.
The event entity does not capture a state such as **On** or **Off**. Instead, an event entity keeps track of the timestamp when the emitted event has last been detected.
<p class='img'>
<img src='/images/integrations/event/event_timestamp.png' alt='Event entity with timestamp value in state and event type "pressed"'>
Event entity with a timestamp value in state and event type "pressed".
</p>
In addition, the entity can have the following states:
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
Because the state of an event entity in Home Assistant is a timestamp, it means we can use it in our automations. For example:
```yaml

View File

@ -11,10 +11,19 @@ ha_codeowners:
ha_integration_type: entity
---
The fan integration allows you to control and monitor fan devices.
The **Fan** {% term integration %} allows you to control and monitor fan devices.
{% include integrations/building_block_integration.md %}
## The state of a fan entity
The state of a fan entity can be either **On** or **Off**.
In addition, the entity can have the following states:
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
## Actions
### Fan control actions

View File

@ -25,7 +25,7 @@ ability to run scripts or invoke actions for each of the `turn_on`, `turn_off`,
## Configuration
To enable template fans in your installation, add the following to your
`configuration.yaml` file:
{% term "`configuration.yaml`" %} file:
{% raw %}

View File

@ -52,10 +52,12 @@ name:
start_time:
description: The start time.
required: false
default: sunrise
type: time
stop_time:
description: The stop time.
required: false
default: dusk
type: time
start_colortemp:
description: The color temperature at the start.
@ -102,7 +104,7 @@ unique_id:
type: string
{% endconfiguration %}
Full example:
Full example of an entry in the {% term "`configuration.yaml`" %} file:
```yaml
# Example configuration.yaml entry

View File

@ -11,7 +11,7 @@ ha_domain: frontend
ha_integration_type: system
---
This offers the official frontend to control Home Assistant. This integration is enabled by default unless you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your configuration. If that is the case, the following example shows you how to enable this integration manually:
This offers the official frontend to control Home Assistant. This integration is enabled by default unless you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your {% term "`configuration.yaml`" %} file. If that is the case, the following example shows you how to enable this integration manually in the {% term "`configuration.yaml`" %} file.
```yaml
# Example configuration.yaml entry
@ -52,6 +52,7 @@ frontend:
### Theme format
The frontend integration allows you to create custom themes to influence the look and feel of the user interface.
Example of a configuration entry in the {% term "`configuration.yaml`" %} file:
```yaml
# Example configuration.yaml entry
@ -163,7 +164,7 @@ There are two themes-related actions:
### Action `set_theme`
| Data attribute | Description |
| ---------------------- | --------------------------------------------------------------------------------------------------- |
| -------------- | --------------------------------------------------------------------------------------------------- |
| `name` | Name of the theme to set, `default` for the default theme or `none` to restore to the default. |
| `mode` | If the theme should be applied in light or dark mode `light` or `dark` (Optional, default `light`). |

View File

@ -33,7 +33,7 @@ If you need more specific features for your use case, the manual [YAML-configura
Alternatively, this integration can be configured and set up manually via YAML
as well. To enable the generic hygrostat in your installation, add the
following to your `configuration.yaml` file:
following to your {% term "`configuration.yaml`" %} file:
```yaml
# Example configuration.yaml entry
@ -122,6 +122,8 @@ Time for `min_cycle_duration` and `keep_alive` must be set as "hh:mm:ss" or it m
## Full YAML configuration example
To be added to the {% term "`configuration.yaml`" %} file.
```yaml
generic_hygrostat:
- name: Bedroom

View File

@ -97,7 +97,7 @@ This action isn't tied to any integration entry, so it won't use the model, prom
{% endtip %}
Allows you to ask Gemini Pro or Gemini Pro Vision to generate content from a prompt consisting of text and optionally images.
This action populates [response data](/docs/scripts/service-calls#use-templates-to-handle-response-data) with the generated content.
This action populates [response data](/docs/scripts/perform-actions#use-templates-to-handle-response-data) with the generated content.
| Data attribute | Optional | Description | Example |
| ---------------------- | -------- | ----------------------------------------------- | ------------------- |

View File

@ -115,7 +115,7 @@ You can also use supported BCP 47 tags like the below or the 2-2 digit format fo
## Action speak
The `tts.speak` actiion is the modern way to use Google translate TTS action. Add the `speak` action, select the entity for your Google translate TTS (it's named for the language you created it with), select the media player entity or group to send the TTS audio to, and enter the message to speak.
The `tts.speak` action is the modern way to use Google translate TTS action. Add the `speak` action, select the entity for your Google translate TTS (it's named for the language you created it with), select the media player entity or group to send the TTS audio to, and enter the message to speak.
For more options about `speak`, see the Speak section on the main [TTS](/integrations/tts/#action-speak) building block page.

View File

@ -39,16 +39,26 @@ ha_integration_type: helper
The group integration lets you combine multiple entities into a single entity. Entities that are members of a group can be controlled and monitored as a whole.
This can be useful for cases where you want to control, for example, the
multiple bulbs in a light fixture as a single light in Home Assistant.
This can be useful, for example, in cases where you want to control multiple bulbs in a light fixture as a single light in Home Assistant. You also have the option of hiding the individual member entities in a group.
Home Assistant can group multiple binary sensors, covers, events, fans, lights, locks, media players, switches as a single entity, with the option of hiding the individual member entities.
The following entities can be grouped:
- [binary sensor (binary sensors)](/integrations/binary_sensor/)
- [button (buttons)](/integrations/button/)
- [cover (covers)](/integrations/cover/)
- [fan (fans)](/integrations/fan/)
- [switch (switches)](/integrations/switch/)
- [lock (locks)](/integrations/lock/)
- [light (lights)](/integrations/light/)
- [event (events)](/integrations/event/)
- [media player (media players)](/integrations/media_player/)
- [notify (notifications)](/integrations/notify/)
{% include integrations/config_flow.md %}
{% note %}
Notification entities can only be grouped via the UI.
The older notification services can only be grouped via YAML configuration.
The older notification actions can only be grouped via YAML configuration.
{% endnote %}
## Group behavior
@ -145,6 +155,14 @@ To add or remove entities from an existing group, click on `Group options`, all
![Group members](/images/integrations/group/Group_members.png)
### Group attributes
These are the attributes available for a group.
| Attribute | Data |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------- |
| `entity_id` | List of all the `entity_id`'s in the group. |
## YAML configuration
Alternatively, this integration can be configured and set up manually via YAML
@ -344,7 +362,7 @@ services:
required: true
type: list
keys:
service:
action:
description: The name part of an entity ID, e.g., if you use `notify.html5` normally, just put `html5`. Note that you must put everything in lower case here. Although you might have capitals written in the actual notification actions!
required: true
type: string
@ -452,6 +470,16 @@ It is possible to create a group that the system cannot calculate a group state.
These groups can still be in templates with the `expand()` directive, called using the `homeassistant.turn_on` and `homeassistant.turn_off` actions, etc.
### Attributes
These are the attributes available for an old-style group.
| Attribute | Data |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
| `entity_id` | List of all the `entity_id`'s in the group. |
| `order` | Integer representing the order in which the entity was created, starting with `0`. |
| `auto` | Boolean that will always be set to `true`. Only appears in groups that were created with the `set` action. |
### Actions
This integration provides the following actions to modify groups and a action to reload the configuration without restarting Home Assistant itself.

View File

@ -172,7 +172,7 @@ Here are some examples of periods you could work with, and what to write in your
{% raw %}
```yaml
start: "{{ today_at() }}"
start: "{{ today_at('00:00') }}"
end: "{{ now() }}"
```
@ -183,7 +183,7 @@ Here are some examples of periods you could work with, and what to write in your
{% raw %}
```yaml
end: "{{ today_at() }}"
end: "{{ today_at('00:00') }}"
duration:
hours: 24
```
@ -209,7 +209,7 @@ Here, last Monday is today at 00:00, minus the current weekday (the weekday is 0
{% raw %}
```yaml
start: "{{ today_at() - timedelta(days=now().weekday()) }}"
start: "{{ today_at('00:00') - timedelta(days=now().weekday()) }}"
end: "{{ now() }}"
```
@ -220,7 +220,7 @@ Here, last Monday is today at 00:00, minus the current weekday (the weekday is 0
{% raw %}
```yaml
start: "{{ today_at().replace(day=1) }}"
start: "{{ today_at('00:00').replace(day=1) }}"
end: "{{ now() }}"
```
@ -231,8 +231,8 @@ Here, last Monday is today at 00:00, minus the current weekday (the weekday is 0
{% raw %}
```yaml
start: "{{ (today_at().replace(day=1) - timedelta(days=1)).replace(day=1) }}"
end: "{{ today_at().replace(day=1) }}"
start: "{{ (today_at('00:00').replace(day=1) - timedelta(days=1)).replace(day=1) }}"
end: "{{ today_at('00:00').replace(day=1) }}"
```
{% endraw %}
@ -254,7 +254,7 @@ Here, last Monday is today at 00:00, minus the current weekday (the weekday is 0
{% raw %}
```yaml
end: "{{ today_at() }}"
end: "{{ today_at('00:00') }}"
duration:
days: 30
```

View File

@ -37,17 +37,20 @@ Note that it depends on the appliance and on API permissions which of the featur
1. Visit [https://developer.home-connect.com](https://developer.home-connect.com) and sign up for a developer account.
2. Enter the email of your login for the original Home Connect App from Bosch/Siemens under "Default Home Connect User Account for Testing" in the sign up process.
3. Under [Applications](https://developer.home-connect.com/applications), register a new App:
3. Go to the [Applications](https://developer.home-connect.com/applications) page and select [Register Application](https://developer.home-connect.com/application/add):
- Application ID: Home Assistant (or whatever name makes sense to you)
- OAuth Flow: Authorization Code Grant Flow
- Redirect URI: `https://my.home-assistant.io/redirect/oauth`
- Go to `https://my.home-assistant.io/` and make sure that your Home Assistant URL is set there. For example: `http://homeassistant:8123/` or `http://homeassistant.local:8123`
4. On success, you will be redirected to the **Applications** page. Select **Details** for your app. Make note of the client ID and secret - you will need it for the next step. Log out of the Home Connect developer portal.
5. In Home Assistant, find the Home Connect integration and launch it. You will be prompted to create an [Application Credential](https://www.home-assistant.io/integrations/application_credentials). You will need to provide a name (it's arbitrary) in addition to the Client ID and Secret from the previous step. Then, follow the steps in the UI to complete setup.
*Important*:
- **Power on** all your appliances during the integration configuration process; otherwise appliance programs list will be empty.
- To update the appliance programs list, you can reload the Home Connect integration when an appliance is turned on. If the re-initialization process is not triggered by reload, restart the Home Assistant when an appliance is turned on.
- After performing the steps above **log out** of your Home Connect Developer account. If you don't do this, the configuration steps below will fail during OAuth authentication with the message `“error”: “unauthorized_client”`.
- After performing the steps above, [log out](https://developer.home-connect.com/user/logout) of your Home Connect Developer account. If you don't do this, the configuration steps below will fail during OAuth authentication with the message `“error”: “unauthorized_client”`.
- The provided Home Connect User Account email address **must** be all lowercase otherwise it will result in authentication failures.
- All changes in the developer portal take 15 minutes before the change is implemented.

View File

@ -24,7 +24,7 @@ The **Home Assistant Core** {% term integration %} provides generic implementati
The Home Assistant Core integration is also responsible for the general settings. These settings are defined during onboarding, but you can change them later under {% my general title="**Settings** > **System** > **General**" %}. For the detailed steps, refer to [Basic settings](/docs/configuration/basic/).
If you prefer editing in YAML, you can define your general settings in the [`configuration.yaml` file](/docs/configuration/).
If you prefer editing in YAML, you can define your general settings in the {% term "`configuration.yaml`" %} file.
Note that for some of the settings, these can't be edited from the UI if they were defined in YAML. They will be grayed out or inaccessible.
<p class='img'>
@ -34,7 +34,7 @@ Note that for some of the settings, these can't be edited from the UI if they we
To get started with the general settings in YAML, follow these steps:
1. Copy the following information to your [`configuration.yaml` file](/docs/configuration/).
1. Copy the following information to your {% term "`configuration.yaml`" %} file.
```yaml
homeassistant:
@ -150,7 +150,7 @@ By default, all of your devices will be visible and have a default icon determin
Most of these settings can be changed from the UI. For the detailed steps, refer to [Customizing entities](/docs/configuration/customizing-devices/).
If you prefer editing in YAML, you can define your general settings in the [`configuration.yaml` file](/docs/configuration/).
If you prefer editing in YAML, you can define your general settings in the {% term "`configuration.yaml`" %} file.
### Possible values
@ -212,7 +212,7 @@ For a list of the supported device classes, refer to the documentation of the pl
### Manual customization
{% important %}
If you implement `customize`, `customize_domain`, or `customize_glob` you must make sure it is done inside of `homeassistant:` or it will fail.
If you implement `customize`, `customize_domain`, or `customize_glob`, in your {% term "`configuration.yaml`" %} file, you must make sure it is done inside of `homeassistant:` or it will fail.
{% endimportant %}
```yaml
@ -280,7 +280,7 @@ will take effect the next time an importing template is rendered.
Reloads an integration config entry.
| Data attribute | Description |
| ---------------------- | ---------------------------------------------------------- |
| -------------- | ---------------------------------------------------------- |
| `entity_id` | List of entity ids used to reference a config entry. |
| `area_id` | List of area ids used to reference a config entry. |
| `device_id` | List of device ids used to reference a config entry. |
@ -305,7 +305,7 @@ Stops the Home Assistant instance. Home Assistant must be restarted from the Hos
Update the location of the Home Assistant default zone (usually "Home").
| Data attribute | Optional | Description |
| ---------------------- | -------- | --------------------------- |
| -------------- | -------- | --------------------------- |
| `latitude` | no | Latitude of your location. |
| `longitude` | no | Longitude of your location. |
| `elevation` | yes | Elevation of your location. |
@ -329,7 +329,7 @@ action compared the others, is that is can be used to mix different domains,
for example, a light and a switch can be toggled in a single action.
| Data attribute | Optional | Description |
| ---------------------- | -------- | --------------------------------------------- |
| -------------- | -------- | --------------------------------------------- |
| `entity_id` | yes | The entity_id of the device to toggle on/off. |
#### Example
@ -351,7 +351,7 @@ action compared the others, is that is can be used to mix different domains,
for example, a light and a switch can be turned on in a single action.
| Data attribute | Optional | Description |
| ---------------------- | -------- | --------------------------------------- |
| -------------- | -------- | --------------------------------------- |
| `entity_id` | yes | The entity_id of the device to turn on. |
#### Example
@ -373,7 +373,7 @@ action compared the others, is that is can be used to mix different domains,
for example, a light and a switch can be turned off in a single action.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------- |
| -------------- | -------- | ---------------------------------------- |
| `entity_id` | yes | The entity_id of the device to turn off. |
#### Example
@ -392,7 +392,7 @@ action:
Force one or more entities to update its data rather than wait for the next scheduled update.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------- |
| -------------- | -------- | ------------------------------------------------------- |
| `entity_id` | no | One or multiple entity_ids to update. It can be a list. |
#### Example

View File

@ -22,7 +22,7 @@ dashboard if an alert is found that impacts your system.
## Configuration
This integration is by default enabled unless you've disabled or removed the
[`default_config:`](/integrations/default_config/) line from your configuration.
[`default_config:`](/integrations/default_config/) line from your {% term "`configuration.yaml`" %} file.
If that is the case, the following example shows you how to enable this
integration manually:

View File

@ -86,7 +86,7 @@ ssl_profile:
default: modern
{% endconfiguration %}
The sample below shows a configuration entry with possible values:
The sample below shows a configuration entry in the {% term "`configuration.yaml`" %} file with possible values:
```yaml
# Example configuration.yaml entry

View File

@ -78,3 +78,7 @@ Philips/Signify released a new version of their Hue bridge (square shape) and th
- Scene entities are not automatically created for V1 bridges. To activate a Hue scene on a V1 bridge from Home Assistant we provide an action to active it the Hue scene by name.
- State updates for devices/entities on a V1 bridges are not received instantly but polled on interval.
- Light entities for Hue rooms are not automatically created for V1 bridges, you can opt-in for creating entities for rooms within the Integration's options.
For v1 Hue bridges, you can create a script using the **Scripts** tab.
1. Select **Add New Script** > **Add Action** > **Philips Hue: Activate Scene**
2. Then select the appropriate room name in the **Group** field and the scene name in the **Scene** field stored on your Hue bridge.

View File

@ -17,10 +17,19 @@ related:
title: Dashboard
---
The `humidifier` integration is built for the controlling and monitoring of humidifiers, dehumidifiers, and hygrostat devices.
The **Humidifier** {% term integration %} is built for the controlling and monitoring of humidifiers, dehumidifiers, and hygrostat devices.
{% include integrations/building_block_integration.md %}
## The state of a humidifier entity
The state of a humidifier entity can be either **On** or **Off**.
In addition, the entity can have the following states:
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
## Device class
{% include integrations/device_class_intro.md %}

View File

@ -61,6 +61,20 @@ Your Husqvarna account username/password used for the *Automower® Connect* pho
6. Leave this tab open in browser and continue with Home Assistant configuration.
![Application Overview](/images/integrations/husqvarna_automower/application_overview.png)
{% details "I have manually disabled My Home Assistant" %}
If you don't have [My Home Assistant](/integrations/my) on your installation,
you can use `<HOME_ASSISTANT_URL>/auth/external/callback` as the redirect URI
instead.
The `<HOME_ASSISTANT_URL>` must be the same as used during the configuration/
authentication process.
Internal examples: `http://192.168.0.2:8123/auth/external/callback`, `http://homeassistant.local:8123/auth/external/callback`."
{% enddetails %}
### Home Assistant
The My Home Assistant redirect feature needs to be setup to redirect to your Home Assistant installation. See [My FAQ](https://my.home-assistant.io/faq) for additional information.

View File

@ -11,6 +11,15 @@ ha_codeowners:
ha_integration_type: entity
---
The image integration allows other integrations to display a static image.
The **Image** {% term integration %} allows other integrations to display a static image.
{% include integrations/building_block_integration.md %}
## The state of an image entity
The state of an image entity is a timestamp, showing the date and time when the image was last changed.
In addition, the entity can have the following states:
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.

View File

@ -15,6 +15,15 @@ Image processing enables Home Assistant to process images from [cameras](/integr
{% include integrations/building_block_integration.md %}
## The state of an image processing entity
For face recognition applications, the state of an image processing entity can be the name of the detected person or motion that was detected.
In addition, the entity can have the following states:
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
## ALPR
ALPR entities have a vehicle counter attribute `vehicles` and all found plates are stored in the `plates` attribute.

View File

@ -19,7 +19,15 @@ The IMAP integration is observing your [IMAP server](https://en.wikipedia.org/wi
{% include integrations/config_flow.md %}
### Gmail with App Password
### IMAP services with App Passwords
### Microsoft 365 and Live IMAP services
Microsoft has removed support for direct use (App) passwords when accessing IMAP without modern verification. You can create an App password, but access is only allowed though OAUTH2 enabled mail clients authorized by Microsoft or via an App registration in Microsoft Entra ID (school or business).
An OAUTH2 authentication flow is not supported for the IMAP integration. This means that unfortunately, it is not possible to use Home Assistant IMAP with Microsoft 365 IMAP services for school and business and the (free) personal Microsoft Live IMAP services.
### Google Gmail IMAP service
If youre going to use Gmail, 2-step verification must be enabled on your Gmail account. Once it is enabled, you need to create an [App Password](https://support.google.com/mail/answer/185833).
@ -54,17 +62,7 @@ By default, this integration will count unread emails. By configuring the search
### Selecting a charset supported by the imap server
Below is an example for setting up the integration to connect to your Microsoft 365 account that requires `US-ASCII` as charset:
- Server: `outlook.office365.com`
- Port: `993`
- Username: Your full email address
- Password: Your password
- Charset: `US-ASCII`
{% important %}
Yahoo also requires the character set `US-ASCII`.
{% endimportant %}
Some IMAP services, like Yahoo, require a `US-ASCII` charset to be configured.
### Selecting message data to include in the IMAP event (advanced mode)

View File

@ -30,7 +30,7 @@ default unless you removed it. If you removed `default_config:` from your
configuration, you must add `input_boolean:` to your {% term "`configuration.yaml`" %} first,
then you can use the UI.
Input booleans can also be configured via {% term "`configuration.yaml`" %}:
Input booleans can also be configured via {% term "`configuration.yaml`" %} file:
{% configuration %}
input_boolean:

View File

@ -19,7 +19,7 @@ templates.
The preferred way to configure input datetime is via the user interface at **{% my helpers title="Settings > Devices & services > Helpers" %}**. Click the add button and then choose the **{% my config_flow_start domain="input_datetime" title="Date and/or time" %}** option.
To be able to add **{% my helpers title="Helpers" %}** via the user interface you should have `default_config:` in your {% term "`configuration.yaml`" %}, it should already be there by default unless you removed it.
If you removed `default_config:` from your configuration, you must add `input_datetime:` to your `configuration.yaml` first, then you can use the UI.
If you removed `default_config:` from your configuration, you must add `input_datetime:` to your {% term "`configuration.yaml`" %} first, then you can use the UI.
`input_datetime` can also be configured via YAML. To add three datetime inputs to your installation,
one with both date and time, and one with date or time each,
@ -96,7 +96,7 @@ Available actions: `input_datetime.set_datetime` and `input_datetime.reload`.
#### input_datetime.set_datetime
| Data attribute | Format String | Description |
| ---------------------- | ------------------- | -------------------------------------------------------------------------------- |
| -------------- | ------------------- | -------------------------------------------------------------------------------- |
| `date` | `%Y-%m-%d` | This can be used to dynamically set the date. |
| `time` | `%H:%M:%S` | This can be used to dynamically set the time. |
| `datetime` | `%Y-%m-%d %H:%M:%S` | This can be used to dynamically set both the date & time. |

View File

@ -118,7 +118,8 @@ You can use the `sensor.iperf3_update` action to trigger a manual speed test for
Once loaded, the `iperf3` integration will expose an action (`iperf3.speedtest`) that can be called to run a speed test on demand. This can be useful if you have enabled manual mode.
| Data attribute | Description |
| `host` | String that point at a configured `host` from `configuration.yaml`. Otherwise, tests will be run against all configured hosts.
| --- | --- |
| `host` | String that point at a configured `host` from `configuration.yaml`. Otherwise, tests will be run against all configured hosts. |
Example action data:

View File

@ -2,6 +2,7 @@
title: IronOS
description: Instructions on how to integrate IronOS-based Pinecil V2 devices with Home Assistant.
ha_category:
- Number
- Sensor
ha_iot_class: Local Polling
ha_release: 2024.8
@ -17,6 +18,10 @@ ha_platforms:
The **IronOS** {% term integration %} seamlessly connects Home Assistant with PINE64's Pinecil V2 soldering irons, allowing for remote monitoring and control. This integration provides real-time updates on temperature, power, and various other settings and diagnostic information.
## Minimum requirements
- **Pinecil V2** requires IronOS v2.21 or higher to connect to Home Assistant. Please refer to the [Pinecil Wiki](https://wiki.pine64.org/wiki/Pinecil_Firmware#Overview) for update instructions.
{% include integrations/config_flow.md %}
## Number controls
@ -34,7 +39,7 @@ The **IronOS** {% term integration %} seamlessly connects Home Assistant with PI
- **Max tip temperature:** Indicates the maximum temperature that the currently inserted soldering iron tip supports.
- **Power level:** Displays the duty cycle of the pulse-width modulation (PWM) in percent, indicating the current power output of the soldering iron (for example, "50%" for a 50% duty cycle).
- **Power source:** Identifies the current power source used by the soldering iron, such as DC input, USB Quick Charge, USB Power Delivery, or USB Power Delivery VBUS.
- **Raw tip voltage:** Measures the raw voltage at the soldering iron tip.
- **Raw tip voltage:** Measures the raw voltage at the soldering iron's thermocouple, which is then offset compensated and converted to the tip temperature.
- **Tip resistance:** Indicates the resistance of the currently inserted soldering iron tip (for example, "6.2 Ω" for short tips, "8 Ω" for normal tips)
- **Uptime:** Tracks the total operating time of the soldering iron since its last power-on.
- **Hall effect strength:** (Optional) This feature requires the device to be [modified with a hall effect sensor](https://wiki.pine64.org/wiki/Pinecil_Hall_Effect_Sensor). If a neodymium magnet is attached to the stand, it enables proximity detection and can be utilized to calibrate when the iron enters sleep mode based on its proximity to the stand.

View File

@ -209,12 +209,12 @@ In addition to the [standard automation trigger data](/docs/automation/templatin
- `trigger.dpt_sub` Destination group address sub datapoint type number
- `trigger.dpt_name` DPT value type name - see Sensor value types
- `trigger.payload` Raw telegram payload. DPT 1, 2, and 3 yield integers 0..255; other DPT yield lists of integers 0..255
- `telegram.source` Source individual address
- `telegram.source_name` Source name
- `telegram.telegramtype` APCI type of telegram
- `telegram.timestamp` Timestamp
- `telegram.unit` Unit according to group address DPT
- `telegram.value` Decoded telegram payload according to DPT
- `trigger.source` Source individual address
- `trigger.source_name` Source name
- `trigger.telegramtype` APCI type of telegram
- `trigger.timestamp` Timestamp
- `trigger.unit` Unit according to group address DPT
- `trigger.value` Decoded telegram payload according to DPT
| Template variable | Type | Project data required |
|----------------------------|-----------------------------|-----------------------|
@ -225,12 +225,12 @@ In addition to the [standard automation trigger data](/docs/automation/templatin
| `trigger.dpt_sub` | integer | yes |
| `trigger.dpt_name` | string | yes |
| `trigger.payload` | integer or list of integers | no |
| `telegram.source` | string | no |
| `telegram.source_name` | string | yes |
| `telegram.telegramtype` | string | no |
| `telegram.timestamp` | timestamp | no |
| `telegram.unit` | string | yes |
| `telegram.value` | any | yes |
| `trigger.source` | string | no |
| `trigger.source_name` | string | yes |
| `trigger.telegramtype` | string | no |
| `trigger.timestamp` | timestamp | no |
| `trigger.unit` | string | yes |
| `trigger.value` | any | yes |
For values that require project data: if the information was not found, or if no project file was provided, data will be set to `null`.
@ -238,6 +238,8 @@ For values that require project data: if the information was not found, or if no
Example automation configuration
{% raw %}
```yaml
- alias: Single group address trigger
description: ''
@ -246,11 +248,13 @@ Example automation configuration
destination: 1/2/3
group_value_read: false
outgoing: false
condition: []
condition: "{{ trigger.value == 0 }}"
action: []
mode: single
```
{% endraw %}
Example trigger data
```yaml

View File

@ -11,10 +11,22 @@ ha_codeowners:
ha_integration_type: entity
---
The lawn mower integration allows the control of robotic lawn mowers to be reflected within Home Assistant.
The **Lawn mower** {% term integration %} allows the control of robotic lawn mowers to be reflected within Home Assistant.
{% include integrations/building_block_integration.md %}
## The state of a lawn mower entity
A lawn mower entity can have the following states:
- **Mowing**: The lawn mower is currently mowing.
- **Docked**: The lawn mower is done mowing and is currently docked.
- **Paused**: The lawn mower was active and is now paused.
- **Returning**: The lawn mower is returning to the dock.
- **Error**: The lawn mower encountered an error while active and needs assistance.
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
## Actions
Available actions: `start_mowing`, `pause` and `dock`.
@ -26,7 +38,7 @@ Before calling one of these actions, make sure your lawn_mower platform supports
Start or resume a mowing task.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------------------------------- |
| -------------- | -------- | -------------------------------------------------------------------- |
| `entity_id` | yes | Only act on specific lawn_mower. Use `entity_id: all` to target all. |
### Action `lawn_mower.pause`
@ -34,7 +46,7 @@ Start or resume a mowing task.
Pause a mowing task.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------------------------------- |
| -------------- | -------- | -------------------------------------------------------------------- |
| `entity_id` | yes | Only act on specific lawn_mower. Use `entity_id: all` to target all. |
### Action `lawn_mower.dock`
@ -42,5 +54,5 @@ Pause a mowing task.
Tell the lawn_mower to return to dock.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------------------------------- |
| -------------- | -------- | -------------------------------------------------------------------- |
| `entity_id` | yes | Only act on specific lawn_mower. Use `entity_id: all` to target all. |

View File

@ -23,13 +23,23 @@ ha_platforms:
- scene
- sensor
- switch
ha_config_flow: true
ha_integration_type: integration
---
The `lcn` integration for Home Assistant allows you to connect to [LCN](https://www.lcn.eu/) hardware devices.
The **LCN** {% term integration %} for Home Assistant allows you to connect to [LCN](https://www.lcn.eu/) hardware devices.
The integration requires one unused license of the coupling software LCN-PCHK (version >2.8) and an LCN hardware coupler. Alternatively, an LCN-PKE coupler can be used which offers two PCHK licenses.
With this setup sending and receiving commands to and from LCN modules is possible.
## Prerequisites
- The integration requires one unused license of the coupling software LCN-PCHK (version >2.8) and an LCN hardware coupler.
- Alternatively, an LCN-VISU or LCN-PKE coupler can be used which offers at least two PCHK licenses.
With this setup, sending and receiving commands to and from LCN modules is possible.
The `lcn` integration allows connections to more than one hardware coupler. For each coupler, a new integration entry needs to be created.
{% include integrations/config_flow.md %}
## Supported device types
There is currently support for the following device types within Home Assistant:
@ -47,375 +57,16 @@ Therefore the `lcn` integration offers a variety of [events](#events), [device t
They are ideal to be used in automation scripts or for the `template` platforms.
{% endnote %}
## Configuration
To use your LCN system in your installation, add the following lines to your {% term "`configuration.yaml`" %} file.
You have to specify at least one IP/port with login credentials for a PCHK host.
Consider to store your credentials in a [`secrets.yaml`](/docs/configuration/secrets).
## Setting up devices and entites
```yaml
lcn:
connections:
- name: myhome
host: 192.168.2.41
port: 4114
username: lcn
password: lcn
The `lcn` hardware modules and groups are represented by Home Assistant *devices*. The periphery of each `lcn` module is represented by Home Assistant *entities*. Peripheries are, for example, the output ports, relays, and variables of a module. Refer to the description of each [platform](#platforms) to learn about which entity should be used for which periphery.
binary_sensors:
- name: Kitchen window
address: myhome.s0.m7
source: binsensor1
The configuration of the `lcn` devices and entities is completely done using a web user interface (configuration panel).
climates:
- name: Temperature bedroom
address: myhome.s0.m7
source: var1
setpoint: r1varsetpoint
min_temp: 17.
max_temp: 30.
lockable: true
unit_of_measurement: °C
Once the integration is added to Home Assistant, you can access the `lcn` configuration panel by selecting the **Configure** button next to the respective integration entry on the [LCN integration page](https://my.home-assistant.io/redirect/integration/?domain=lcn).
covers:
- name: Living room cover
address: myhome.s0.m7
motor: motor1
lights:
- name: Bedroom light
address: myhome.s0.m7
output: output1
dimmable: true
transition: 5
scenes:
- name: Romantic
address: myhome.s0.m7
register: 1
scene: 4
outputs: [output1, output2, relais1, relais3, relais4]
transition: 5
sensors:
- name: Temperature
address: myhome.s0.m7
source: var3
unit_of_measurement: °C
switches:
- name: Sprinkler switch
address: myhome.s0.m7
output: relay1
```
{% configuration %}
connections:
description: List of your connections.
required: true
type: map
keys:
host:
description: IP address of the LCN-PCHK host.
required: true
type: string
port:
description: Port of the LCN-PCHK host.
required: true
type: integer
username:
description: Login username for the LCN-PCHK host.
required: true
type: string
password:
description: Login password for the LCN-PCHK host.
required: true
type: string
name:
description: Optional connection identifier. If omitted, the connections will be named consecutively as _pchk_, _pchk1_, _pchk2_, ...
required: false
default: pchk
type: string
sk_num_tries:
description: Segment coupler scans. Increase this number if you have at least one segment coupler in your system.
required: false
default: 0
type: integer
dim_mode:
description: "Dimming mode for connected modules. The operation mode is programmed into the LCN modules by the LCN-PRO software and depends on their firmware. If you experience unexpected dimming behavior, the connection is probably in the wrong operation mode. Possible values: _steps50_, _steps200_"
required: false
default: steps50
type: string
binary_sensors:
description: List of your binary sensors.
required: false
type: map
keys:
name:
description: "Name of the sensor."
required: true
type: string
address:
description: "[Address](#lcn-addresses) of the module/group."
required: true
type: string
source:
description: "Sensor source ([BINSENSOR](#ports), [SETPOINT](#variables-and-units), [KEYS](#keys))."
required: true
type: string
climates:
description: List of your climate devices.
required: false
type: map
keys:
name:
description: "Name of the climate controller."
required: true
type: string
address:
description: "[Address](#lcn-addresses) of the module/group."
required: true
type: string
source:
description: "Current temperature source ([VARIABLE](#variables-and-units))."
required: true
type: string
setpoint:
description: "Setpoint for target temperature ([VARIABLE](#variables-and-units), [SETPOINT](#variables-and-units))."
required: true
type: string
unit_of_measurement:
description: "Measurement unit ([VAR_UNIT](#variables-and-units))."
required: false
type: string
default: "celsius"
min_temp:
description: "Minimum target temperature."
required: false
type: float
default: 7.
max_temp:
description: "Maximum target temperature."
required: false
type: float
default: 35.
lockable:
description: "Climate control can be locked."
required: false
type: boolean
default: false
covers:
description: List of your covers.
required: false
type: map
keys:
name:
description: Name of the cover.
required: true
type: string
address:
description: "[Address](#lcn-addresses) of the module/group."
required: true
type: string
motor:
description: "Motor port ([MOTOR_PORT](#ports))."
required: true
type: string
reverse_time:
description: "Reverse time ([REVERSE_TIME](#variables-and-units), see also [Cover](#cover))."
required: false
type: string
lights:
description: List of your lights.
required: true
type: map
keys:
name:
description: Name of the light.
required: true
type: string
address:
description: "[Address](#lcn-addresses) of the module/group."
required: true
type: string
output:
description: "Light source ([OUTPUT_PORT](#ports), [RELAY_PORT](#ports))."
required: true
type: string
dimmable:
description: Enable the dimming feature for this light.
required: false
type: boolean
default: false
transition:
description: Transition (ramp) time in seconds.
required: false
type: integer
default: 0
scenes:
description: List of your scenes.
required: false
type: map
keys:
name:
description: "Name of the scene."
required: true
type: string
address:
description: "[Address](#lcn-addresses) of the module/group."
required: true
type: string
register:
description: Number of scene register (0..9).
required: true
type: integer
scene:
description: Number of scene (0..9).
required: true
type: integer
outputs:
description: "List of ports ([OUTPUT_PORT](#ports), [RELAY_PORT](#ports))."
required: false
type: list
transition:
description: Transition (ramp) time in seconds.
required: false
type: integer
default: None
sensors:
description: List of your sensors.
required: false
type: map
keys:
name:
description: "Name of the sensor."
required: true
type: string
address:
description: "[Address](#lcn-addresses) of the module/group."
required: true
type: string
source:
description: "Sensor source ([VARIABLE](#variables-and-units), [SETPOINT](#variables-and-units), [THRESHOLD](#variables-and-units), [S0_INPUT](#variables-and-units), [LED_PORT](#ports), [LOGICOP_PORT](#ports))."
required: true
type: string
unit_of_measurement:
description: "Measurement unit ([VAR_UNIT](#variables-and-units))."
required: false
type: string
default: "native"
switches:
description: List of your switches.
required: false
type: map
keys:
name:
description: "Name of the switch."
required: true
type: string
address:
description: "[Address](#lcn-addresses) of the module/group."
required: true
type: string
output:
description: "Switch source ([OUTPUT_PORT](#ports), [RELAY_PORT](#ports))."
required: true
type: string
{% endconfiguration %}
## LCN addresses
LCN hardware devices connected to the LCN bus are called _modules_. LCN modules are addressed by their numeric id in the range (5..254).
Modules can be arranged in _segments_. Segments can be addressed by their numeric id (5..128) or 0 (= no segment exist) or 3 (= target all segments).
LCN Modules within the _same_ segment can be grouped by their group id (5..254) or 3 (= target all groups.)
The LCN integration allows the connection to more than one hardware coupler. In this case, it has to be specified which hardware coupler should be used for addressing the specified module.
Whenever the address of a module or a group has to be specified, it can be addressed using one of the following syntaxes:
Example for modules:
```txt
connid.s000.m007
connid.s0.m7
s0.m7
0.7
```
Example for groups:
```txt
connid.s000.g007
connid.s0.g7
s0.g7
0.g7
```
Leading zeroes in the segment id or module/group id can be omitted. If the `connection_id` is omitted, the first connection defined in the [configuration](#configuration) will be used.
## LCN constants
The platforms and actions use several predefined constants as parameters.
### Ports
| Constant | Values |
| -------------- | -------------------------------------------------------------------------------------------------------------- |
| OUTPUT_PORT | `output1`, `output2`, `output3`, `output4` |
| RELAY_PORT | `relay1`, `relay2`, `relay3`, `relay4`, `relay5`, `relay6`, `relay7`, `relay8` |
| MOTOR_PORT | `motor1`, `motor2`, `motor3`, `motor4`, `outputs` |
| LED_PORT | `led1`, `led2`, `led3`, `led4`, `led5`, `led6`, `led7`, `led8`, `led9`, `led10`, `led11`, `led12` |
| LOGICOP_PORT | `logicop1`, `logicop2`, `logicop3`, `logicop4` |
| BINSENSOR_PORT | `binsensor1`, `binsensor2`, `binsensor3`, `binsensor4`, `binsensor5`, `binsensor6`, `binsensor7`, `binsensor8` |
The [MOTOR_PORT](#ports) values specify which hardware relay or outputs configuration will be used:
| Motor | Relay on/off | Relay up/down |
| :------: | :----------: | :-----------: |
| `motor1` | `relay1` | `relay2` |
| `motor2` | `relay3` | `relay4` |
| `motor3` | `relay5` | `relay6` |
| `motor4` | `relay7` | `relay8` |
| Motor | Output up | Output down |
| :-------: | :-------: | :---------: |
| `outputs` | `output1` | `output2` |
### Variables and Units
| Constant | Values |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| VARIABLE | `var1`, `var2`, `var3`, `var4`, `var5`, `var6`, `var7`, `var8`, `var9`, `var10`, `var11`, `var12`, `tvar`, `r1var`, `r2var` |
| SETPOINT | `r1varsetpoint`, `r2varsetpoint` |
| THRESHOLD | `thrs1`, `thrs2`, `thrs3`, `thrs4`, `thrs5`, `thrs2_1`, `thrs2_2`, `thrs2_3`, `thrs2_4`, `thrs3_1`, `thrs3_2`, `thrs3_3`, `thrs3_4`, `thrs4_1`, `thrs4_2`, `thrs4_3`, `thrs4_4` |
| S0_INPUT | `s0input1`, `s0input2`, `s0input3`, `s0input4` |
| VAR_UNIT | `native`, `°C`, `°K`, `°F`, `lux_t`, `lux_i`, `m/s`, `%`, `ppm`, `volt`, `ampere`, `degree` |
| TIME_UNIT | `seconds`, `minutes`, `hours`, `days` |
| RELVARREF | `current`, `prog` |
| REVERSE_TIME | `rt70`, `rt600`, `rt1200` |
### States:
| Constant | Values |
| ------------- | ---------------------------------- |
| LED_STATE | `on`, `off`, `blink`, `flicker` |
| LOGICOP_STATE | `none`, `some`, `all` |
| KEY_STATE | `hit`, `make`, `break`, `dontsend` |
### Keys:
Whenever a key has to be provided, it is defined by a joint string consisting of the table identifier (`a`, `b`, `c`, `d`) and the corresponding key number.
Examples: `a1`, `a5`, `d8`.
The detailed documentation for the LCN frontend panel can be found [here](https://github.com/alengwenus/lcn-frontend/blob/main/docs/lcn-frontend.md).
## Platforms
@ -443,10 +94,11 @@ If you intend to leave the regulation to Home Assistant, you should consider usi
### Cover
The `lcn` cover platform allows the control of [LCN](https://www.lcn.eu/) relays and output ports which have been configured as motor controllers.
Refer to the [motors table](#motors) to learn about which motor uses which module periphery.
Only for the module with firmware earlier than 190C:<br>
The configuration allows the optional definition of reverse time. This is the time which is waited during the switching of the motor currents.
The reverse time should only be defined when using the [MOTOR_PORT](#ports) value `OUTPUTS`. For all other configuration, the reverse time has to be defined in the LCN Pro software.
The reverse time should only be defined when using the module's output ports for driving the cover. For all other configuration, the reverse time has to be defined in the LCN Pro software.
For the reverse time, you may choose one of the following constants: `RT70` (70ms), `RT600` (600ms), `RT1200` (1,2s).
{% important %}
@ -1027,3 +679,50 @@ data:
address: myhome.0.7
pck: PIN4
```
## LCN constants
The [actions](#actions) use several predefined constants as parameters.
### Ports
| Constant | Values |
| -------------- | -------------------------------------------------------------------------------------------------------------- |
| OUTPUT_PORT | `output1`, `output2`, `output3`, `output4` |
### Motors
The motor values specify which hardware relay or outputs configuration will be used:
| Motor | Relay on/off | Relay up/down |
| :------: | :----------: | :-----------: |
| `motor1` | `relay1` | `relay2` |
| `motor2` | `relay3` | `relay4` |
| `motor3` | `relay5` | `relay6` |
| `motor4` | `relay7` | `relay8` |
| Motor | Output up | Output down |
| :-------: | :-------: | :---------: |
| `outputs` | `output1` | `output2` |
### Variables and units
| Constant | Values |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| VARIABLE | `var1`, `var2`, `var3`, `var4`, `var5`, `var6`, `var7`, `var8`, `var9`, `var10`, `var11`, `var12`, `tvar`, `r1var`, `r2var` |
| SETPOINT | `r1varsetpoint`, `r2varsetpoint` |
| THRESHOLD | `thrs1`, `thrs2`, `thrs3`, `thrs4`, `thrs5`, `thrs2_1`, `thrs2_2`, `thrs2_3`, `thrs2_4`, `thrs3_1`, `thrs3_2`, `thrs3_3`, `thrs3_4`, `thrs4_1`, `thrs4_2`, `thrs4_3`, `thrs4_4` |
| VAR_UNIT | `native`, `°C`, `°K`, `°F`, `lux_t`, `lux_i`, `m/s`, `%`, `ppm`, `volt`, `ampere`, `degree` |
| TIME_UNIT | `seconds`, `minutes`, `hours`, `days` |
### States
| Constant | Values |
| ------------- | ---------------------------------- |
| LED_STATE | `on`, `off`, `blink`, `flicker` |
| KEY_STATE | `hit`, `make`, `break`, `dontsend` |
### Keys
Whenever a key has to be provided, it is defined by a joint string consisting of the table identifier (`a`, `b`, `c`, `d`) and the corresponding key number.
Examples: `a1`, `a5`, `d8`.

View File

@ -15,7 +15,16 @@ This integration allows you to track and control various light bulbs. Read the i
{% include integrations/building_block_integration.md %}
### Default turn-on values
## State and attributes of a light entity
Light {% term entities %} can have the following {% term states %}: `on` or `off`. The list of available attributes depends on the {% term device %}. Refer to the integration documentation of your light.
<p class='img'>
<img src='/images/integrations/light/state_light.png' alt='Screenshot showing three lights with differents states: `on`, `off`, or `unavailable`'>
Three lights with differents states: `on`, `off`, or `unavailable`.
</p>
## Default turn-on values
To set the default color, brightness and transition values when the light is turned on, create a custom `light_profiles.csv`, normally located in the default configuration folder where you find {% term "`configuration.yaml`" %}.
@ -33,7 +42,7 @@ The `.default` suffix should be added to the entity identifier of each light to
If a light entity is in the `on` state, the default profile brightness will only be applied if it is called in the action data attribute `profile`, like any other named profile. The transition attribute will be applied for all `light.turn_on`, `light.toggle`, and `light.turn_off` actions, unless specified otherwise in the action data.
{% endnote %}
### Action `light.turn_on`
## Action `light.turn_on`
Turns one light on or multiple lights on using [groups](/integrations/group/).
@ -101,7 +110,7 @@ automation:
If no data is sent, and a default profile exists, the default profile will be applied.
{% endnote %}
### Action `light.turn_off`
## Action `light.turn_off`
Turns one or multiple lights off.
@ -111,7 +120,7 @@ Turns one or multiple lights off.
| `transition` | yes | Integer that represents the time the light should take to transition to the new state in seconds. |
| `flash` | yes | Tell light to flash, can be either value `short` or `long`. |
### Action `light.toggle`
## Action `light.toggle`
Toggles the state of one or multiple lights. Takes the same arguments as the [`light.turn_on`](#action-lightturn_on) action.

View File

@ -23,7 +23,7 @@ ability to run scripts or invoke actions for each of the on, off, and
brightness commands of a light.
To enable Template Lights in your installation, add the following to your
`configuration.yaml` file:
{% term "`configuration.yaml`" %} file:
{% raw %}

View File

@ -19,6 +19,17 @@ ha_integration_type: integration
The Linear integration lets you control Linear garage doors through Home Assistant. Device names in Home Assistant are generated based on the names defined in your Linear mobile app.
{% warning %}
Nice North America has begun informing users of the new Nice G.O. app, and dropping support for the Linear app in the coming weeks. Support for the new app will be added as a new integration.
Migrating now will cut off access to the old app and the integration will cease functioning for you.
For more information, refer to the [Nice G.O. migration documentation](https://na.niceforyou.com/features/nice-go-app/#migration).
{% endwarning %}
## Prerequisites
This integration is for garage doors connected to the cloud by Wi-Fi using the Linear mobile app.
{% include integrations/config_flow.md %}
## Cover

View File

@ -13,27 +13,8 @@ ha_config_flow: true
ha_platforms:
- media_player
ha_iot_class: Local Polling
ha_dhcp: true
---
The LinkPlay {% term integrations %} for Home Assistant allows you to control various media players based on the LinkPlay protocol. The integration supports auto-discovery on your local network through [Zeroconf](/integrations/zeroconf).
{% include integrations/supported_brand.md %}
## Actions
The LinkPlay integration makes various custom actions available in addition to the [standard media player actions](/integrations/media_player/#actions).
### Action `linkplay.play_preset`
Play a preset on a LinkPlay media player.
{% note %}
Companion apps, such as 4stream, allow to save music presets (for example, Spotify playlists). This action can be used to start playing these presets.
{% endnote %}
| Data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `entity_id` | no | The speakers to target. To target all LinkPlay devices, use `all`.
| `preset_number` | no | The number of the preset to play.
{% include integrations/config_flow.md %}

View File

@ -18,19 +18,32 @@ Keeps track which locks are in your environment, their state and allows you to c
{% include integrations/building_block_integration.md %}
### Actions
## The state of a lock entity
A lock entity can have the following states:
- **Jammed**: The lock is currently jammed.
- **Open**: Indication of whether the lock is currently open.
- **Opening**: Indication of whether the lock is currently opening.
- **Locked**: The lock is currently locked.
- **Locking**: The lock is in the process of being locked.
- **Unlocking**: The lock is in the process of being unlocked.
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
## Actions
A lock integration provides the following actions:
#### Action `lock.lock`
### Action `lock.lock`
Lock your door, the attribute should appear under a 'data' attribute for the action.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------- |
| -------------- | -------- | ---------------------------- |
| `entity_id` | no | Entity of the relevant lock. |
##### Example
#### Example
```yaml
action:
@ -39,15 +52,15 @@ action:
entity_id: lock.my_place
```
#### Action `lock.unlock`
### Action `lock.unlock`
Unlock your door, the attribute should appear under a 'data' attribute for the action.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------- |
| -------------- | -------- | ---------------------------- |
| `entity_id` | no | Entity of the relevant lock. |
##### Example
#### Example
```yaml
action:
@ -56,7 +69,7 @@ action:
entity_id: lock.my_place
```
### Use the actions
## Use the actions
Go to the **Developer Tools**, then to **Actions** in the frontend, and choose `lock.lock`, `lock.unlock` or `lock.open` from the list of available actions. Enter something like the sample below into the **data** field and select **Perform action**.
@ -65,5 +78,5 @@ Go to the **Developer Tools**, then to **Actions** in the frontend, and choose `
```
| Data attribute | Optional | Description |
| ---------------------- | -------- | -------------------------------------------------------------- |
| -------------- | -------- | -------------------------------------------------------------- |
| `entity_id` | yes | Only act on specific lock. Use `entity_id: all` to target all. |

View File

@ -9,11 +9,14 @@ ha_quality_scale: internal
ha_codeowners:
- '@home-assistant/core'
ha_integration_type: system
related:
- docs: /docs/configuration/
title: Configuration file
---
<img src='/images/screenshots/logbook.png' style='margin-left:10px; float: right;' height="100" />
The logbook integration provides a different perspective on the history of your
The logbook {% term integration %} provides a different perspective on the history of your
house by showing all the changes that happened to your house in reverse
chronological order. It depends on
the [`recorder`](/integrations/recorder/) integration for storing the data. This means that if the
@ -21,7 +24,7 @@ the [`recorder`](/integrations/recorder/) integration for storing the data. This
PostgreSQL as data store, the `logbook` integration does not use the default
SQLite database to store data.
This integration is by default enabled, unless you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your configuration. If that is the case, the following example shows you how to enable this integration manually:
This integration is by default enabled, unless you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your {% term "`configuration.yaml`" %} file. If that is the case, the following example shows you how to enable this integration manually, by adding it to your {% term "`configuration.yaml`" %} file:
```yaml
# Example configuration.yaml entry

View File

@ -322,9 +322,16 @@ This section provides a bit more information on some of the categories:
**IP addresses**: Typically more than one IPv6 address is shown: link local, unique local, and global unicast. In some cases a device also supports IPv4. In that case there will also be listed an IPv4 address here.
## Matter device updates
## Matter OTA device updates
The Matter standard supports OTA (Over-the-Air) updates optionally. Matter devices that support Matter updates will have an [update entity](/integrations/update). Furthermore, the CSA DCL (Distributed Compliance Ledger) stores firmware update information. Home Assistant reads firmware update information directly from the DCL to learn about available updates. By default, the integration checks every 12 hours for an update. If you want to force an update check, use the `homeassistant.update_entity` [action](/integrations/homeassistant/) with the update entity as the target.
The Matter protocol supports OTA (Over-the-Air) software updates. But the OTA software update is an optional feature for Matter devices, so not all Matter devices implement it. Home Assistant creates an update entity for every Matter device which does support Matter updates.
The CSA operates a Distributed Compliance Ledger (DCL) which provides metadata for firmware updates. By default, the Matter update entities check the DCL every 12 hours for updates. If you want to force an update check, use the `homeassistant.update_entity` [action](/integrations/homeassistant/), with the update entity as the target. Currently, Eve and Nanoleaf are using the DCL to provide updates. It is expected that in future, more and more firmware updates become available through the DCL.
<p class='img'>
<img src='/images/integrations/matter/matter_ota_message.png' alt='Matter device OTA update message'>
Notification of an OTA update for a Matter device
</p>
## Experiment with Matter using a ESP32 dev board

View File

@ -20,6 +20,20 @@ Interacts with media players on your network.
{% include integrations/building_block_integration.md %}
## The state of a media player
A media player can have the following states:
- **Off**: The media player is turned off and is not accepting commands until turned on.
- **On**: The media player is turned on, but no details on its state are currently known.
- **Idle**: The media player is turned on and accepting commands, but currently not playing any media. Possibly at some idle home screen.
- **Playing**: The media player is currently playing media.
- **Paused**: The media player has an active media and is currently paused
- **Standby**: The media player is in a low power state, accepting commands.
- **Buffering**: The media player is preparing to start playback of media.
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
## Actions
### Media control actions
@ -183,7 +197,7 @@ Allows to group media players together for synchronous playback. Only works on s
| ---------------------- | -------- | ---------------------------------------------------- |
| `entity_id` | yes | Unjoin this media player from any player groups. |
### Device class
## Device class
{% include integrations/device_class_intro.md %}

View File

@ -31,6 +31,7 @@ Additionally the following brands have been reported to also work with this inte
- [Dooya](http://www.dooya.com/)
- [Gaviota](https://www.gaviotagroup.com/en/)
- [Havana Shade](https://havanashade.com/)
- [Heicko](https://heicko.de/en/tubular-motors/controls/e-smart-home/usb-smart-home-stick-bi-direktional-1-st.html)
- [Hurrican Shutters Wholesale](https://www.hurricaneshutterswholesale.com/)
- [Inspired Shades](https://www.inspired-shades.com/)
- [iSmartWindow](https://www.ismartwindow.co.nz/)
@ -62,6 +63,7 @@ The following bridges are reported to work with this integration:
- Linx Hub USB
- SIRO Connect SI7002
- SIRO Connect SI7005
- Heicko Smart Stick 1ST
{% include integrations/config_flow.md %}
@ -94,7 +96,12 @@ In the official Bloc Blinds app go to settings (three bars > gear icon), go to t
### Connector app
Click the about page of the connector app 5 times to get the key ([iOS app](https://apps.apple.com/us/app/connector/id1344058317), [Android app](https://play.google.com/store/apps/details?id=com.smarthome.app.connector)).
To get the API key ([iOS app](https://apps.apple.com/us/app/connector/id1344058317), [Android app](https://play.google.com/store/apps/details?id=com.smarthome.app.connector)), follow these steps:
1. In the left sidebar of the app, open the **Settings** {% icon "mdi:gear-outline" %} (gear icon).
2. Select the **About** page of the Connector app.
3. Tap the screen 5 times while being on the **About** page.
- This opens a window with the API key.
## Favorite position

View File

@ -55,7 +55,7 @@ The following entities are available for a Motionblinds Bluetooth device:
## Actions
Since Motionblinds Bluetooth motors require a Bluetooth connection to control them, Home Assistant does not get automatic updates of the motor's state by default. Therefore, you can use the [homeassistant.update_entity](https://www.home-assistant.io/docs/scripts/service-calls/#homeassistant-actions) action on any entity belonging to a Motionblinds Bluetooth device, which will connect to your Motionblinds Bluetooth motor and update the state of all entities belong to that device. However, be aware that doing so may impact battery life.
Since Motionblinds Bluetooth motors require a Bluetooth connection to control them, Home Assistant does not get automatic updates of the motor's state by default. Therefore, you can use the [homeassistant.update_entity](https://www.home-assistant.io/docs/scripts/perform-actions/#homeassistant-actions) action on any entity belonging to a Motionblinds Bluetooth device, which will connect to your Motionblinds Bluetooth motor and update the state of all entities belong to that device. However, be aware that doing so may impact battery life.
This can also be automated using a YAML automation. For instance, the following automation connects to your Motionblind every 24 hours to update its state in Home Assistant:

View File

@ -1039,31 +1039,6 @@ Documentation on the MQTT components that support YAML [can be found here](/inte
The MQTT integration supports templating. Read more [about using templates with the MQTT integration](/docs/configuration/templating/#using-templates-with-the-mqtt-integration).
## MQTT Notifications
The MQTT notification support is different than for the other [notification](/integrations/notify/) integrations. It is an action. This means you need to provide more details when calling the action.
**Perform action** section from **Developer Tools** -> **Actions** allows you to send MQTT messages. Choose *mqtt.publish* from the list of available actions, and enter something like the sample below into the **data** field and select **Perform action**.
```json
{
"~":"homeassistant/switch/irrigation",
"name":"garden",
"cmd_t":"~/set",
"stat_t":"~/state"
}
```
<p class='img'>
<img src='/images/screenshots/mqtt-notify.png' alt='Screenshot showing how to publish a message to an MQTT topic'/>
</p>
The same will work for automations.
<p class='img'>
<img src='/images/screenshots/mqtt-notify-action.png' alt='Screenshot showing how to publish a message to an MQTT topic for automations' />
</p>
### Examples
#### REST API
@ -1123,6 +1098,7 @@ The MQTT integration will register the `mqtt.publish` action, which allows publi
| `qos` | yes | Quality of Service to use. (default: 0) |
| `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`.
{% endnote %}
@ -1141,7 +1117,7 @@ payload: on
```yaml
topic: homeassistant/light/1/state
payload_template: "{{ states('device_tracker.paulus') }}"
payload: "{{ states('device_tracker.paulus') }}"
```
{% endraw %}
@ -1149,27 +1125,24 @@ payload_template: "{{ states('device_tracker.paulus') }}"
{% raw %}
```yaml
topic_template: "homeassistant/light/{{ states('sensor.light_active') }}/state"
payload_template: "{{ states('device_tracker.paulus') }}"
topic: "homeassistant/light/{{ states('sensor.light_active') }}/state"
payload: "{{ states('device_tracker.paulus') }}"
```
{% endraw %}
`payload` must be a string.
Be aware that `payload` must be a string.
If you want to send JSON using the YAML editor then you need to format/escape
it properly. Like:
{% raw %}
```yaml
topic: homeassistant/light/1/state
payload: "{\"Status\":\"off\", \"Data\":\"something\"}"`
```
When using Home Assistant's YAML editor for formatting JSON
you should take special care if `payload` contains template content.
Home Assistant will force you in to the YAML editor and will treat your
definition as a template. Make sure you escape the template blocks as like
in the example below. Home Assistant will convert the result to a string
and will pass it to the MQTT publish action.
{% endraw %}
The example below shows how to publish a temperature sensor 'Bathroom Temperature'.
The `device_class` is set, so it is not needed to set the "name" option. The entity

View File

@ -396,7 +396,7 @@ The Media Source APIs can be used in [Companion App Attachments](https://compani
You can use the Nest Device Trigger payload fields `attachment.image` or `attachment.video`in an [automation](/getting-started/automation/) to send a notification from an [actions](/getting-started/automation-action/) as shown in the examples below.
{% details "Example Action: Clip Preview (mp4) attachment for iOS" %}
{% details "Example Action: Clip Preview (mp4) attachment for Android or iOS" %}
Example for cameras that support Clip Previews used with iOS which can render video in notifications.
@ -408,8 +408,8 @@ data:
message: Doorbell Pressed
title: Someone pressed the doorbell
data:
image: {{ trigger.event.data.attachment.image }}
video: {{ trigger.event.data.attachment.video }}
image: "{{ trigger.event.data.attachment.image }}"
video: "{{ trigger.event.data.attachment.video }}"
mode: single
```
@ -429,7 +429,7 @@ data:
message: Doorbell Pressed
title: Someone pressed the doorbell
data:
image: {{ trigger.event.data.attachment.image }}
image: "{{ trigger.event.data.attachment.image }}"
```
{% endraw %}
@ -448,7 +448,7 @@ data:
message: Doorbell Pressed
title: Someone pressed the doorbell
data:
image: {{ trigger.event.data.attachment.image }}
image: "{{ trigger.event.data.attachment.image }}"
```
{% endraw %}

View File

@ -17,16 +17,30 @@ If you want to send notifications to the Home Assistant web interface, you may u
{% include integrations/building_block_integration.md %}
## The state of a notify entity
The state of a notify entity is the date and time when a message was last sent.
<p class='img'>
<img src='/images/integrations/notify/state_notify.png' alt='Screenshot showing the state of a notify entity in the developer tools' />
Screenshot showing the state of a notify entity in the developer tools.
</p>
In addition, the entity can have the following states:
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
## Action
The legacy `notify` platform will expose a generic `notify` action that can be called to send notifications.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `message` | no | Body of the notification.
| `title` | yes | Title of the notification.
| `target` | yes | Some platforms allow specifying a recipient that will receive the notification. See your platform page if it is supported.
| `data` | yes | On platforms who have extended functionality. See your platform page if it is supported.
| -------------- | -------- | -------------------------------------------------------------------------------------------------------------------------- |
| `message` | no | Body of the notification. |
| `title` | yes | Title of the notification. |
| `target` | yes | Some platforms allow specifying a recipient that will receive the notification. See your platform page if it is supported. |
| `data` | yes | On platforms who have extended functionality. See your platform page if it is supported. |
## Usage
@ -39,9 +53,9 @@ One notification integration is automatically included, the Persistent Notificat
Integrations can also implement the notify entity platform. Entity platform implementations will replace the legacy notify action in time. There is an entity platform action `send_message` which allows you to send notification messages to multiple notify entities.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `message` | no | Body of the notification.
| `title` | yes | Title of the notification.
| -------------- | -------- | -------------------------- |
| `message` | no | Body of the notification. |
| `title` | yes | Title of the notification. |
## Companion app notifications

View File

@ -23,6 +23,15 @@ Keeps track on `number` entities in your environment, their state, and allows yo
If you are looking for a way to create a number entity, please take a look at the [Number helper](/integrations/input_number).
## The state of a number entity
The state of a number entity is a number.
In addition, the entity can have the following states:
- **Unavailable**: The entity is currently unavailable.
- **Unknown**: The state is not yet known.
## Device class
{% include integrations/device_class_intro.md %}
@ -82,5 +91,5 @@ The following device classes are supported for numbers:
The Number entities registers the following actions:
| Action | Data | Description |
| ------- | ---- | ----------- |
| `set_value` | `value`<br>`entity_id(s)`<br>`area_id(s)` | Set the value of specific `number` entities
| ----------- | ----------------------------------------- | ------------------------------------------- |
| `set_value` | `value`<br>`entity_id(s)`<br>`area_id(s)` | Set the value of specific `number` entities |

View File

@ -26,11 +26,11 @@ According to the [API documentation](https://www.weather.gov/documentation/servi
Providing a METAR station code is optional, and if not supplied, the closest station to the latitude and longitude will be chosen. A list of nearby stations is printed to the log with level `DEBUG` if no station is supplied. Stations can also be found on the [NOAA website](https://www.cnrfc.noaa.gov/metar.php). Codes with only three characters, for example, `ADW` should be prefixed with the letter K, `KADW`.
One weather entity is created for each entry in the configuration. Hourly and day/night forecasts are provided through the [`weather.get_forecasts` action](/integrations/weather/action--weatherget_forecasts). The time supplied for each forecast is the start time for the forecast. Sensors are also created as disabled entities after configuration and can be enabled by the user.
One weather entity is created for each entry in the configuration. Hourly and day/night forecasts are provided through the [`weather.get_forecasts` action](/integrations/weather#action-weatherget_forecasts). The time supplied for each forecast is the start time for the forecast. Sensors are also created as disabled entities after configuration and can be enabled by the user.
## Action `nws.get_forecasts_extra`
`nws.get_forecasts_extra` provides extra data in a form similar to `weather.get_forecasts`. See [`weather.get_forecasts` documentation](/integrations/weather/action--weatherget_forecasts).
`nws.get_forecasts_extra` provides extra data in a form similar to `weather.get_forecasts`. See [`weather.get_forecasts` documentation](/integrations/weather#action-weatherget_forecasts).
| Data attribute | Optional | Description | Example |
| ---------------------- | -------- | ----------- | --------|

View File

@ -13,6 +13,8 @@ ha_integration_type: service
related:
- docs: /docs/configuration/templating/
title: Home Assistant Templating
- docs: /voice_control/voice_remote_expose_devices/
title: Exposing entities to Assist
- docs: /docs/automation/trigger/#sentence-trigger
title: Sentence trigger
ha_platforms:
@ -21,7 +23,9 @@ ha_platforms:
The **Ollama** {% term integration %} adds a conversation agent in Home Assistant powered by a local [Ollama](https://ollama.com/) server.
This conversation agent is unable to control your house. The Ollama conversation agent can be used in automations, but not as a [sentence trigger](/docs/automation/trigger/#sentence-trigger). It can only query information that has been provided by Home Assistant. To be able to answer questions about your house, Home Assistant will need to provide Ollama with the details of your house, which include areas, devices, and their states.
Controlling Home Assistant is an experimental feature that provides the AI access to the Assist API of Home Assistant. You can control what devices and entities it can access from the {% my voice_assistants title="exposed entities page" %}. The AI is able to provide you information about your devices and control them.
This integration does not integrate with [sentence triggers](/docs/automation/trigger/#sentence-trigger).
This integration requires an external Ollama server, which is available for macOS, Linux, and Windows. Follow the [download instructions](https://ollama.com/download) to install the server. Once installed, configure Ollama to be [accessible over the network](https://github.com/ollama/ollama/blob/main/docs/faq.md#how-can-i-expose-ollama-on-my-network).
@ -35,8 +39,11 @@ URL:
Model:
description: Name of the [Ollama model](https://ollama.com/library) to use, such as `mistral` or `llama2:13b`. Models will be automatically downloaded during setup.
Prompt template:
description: The starting text for the AI language model to generate new text from. This text can include information about your Home Assistant instance, devices, and areas and is written using [Home Assistant Templating](/docs/configuration/templating/).
Instructions:
description: Instructions for the AI on how it should respond to your requests. It is written using [Home Assistant Templating](/docs/configuration/templating/).
Control Home Assistant:
description: If the model is allowed to interact with Home Assistant. It can only control or provide information about entities that are [exposed](/voice_control/voice_remote_expose_devices/) to it. This feature is considered experimental and see [Controlling Home Assistant](#controlling-home-assistant) below for details on model limitations.
Context window size:
description: "The context window size is the number of tokens the model can take as input. Home Assistant defaults to 8k, which is larger than the default value in Ollama Server (2k), and you may adjust it based on the maximum context size of the specific model used. A larger value will better support larger homes with more entities, and smaller values may lower Ollama server RAM usage."
@ -47,3 +54,18 @@ Keep alive:
description: Duration in seconds for the Ollama host to keep the model in memory after receiving a message (-1 = no limit, 0 = no retention). Default value is -1.
{% endconfiguration_basic %}
## Controlling Home Assistant
If you want to experiment with local LLMs using Home Assistant, we currently recommend using the `llama3.1:8b` model and exposing fewer than 25 entities. Note that smaller models are more likely to make mistakes than larger models.
Only models that support [Tools](https://ollama.com/search?c=tools) may control Home Assistant.
Smaller models may not [reliably maintain a conversation](https://llama.meta.com/docs/model-cards-and-prompt-formats/llama3_1/#llama-3.1-instruct) when controlling
Home Assistant is enabled. However, you may use multiple Ollama configurations that
share the same model, but use different prompts:
- Add the Ollama integration without enabling control of Home Assistant. You can use
this conversation agent to have a conversation.
- Add an additional Ollama integration, using the same model, enabling control of Home Assistant.
You can use this conversation agent to control Home Assistant.

View File

@ -82,7 +82,7 @@ You can use an OpenAI Conversation integration to [talk to Super Mario and, if d
### Action `openai_conversation.generate_image`
Allows you to ask OpenAI to generate an image based on a prompt. This action
populates [Response Data](/docs/scripts/service-calls#use-templates-to-handle-response-data)
populates [Response Data](/docs/scripts/perform-actions#use-templates-to-handle-response-data)
with the requested image.
| Data attribute | Optional | Description | Example |

Some files were not shown because too many files have changed in this diff Show More