Merge branch 'current' into next

This commit is contained in:
Franck Nijhof 2025-04-02 08:02:54 +00:00
commit aa6edc6231
No known key found for this signature in database
GPG Key ID: D62583BA8AB11CA3
43 changed files with 393 additions and 347 deletions

View File

@ -10,9 +10,9 @@ group :development do
gem 'stringex', '2.8.6' gem 'stringex', '2.8.6'
# > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189 # > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189
gem 'sassc', '2.1.0' gem 'sassc', '2.1.0'
gem 'sass-embedded', '1.86.0' gem 'sass-embedded', '1.86.1'
gem 'rubocop', '1.74.0' gem 'rubocop', '1.75.1'
gem 'ruby-lsp', '0.23.12' gem 'ruby-lsp', '0.23.13'
gem 'rackup', '2.2.1' gem 'rackup', '2.2.1'
end end
@ -24,7 +24,7 @@ group :jekyll_plugins do
end end
gem 'sinatra', '4.1.1' gem 'sinatra', '4.1.1'
gem 'nokogiri', '1.18.6' gem 'nokogiri', '1.18.7'
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
# and associated library # and associated library

View File

@ -30,10 +30,10 @@ GEM
ffi (1.17.1-arm64-darwin) ffi (1.17.1-arm64-darwin)
ffi (1.17.1-x86_64-linux-gnu) ffi (1.17.1-x86_64-linux-gnu)
forwardable-extended (2.6.0) forwardable-extended (2.6.0)
google-protobuf (4.30.1-arm64-darwin) google-protobuf (4.30.2-arm64-darwin)
bigdecimal bigdecimal
rake (>= 13) rake (>= 13)
google-protobuf (4.30.1-x86_64-linux) google-protobuf (4.30.2-x86_64-linux)
bigdecimal bigdecimal
rake (>= 13) rake (>= 13)
http_parser.rb (0.8.0) http_parser.rb (0.8.0)
@ -81,17 +81,17 @@ GEM
listen (3.9.0) listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3) rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10) rb-inotify (~> 0.9, >= 0.9.10)
logger (1.6.6) logger (1.7.0)
mercenary (0.4.0) mercenary (0.4.0)
multi_json (1.15.0) multi_json (1.15.0)
mustermann (3.0.3) mustermann (3.0.3)
ruby2_keywords (~> 0.0.1) ruby2_keywords (~> 0.0.1)
nokogiri (1.18.6-arm64-darwin) nokogiri (1.18.7-arm64-darwin)
racc (~> 1.4) racc (~> 1.4)
nokogiri (1.18.6-x86_64-linux-gnu) nokogiri (1.18.7-x86_64-linux-gnu)
racc (~> 1.4) racc (~> 1.4)
parallel (1.26.3) parallel (1.26.3)
parser (3.3.7.2) parser (3.3.7.4)
ast (~> 2.4.1) ast (~> 2.4.1)
racc racc
pathutil (0.16.2) pathutil (0.16.2)
@ -114,12 +114,12 @@ GEM
rb-fsevent (0.11.2) rb-fsevent (0.11.2)
rb-inotify (0.11.1) rb-inotify (0.11.1)
ffi (~> 1.0) ffi (~> 1.0)
rbs (3.9.1) rbs (3.9.2)
logger logger
regexp_parser (2.10.0) regexp_parser (2.10.0)
rexml (3.4.1) rexml (3.4.1)
rouge (4.5.1) rouge (4.5.1)
rubocop (1.74.0) rubocop (1.75.1)
json (~> 2.3) json (~> 2.3)
language_server-protocol (~> 3.17.0.2) language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0) lint_roller (~> 1.1.0)
@ -127,13 +127,13 @@ GEM
parser (>= 3.3.0.2) parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0) rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.9.3, < 3.0) regexp_parser (>= 2.9.3, < 3.0)
rubocop-ast (>= 1.38.0, < 2.0) rubocop-ast (>= 1.43.0, < 2.0)
ruby-progressbar (~> 1.7) ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0) unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.43.0) rubocop-ast (1.43.0)
parser (>= 3.3.7.2) parser (>= 3.3.7.2)
prism (~> 1.4) prism (~> 1.4)
ruby-lsp (0.23.12) ruby-lsp (0.23.13)
language_server-protocol (~> 3.17.0) language_server-protocol (~> 3.17.0)
prism (>= 1.2, < 2.0) prism (>= 1.2, < 2.0)
rbs (>= 3, < 4) rbs (>= 3, < 4)
@ -142,9 +142,9 @@ GEM
ruby2_keywords (0.0.5) ruby2_keywords (0.0.5)
safe_yaml (1.0.5) safe_yaml (1.0.5)
sass (3.4.25) sass (3.4.25)
sass-embedded (1.86.0-arm64-darwin) sass-embedded (1.86.1-arm64-darwin)
google-protobuf (~> 4.30) google-protobuf (~> 4.30)
sass-embedded (1.86.0-x86_64-linux-gnu) sass-embedded (1.86.1-x86_64-linux-gnu)
google-protobuf (~> 4.30) google-protobuf (~> 4.30)
sass-globbing (1.1.5) sass-globbing (1.1.5)
sass (>= 3.1) sass (>= 3.1)
@ -159,7 +159,7 @@ GEM
rack-protection (= 4.1.1) rack-protection (= 4.1.1)
rack-session (>= 2.0.0, < 3) rack-session (>= 2.0.0, < 3)
tilt (~> 2.0) tilt (~> 2.0)
sorbet-runtime (0.5.11956) sorbet-runtime (0.5.11980)
stringex (2.8.6) stringex (2.8.6)
terminal-table (3.0.2) terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3) unicode-display_width (>= 1.1.1, < 3)
@ -182,12 +182,12 @@ DEPENDENCIES
jekyll-paginate (= 1.1.0) jekyll-paginate (= 1.1.0)
jekyll-sitemap (= 1.4.0) jekyll-sitemap (= 1.4.0)
jekyll-toc (= 0.19.0) jekyll-toc (= 0.19.0)
nokogiri (= 1.18.6) nokogiri (= 1.18.7)
rackup (= 2.2.1) rackup (= 2.2.1)
rake (= 13.2.1) rake (= 13.2.1)
rubocop (= 1.74.0) rubocop (= 1.75.1)
ruby-lsp (= 0.23.12) ruby-lsp (= 0.23.13)
sass-embedded (= 1.86.0) sass-embedded (= 1.86.1)
sass-globbing (= 1.1.5) sass-globbing (= 1.1.5)
sassc (= 2.1.0) sassc (= 2.1.0)
sinatra (= 4.1.1) sinatra (= 4.1.1)

224
package-lock.json generated
View File

@ -20,7 +20,7 @@
"remark-lint-prohibited-strings": "^4.0.0", "remark-lint-prohibited-strings": "^4.0.0",
"remark-lint-unordered-list-marker-style": "^4.0.1", "remark-lint-unordered-list-marker-style": "^4.0.1",
"remark-stringify": "^11.0.0", "remark-stringify": "^11.0.0",
"textlint": "^14.5.0", "textlint": "^14.6.0",
"textlint-filter-rule-comments": "^1.2.2", "textlint-filter-rule-comments": "^1.2.2",
"textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-common-misspellings": "^1.0.1",
"textlint-rule-terminology": "^5.0.13" "textlint-rule-terminology": "^5.0.13"
@ -427,73 +427,73 @@
"dev": true "dev": true
}, },
"node_modules/@textlint/ast-tester": { "node_modules/@textlint/ast-tester": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.6.0.tgz",
"integrity": "sha512-biwtMuv+B1A5tqDLYSwMSjEr24l4zji69Ttg9ZxAEkr5sGre2W5ojEZRA79edDxcAASDF35XgHkWR+tvMsVAdg==", "integrity": "sha512-wGoNB35KA/LEWaGp5ccsUqQwNjygCDnkGxe8A8kCMURgM2KYTuCCItGMLrajm0T9BhNdQtK/ST6+EljTFERasA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/ast-node-types": "^14.5.0", "@textlint/ast-node-types": "^14.6.0",
"debug": "^4.4.0" "debug": "^4.4.0"
} }
}, },
"node_modules/@textlint/ast-tester/node_modules/@textlint/ast-node-types": { "node_modules/@textlint/ast-tester/node_modules/@textlint/ast-node-types": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.6.0.tgz",
"integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", "integrity": "sha512-PqWpzFa64M5uKqBSQPV8wPqo14zvmz5JXWIIUkVCMQ/gN8/8IrXjpsp0O+/To8u5D5woVpxihBi/3nJdR8E37g==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@textlint/ast-traverse": { "node_modules/@textlint/ast-traverse": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.6.0.tgz",
"integrity": "sha512-K83si1a2s1LdIVPmzrtuI+SdKjNp2A5jmOcoyXAVNLv3qlJc4DTCyKO7Qn/xTq00zQrhLrZXJSaooBSXi4HXvQ==", "integrity": "sha512-BkfQ/bWfpO6FErrpYoUF+SzlPqJklxD+o6rs2TwSoqO2EMP5vAgIVdGJiTBjV4kxghTzq0w5UkMi9xtNZw1sUg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/ast-node-types": "^14.5.0" "@textlint/ast-node-types": "^14.6.0"
} }
}, },
"node_modules/@textlint/ast-traverse/node_modules/@textlint/ast-node-types": { "node_modules/@textlint/ast-traverse/node_modules/@textlint/ast-node-types": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.6.0.tgz",
"integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", "integrity": "sha512-PqWpzFa64M5uKqBSQPV8wPqo14zvmz5JXWIIUkVCMQ/gN8/8IrXjpsp0O+/To8u5D5woVpxihBi/3nJdR8E37g==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@textlint/config-loader": { "node_modules/@textlint/config-loader": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.6.0.tgz",
"integrity": "sha512-kTFF+Sx3lxH1GSBbk2mEslu0VzyHj9DNy1wiwnPuHrQRVv6fsFZXr35mfLWnfBT40s6aEOrtPh1323jfLduHBg==", "integrity": "sha512-OzcHVwKlyQOm7bVPee9z0AciYUN9L8543JIkHxtj81h8Qc7aGBOo0nqIZSL2GC+G0pnab6Rkt0drOAlpkKKrrA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/kernel": "^14.5.0", "@textlint/kernel": "^14.6.0",
"@textlint/module-interop": "^14.5.0", "@textlint/module-interop": "^14.6.0",
"@textlint/resolver": "^14.5.0", "@textlint/resolver": "^14.6.0",
"@textlint/types": "^14.5.0", "@textlint/types": "^14.6.0",
"@textlint/utils": "^14.5.0", "@textlint/utils": "^14.6.0",
"debug": "^4.4.0", "debug": "^4.4.0",
"rc-config-loader": "^4.1.3" "rc-config-loader": "^4.1.3"
} }
}, },
"node_modules/@textlint/feature-flag": { "node_modules/@textlint/feature-flag": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.6.0.tgz",
"integrity": "sha512-fM0W1JRbEkO4IuJhDLDAam50usW+z7B1wA8Y6PciJeojzpTXUiV29MtUISTCfSVkjrDo54aIRgTPn8HogkUGPQ==", "integrity": "sha512-WmmFHEt71rtSk2ZjcvrLJPN6dKYtYwC8fAFZcnjw15h80Di7wuw7vrpW85udloq+XYDlJ5GnhumDX5yZ4mt4Ug==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@textlint/fixer-formatter": { "node_modules/@textlint/fixer-formatter": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.6.0.tgz",
"integrity": "sha512-vdnrm4tAcJ/KtSiN6szt0MZSWFW8/WKl8kr1owgpQ0NKuxbP1b9dFc+k/V/mq+RnFcuwnbb/r2+7z8oH7HYHEQ==", "integrity": "sha512-CSbjhBFfvVFqbEKmmm0xJxxzpYGHO4Y/dguBI9g2aaCBy52EVwBa55rbhkpBV+b9X3OJhnypJEo5IbC+F52CqA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/module-interop": "^14.5.0", "@textlint/module-interop": "^14.6.0",
"@textlint/resolver": "^14.5.0", "@textlint/resolver": "^14.6.0",
"@textlint/types": "^14.5.0", "@textlint/types": "^14.6.0",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"debug": "^4.4.0", "debug": "^4.4.0",
"diff": "^5.2.0", "diff": "^5.2.0",
@ -503,43 +503,43 @@
} }
}, },
"node_modules/@textlint/kernel": { "node_modules/@textlint/kernel": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.6.0.tgz",
"integrity": "sha512-hgq0b7eUJxEwCf1jNx/DCZeU2SJXXRH+qycvyrGVEOWgLYmtizlCm6GQ+ejDgUdcoNpQhzCkiwV2HF0z9UbmMw==", "integrity": "sha512-Mf8cikqVDHdf0RgjSYxs/G1a+I5UK5GjM+ehc67zSF/vtFUaLRn5bkWcEKrWQ67mjrM24tqH46oqVM9RL+utMQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/ast-node-types": "^14.5.0", "@textlint/ast-node-types": "^14.6.0",
"@textlint/ast-tester": "^14.5.0", "@textlint/ast-tester": "^14.6.0",
"@textlint/ast-traverse": "^14.5.0", "@textlint/ast-traverse": "^14.6.0",
"@textlint/feature-flag": "^14.5.0", "@textlint/feature-flag": "^14.6.0",
"@textlint/source-code-fixer": "^14.5.0", "@textlint/source-code-fixer": "^14.6.0",
"@textlint/types": "^14.5.0", "@textlint/types": "^14.6.0",
"@textlint/utils": "^14.5.0", "@textlint/utils": "^14.6.0",
"debug": "^4.4.0", "debug": "^4.4.0",
"fast-equals": "^4.0.3", "fast-equals": "^4.0.3",
"structured-source": "^4.0.0" "structured-source": "^4.0.0"
} }
}, },
"node_modules/@textlint/kernel/node_modules/@textlint/ast-node-types": { "node_modules/@textlint/kernel/node_modules/@textlint/ast-node-types": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.6.0.tgz",
"integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", "integrity": "sha512-PqWpzFa64M5uKqBSQPV8wPqo14zvmz5JXWIIUkVCMQ/gN8/8IrXjpsp0O+/To8u5D5woVpxihBi/3nJdR8E37g==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@textlint/linter-formatter": { "node_modules/@textlint/linter-formatter": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.6.0.tgz",
"integrity": "sha512-5QQsdnsuUBscCq1IX10ynYtsfLmctdoc4GZtJA7L//QFYAAgTrBzpXjfhyWZs7C5VJho9FzfljyuuA7jbhRrFw==", "integrity": "sha512-52P8jXnxqafbmV1Dg05u8EHitvdCA6nnIGwIWjLCydL1jfM5js6KvA47qRugb6EWWbYxWKCGkbmaIFhKGwFTaA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@azu/format-text": "^1.0.2", "@azu/format-text": "^1.0.2",
"@azu/style-format": "^1.0.1", "@azu/style-format": "^1.0.1",
"@textlint/module-interop": "^14.5.0", "@textlint/module-interop": "^14.6.0",
"@textlint/resolver": "^14.5.0", "@textlint/resolver": "^14.6.0",
"@textlint/types": "^14.5.0", "@textlint/types": "^14.6.0",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"debug": "^4.4.0", "debug": "^4.4.0",
"js-yaml": "^3.14.1", "js-yaml": "^3.14.1",
@ -552,13 +552,13 @@
} }
}, },
"node_modules/@textlint/markdown-to-ast": { "node_modules/@textlint/markdown-to-ast": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.6.0.tgz",
"integrity": "sha512-qftHkBnyWEy2PmAhmhrmTemCKMJCpPKtFZt0woaa0yZkMwXo/RN66elnjAEJZenkRntQgphlKJJZ0I/NA2hH4g==", "integrity": "sha512-T29IbY9cAupWBuds1DPl9TzS4oI2c0wVd0+0E43j5XezJKR3oE4e5/g9v4U2oo/LIbxDLlI22o3IGSyfUv3fFw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/ast-node-types": "^14.5.0", "@textlint/ast-node-types": "^14.6.0",
"debug": "^4.4.0", "debug": "^4.4.0",
"mdast-util-gfm-autolink-literal": "^0.1.3", "mdast-util-gfm-autolink-literal": "^0.1.3",
"neotraverse": "^0.6.15", "neotraverse": "^0.6.15",
@ -570,9 +570,9 @@
} }
}, },
"node_modules/@textlint/markdown-to-ast/node_modules/@textlint/ast-node-types": { "node_modules/@textlint/markdown-to-ast/node_modules/@textlint/ast-node-types": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.6.0.tgz",
"integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", "integrity": "sha512-PqWpzFa64M5uKqBSQPV8wPqo14zvmz5JXWIIUkVCMQ/gN8/8IrXjpsp0O+/To8u5D5woVpxihBi/3nJdR8E37g==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
@ -819,88 +819,88 @@
} }
}, },
"node_modules/@textlint/module-interop": { "node_modules/@textlint/module-interop": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.6.0.tgz",
"integrity": "sha512-nlFwHSYZJgSwXyF9PuHV3DcvRnObf64Mm4QWt9LaTr5zQB2MwEluaL8ROYL+sLJ4JhqNKpuqBT1EkTixPsN3cQ==", "integrity": "sha512-eQFprk37rU6Sl250h52OaoHA4Dal4jSjWYWRdKfjvrdDcNWxPAOenAAGBf66lS7E34No9E9G51jsSc43N0CzJg==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@textlint/resolver": { "node_modules/@textlint/resolver": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-14.6.0.tgz",
"integrity": "sha512-yvC8gQHKsl/rR3x+884tA9BzVn6naILmHRmOP3FEQogr+ixOW4rL9OgdS6IoMjG8cVh8o4kI40xJfh1l6oX6vQ==", "integrity": "sha512-pFB6bRKAQf+6N6JppAnxRNbExDathq325l8MpYGQY1j2bUzaDx0j90pf2EHfTM0mHr3v/6z37GNUk5ZUZkH3Ew==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@textlint/source-code-fixer": { "node_modules/@textlint/source-code-fixer": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.6.0.tgz",
"integrity": "sha512-zcokW+MBTppOzGumeB1SZvjDitCnO2sAZrWpmw849L6P11RdxS/iQXakg4jkRTTlWYR1AtzyAa9j0lLCdxsfuQ==", "integrity": "sha512-GbnKYQ91KHhg3XfiYAIe++E9UI0wsUZVGq3lzVUO9+nzJ4MUtUk1QpTmwP9+DYxnzi7w5jTcXHN6kh/zmHK4AA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/types": "^14.5.0", "@textlint/types": "^14.6.0",
"debug": "^4.4.0" "debug": "^4.4.0"
} }
}, },
"node_modules/@textlint/text-to-ast": { "node_modules/@textlint/text-to-ast": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.6.0.tgz",
"integrity": "sha512-e6SrPeCScmxxfTDpXo+nBh4tt6sbqySX/fE65sYVYupLwpJsCtxTEnYft2jEqifvgaM4JjgzETSQMG799HBTPw==", "integrity": "sha512-1rNBbC8EfxxAk76jHCMrNduUd2CuaaXyAZvuSWzRM+Fx+YyTOelKEv9sppCWnThcD2A34KKlghHg40YH3CjriQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/ast-node-types": "^14.5.0" "@textlint/ast-node-types": "^14.6.0"
} }
}, },
"node_modules/@textlint/text-to-ast/node_modules/@textlint/ast-node-types": { "node_modules/@textlint/text-to-ast/node_modules/@textlint/ast-node-types": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.6.0.tgz",
"integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", "integrity": "sha512-PqWpzFa64M5uKqBSQPV8wPqo14zvmz5JXWIIUkVCMQ/gN8/8IrXjpsp0O+/To8u5D5woVpxihBi/3nJdR8E37g==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@textlint/textlint-plugin-markdown": { "node_modules/@textlint/textlint-plugin-markdown": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.6.0.tgz",
"integrity": "sha512-riMcW6Sj/IvTnIAA4W0O5pxJxdqth+MUe2li7wg8yCq3jilS0EYIlolNXvX414v/9swsLu8Tztwugrh0E6HJDw==", "integrity": "sha512-0W5wxWbDxAJoMe6ju2oq0IZ2ZX91JoWLHti+4LrPc9uiMx6CaTS/ZLYlu0hoYSk5DNQ75/bDD9wm78APM07zGA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/markdown-to-ast": "^14.5.0" "@textlint/markdown-to-ast": "^14.6.0"
} }
}, },
"node_modules/@textlint/textlint-plugin-text": { "node_modules/@textlint/textlint-plugin-text": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.6.0.tgz",
"integrity": "sha512-aASQwkRnupRlY9w168SBjrsDbO1wtg2EYx8JSnt/YboUnhszQD8Zys178Zu/00ECtpxwpjQYowoYNq0BoP9aig==", "integrity": "sha512-QglDssLXVBdjk4cVUI5nK9DJtJ6XjtdKGV7Ehgv202MEMvTktGa5mJlIv5tQK0O+zVpLWqVl4q9P76MASk/qOg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/text-to-ast": "^14.5.0" "@textlint/text-to-ast": "^14.6.0"
} }
}, },
"node_modules/@textlint/types": { "node_modules/@textlint/types": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.6.0.tgz",
"integrity": "sha512-z+oJS5GHK5KiV87ZNCYAQnZTgq1MRGl9g301GOV6Zq4RjH75JVQPNa4hUlwzG2sF6jks+wLhMjxwaQaG6cKCpA==", "integrity": "sha512-XsK3FUdCtVNCe/aUz0TivpCzQchupcyOgNlRKt36AjDCEtqyPCOjpJxj1fmvYnTODG0M/4XKrlufn8onw+qWew==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/ast-node-types": "^14.5.0" "@textlint/ast-node-types": "^14.6.0"
} }
}, },
"node_modules/@textlint/types/node_modules/@textlint/ast-node-types": { "node_modules/@textlint/types/node_modules/@textlint/ast-node-types": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.6.0.tgz",
"integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", "integrity": "sha512-PqWpzFa64M5uKqBSQPV8wPqo14zvmz5JXWIIUkVCMQ/gN8/8IrXjpsp0O+/To8u5D5woVpxihBi/3nJdR8E37g==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@textlint/utils": { "node_modules/@textlint/utils": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.6.0.tgz",
"integrity": "sha512-gAKZh1woc0IZGoVjQ8G8Og10dsBJ6UxaCFXofeHveWsZhJAdVzjw49/tJLVu/39t8GTdZQ4BAHuNxHNFgLN57w==", "integrity": "sha512-kQQg38c2wyWtbBnQ4zIGp4KrUmMmcZJKz2hrCn0z2kCMbDFpasTaG2EuteY1Szupl186fuMePGAGB6p7xeVsiQ==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
@ -6107,25 +6107,25 @@
"dev": true "dev": true
}, },
"node_modules/textlint": { "node_modules/textlint": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/textlint/-/textlint-14.5.0.tgz", "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.6.0.tgz",
"integrity": "sha512-+C5zYpEv0HsQAuz6crm4BjuMXaHi6gKTSwqZZttHI2Jm/WGtpza2SbZxct+STdMgN1XbINcsP58gZ4juQwokcw==", "integrity": "sha512-C1Wbh5VDvKHmNyyj0q94AWdmI/RBKfweQwja6hno9iWoh8IprWye/Z8WSZd4PsCly/i2e6MNuXKrjU+gE4ku6w==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/ast-node-types": "^14.5.0", "@textlint/ast-node-types": "^14.6.0",
"@textlint/ast-traverse": "^14.5.0", "@textlint/ast-traverse": "^14.6.0",
"@textlint/config-loader": "^14.5.0", "@textlint/config-loader": "^14.6.0",
"@textlint/feature-flag": "^14.5.0", "@textlint/feature-flag": "^14.6.0",
"@textlint/fixer-formatter": "^14.5.0", "@textlint/fixer-formatter": "^14.6.0",
"@textlint/kernel": "^14.5.0", "@textlint/kernel": "^14.6.0",
"@textlint/linter-formatter": "^14.5.0", "@textlint/linter-formatter": "^14.6.0",
"@textlint/module-interop": "^14.5.0", "@textlint/module-interop": "^14.6.0",
"@textlint/resolver": "^14.5.0", "@textlint/resolver": "^14.6.0",
"@textlint/textlint-plugin-markdown": "^14.5.0", "@textlint/textlint-plugin-markdown": "^14.6.0",
"@textlint/textlint-plugin-text": "^14.5.0", "@textlint/textlint-plugin-text": "^14.6.0",
"@textlint/types": "^14.5.0", "@textlint/types": "^14.6.0",
"@textlint/utils": "^14.5.0", "@textlint/utils": "^14.6.0",
"debug": "^4.4.0", "debug": "^4.4.0",
"file-entry-cache": "^10.0.5", "file-entry-cache": "^10.0.5",
"get-stdin": "^5.0.1", "get-stdin": "^5.0.1",
@ -6250,9 +6250,9 @@
} }
}, },
"node_modules/textlint/node_modules/@textlint/ast-node-types": { "node_modules/textlint/node_modules/@textlint/ast-node-types": {
"version": "14.5.0", "version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.6.0.tgz",
"integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", "integrity": "sha512-PqWpzFa64M5uKqBSQPV8wPqo14zvmz5JXWIIUkVCMQ/gN8/8IrXjpsp0O+/To8u5D5woVpxihBi/3nJdR8E37g==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },

View File

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

View File

@ -48,7 +48,7 @@ These are the properties available for a [Calendar trigger](/docs/automation/tri
### Device ### Device
These are the properties available for a [Device trigger](/docs/automation/trigger/#device-trigger). These are the properties available for a [Device trigger](/docs/automation/trigger/#device-triggers).
Inherites template variables from [event](#event) or [state](#state) template based on the type of trigger selected for the device. Inherites template variables from [event](#event) or [state](#state) template based on the type of trigger selected for the device.

View File

@ -134,6 +134,7 @@ The following example shows a minimal blueprint with a single input:
blueprint: blueprint:
name: Example blueprint name: Example blueprint
description: Example showing an input description: Example showing an input
domain: automation
input: input:
my_input: my_input:
name: Example input name: Example input

View File

@ -32,7 +32,7 @@ The `state` prefix indicates that this information is part of the state object (
### About the state ### About the state
The screenshot shows three lights in different states (the `state.state`): `on`, `off`, and `unavailable`. Each light comes with its own entity state attributes such as `supported_color_modes`, `supported_features`. These attributes have their own state: the state of the `supported_color_modes` attribute is `color_temp` and `hs`, the state of the `supported_features` attribute is `4`. The screenshot of the Developer Tools States page shows three lights in different states (the `state.state`): `on`, `off`, and `unavailable`. Each light comes with its own entity state attributes such as `supported_color_modes`, `supported_features`. These attributes have their own state: the state of the `supported_color_modes` attribute is `color_temp` and `hs`, the state of the `supported_features` attribute is `4`.
<p class='img'> <p class='img'>
<img src='/images/integrations/light/state_light.png' alt='Screenshot showing three lights with different states: `on`, `off`, or `unavailable`'> <img src='/images/integrations/light/state_light.png' alt='Screenshot showing three lights with different states: `on`, `off`, or `unavailable`'>

View File

@ -5,7 +5,7 @@ description: "Instructions on how to perform actions in Home Assistant."
Various integrations allow performing {% term actions %} when a certain event occurs. The most common one is performing an action when an automation {% term trigger %} happens. But an action can also be called from a {% term script %}, a dashboard, or via voice command devices such as Amazon Echo. Various integrations allow performing {% term actions %} when a certain event occurs. The most common one is performing an action when an automation {% term trigger %} happens. But an action can also be called from a {% term script %}, a dashboard, or via voice command devices such as Amazon Echo.
The configuration options to call a configuration are the same between all integrations and are described on this page. The configuration options to perform action are the same between all integrations and are described on this page.
Examples on this page will be given as part of an automation integration configuration but different approaches can be used for other integrations too. Examples on this page will be given as part of an automation integration configuration but different approaches can be used for other integrations too.

View File

@ -59,7 +59,7 @@ Firmware can be upgraded using the below directions:
- GoControl HUSBZB-1 stick - GoControl HUSBZB-1 stick
- Sigma Designs UZB stick - Sigma Designs UZB stick
- Vision USB stick - Gen5 - Vision USB stick - Gen5
- Z-Wave.Me UZB1 stick - Z-Wave.Me UZB1 stick (see Aeotec Z-Stick note below)
- HomeSeer SmartStick+ G2 - HomeSeer SmartStick+ G2
- HomeSeer Z-NET G2 - HomeSeer Z-NET G2
@ -94,7 +94,9 @@ Z-Wave JS does not support Z-Wave Long Range yet.
### Aeotec Z-Stick ### Aeotec Z-Stick
{% note %} {% note %}
There are [known compatibility issues](https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=245031#p1502030) with older hardware versions of the Aeotec stick not connecting when plugged directly on the Raspberry Pi 4, and requiring a USB Hub to work. Aeotec has released a 2020 hardware revision ZW090-A/B/C Gen5+ with Pi 4 compatibility. Both hardware revisions are still being sold, make informed purchasing decisions if using one paired with a Pi 4.
The Aeotec Z-Stick and some of its variants (e.g. Z-Wave.Me UZB1) are known to have compatibility issues with the Linux kernel because of their [non-compliant behavior](https://forums.raspberrypi.com/viewtopic.php?f=28&t=245031#p1502030). Plugging these controllers through a USB hub can serve as a workaround that sometimes mitigates the issue.
{% endnote %} {% endnote %}
It's totally normal for your Z-Wave stick to cycle through its LEDs (Yellow, Blue and Red) while plugged into your system. It's totally normal for your Z-Wave stick to cycle through its LEDs (Yellow, Blue and Red) while plugged into your system.

View File

@ -2,6 +2,13 @@
<!-- Left column begins --> <!-- Left column begins -->
<div class="grid__item one-third lap-one-half palm-one-whole"> <div class="grid__item one-third lap-one-half palm-one-whole">
<!-- SOTOH 2025 - To move on/after event -->
<a href="/blog/2025/03/26/state-of-the-open-home-2025-announcement/" class="material-card picture-promo" style="
background-image: url(/images/frontpage/sotoh-2025.webp);
background-size: cover;
padding-top: 55%;
" aria-label="State of the Open Home - Saturday April 12th 2025">
</a>
<!-- Recent blog posts --> <!-- Recent blog posts -->
<div class="recent-posts material-card text"> <div class="recent-posts material-card text">
<h1>{% icon "mdi:newspaper-variant-multiple" %} Recent Blog Posts</h1> <h1>{% icon "mdi:newspaper-variant-multiple" %} Recent Blog Posts</h1>

View File

@ -73,3 +73,9 @@ For each condition, the following sensors are created:
The integration creates an image entity for the weather radar if the radar option is enabled. The integration creates an image entity for the weather radar if the radar option is enabled.
Details about the API are available in the [AEMET OpenData documentation](https://opendata.aemet.es/dist). Details about the API are available in the [AEMET OpenData documentation](https://opendata.aemet.es/dist).
## Removing the integration
This integration follows standard integration removal. No extra steps are required.
{% include integrations/remove_device_service.md %}

View File

@ -21,6 +21,8 @@ Integrates Airthings sensors into Home Assistant.
[Airthings](https://www.airthings.com/) provide different sensors for measuring the air quality. The focus specially on Radon sensors. [Airthings](https://www.airthings.com/) provide different sensors for measuring the air quality. The focus specially on Radon sensors.
While this integration works without an Airthings SmartLink hub, using one will provide live updates to your sensor data. Without a hub, you'll need to rely on the Airthings mobile app to sync data over Bluetooth and upload it to the cloud.
Requires Airthings hardware and a valid Airthings Dashboard login. Requires Airthings hardware and a valid Airthings Dashboard login.
## Prerequisites ## Prerequisites

View File

@ -106,3 +106,9 @@ For each Airzone zone (thermostat), a *switch entity* is created.
## Water heater ## Water heater
For each Airzone device a *water heater entity* is created if supported. For each Airzone device a *water heater entity* is created if supported.
## Removing the integration
This integration follows standard integration removal. No extra steps are required.
{% include integrations/remove_device_service.md %}

View File

@ -117,3 +117,9 @@ For each Airzone zone (thermostat), a switch entity is created to turn the therm
## Water heater ## Water heater
For each Airzone device, a *water heater entity* is created if supported. For each Airzone device, a *water heater entity* is created if supported.
## Removing the integration
This integration follows standard integration removal. No extra steps are required.
{% include integrations/remove_device_service.md %}

View File

@ -54,8 +54,8 @@ Assuming that the log file contains multiple values formatted as JSON as shown b
This would require the following settings to extract the temperature: This would require the following settings to extract the temperature:
- Name: `Temperature` - Name: `Temperature`
- File path: `/home/user/.homeassistant/sensor.json` - File path: `/config/sensor.json`
- Value template: {% raw %}`'{{ value_json.temperature }}'`{% endraw %} - Value template: {% raw %}`{{ value_json.temperature }}`{% endraw %}
- Unit of measurement: `"°C"` - Unit of measurement: `"°C"`
#### Entries as CSV #### Entries as CSV
@ -71,6 +71,6 @@ timestamp,temperature,humidity
This would require the following settings to extract the temperature: This would require the following settings to extract the temperature:
- Name: `Temperature` - Name: `Temperature`
- File path: `/home/user/.homeassistant/sensor.csv` - File path: `/config/sensor.csv`
- Value template: {% raw %}`'{{ value.split(",")[1] }}'`{% endraw %} - Value template: {% raw %}`{{ value.split(",")[1] }}`{% endraw %}
- Unit of measurement: `"°C"` - Unit of measurement: `"°C"`

View File

@ -60,6 +60,6 @@ Preset mode **Away** represents Gree's "8°C heating mode."
Gree devices expose multiple switches to control various features: Gree devices expose multiple switches to control various features:
- Light Panel, turns the front panel light on/off. - **Panel light**: turns the front panel light on/off.
- Quiet Mode, enables/disables the quiet mode feature. - **Quiet mode**: enables/disables the quiet mode feature.
- Xtra Fan, enables/disables extra fan mode to help remove moisture from coils. - **Xtra fan**: enables/disables extra fan mode to help remove moisture from coils.

View File

@ -487,7 +487,7 @@ These are the attributes available for an old-style group.
### Actions ### Actions
This integration provides the following actions to modify groups and a action to reload the configuration without restarting Home Assistant itself. The following actions to modify groups and a action to reload the configuration without restarting Home Assistant itself. These actions are only available for old-style groups. They cannot be used with the new-style groups described above.
| Action | Data | Description | | Action | Data | Description |
| -------- | ----------------- | ----------------------------------------------------------------------------- | | -------- | ----------------- | ----------------------------------------------------------------------------- |

View File

@ -63,6 +63,7 @@ and has been confirmed to work with the following models:
- DS-2CD2232-I5 - DS-2CD2232-I5
- DS-2CD2385G1 - DS-2CD2385G1
- DS-2CD2387G2-LU - DS-2CD2387G2-LU
- DS-2CD2686G2
- DS-2CD3132-I - DS-2CD3132-I
- DS-7616NI-K2 (NVR) - DS-7616NI-K2 (NVR)
- ERI-K104-PR (NVR) - ERI-K104-PR (NVR)

View File

@ -33,6 +33,14 @@ To set up these models:
1. Set a password on the projector's network setup page. 1. Set a password on the projector's network setup page.
2. Use this password when adding the JVC Projector integration in Home Assistant. 2. Use this password when adding the JVC Projector integration in Home Assistant.
### Password hashing for newer models (NZ800 and NZ900)
For newer projector models (NZ800 and NZ900), the password needs to be hashed before being used in Home Assistant. Here's how to generate the correct hash:
1. Set a password in the projector (for example, "1234567890").
2. Append the string "JVCKWPJ" to your password (for example, "1234567890JVCKWPJ").
3. Generate a SHA256 hash of the resulting string using an online tool like [SHA256 Hash Generator](https://emn178.github.io/online-tools/sha256.html).
4. Use the generated hash as the password when adding the JVC Projector integration in Home Assistant.
{% include integrations/config_flow.md %} {% include integrations/config_flow.md %}

View File

@ -104,9 +104,9 @@ Once all zones are configured you'll be presented with the configuration for add
**Blink panel LED on when sending state change:** The desired LED behavior for the panel. **Blink panel LED on when sending state change:** The desired LED behavior for the panel.
**Override default Home Assistant API host panel URL:** The Konnected Alarm Panel post sensor states back to the Home Assistant API. If this value is unchecked the panel will default postbacks using the URL [configured](/integrations/homeassistant/#allowlist_external_urls) in Home Assistant. By default, the integration will use the internal URL. However, if you check this field and set the **Override API host URL** to your _local_ IP address and port (e.g., `http://192.168.1.101:8123`), it will be used instead of the internal URL. **Override default Home Assistant API host URL:** The Konnected Alarm Panel posts sensor states back to the Home Assistant API. If this value is unchecked, the panel will default postbacks using the URL [configured](/integrations/homeassistant/#allowlist_external_urls) in Home Assistant. By default, the integration will use the internal URL. However, if you check this field and set the **Custom API host URL** to your _local_ IP address and port (e.g., `http://192.168.1.101:8123`), it will be used instead of the internal URL.
**Override API host URL (optional):** The host info to use if you checked **Override default Home Assistant API host panel URL** in the step above. This is ignored if **Override default Home Assistant API host panel URL** is unchecked. **Custom API host URL (optional):** The host info to use if you checked **Override default Home Assistant API host URL** in the step above. This is ignored if **Override default Home Assistant API host URL** is unchecked.
### YAML configuration ### YAML configuration

View File

@ -20,8 +20,6 @@ ha_platforms:
- switch - switch
- vacuum - vacuum
ha_integration_type: integration ha_integration_type: integration
ha_codeowners:
- '@LG-ThinQ-Integration'
--- ---
The **LG ThinQ** integration allows you to connect LG ThinQ devices to Home Assistant. The features of this integration include: The **LG ThinQ** integration allows you to connect LG ThinQ devices to Home Assistant. The features of this integration include:
@ -251,135 +249,9 @@ A read-only property which has states is represented as a sensor platform.
| Water Purifier | High-temp sterilization<br>Type<br>UVnano| | Water Purifier | High-temp sterilization<br>Type<br>UVnano|
| Dryer<br>Styler<br>Washer<br>Washcombo Main<br>Washcombo Mini<br>Washtower<br>Washtower Dryer<br>Washtower Washer | Current status<br>Delayed start/end<br>Remaining time<br>Total time<br>Cycles | | Dryer<br>Styler<br>Washer<br>Washcombo Main<br>Washcombo Mini<br>Washtower<br>Washtower Dryer<br>Washtower Washer | Current status<br>Delayed start/end<br>Remaining time<br>Total time<br>Cycles |
## User guide ## Automation example
### 1. Custom card configuration (HACS)
**- Timer Bar Card** ### Notification, error event
> - Supported devices: Washer, Dryer, Styler, Dish washer
> - Used entities: sensor.washer_**current_status**, sensor.washer_**remaining_time**, sensor.washer_**total_time**
```yaml
type: custom:timer-bar-card
entities:
- entity: sensor.washer_current_status
name: Washer
active_state:
- running
- rinsing
- spinning
- drying
- cooling
- reserved
- presteam
- steam
pause_state: pause
icon: mdi:tumble-dryer-off
active_icon: mdi:tumble-dryer
end_time:
entity: sensor.washer_remaining_time
duration:
entity: sensor.washer_total_time
units: minutes
invert: true
```
### 2. Automation
#### 1) Air conditioner, climate
> - Currently the Climate's set_hvac_mode, set_temperature service is not working properly. Each control must operate sequentially, but conditional wait for this has not yet been implemented in ThinQ integration.
> - We provide a script that can do turn_on, set_hvac_mode, and set_temperature at once, so please use it for automation.
> - Create a new script in 'CREATE SCRIPT' using the code below, then select the script in the 'Action' field.
> - This conditional wait is scheduled to be implemented in core 2025.4.
{% raw %}
```yaml
alias: LG ThinQ climate
description: "Action turn_on, set_hvac_mode, set_temperature"
fields:
input_device:
selector:
device:
filter:
- integration: lg_thinq
name: Device
required: true
input_entity:
selector:
entity:
filter:
- integration: lg_thinq
domain: climate
name: Entity
required: true
input_hvac:
selector:
select:
options:
- label: Off
value: off
- label: Auto
value: auto
- label: Cool
value: cool
- label: Dry
value: dry
- label: Fan only
value: fan_only
- label: Heat/cool
value: heat_cool
- label: Heat
value: heat
name: HVAC mode
required: true
default: cool
input_temperature:
selector:
number:
min: 1
max: 100
name: Target temperature
required: true
default: 18
sequence:
- sequence:
- variables:
entity_name: "{{ input_entity.split('.')[1] }}"
- if:
- condition: template
value_template: >-
{{ input_hvac != 'off' and states('climate.'+ entity_name) == 'off' }}
then:
- action: climate.turn_on
target:
device_id: "{{ input_device }}"
data: {}
- wait_template: "{{ states('climate.'+ entity_name) != 'off' }}"
- if:
- condition: template
value_template: "{{ states('climate.'+ entity_name) != input_hvac }}"
then:
- action: climate.set_hvac_mode
data:
hvac_mode: "{{ input_hvac }}"
target:
device_id: "{{ input_device }}"
- wait_template: "{{ states('climate.'+ entity_name) == input_hvac }}"
- if:
- condition: template
value_template: "{{ input_hvac != 'off' }}"
then:
- action: climate.set_temperature
data:
temperature: "{{ input_temperature }}"
target:
device_id: "{{ input_device }}"
```
{% endraw %}
#### 2) Notification, error event
> - Guide: [Automating on event](https://www.home-assistant.io/integrations/event/#automating-on-a-button-press) > - Guide: [Automating on event](https://www.home-assistant.io/integrations/event/#automating-on-a-button-press)
> - Important: guide's step 3, 4 > - Important: guide's step 3, 4

View File

@ -59,14 +59,30 @@ to act as a gateway to the Home Assistant MCP SSE server.
## Client configuration ## Client configuration
The Model Context Protocol specification does not yet define standards The Model Context Protocol specification has recently defined standards for
for authentication and connecting to remote servers. These are a *work in progress* authorization and connecting to remote servers. The standards are a *work in progress*
and this configuration will likely change in the near future. and so some clients may not support the latest functionality, and the specification
will likely continue to evolve.
### Access control ### Access control
For now, we can use #### OAuth
[Long-lived access token](https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token) to control access to the API.
The Model Context Protocol supports OAuth for [Authorization](https://spec.modelcontextprotocol.io/specification/2025-03-26/basic/authorization/) and is fully supported by Home Assistant's
[Authentication API](https://developers.home-assistant.io/docs/auth_api/). MCP
Clients that support OAuth can use this to allow you to give the client access
to your Home Assistant MCP server.
Home Assistant has adopted [IndieAuth](https://indieauth.spec.indieweb.org/) and does not require you to pre-define
an OAuth Client ID. Instead, the Client ID is the base of the redirect URL.
- *Client ID*: If your redirect-uri is `https://www.example.com/mcp/redirect`, your client ID should be `https://www.example.com`.
- *Client Secret*: This is not used by Home Assistant and can be ignored or set to any value.
#### Long-Lived Access Tokens
Some MCP clients may not support OAuth, but may support access tokens. You may create a
[Long-lived access token](https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token) to allow the client to access the API.
1. Visit your account profile settings, under the **Security** tab. {% my profile badge %}. 1. Visit your account profile settings, under the **Security** tab. {% my profile badge %}.
@ -115,6 +131,33 @@ to allow Claude for Desktop to access Home Assistant using the SSE transport.
![Screenshot of Claude for Desktop adding an item to a Home Assistant To-do list](/images/integrations/mcp_server/claude-todo-list-control.png) ![Screenshot of Claude for Desktop adding an item to a Home Assistant To-do list](/images/integrations/mcp_server/claude-todo-list-control.png)
### Example: Cursor
1. Download and install [Cursor](https://www.cursor.com).
2. Install `mcp-proxy` following the instructions in the [README](https://github.com/sparfenyuk/mcp-proxy).
For example, `uv tool install git+https://github.com/sparfenyuk/mcp-proxy`.
3. Open the main Cursor Settings and select **MCP**.
4. Click **Add new global MCP server** and add the Home Assistant server configuration:
```json
{
"mcpServers": {
"Home Assistant": {
"command": "mcp-proxy",
"args": [
"http://localhost:8123/mcp_server/sse"
],
"env": {
"API_ACCESS_TOKEN": "<your_access_token_here>"
}
}
}
}
```
5. Save your `mcp.json` file. You can also find this file in the `$HOME/.cursor/mcp.json` directory.
6. Restart Cursor and return to the MCP settings. You should see the Home Assistant server in the list. The indicator should be green.
7. In chat agent mode (Ctrl+I), ask it to control your home and the tool should be used.
![Screenshot of Cursor controlling the office lights](/images/integrations/mcp_server/cursor-lights-control.png)
## Supported functionality ## Supported functionality

View File

@ -23,53 +23,27 @@ There is currently support for the following Home Assistant Platforms:
All of the Home Assistant [Media Player Control Actions](https://www.home-assistant.io/integrations/media_player/#media-control-actions) are supported. All of the Home Assistant [Media Player Control Actions](https://www.home-assistant.io/integrations/media_player/#media-control-actions) are supported.
The `media_content_id` payload for `media_player.play_media` can be any of the following:
- The name of a track, artist, or album. For example, `Queen`.
- A track or album combined with the artist's name. For example, `Queen - Innuendo`.
- A streaming provider URI. For example, `spotify://artist/12345`.
The `media_content_id` payload for `media_player.browse_media` must be a URI of the form `library://artist/1`, `library://album/20`, or `spotify://album/5zj4Ej0FrlJQaSo0d6cttH`. The type of item that the URI refers to must be an album or artist.
These URIs can be obtained from, for example, the output of the `get_library` or `search` actions described below or the `media_player.browse_media` action from Home Assistant.
{% include integrations/config_flow.md %} {% include integrations/config_flow.md %}
### Manual configuration ### Manual configuration
Under normal circumstances, Home Assistant automatically discovers your running Music Assistant Server. If there is something special about the HA or MA setup (for example, the MA server is running as a remote Docker container) or discovery is not working, you can manually specify the URL to your Music Assistant server. If the Music Assistant Server is not installed then follow these [installation instructions](https://music-assistant.io/installation/). Under normal circumstances, Home Assistant automatically discovers your running Music Assistant Server. If there is something special about the Home Assistant or MA setup (for example, the MA server is running as a remote Docker container) or discovery is not working, you can manually specify the URL to your Music Assistant server. If the Music Assistant Server is not installed, then follow these [installation instructions](https://music-assistant.io/installation/).
## Media player ## Media player entities
The Music Assistant integration creates media player entities for all players available in MA including those imported from Home Assistant. This is needed to provide the full functionality Music Assistant has to offer. These entities will display media information, playback progress, and playback controls. The Music Assistant integration creates media player entities for all players available in MA, including those imported from Home Assistant. This is needed to provide the full functionality Music Assistant has to offer. These entities will display media information, playback progress, and playback controls.
### Action `media_player.play_media` ## Actions
Play media hosted on a Music Assistant server on a Music Assistant player. The action configuration is as described in the [media player documentation](https://www.home-assistant.io/integrations/media_player/#action-media_playerplay_media)
The `media_content_id` payload can be any of the following:
- The name of a track, artist or album. (for example, "Queen")
- A track or album combined with the artist name (for example, "Queen - Innuendo")
- A streaming provider URI (for example, `spotify://artist/12345`)
#### Examples
Play Adele's album 25
```yaml
entity_id: media_player.music_assistant_player
media_content_type: album
media_content_id: 'Adele - 25'
```
Play all tracks from Stevie Wonder in random order
```yaml
entity_id: media_player.music_assistant_player
media_content_type: artist
media_content_id: 'Stevie Wonder'
```
Play the playlist The Best of Disco
```yaml
entity_id: media_player.music_assistant_player
media_content_type: playlist
media_content_id: 'The Best of Disco'
```
## Additional actions
### Action `music_assistant.play_media` ### Action `music_assistant.play_media`
@ -221,3 +195,11 @@ Get the queue details of a Music Assistant player queue.
## Notes ## Notes
- Any Home Assistant players added to Music Assistant will appear duplicated as the MA version of the player is created. The original HA player can be hidden if desired. - Any Home Assistant players added to Music Assistant will appear duplicated as the MA version of the player is created. The original HA player can be hidden if desired.
## Removing the integration
This integration follows standard integration removal.
{% include integrations/remove_device_service.md %}
After deleting the integration, go to the {% my supervisor_addon title="**Settings** > **Add-ons**" addon="music_assistant" %} and remove the **Music Assistant** add-on from there as well (if installed).

View File

@ -19,8 +19,3 @@ ha_quality_scale: legacy
The `nmbs` {% term integration %} will create sensors for monitoring travel time and information between 2 stations. The `nmbs` {% term integration %} will create sensors for monitoring travel time and information between 2 stations.
{% include integrations/config_flow.md %} {% include integrations/config_flow.md %}
<p class='img'>
<img src='/images/screenshots/nmbs-card-example.png' />
<p>Example using the <a href="https://github.com/custom-cards/entity-attributes-card">Entity Attributes custom card</a> </p>
</p>

View File

@ -19,11 +19,12 @@ ha_dhcp: true
ha_integration_type: integration ha_integration_type: integration
--- ---
The Nuki integration allows you to control [Nuki Smart Locks](https://nuki.io/en/smart-lock/) via a [Nuki Bridge](https://nuki.io/en/bridge/). The Nuki integration allows you to control [Nuki Smart Locks](https://nuki.io/en/smart-lock/) via a [Nuki Bridge](https://help.nuki.io/hc/en-001/sections/360004474718-Bridge) or Nuki Smart Lock with [Build-in WiFi](https://help.nuki.io/hc/en-001/sections/4402761196817-Built-in-Wi-Fi) using the cloud.
Many Nuki Smart Locks also support [local integrations](#local-integration-alternatives) using a different integration.
## Prerequisites ## Prerequisites
To add a Nuki bridge to your installation, you need to enable developer mode on your bridge and define a port and an access token. This can be achieved using the [Android app](https://play.google.com/store/apps/details?id=io.nuki) or [iPhone app](https://apps.apple.com/app/nuki-smart-lock/id1044998081). Go to manage my devices, and select the bridge. Within the bridge configuration turn on the HTTP API and check the details in the screen. Please note that the API token should be 6-20 characters long, even though the app allows you to set a longer one. To add a Nuki bridge to your installation, you need to connect the device to wifi, enable developer mode and define a port and an access token. This can be achieved using the [Android app](https://play.google.com/store/apps/details?id=io.nuki) or [iPhone app](https://apps.apple.com/app/nuki-smart-lock/id1044998081). Go to manage my devices, and select the bridge or wifi enabled smart lock and connect to the device. Turn on the HTTP API and check the details in the screen. Please note that the API token should be 6-20 characters long, even though the app allows you to set a longer one.
For faster updates, the callback function of the Nuki bridge can be used. This requires your Home Assistant to be reachable via HTTP by the Nuki bridge, as HTTPS is not supported by the Nuki bridge. For faster updates, the callback function of the Nuki bridge can be used. This requires your Home Assistant to be reachable via HTTP by the Nuki bridge, as HTTPS is not supported by the Nuki bridge.
{% include integrations/config_flow.md %} {% include integrations/config_flow.md %}
@ -71,7 +72,19 @@ Events generated by Nuki are sent as events of type `nuki_event` with the follow
| `type` | The type of the event. Values: `ring` | `type` | The type of the event. Values: `ring`
| `entity_id` | The ID of the entity generating the event. | `entity_id` | The ID of the entity generating the event.
## MQTT support ## Local integration alternatives
The Nuki Smart Lock 3.0 Pro also [supports MQTT](https://support.nuki.io/hc/en-us/articles/12947926779409-MQTT-support) and can directly integrate with Home Assistant through [MQTT discovery](/integrations/mqtt/#mqtt-discovery). Many Nuki Smart Locks support local alternatives. Consult the [Nuki website](https://help.nuki.io/hc/en-001/categories/360003042457-Integrations-Services) for an up-to-date list of integration options and supported devices.
Specific information can be found [here](https://developer.nuki.io/t/mqtt-api-specification-v1-3/17626).
### HomeKit support
The 2nd and 3rd Generation Smart Locks support [HomeKit via Bluetooth](https://help.nuki.io/hc/en-001/articles/19948907390737-Apple-HomeKit-via-Bluetooth) and can directly integrate with Home Assistant through the (HomeKit integration)(/integrations/homekit_controller/#adding-a-homekit-device-through-bluetooth).
### MQTT support
The Nuki Smart Lock 3.0 Pro and 4th generation devices support [MQTT]([https://support.nuki.io/hc/en-us/articles/12947926779409-MQTT-support]) and can directly integrate with Home Assistant through [MQTT discovery](/integrations/mqtt/#mqtt-discovery).
Details can be found [here](https://developer.nuki.io/t/mqtt-api-specification-v1-3/17626).
### Matter Support
Smart Lock Ultra, Smart Lock Pro, Smart Lock Go, Smart Locks of 4th Generation support [Matter](https://help.nuki.io/hc/en-001/sections/14596766576401-Matter) over Thread and can directly integrate with Home Assistant through the [Matter integration](/integrations/matter/#adding-a-matter-device-to-home-assistant).

View File

@ -22,7 +22,7 @@ related:
- url: https://help.prusa3d.com/guide/prusalink-and-prusa-connect-setup-mk3-s-_221744 - url: https://help.prusa3d.com/guide/prusalink-and-prusa-connect-setup-mk3-s-_221744
title: PrusaLink installation guide for Prusa MK3 with Raspberry Pi Zero W title: PrusaLink installation guide for Prusa MK3 with Raspberry Pi Zero W
- url: https://help.prusa3d.com/guide/prusalink-prusa-connect-with-rpi-3-4-usb-mk2-5-s-mk3-s-_469341 - url: https://help.prusa3d.com/guide/prusalink-prusa-connect-with-rpi-3-4-usb-mk2-5-s-mk3-s-_469341
title: Sentence trigger title: PrusaLink installation guide for Prusa MK2.5/MK3 with Raspberry Pi 3/4
--- ---
The **PrusaLink** {% term integration %} allows you to monitor your [Prusa 3D printer](https://www.prusa3d.com) and its progress with your Home Assistant installation. This integration works with Prusa MINI/MINI+, Prusa MK3.9/MK4, Prusa XL, and with the older Raspberry Pi-based Prusa MK2.5/MK3. The **PrusaLink** {% term integration %} allows you to monitor your [Prusa 3D printer](https://www.prusa3d.com) and its progress with your Home Assistant installation. This integration works with Prusa MINI/MINI+, Prusa MK3.9/MK4, Prusa XL, and with the older Raspberry Pi-based Prusa MK2.5/MK3.

View File

@ -90,3 +90,9 @@ The following *sensors* are created for each port (or LACP):
| Update | Description | | Update | Description |
| :------------------ | :--------------------------------- | | :------------------ | :--------------------------------- |
| firmware_update | Firmware update status. | | firmware_update | Firmware update status. |
## Removing the integration
This integration follows standard integration removal. No extra steps are required.
{% include integrations/remove_device_service.md %}

View File

@ -768,6 +768,16 @@ Prerequisites:
- Reolink cameras can support a limited amount of simultaneous connections. Therefore using third-party software like Frigate, Blue Iris, or Scrypted, or using the ONVIF integration at the same time can cause the camera to drop connections. This results in short unavailabilities of the Reolink entities in Home Assistant. Especially when the connections are coming from the same device (IP) where Home Assistant is running, the Reolink cameras can get confused, dropping one connection in favor of the other originating from the same host IP. If you experience disconnections/unavailabilities of the entities, please first temporarily shut down the other connections (like Frigate) to diagnose if that is the problem. If that is indeed the problem, you could try moving the third-party software to a different host (IP address) since that is known to solve the problem most of the time. You could also try switching the protocol to FLV on Home Assistant and/or the third-party software, as that is known to be less resource-intensive on the camera. - Reolink cameras can support a limited amount of simultaneous connections. Therefore using third-party software like Frigate, Blue Iris, or Scrypted, or using the ONVIF integration at the same time can cause the camera to drop connections. This results in short unavailabilities of the Reolink entities in Home Assistant. Especially when the connections are coming from the same device (IP) where Home Assistant is running, the Reolink cameras can get confused, dropping one connection in favor of the other originating from the same host IP. If you experience disconnections/unavailabilities of the entities, please first temporarily shut down the other connections (like Frigate) to diagnose if that is the problem. If that is indeed the problem, you could try moving the third-party software to a different host (IP address) since that is known to solve the problem most of the time. You could also try switching the protocol to FLV on Home Assistant and/or the third-party software, as that is known to be less resource-intensive on the camera.
- If the Reolink entities go to unavailable for short periods, the camera may be overloaded with requests resulting in short connection drops. To resolve this, first, check if the integration is using `ONVIF push` instead of `ONVIF long polling` (resource intensive) or `Fast polling` (very resource intensive), see the [Reducing latency of motion events](#reducing-latency-of-motion-events) section. Moreover, try switching to the <abbr title="flash video">FLV</abbr> streaming protocol which is the least resource-intensive for the camera, see the [options](#options) section. - If the Reolink entities go to unavailable for short periods, the camera may be overloaded with requests resulting in short connection drops. To resolve this, first, check if the integration is using `ONVIF push` instead of `ONVIF long polling` (resource intensive) or `Fast polling` (very resource intensive), see the [Reducing latency of motion events](#reducing-latency-of-motion-events) section. Moreover, try switching to the <abbr title="flash video">FLV</abbr> streaming protocol which is the least resource-intensive for the camera, see the [options](#options) section.
### Battery drains fast
The Reolink Home Assistant integration is supposed to only wake battery cameras once per hour for about 10 seconds, which should not have a big impact on battery life. You can check this using the **Sleep status** entity. However, there are several factors that can have significant impact on battery life:
- Make sure the **Preload camera stream** option is turned off for all battery camera entities under {% my integrations title="**Settings** > **Devices & services**" %} > Reolink integration card > **x devices** > select the battery camera > select the camera stream (do this for all enabled streams) > Gear icon {% icon "mdi:cog-outline" %}. The Preload camera stream will keep a active stream open, keeping the camera awake. This will drain the battery.
- Make sure the **Manual Record** switch is turned off. While this switch is on, the camera will be awake and recording. Excessive use of this entity will drain the battery.
- **Automations** which use entities from a Reolink battery camera can wake up the camera. Changing settings or requesting a snapshot will wake the battery camera for 10-30 seconds. When automations trigger very often, this can cause excessive battery use.
- Some **Custom cards** that can be used to view the camera in a dashboard are known to keep a battery camera constantly awake, draining its battery.
- Viewing a **dashboard** with a picture-entity card of a Reolink battery camera, will wake that camera to show the latest snapshot and/or stream. Therefore, it is recommended to place the picture-entity cards in a separate dashboard/tab, which is only accessed when actually wanting to view the battery camera streams.
### Streams or recordings not playing ### Streams or recordings not playing
- Most Reolink cameras use h265 encoding for the high resolution recording and clear stream to save storage space and bandwidth. Playback of this h265 encoding is not supported by all browsers or apps. Therefore, the high-resolution recording and/or clear stream may not function on all your devices from which you acces Home Assistant. To see if a Reolink camera is using h264 or h265 encoding, [download the diagnostics text file](/docs/configuration/troubleshooting/#download-diagnostics) and find the `"encoding main": "h265"\"h264"` in the txt file. The low-resolution recording and fluent stream always use h264 encoding and, therefore, do not suffer from this issue. - Most Reolink cameras use h265 encoding for the high resolution recording and clear stream to save storage space and bandwidth. Playback of this h265 encoding is not supported by all browsers or apps. Therefore, the high-resolution recording and/or clear stream may not function on all your devices from which you acces Home Assistant. To see if a Reolink camera is using h264 or h265 encoding, [download the diagnostics text file](/docs/configuration/troubleshooting/#download-diagnostics) and find the `"encoding main": "h265"\"h264"` in the txt file. The low-resolution recording and fluent stream always use h264 encoding and, therefore, do not suffer from this issue.

View File

@ -15,6 +15,19 @@ ha_platforms:
ha_integration_type: integration ha_integration_type: integration
--- ---
The `rpi_power` integration allows you to detect [bad power supply](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#power-supply-warnings) on Raspberry Pi. The **Raspberry Pi Power Supply Checker** {% term integration %} allows you to detect [bad power supply](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#power-supply-warnings) on the Raspberry Pi that is running Home Assistant.
{% note %}
This integration can only monitor the Raspberry Pi that Home Assistant is running on. It cannot monitor remote Raspberry Pis over the network.
If you have multiple Raspberry Pis and are running Home Assistant on one of them, this integration will only check the power supply status of the Pi where Home Assistant is installed.
{% endnote %}
{% include integrations/config_flow.md %} {% include integrations/config_flow.md %}
## Supported functionality
This integration interfaces with the kernel's power management system to detect whether the Raspberry Pi is receiving sufficient power. It creates a binary sensor that indicates whether your power supply is adequate (normal state) or if there are voltage issues (problem state).
If issues are detected, consider upgrading to a higher quality power supply that can deliver stable 5V power with sufficient current for your Raspberry Pi model.

View File

@ -18,6 +18,8 @@ related:
title: Configuration file title: Configuration file
--- ---
The sun {% term integration %} calculates all sun-related times (sunrise, sunset, dawn, dusk, etc.) based on your configured home location. This means that all time-based calculations and triggers will be accurate for your specific location, as defined in your [basic configuration](/docs/configuration/basic/).
The sun {% term integration %} will use the location as The sun {% term integration %} will use the location as
{% my general title="configured in your Home Assistant configuration" %} to {% my general title="configured in your Home Assistant configuration" %} to
track if the sun is above or below the horizon. The sun can be used within track if the sun is above or below the horizon. The sun can be used within

View File

@ -186,7 +186,7 @@ binary_sensor:
type: list type: list
keys: keys:
state: state:
description: The sensor is `on` if the template evaluates as `True`, `yes`, `on`, `enable` or a positive number. Any other value will render it as `off`. The actual appearance in the frontend (`Open`/`Closed`, `Detected`/`Clear` etc) depends on the sensors device_class value description: The sensor is `on` if the template evaluates as `True`, `yes`, `on`, `enable` or a positive number. Any other value will render it as `off`. The actual appearance in the frontend (`Open`/`Closed`, `Detected`/`Clear` etc) depends on the sensor's device_class value
required: true required: true
type: template type: template
delay_on: delay_on:
@ -257,7 +257,7 @@ number:
type: template type: template
default: 100.0 default: 100.0
optimistic: optimistic:
description: Flag that defines if number works in optimistic mode. description: Flag that defines if number works in optimistic mode. When enabled, the number's state will update immediately when changed through the UI or service calls, without waiting for the template defined in `state` to update. When disabled (default), the number will only update when the `state` template returns a new value.
required: false required: false
type: boolean type: boolean
default: false default: false
@ -279,7 +279,7 @@ select:
required: true required: true
type: template type: template
optimistic: optimistic:
description: Flag that defines if select works in optimistic mode. description: Flag that defines if select works in optimistic mode. When enabled, the select's state will update immediately when a new option is chosen through the UI or service calls, without waiting for the template defined in `state` to update. When disabled (default), the select will only update when the `state` template returns a new value.
required: false required: false
type: boolean type: boolean
default: false default: false
@ -302,7 +302,7 @@ image:
required: true required: true
type: template type: template
verify_ssl: verify_ssl:
description: Enable or disable SSL certificate verification. Set to false to use an http-only URL, or you have a self-signed SSL certificate and havent installed the CA certificate to enable verification. description: Enable or disable SSL certificate verification. Set to false to use an http-only URL, or you have a self-signed SSL certificate and haven't installed the CA certificate to enable verification.
required: false required: false
type: boolean type: boolean
default: true default: true
@ -452,6 +452,22 @@ State-based and trigger-based template entities have the special template variab
Self-referencing using `this` provides the state and attributes for the entity before rendering the templates to calculate a new state. To access the new state, use the `value` or `value_json` variable. Self-referencing using `this` provides the state and attributes for the entity before rendering the templates to calculate a new state. To access the new state, use the `value` or `value_json` variable.
{% endnote %} {% endnote %}
### Optimistic mode
For template entities that support interactivity (like `number` and `select`), you can enable optimistic mode by setting the `optimistic` parameter to `true`. This affects how the entity's state updates when you interact with it:
- **With optimistic mode disabled (default)**: When you interact with the entity (for example, selecting a new option in a dropdown or setting a new number value), the entity's state in Home Assistant will only update after the underlying template defined in the `state` parameter returns the new value.
- **With optimistic mode enabled**: When you interact with the entity, the entity's state in Home Assistant immediately updates to reflect your change, without waiting for the `state` template to update. This provides a more responsive UI experience but may not reflect the actual state if the underlying action fails or takes time to complete.
Optimistic mode is particularly useful when:
- The underlying system doesn't provide immediate feedback
- You want a more responsive UI experience
- You're confident the action will succeed
When optimistic mode is disabled (default), you get more accuracy but potentially a less responsive UI, as the entity only updates after confirmation from the underlying system.
### Rate limiting updates ### Rate limiting updates
When there are entities present in the template and no triggers are defined, the template will be re-rendered when one of the entities changes states. To avoid this taking up too many resources in Home Assistant, rate limiting will be automatically applied if too many states are observed. When there are entities present in the template and no triggers are defined, the template will be re-rendered when one of the entities changes states. To avoid this taking up too many resources in Home Assistant, rate limiting will be automatically applied if too many states are observed.
@ -972,7 +988,7 @@ sensors:
type: device_class type: device_class
default: None default: None
value_template: value_template:
description: The sensor is `on` if the template evaluates as `True` and `off` otherwise. The actual appearance in the frontend (`Open`/`Closed`, `Detected`/`Clear` etc) depends on the sensors device_class value description: The sensor is `on` if the template evaluates as `True` and `off` otherwise. The actual appearance in the frontend (`Open`/`Closed`, `Detected`/`Clear` etc) depends on the sensor's device_class value
required: true required: true
type: template type: template
availability_template: availability_template:

View File

@ -18,7 +18,7 @@ ha_platforms:
- diagnostics - diagnostics
- sensor - sensor
ha_integration_type: hub ha_integration_type: hub
ha_quality_scale: silver ha_quality_scale: platinum
--- ---
The **Vodafone Station** {% term integration %} allows you to control your [Vodafone Station](https://www.vodafone.it/privati/area-supporto/assistenza-dispositivi/vodafone-station.html) based router. The **Vodafone Station** {% term integration %} allows you to control your [Vodafone Station](https://www.vodafone.it/privati/area-supporto/assistenza-dispositivi/vodafone-station.html) based router.

View File

@ -23,7 +23,7 @@ To use your Worx Landroid mower in your installation, add the following to your
```yaml ```yaml
# Example configuration.yaml entry # Example configuration.yaml entry
sensor: sensor:
platform: worxlandroid - platform: worxlandroid
host: 192.168.0.10 host: 192.168.0.10
pin: 1234 pin: 1234
``` ```

View File

@ -0,0 +1,51 @@
---
layout: post
title: "Motionblinds joins Works with Home Assistant"
description: "Were plugging a blind spot in our Works with program and opening up some exciting options for our community."
date: 2025-03-27 00:00:01
date_formatted: "March 27, 2025"
author: Miranda Bishop
comments: true
categories: Announcements
og_image: /images/blog/2025-03-motionblinds/art.jpg
---
<img src='/images/blog/2025-03-motionblinds/art.jpg' style='border: 0;box-shadow: none;' alt="Motionblinds wwha logo">
We're excited to announce the latest partner to join the [Works with Home Assistant](https://partner.home-assistant.io/) program is [Motionblinds](https://motionblinds.com/)! And if you're wondering what type of products they provide, the clue really is in the name!
Motionblinds is the first Works with Home Assistant partner to certify smart window blinds. This brings us closer to a future where you can build a smart home exclusively with certified devices that give the best possible experience with Home Assistant.  Smart blinds integrated with Home Assistant unlock powerful automations, such as blinds opening when you get home, or closing sun-facing blinds on warmer days to keep your home cool. <!--more-->
## Shades of innovation
Motionblinds is a brand from Coulisse, a company from the Netherlands, that has been making window coverings for the past 30 years. Motionblinds are available worldwide and are known for their beautiful, customizable designs, coupled with smart technology. They not only provide all-in-one smart blinds, but also upgrade kits for your existing roller blinds, which is great for cutting down on waste.
## A window to the future
<img src='/images/blog/2025-03-motionblinds/powered-by-eve.png' style='border: 0;box-shadow: none;' alt="Motionblinds powered by Eve">
Motionblinds are definitely a leader in the smart blinds space and have partnered with [Eve](https://www.evehome.com/en) Systems, a leading provider of smart home devices, headquartered in Germany and part of ABB. This partnership brings Matter-over-Thread to their motors. Together, we have tested and certified these Matter-certified Eve Motionblinds. It's easy to tell which are part of Works with Home Assistant, as they'll include the "powered by Eve" badge.
Motionblinds that use Bluetooth and 433MHz technology will also be getting the 'Works With Home Assistant' treatment, as we're certifying motors that connect via the Motionblinds Matter Bridge (CM-55). This provides an excellent local way to connect this additional range of products to Home Assistant, allowing many more Motionblinds motors to give the best experience with Home Assistant. Check out our [Motionblinds integrations page](https://next.home-assistant.io/integrations/motionblinds_matter/) for a full list of the different motors that are certified. Be aware that standalone, Bluetooth-integrated blinds are not currently certified under the 'Works With' program.
<p class='img'><img src='/images/blog/2025-03-motionblinds/matter-hub.jpg' style='border: 0;box-shadow: none;' alt="Motionblinds Matter Bridge">Motionblinds Matter Bridge (CM-55)</p>
Home Assistant was recently [Matter certified](/blog/2025/03/10/matter-certification/), and with these blinds certified to work with Home Assistant, end-to-end these devices are going to give a seamless experience. Every Works with Home Assistant product is tested by our team, works locally, and the brand promises to provide great long-term support.
### Which devices have been certified?
- [Roller Shades](https://motionblinds.com/products/roller)
- [Double Roller Shades](https://motionblinds.com/products/double-roller)
- [Venetian Blinds](https://motionblinds.com/products/venetian)
- [Honeycomb Shades](https://motionblinds.com/products/honeycomb)
- [Curtains](https://motionblinds.com/products/curtains)
- [Pleated Shades](https://motionblinds.com/products/pleated)
- [Vertical Blinds](https://motionblinds.com/products/vertical)
- [Roman Shades](https://motionblinds.com/products/roman)
- [Upgrade Kit for Roller Blinds](https://motionblinds.com/products/upgrade-kit)
All these devices connect directly to Home Assistant via Matter, provided you pick the "powered by Eve" option, or combine with the Matter bridge. We're big fans of open standards like Matter, because they bring great benefits when it comes to local control, privacy, and long-term support.
## Closing thoughts 🪟
A big thanks to both Coulisse and Eve for putting their time and effort into bringing Motionblinds to the Works with Home Assistant program. This is really plugging a blind spot in our Works with program by covering new ground and opening up some exciting options for our community 😃.

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

View File

@ -728,6 +728,10 @@ join: ',' | split: ',' -%}
let value = select.value; let value = select.value;
if (value !== '#') { if (value !== '#') {
// Clear any existing brand filter when selecting a category
if (id === 'cat') {
removeQueryFromURL('brands');
}
setQueryURL(id, value); setQueryURL(id, value);
} else { } else {
// clear current filter // clear current filter

View File

@ -8,7 +8,7 @@ related:
title: Restoring a backup title: Restoring a backup
--- ---
[Backups](/common-tasks/general/#backups) stored on Home Assistant Cloud are always encrypted using [AES-128](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard). For backups stored on other [backup locations](/common-tasks/general/#defining-backup-locations), you can choose whether or not to encrypt the backup. The backup emergency kit contains information needed to [restore the backup](/common-tasks/general/#restoring-a-backup), such as the encryption key and metadata about the related backup. [Backups](/common-tasks/general/#backups) stored on Home Assistant Cloud are always encrypted using [AES-128](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard). For backups stored on [other backup locations](/common-tasks/general/#defining-backup-locations), you can choose whether to encrypt the backup. The backup emergency kit contains information needed to [restore the backup](/common-tasks/general/#restoring-a-backup), such as the encryption key and metadata about the related backup.
## What is encryption, and why are backups encrypted? ## What is encryption, and why are backups encrypted?

View File

@ -31,7 +31,7 @@ To have the fastest processing voice assistant experience, follow these steps:
3. To view the settings, go to {% my voice_assistants title="**Settings** > **Voice assistants**" %} and under **Assist**, select **Home Assistant Cloud**. 3. To view the settings, go to {% my voice_assistants title="**Settings** > **Voice assistants**" %} and under **Assist**, select **Home Assistant Cloud**.
![Select the Home Assistant Cloud voice assistant](/images/assist/assistants_ha_cloud.png) ![Select the Home Assistant Cloud voice assistant](/images/assist/assistants_ha_cloud.png)
- **Troubleshooting**: If you do not see any assistants here, you are not using the default configuration. In this case, you need to add the following to your `configuration.yaml` file: - **Troubleshooting**: If you do not see any assistants here, you are not using the [default configuration](/integrations/default_config). In this case, you need to add the following to your `configuration.yaml` file:
```yaml ```yaml
# Example configuration.yaml entry # Example configuration.yaml entry