Merge branch 'current' into rc

This commit is contained in:
Franck Nijhof 2025-05-06 14:53:13 +00:00
commit a1f7aaa701
No known key found for this signature in database
GPG Key ID: AB33ADACE7101952
42 changed files with 1887 additions and 548 deletions

1078
.github/copilot-instructions.md vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -11,8 +11,8 @@ group :development do
# > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189
gem 'sassc', '2.1.0'
gem 'sass-embedded', '1.87.0'
gem 'rubocop', '1.75.4'
gem 'ruby-lsp', '0.23.15'
gem 'rubocop', '1.75.5'
gem 'ruby-lsp', '0.23.16'
gem 'rackup', '2.2.1'
end

View File

@ -97,7 +97,7 @@ GEM
pathutil (0.16.2)
forwardable-extended (~> 2.6)
prism (1.4.0)
public_suffix (6.0.1)
public_suffix (6.0.2)
racc (1.8.1)
rack (3.1.13)
rack-protection (4.1.1)
@ -119,7 +119,7 @@ GEM
regexp_parser (2.10.0)
rexml (3.4.1)
rouge (4.5.2)
rubocop (1.75.4)
rubocop (1.75.5)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
@ -133,7 +133,7 @@ GEM
rubocop-ast (1.44.1)
parser (>= 3.3.7.2)
prism (~> 1.4)
ruby-lsp (0.23.15)
ruby-lsp (0.23.16)
language_server-protocol (~> 3.17.0)
prism (>= 1.2, < 2.0)
rbs (>= 3, < 4)
@ -159,7 +159,7 @@ GEM
rack-protection (= 4.1.1)
rack-session (>= 2.0.0, < 3)
tilt (~> 2.0)
sorbet-runtime (0.5.12046)
sorbet-runtime (0.5.12067)
stringex (2.8.6)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
@ -185,8 +185,8 @@ DEPENDENCIES
nokogiri (= 1.18.8)
rackup (= 2.2.1)
rake (= 13.2.1)
rubocop (= 1.75.4)
ruby-lsp (= 0.23.15)
rubocop (= 1.75.5)
ruby-lsp (= 0.23.16)
sass-embedded (= 1.87.0)
sass-globbing (= 1.1.5)
sassc (= 2.1.0)

224
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.1",
"remark-stringify": "^11.0.0",
"textlint": "^14.6.0",
"textlint": "^14.7.1",
"textlint-filter-rule-comments": "^1.2.2",
"textlint-rule-common-misspellings": "^1.0.1",
"textlint-rule-terminology": "^5.0.13"
@ -427,73 +427,73 @@
"dev": true
},
"node_modules/@textlint/ast-tester": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.6.0.tgz",
"integrity": "sha512-wGoNB35KA/LEWaGp5ccsUqQwNjygCDnkGxe8A8kCMURgM2KYTuCCItGMLrajm0T9BhNdQtK/ST6+EljTFERasA==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.7.1.tgz",
"integrity": "sha512-WMXqBRsEaNJowPCASXOqKhu5zu+DL8I6u4R+j3gTHZiBZFXMCLVmBT6pY9ed1i2Owqzj7akYTqjaHJKagGLwxg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@textlint/ast-node-types": "^14.6.0",
"@textlint/ast-node-types": "^14.7.1",
"debug": "^4.4.0"
}
},
"node_modules/@textlint/ast-tester/node_modules/@textlint/ast-node-types": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.6.0.tgz",
"integrity": "sha512-PqWpzFa64M5uKqBSQPV8wPqo14zvmz5JXWIIUkVCMQ/gN8/8IrXjpsp0O+/To8u5D5woVpxihBi/3nJdR8E37g==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.7.1.tgz",
"integrity": "sha512-7C/xYNZtaG+erIMjNZbRz7av9/S5eC+GAMh0rJ6A9Hik6nS4WyWKblutw2p+O2YWWT2tmOjzu/81fWzzDzmtRg==",
"dev": true,
"license": "MIT"
},
"node_modules/@textlint/ast-traverse": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.6.0.tgz",
"integrity": "sha512-BkfQ/bWfpO6FErrpYoUF+SzlPqJklxD+o6rs2TwSoqO2EMP5vAgIVdGJiTBjV4kxghTzq0w5UkMi9xtNZw1sUg==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.7.1.tgz",
"integrity": "sha512-E9uflmEmr9bUbnX5W+KXoH4c2o5Bu6aimeqadIAixkVjVcYFKL7XJ44HJJx/Ern6hcSSYlbIPHjScjAMTT/kqQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@textlint/ast-node-types": "^14.6.0"
"@textlint/ast-node-types": "^14.7.1"
}
},
"node_modules/@textlint/ast-traverse/node_modules/@textlint/ast-node-types": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.6.0.tgz",
"integrity": "sha512-PqWpzFa64M5uKqBSQPV8wPqo14zvmz5JXWIIUkVCMQ/gN8/8IrXjpsp0O+/To8u5D5woVpxihBi/3nJdR8E37g==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.7.1.tgz",
"integrity": "sha512-7C/xYNZtaG+erIMjNZbRz7av9/S5eC+GAMh0rJ6A9Hik6nS4WyWKblutw2p+O2YWWT2tmOjzu/81fWzzDzmtRg==",
"dev": true,
"license": "MIT"
},
"node_modules/@textlint/config-loader": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.6.0.tgz",
"integrity": "sha512-OzcHVwKlyQOm7bVPee9z0AciYUN9L8543JIkHxtj81h8Qc7aGBOo0nqIZSL2GC+G0pnab6Rkt0drOAlpkKKrrA==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.7.1.tgz",
"integrity": "sha512-VBsKuqdrurhS8RUVwmMDShqRYm7oBKPHQxJXDKCY1zT1nXUR0y3/9KcZpKXtG1LEfluIteBmZicR/mwobZW56A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@textlint/kernel": "^14.6.0",
"@textlint/module-interop": "^14.6.0",
"@textlint/resolver": "^14.6.0",
"@textlint/types": "^14.6.0",
"@textlint/utils": "^14.6.0",
"@textlint/kernel": "^14.7.1",
"@textlint/module-interop": "^14.7.1",
"@textlint/resolver": "^14.7.1",
"@textlint/types": "^14.7.1",
"@textlint/utils": "^14.7.1",
"debug": "^4.4.0",
"rc-config-loader": "^4.1.3"
}
},
"node_modules/@textlint/feature-flag": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.6.0.tgz",
"integrity": "sha512-WmmFHEt71rtSk2ZjcvrLJPN6dKYtYwC8fAFZcnjw15h80Di7wuw7vrpW85udloq+XYDlJ5GnhumDX5yZ4mt4Ug==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.7.1.tgz",
"integrity": "sha512-yuwNOVPiwDRg+rL0uXzqo9q6g+Ac2T+TETU7RuMxPBlSQWak98I4c8NbjL+aWzL7xj5bZJw5q9MIlOk1jRxl2g==",
"dev": true,
"license": "MIT"
},
"node_modules/@textlint/fixer-formatter": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.6.0.tgz",
"integrity": "sha512-CSbjhBFfvVFqbEKmmm0xJxxzpYGHO4Y/dguBI9g2aaCBy52EVwBa55rbhkpBV+b9X3OJhnypJEo5IbC+F52CqA==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.7.1.tgz",
"integrity": "sha512-AnTLCHnMUNnwRZ3CmeaY15SLzjN3yWH/0OF4R0c+l2v6JF6cdlU907rdcjc9QQnszbaAqn1+fqT+oQ9N9nd5jA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@textlint/module-interop": "^14.6.0",
"@textlint/resolver": "^14.6.0",
"@textlint/types": "^14.6.0",
"@textlint/module-interop": "^14.7.1",
"@textlint/resolver": "^14.7.1",
"@textlint/types": "^14.7.1",
"chalk": "^4.1.2",
"debug": "^4.4.0",
"diff": "^5.2.0",
@ -503,43 +503,43 @@
}
},
"node_modules/@textlint/kernel": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.6.0.tgz",
"integrity": "sha512-Mf8cikqVDHdf0RgjSYxs/G1a+I5UK5GjM+ehc67zSF/vtFUaLRn5bkWcEKrWQ67mjrM24tqH46oqVM9RL+utMQ==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.7.1.tgz",
"integrity": "sha512-aRzw6jdU3UPKxZpeZtM98OBjx0gGUK1QP3RrNBaLSqKOeSn8q2NkfApVIldBV9oQ+z1Drwmati8Pf3xSExTYew==",
"dev": true,
"license": "MIT",
"dependencies": {
"@textlint/ast-node-types": "^14.6.0",
"@textlint/ast-tester": "^14.6.0",
"@textlint/ast-traverse": "^14.6.0",
"@textlint/feature-flag": "^14.6.0",
"@textlint/source-code-fixer": "^14.6.0",
"@textlint/types": "^14.6.0",
"@textlint/utils": "^14.6.0",
"@textlint/ast-node-types": "^14.7.1",
"@textlint/ast-tester": "^14.7.1",
"@textlint/ast-traverse": "^14.7.1",
"@textlint/feature-flag": "^14.7.1",
"@textlint/source-code-fixer": "^14.7.1",
"@textlint/types": "^14.7.1",
"@textlint/utils": "^14.7.1",
"debug": "^4.4.0",
"fast-equals": "^4.0.3",
"structured-source": "^4.0.0"
}
},
"node_modules/@textlint/kernel/node_modules/@textlint/ast-node-types": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.6.0.tgz",
"integrity": "sha512-PqWpzFa64M5uKqBSQPV8wPqo14zvmz5JXWIIUkVCMQ/gN8/8IrXjpsp0O+/To8u5D5woVpxihBi/3nJdR8E37g==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.7.1.tgz",
"integrity": "sha512-7C/xYNZtaG+erIMjNZbRz7av9/S5eC+GAMh0rJ6A9Hik6nS4WyWKblutw2p+O2YWWT2tmOjzu/81fWzzDzmtRg==",
"dev": true,
"license": "MIT"
},
"node_modules/@textlint/linter-formatter": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.6.0.tgz",
"integrity": "sha512-52P8jXnxqafbmV1Dg05u8EHitvdCA6nnIGwIWjLCydL1jfM5js6KvA47qRugb6EWWbYxWKCGkbmaIFhKGwFTaA==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.7.1.tgz",
"integrity": "sha512-saAE+e4RZFInRmCF9pu7ukZAHxWaYw9WIA1PptYHItCnlyGS7WB7cYHilkj4coWGr3xGaQ2qAjqX/QIbVE7QGA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@azu/format-text": "^1.0.2",
"@azu/style-format": "^1.0.1",
"@textlint/module-interop": "^14.6.0",
"@textlint/resolver": "^14.6.0",
"@textlint/types": "^14.6.0",
"@textlint/module-interop": "^14.7.1",
"@textlint/resolver": "^14.7.1",
"@textlint/types": "^14.7.1",
"chalk": "^4.1.2",
"debug": "^4.4.0",
"js-yaml": "^3.14.1",
@ -552,13 +552,13 @@
}
},
"node_modules/@textlint/markdown-to-ast": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.6.0.tgz",
"integrity": "sha512-T29IbY9cAupWBuds1DPl9TzS4oI2c0wVd0+0E43j5XezJKR3oE4e5/g9v4U2oo/LIbxDLlI22o3IGSyfUv3fFw==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.7.1.tgz",
"integrity": "sha512-aKIJi1FZj8PYr/n9EYFsifofT2XNPDX9E/24PiFMNBjiOfovCayOpfn6iuqNEo3CEPx7w4d20rQOUnxD+GYzhg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@textlint/ast-node-types": "^14.6.0",
"@textlint/ast-node-types": "^14.7.1",
"debug": "^4.4.0",
"mdast-util-gfm-autolink-literal": "^0.1.3",
"neotraverse": "^0.6.15",
@ -570,9 +570,9 @@
}
},
"node_modules/@textlint/markdown-to-ast/node_modules/@textlint/ast-node-types": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.6.0.tgz",
"integrity": "sha512-PqWpzFa64M5uKqBSQPV8wPqo14zvmz5JXWIIUkVCMQ/gN8/8IrXjpsp0O+/To8u5D5woVpxihBi/3nJdR8E37g==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.7.1.tgz",
"integrity": "sha512-7C/xYNZtaG+erIMjNZbRz7av9/S5eC+GAMh0rJ6A9Hik6nS4WyWKblutw2p+O2YWWT2tmOjzu/81fWzzDzmtRg==",
"dev": true,
"license": "MIT"
},
@ -819,88 +819,88 @@
}
},
"node_modules/@textlint/module-interop": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.6.0.tgz",
"integrity": "sha512-eQFprk37rU6Sl250h52OaoHA4Dal4jSjWYWRdKfjvrdDcNWxPAOenAAGBf66lS7E34No9E9G51jsSc43N0CzJg==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.7.1.tgz",
"integrity": "sha512-9mfLErTFx8N+tZNTL+46YCY/jnCDOJKpceng5WVwDeZeMJbewhjY3PVcxMoPnvPT10QnE/hDk3b6riUYckgHgw==",
"dev": true,
"license": "MIT"
},
"node_modules/@textlint/resolver": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-14.6.0.tgz",
"integrity": "sha512-pFB6bRKAQf+6N6JppAnxRNbExDathq325l8MpYGQY1j2bUzaDx0j90pf2EHfTM0mHr3v/6z37GNUk5ZUZkH3Ew==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-14.7.1.tgz",
"integrity": "sha512-lQ5ATfpsOgiYnwe2aoS0t9uJ4SrvyiCJpfJdqUQZCVL161O/yMKZBc6nwsyBlruEcFoNxK06F3s3IIV4EsI12A==",
"dev": true,
"license": "MIT"
},
"node_modules/@textlint/source-code-fixer": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.6.0.tgz",
"integrity": "sha512-GbnKYQ91KHhg3XfiYAIe++E9UI0wsUZVGq3lzVUO9+nzJ4MUtUk1QpTmwP9+DYxnzi7w5jTcXHN6kh/zmHK4AA==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.7.1.tgz",
"integrity": "sha512-2teYM26+mwFhKaPKYiKjTH3gInjBFJRMPrd2t+WO8NkZnVCrCq0IdWNJYAP34zBd1JLgXAK0EL93Mo+RPwCtcQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@textlint/types": "^14.6.0",
"@textlint/types": "^14.7.1",
"debug": "^4.4.0"
}
},
"node_modules/@textlint/text-to-ast": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.6.0.tgz",
"integrity": "sha512-1rNBbC8EfxxAk76jHCMrNduUd2CuaaXyAZvuSWzRM+Fx+YyTOelKEv9sppCWnThcD2A34KKlghHg40YH3CjriQ==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.7.1.tgz",
"integrity": "sha512-sSyWYdsX407xMiTKqnB5xWW4ft9SyxwFW2sY3Cpl0emoH5x1CLiYnxpW8uLIN/eFWiSzQlKU9UpyHFfozSC3Ag==",
"dev": true,
"license": "MIT",
"dependencies": {
"@textlint/ast-node-types": "^14.6.0"
"@textlint/ast-node-types": "^14.7.1"
}
},
"node_modules/@textlint/text-to-ast/node_modules/@textlint/ast-node-types": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.6.0.tgz",
"integrity": "sha512-PqWpzFa64M5uKqBSQPV8wPqo14zvmz5JXWIIUkVCMQ/gN8/8IrXjpsp0O+/To8u5D5woVpxihBi/3nJdR8E37g==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.7.1.tgz",
"integrity": "sha512-7C/xYNZtaG+erIMjNZbRz7av9/S5eC+GAMh0rJ6A9Hik6nS4WyWKblutw2p+O2YWWT2tmOjzu/81fWzzDzmtRg==",
"dev": true,
"license": "MIT"
},
"node_modules/@textlint/textlint-plugin-markdown": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.6.0.tgz",
"integrity": "sha512-0W5wxWbDxAJoMe6ju2oq0IZ2ZX91JoWLHti+4LrPc9uiMx6CaTS/ZLYlu0hoYSk5DNQ75/bDD9wm78APM07zGA==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.7.1.tgz",
"integrity": "sha512-FnxwOOvvkIZ7HPV4gV0ZU6mA+G6LhA5QdspUqXAqTPQ0SY7X95PfQYbzk8Yz4RNyXFMhIcviKLO4+eSyBBTSuw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@textlint/markdown-to-ast": "^14.6.0"
"@textlint/markdown-to-ast": "^14.7.1"
}
},
"node_modules/@textlint/textlint-plugin-text": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.6.0.tgz",
"integrity": "sha512-QglDssLXVBdjk4cVUI5nK9DJtJ6XjtdKGV7Ehgv202MEMvTktGa5mJlIv5tQK0O+zVpLWqVl4q9P76MASk/qOg==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.7.1.tgz",
"integrity": "sha512-Cq1pmUWU95W2cYpXr9GDkKm5RN5XAPwVThFeMtj6RE4bCS+qqH/2O08yhUobKo0ryKb7j1zzBi/QdQ2U34YwvQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@textlint/text-to-ast": "^14.6.0"
"@textlint/text-to-ast": "^14.7.1"
}
},
"node_modules/@textlint/types": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.6.0.tgz",
"integrity": "sha512-XsK3FUdCtVNCe/aUz0TivpCzQchupcyOgNlRKt36AjDCEtqyPCOjpJxj1fmvYnTODG0M/4XKrlufn8onw+qWew==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.7.1.tgz",
"integrity": "sha512-j10OEEHRAaqGMC6dK3+H1Eg3bksASGTmGDozsSepYs7qInY+lYBCe5m3JTrKkDnAX4nNy8ninnKzrYKcVkWahw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@textlint/ast-node-types": "^14.6.0"
"@textlint/ast-node-types": "^14.7.1"
}
},
"node_modules/@textlint/types/node_modules/@textlint/ast-node-types": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.6.0.tgz",
"integrity": "sha512-PqWpzFa64M5uKqBSQPV8wPqo14zvmz5JXWIIUkVCMQ/gN8/8IrXjpsp0O+/To8u5D5woVpxihBi/3nJdR8E37g==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.7.1.tgz",
"integrity": "sha512-7C/xYNZtaG+erIMjNZbRz7av9/S5eC+GAMh0rJ6A9Hik6nS4WyWKblutw2p+O2YWWT2tmOjzu/81fWzzDzmtRg==",
"dev": true,
"license": "MIT"
},
"node_modules/@textlint/utils": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.6.0.tgz",
"integrity": "sha512-kQQg38c2wyWtbBnQ4zIGp4KrUmMmcZJKz2hrCn0z2kCMbDFpasTaG2EuteY1Szupl186fuMePGAGB6p7xeVsiQ==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.7.1.tgz",
"integrity": "sha512-nvIOltt0U5HQzu28qfYgbXUvZxEZBPRnQZHqlwMsqKp55bZ5L3iSNYwHvCej7fm9GOXH7Yz3UzLSko9eF5m3PA==",
"dev": true,
"license": "MIT"
},
@ -6107,25 +6107,25 @@
"dev": true
},
"node_modules/textlint": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/textlint/-/textlint-14.6.0.tgz",
"integrity": "sha512-C1Wbh5VDvKHmNyyj0q94AWdmI/RBKfweQwja6hno9iWoh8IprWye/Z8WSZd4PsCly/i2e6MNuXKrjU+gE4ku6w==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/textlint/-/textlint-14.7.1.tgz",
"integrity": "sha512-jhWEeF3SWYPuItcTRLA1KAyxHAX2diWpqtglcagPzPidFi2OMKCNW55FlaIQvOkWdohp5LzFk0mv4XiChqGr0Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@textlint/ast-node-types": "^14.6.0",
"@textlint/ast-traverse": "^14.6.0",
"@textlint/config-loader": "^14.6.0",
"@textlint/feature-flag": "^14.6.0",
"@textlint/fixer-formatter": "^14.6.0",
"@textlint/kernel": "^14.6.0",
"@textlint/linter-formatter": "^14.6.0",
"@textlint/module-interop": "^14.6.0",
"@textlint/resolver": "^14.6.0",
"@textlint/textlint-plugin-markdown": "^14.6.0",
"@textlint/textlint-plugin-text": "^14.6.0",
"@textlint/types": "^14.6.0",
"@textlint/utils": "^14.6.0",
"@textlint/ast-node-types": "^14.7.1",
"@textlint/ast-traverse": "^14.7.1",
"@textlint/config-loader": "^14.7.1",
"@textlint/feature-flag": "^14.7.1",
"@textlint/fixer-formatter": "^14.7.1",
"@textlint/kernel": "^14.7.1",
"@textlint/linter-formatter": "^14.7.1",
"@textlint/module-interop": "^14.7.1",
"@textlint/resolver": "^14.7.1",
"@textlint/textlint-plugin-markdown": "^14.7.1",
"@textlint/textlint-plugin-text": "^14.7.1",
"@textlint/types": "^14.7.1",
"@textlint/utils": "^14.7.1",
"debug": "^4.4.0",
"file-entry-cache": "^10.0.5",
"get-stdin": "^5.0.1",
@ -6250,9 +6250,9 @@
}
},
"node_modules/textlint/node_modules/@textlint/ast-node-types": {
"version": "14.6.0",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.6.0.tgz",
"integrity": "sha512-PqWpzFa64M5uKqBSQPV8wPqo14zvmz5JXWIIUkVCMQ/gN8/8IrXjpsp0O+/To8u5D5woVpxihBi/3nJdR8E37g==",
"version": "14.7.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.7.1.tgz",
"integrity": "sha512-7C/xYNZtaG+erIMjNZbRz7av9/S5eC+GAMh0rJ6A9Hik6nS4WyWKblutw2p+O2YWWT2tmOjzu/81fWzzDzmtRg==",
"dev": true,
"license": "MIT"
},

View File

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

View File

@ -10,6 +10,8 @@ related:
title: Dashboard cards
- docs: /dashboards/dashboards/#areas-dashboard
title: Areas dashboard
- docs: /docs/organizing/areas/
title: About areas
---
The area card lets you control and monitor an individual {% term area %}.

View File

@ -93,6 +93,12 @@ name:
type: string
{% endconfiguration %}
### Long term statistics
Home Assistant saves long-term statistics for a sensor if the entity has a state_class of measurement, total, or total_increasing. For short-term statistics, a snapshot is taken every 5 minutes. For long-term statistics, an hourly aggregate is stored of the short-term statistics. Short-term statistics are automatically purged after a predefined period (default is 10 days). Long-term statistics are never purged.
In the history graph card, if the hours to show variable is set to a figure higher than the purge_keep period, long-term statistics will be used, with short term statistics shown in bold.
### Examples
```yaml

View File

@ -22,7 +22,7 @@ Screenshot of the statistics graph card with none metered entities and `chart_ty
Screenshot of the statistics graph card with a metered entity and `chart_type` `bar`.
</p>
Statistics are gathered every 5 minutes and also hourly for sensors that support it. The 5-minute statistics will be retained for the duration set in the [recorder configuration](/integrations/recorder/#purge_keep_days), and hourly statistics will be retained indefinitely. It will either keep the <abbr title="Minimum">`min`</abbr>, <abbr title="Maximum">`max`</abbr>, and <abbr title="Average">`mean`</abbr> of a sensor's value for a specific hour or the <abbr title="Total">`sum`</abbr> for a metered entity.
Statistics are gathered every 5 minutes and also hourly for sensors with a state_class of measurement, total or total_increasing. The 5-minute statistics will be retained for the duration set in the [recorder configuration](/integrations/recorder/#purge_keep_days), and hourly statistics will be retained indefinitely. It will either keep the <abbr title="Minimum">`min`</abbr>, <abbr title="Maximum">`max`</abbr>, and <abbr title="Average">`mean`</abbr> of a sensor's value for a specific hour or the <abbr title="Total">`sum`</abbr> for a metered entity.
If your sensor doesn't work with statistics, check [this](/more-info/statistics/).

View File

@ -39,9 +39,10 @@
excerpt: >
Add-ons are additional standalone third-party software packages that can be
installed on Home Assistant OS.
link: /getting-started/concepts-terminology/#add-ons
- term: Area
definition: >-
An area in Home Assistant is a logical grouping of devices and entities that
An area in Home Assistant is a [logical grouping](/docs/organizing/) of devices and entities that
are meant to match areas (or rooms) in the physical world: your home. For
example, the `living room` area groups devices and entities in your living
room. Areas allow you to target actions at an entire group of devices.
@ -50,12 +51,13 @@
floors. Areas can also be used for automatically generated cards, such as
the [Area card](/dashboards/area/).
excerpt: >-
An area in Home Assistant is a logical grouping of devices and entities that
An area in Home Assistant is a [logical grouping](/docs/organizing/) of devices and entities that
are meant to match areas (or rooms) in the physical world: your home. For
example, the `living room` area groups devices and entities in your living
room.
aliases:
- areas
link: /docs/organizing/areas/
- term: Automation
definition: >-
Automations connect one or more triggers to one or more actions in a 'when
@ -74,12 +76,9 @@
definition: >-
Home Assistant has built-in functionality to create files containing a copy
of your configuration. This can be used to restore your Home Assistant as
well as migrate to a new system. The backup feature is available on some
installation types.
link: /integrations/backup/
excerpt: >-
Home Assistant has built-in functionality to create files containing a copy
of your configurations. This is available on certain installation types.
well as migrate to a new system. The backup feature is available for all
[installation types](/installation/#advanced-installation-methods).
link: /common-tasks/general/#backups
aliases:
- backups
- term: Binary sensor
@ -92,7 +91,7 @@
- binary_sensors
- term: Blueprint
definition: >-
A blueprint is a script, automation or template entity configuration with certain parts
A blueprint is a [script](/getting-started/concepts-terminology/#scripts), [automation](/getting-started/concepts-terminology/#automation), or [template](/integrations/template/) entity configuration with certain parts
marked as configurable. This allows users to create multiple scripts,
automations or template entities based on the same blueprint, with each having its own
configuration-specific settings. Blueprints are shared by the community on
@ -100,11 +99,6 @@
exchange](https://community.home-assistant.io/c/blueprints-exchange/53) in
the forum.
link: /docs/blueprint/
excerpt: >-
A blueprint is a script, automation or template entity configuration with certain parts
marked as configurable. This allows users to create multiple scripts,
automations or template entities based on the same blueprint, with each having its own
configuration-specific settings.
aliases:
- blueprints
- term: Button
@ -116,7 +110,7 @@
- buttons
- term: Category
definition: >-
A category is an organization tool that allows grouping items in a table.
A category is an organization tool that allows [grouping](/docs/organizing/) items in a table.
Like labels, categories allow grouping irrespective of the items' physical
location. For example, on the automations page, you can create the
categories “Notifications” or “NFC tags” to view your automations grouped or
@ -124,6 +118,7 @@
have different categories than the scene, scripts, or helpers settings page.
aliases:
- categories
link: /docs/organizing/categories/
- term: Climate
definition: >-
The Climate entity allows you to control and monitor HVAC (heating,
@ -269,7 +264,7 @@
link: /integrations/event
- term: Floor
definition: >-
A floor in Home Assistant is a logical grouping of areas that are meant to
A floor in Home Assistant is a [logical grouping](/docs/organizing/) of areas that are meant to
match the physical floors in your home. Devices & entities are not assigned
to floors but to areas. A floor has properties such as: Floor ID, name,
aliases (for use in assistants), an icon, and a floor level. Some of these
@ -278,13 +273,14 @@
target for actions. For example, to turn off all the lights on the
downstairs floor when you go to bed.
excerpt: >-
A floor in Home Assistant is a logical grouping of areas that are meant to
A floor in Home Assistant is a [logical grouping](/docs/organizing/) of areas that are meant to
match the physical floors in your home. Devices & entities are not assigned
to floors but to areas. Floors can be used in automations and scripts as a
target for actions. For example, to turn off all the lights on the
downstairs floor when you go to bed.
aliases:
- floors
link: /docs/organizing/floors/
- term: Frontend
definition: >-
The frontend is a necessary component for the UI, it is also where you can
@ -411,7 +407,7 @@
- Intents
- term: Label
definition: >-
Labels in Home Assistant allow grouping elements irrespective of their
Labels in Home Assistant allow [grouping](/docs/organizing/) elements irrespective of their
physical location or type. Labels can be assigned to areas, devices,
entities, automations, scenes, scripts, and helpers. Labels can be used in
automations and scripts as a target for actions. Labels can
@ -419,13 +415,14 @@
to show only devices with the label `heavy energy usage` or turn these
devices off when there is not a lot of solar energy available.
excerpt: >-
Labels in Home Assistant allow grouping elements irrespective of their
Labels in Home Assistant allow [grouping](/docs/organizing/) elements irrespective of their
physical location or type. Labels can be assigned to areas, devices,
entities, automations, scenes, scripts, and helpers. Labels can be used in
automations and scripts as a target for actions. Labels can
also be used to filter data.
aliases:
- labels
link: /docs/organizing/labels/
- term: Lovelace
definition: >-
Lovelace is the original code name of the UI that is now known as [Home

View File

@ -18,7 +18,7 @@ related:
An area in Home Assistant is a logical grouping of {% term devices %} and {% term entities %} that are meant to match areas (or rooms) in the physical world of your home.
For example, the "Living room" area groups devices and entities in your living room. Areas allow you to target an entire group of devices with an action. For example, turning off all the lights in the living room.
Areas can be assigned to floors. Areas can also be used to automatically generate cards, such as the [Area card](/dashboards/area/).
Areas can be assigned to {% term floors %}. Areas can also be used to automatically generate cards, such as the [Area card](/dashboards/area/).
## Creating an area
@ -29,7 +29,7 @@ Follow these steps to create a new area from the **Areas** view.
- Give the area a **Name** (required).
- Add an icon (We use [Material icons](https://pictogrammers.com/library/mdi/)).
- Assign the area to a floor.
- If you have not created floors yet, you can [create a new one](/docs/organizing/floors/#creating-a-floor).
- If you have not created floors yet, you can [create a new floor](/docs/organizing/floors/#creating-a-floor).
- The number can be negative. For example for underground floors.
- This number can later be used for sorting.
- Add an image representing that area.
@ -43,11 +43,11 @@ Follow these steps to create a new area from the **Areas** view.
## Assigning areas to floors and add labels
If an area has not yet been assigned to a floor, it is shown in the **Unassigned areas** section. Follow these steps to assign an area to a floor.
If an area has not yet been assigned to a {% term floor %}, it is shown in the **Unassigned areas** section. Follow these steps to assign an area to a floor.
1. Go to {% my areas title="**Settings** > **Areas, labels & zones**" %} and select **Create area**.
2. On the area card, select the edit {% icon "mdi:edit" %} button.
3. In the dialog, select the floor and add labels, if you like.
3. In the dialog, select the {% term floor %} and add {% term labels %} if you like.
## Assigning an area to multiple items

View File

@ -13,9 +13,9 @@ related:
title: Using floor alias for voice assistants
---
A floor in Home Assistant is a logical grouping of areas meant to match your home's physical floors.
A floor in Home Assistant is a logical grouping of {% term areas %} meant to match your home's physical floors.
Devices and entities cannot be assigned to floors directly but to areas. Floors can be used in automations and scripts as a target for actions. For example, to turn off all the lights on the downstairs floor when you go to bed.
Devices and entities cannot be assigned to floors directly but to areas. Floors can be used in {% term automations %} and {% term scripts %} as a target for {% term actions %}. For example, to turn off all the lights on the downstairs floor when you go to bed.
## Creating a floor
@ -41,11 +41,11 @@ Follow these steps to create a new floor.
## Deleting a floor
Follow these steps to delete a floor. Areas that are assigned to a floor will become unassigned. Automations and scripts or voice assistants that used a floor as a target will no longer work as they no longer have a target.
Follow these steps to delete a floor. Areas that are assigned to a floor will become unassigned. {% term Automations %} and {% term scripts %} or voice assistants that used a floor as a target will no longer work as they no longer have a target.
1. Go to {% my areas title="**Settings** > **Areas, labels & zones**" %}.
2. Next to the floor, select the three dots {% icon "mdi:dots-vertical" %} menu and select **Delete floor**.
![Screenshot showing the dialog to delete a floor](/images/organizing/floor_delete.png)
3. If you have automations, scripts, or voice assistants that used floors as a target, you will need to update these.
3. If you have {% term automations %}, {% term scripts %}, or voice assistants that used floors as a target, you will need to update these.

View File

@ -55,9 +55,9 @@
&nbsp;Its IoT class is <a href='/blog/2016/02/12/classifying-the-internet-of-things/#classifiers'>{{ page.ha_iot_class }}.</a>
</div>
{%- endif -%}
{%- if page.ha_quality_scale %}
<div class='section'>
<div class='section'>
{% if page.ha_quality_scale == "bronze" %}<a href='/docs/quality_scale/#-bronze'>🥉 Bronze quality</a><br />{%- endif -%}
{% if page.ha_quality_scale == "silver" %}<a href='/docs/quality_scale/#-silver'>🥈 Silver quality</a><br />{%- endif -%}
{% if page.ha_quality_scale == "gold" %}<a href='/docs/quality_scale/#-gold'>🥇 Gold quality</a><br />{%- endif -%}
@ -67,12 +67,12 @@
{% if page.ha_quality_scale == "custom" %}<a href='/docs/quality_scale/#-custom'>📦 Custom integration</a><br />{%- endif -%}
</div>
{%- endif -%}
{% if page.works_with %}
{%- for type in page.works_with -%}
<div class="section">
<a href="/blog/2022/07/12/partner-program">
<img src="../../images/works_with/works-with-{{ type }}.png" alt="Works via {{ type }} with Home assistant">
<a href="https://works-with.home-assistant.io/">
<img src="../../images/works_with/works-with.png" alt="Works with Home assistant">
</a>
</div>
{%- endfor -%}
@ -96,7 +96,7 @@
{% assign ha_project = true %}
{% endif %}
{% endfor %}
{% if ha_project %}
<div class="section">
This integration is being maintained by the Home Assistant project.

View File

@ -5,7 +5,7 @@
<h1 class="title epsilon"><iconify-icon icon="mdi:view-dashboard"></iconify-icon> Dashboards</h1>
<ul class="divided sidebar-menu">
<li>{% active_link /dashboards/ Introduction %}</li>
<li>{% active_link /dashboards/dashboards/ Multiple dashboards %}</li>
<li>{% active_link /dashboards/dashboards/ Dashboard types %}</li>
<li>{% active_link /dashboards/views/ Views %}</li>
<li>{% active_link /dashboards/cards/ Cards %}</li>
<li>{% active_link /dashboards/badges/ Badges %}</li>

View File

@ -60,7 +60,7 @@
<iconify-icon icon="mdi:about-circle"></iconify-icon> Dashboard basics
<ul>
<li>{% active_link /dashboards/ Introduction %}</li>
<li>{% active_link /dashboards/dashboards/ Multiple dashboards %}</li>
<li>{% active_link /dashboards/dashboards/ Dashboard types %}</li>
<li>{% active_link /dashboards/views/ Views %}</li>
<li>{% active_link /dashboards/cards/ Cards %}</li>
<li>{% active_link /dashboards/badges/ Badges %}</li>

View File

@ -5,32 +5,62 @@
<script src="{{ '/javascripts/prism.js' | cache_buster }}" type="text/javascript" defer></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@docsearch/js@3/dist/umd/index.min.js"></script>
<script type="text/javascript">
docsearch({
container: '#docsearch',
appId: 'FBHBYS3J0U',
indexName: 'home-assistant',
apiKey: "{{ site.algolia.api_key }}",
});
document.querySelector('.site-title').addEventListener('contextmenu', function(ev) {
ev.preventDefault();
document.location.assign("https://design.home-assistant.io/#brand/logo")
});
docsearch({
container: '#docsearch',
appId: 'FBHBYS3J0U',
indexName: 'home-assistant',
apiKey: "{{ site.algolia.api_key }}",
});
document.querySelector('.site-title').addEventListener('contextmenu', function (ev) {
ev.preventDefault();
document.location.assign("https://design.home-assistant.io/#brand/logo")
});
</script>
{% if page.hero_unit %}
<script type="text/javascript">
const changeNavColor = () => {
const scrollPosition = document.documentElement.scrollTop;
const nav = document.querySelector("header");
if (scrollPosition <= 1) {
nav.classList.add("dark");
} else {
nav.classList.remove("dark");
{
const changeNavColor = () => {
const scrollPosition = document.documentElement.scrollTop;
const nav = document.querySelector("header");
if (scrollPosition <= 1) {
nav.classList.add("dark");
} else {
nav.classList.remove("dark");
}
}
}
window.addEventListener("load", () => changeNavColor());
window.addEventListener("scroll", () => changeNavColor());
window.addEventListener("load", () => changeNavColor());
window.addEventListener("scroll", () => changeNavColor(), { passive: true });
}
</script>
{% endif %}
<script type="text/javascript">
{
const article = document.querySelector("article.post");
if (article) {
const iframes = article.querySelectorAll("iframe[data-src]");
let loaded = false;
if (iframes) {
document.addEventListener('mousemove', loadLazyFrames, { passive: true, once: true });
document.addEventListener('touchmove', loadLazyFrames, { passive: true, once: true });
document.addEventListener('scroll', loadLazyFrames, { passive: true, once: true });
function loadLazyFrames() {
if (loaded) return;
loaded = true;
iframes.forEach((iframe) => {
const src = iframe.getAttribute("data-src");
if (src) {
iframe.setAttribute("src", src);
iframe.removeAttribute("data-src");
}
});
}
}
}
}
</script>

View File

@ -50,15 +50,19 @@ Port:
description: "The port of the APC UPS Daemon configured above."
{% endconfiguration_basic %}
## Binary sensor
## Supported functionality
This integration provides a binary sensor for the following information from apcupsd:
### Entities
- UPS status
The APC UPS Daemon integration provides the following entities.
## Sensors
#### Binary sensors
This integration provides sensors for the following information from apcupsd based on their availability. Each sensor is listed here along with their corresponding resource name obtained from `apcaccess`.
- **Online Status**
- **Description**: Indicates whether the UPS is online, supplying power to connected devices from utility line, not the battery.
- **Available for machines**: all
#### Sensors
{% note %}
@ -66,73 +70,297 @@ Some sensors are disabled by default, since they provide information that is onl
{% endnote %}
- UPS Alarm Delay (ALARMDEL)
- UPS Ambient Temperature (AMBTEMP)
- UPS Status Data (APC)
- UPS Model (APCMODEL)
- UPS Bad Batteries (BADBATTS)
- UPS Battery Replaced (BATTDATE)
- UPS Battery Status (BATTSTAT)
- UPS Battery Voltage (BATTV)
- UPS Battery (BCHARGE)
- UPS Cable Type (CABLE)
- UPS Total Time on Battery (CUMONBATT)
- UPS Status Date (DATE)
- UPS Dip Switch Settings (DIPSW)
- UPS Low Battery Signal (DLOWBATT)
- UPS Driver (DRIVER)
- UPS Shutdown Delay (DSHUTD)
- UPS Wake Delay (DWAKE)
- UPS Date and Time (END APC)
- UPS External Batteries (EXTBATTS)
- UPS Firmware Version (FIRMWARE)
- UPS Transfer High (HITRANS)
- UPS Hostname (HOSTNAME)
- UPS Ambient Humidity (HUMIDITY)
- UPS Internal Temperature (ITEMP)
- UPS Last Transfer (LASTXFER)
- UPS Input Voltage Status (LINEFAIL)
- UPS Line Frequency (LINEFREQ)
- UPS Input Voltage (LINEV)
- UPS Load (LOADPCT)
- UPS Load Apparent Power (LOADAPNT)
- UPS Transfer Low (LOTRANS)
- UPS Manufacture Date (MANDATE)
- UPS Master Update (MASTERUPD)
- UPS Input Voltage High (MAXLINEV)
- UPS Battery Timeout (MAXTIME)
- UPS Battery Shutdown (MBATTCHG)
- UPS Input Voltage Low (MINLINEV)
- UPS Shutdown Time (MINTIMEL)
- UPS Model (MODEL)
- UPS Battery Nominal Voltage (NOMBATTV)
- UPS Nominal Input Voltage (NOMINV)
- UPS Nominal Output Voltage (NOMOUTV)
- UPS Nominal Output Power (NOMPOWER)
- UPS Nominal Apparent Power (NOMAPNT)
- UPS Transfer Count (NUMXFERS)
- UPS Output Current (OUTCURNT)
- UPS Output Voltage (OUTPUTV)
- UPS Register 1 Fault (REG1)
- UPS Register 2 Fault (REG2)
- UPS Register 3 Fault (REG3)
- UPS Restore Requirement (RETPCT)
- UPS Last Self Test (LASTSTEST)
- UPS Self Test Result (SELFTEST)
- UPS Sensitivity (SENSE)
- UPS Serial Number (SERIALNO)
- UPS Startup Time (STARTTIME)
- UPS Status Flag (STATFLAG)
- UPS Status (STATUS)
- UPS Self Test Interval (STESTI)
- UPS Time Left (TIMELEFT)
- UPS Time on Battery (TONBATT)
- UPS Mode (UPSMODE)
- UPS Name (UPSNAME)
- UPS Daemon Info (VERSION)
- UPS Transfer from Battery (XOFFBAT)
- UPS Transfer from Battery (XOFFBATT)
- UPS Transfer to Battery (XONBATT)
- **Alarm Delay**
- **Description**: The delay period for the UPS alarm.
- **Available for machines**: all
- **Battery Replaced**
- **Description**: The date that batteries were last replaced.
- **Available for machines**: all
- **Battery Voltage**
- **Description**: Battery voltage as supplied by the UPS.
- **Available for machines**: all
- **Battery**
- **Description**: The percentage charge on the batteries.
- **Available for machines**: all
- **Total Time on Battery**
- **Description**: Total (cumulative) time on batteries in seconds since apcupsd startup.
- **Available for machines**: all
- **Date and Time**
- **Description**: The time and date that the STATUS record was written.
- **Available for machines**: all
- **Transfer High**
- **Description**: The line voltage above which the UPS will switch to batteries.
- **Available for machines**: all
- **Input Voltage**
- **Description**: The current line voltage as returned by the UPS.
- **Available for machines**: all
- **Load**
- **Description**: The percentage of load capacity as estimated by the UPS.
- **Available for machines**: all
- **Transfer Low**
- **Description**: The line voltage below which the UPS will switch to batteries.
- **Available for machines**: all
- **Battery Timeout**
- **Description**: apcupsd will shut down your system if the time on batteries exceeds this value. A value of zero disables the feature. Value is set in the configuration file (TIMEOUT).
- **Available for machines**: all
- **Battery Shutdown**
- **Description**: If the battery charge percentage (BCHARGE) drops below this value, apcupsd will shut down your system. Value is set in the configuration file (BATTERYLEVEL).
- **Available for machines**: all
- **Shutdown Time**
- **Description**: apcupsd will shut down your system if the remaining runtime equals or is below this point. Value is set in the configuration file (MINUTES).
- **Available for machines**: all
- **Battery Nominal Voltage**
- **Description**: The nominal battery voltage.
- **Available for machines**: all
- **Nominal Input Voltage**
- **Description**: The input voltage that the UPS is configured to expect.
- **Available for machines**: all
- **Nominal Output Power**
- **Description**: The maximum power in Watts that the UPS is designed to supply.
- **Available for machines**: all
- **Transfer Count**
- **Description**: The number of transfers to batteries since apcupsd startup.
- **Available for machines**: all
- **Last Self-test**
- **Description**: The date and time of the last self-test performed by the UPS.
- **Available for machines**: all
- **Remarks**: This only becomes available when a self-test (either automatic or manual) is performed.
- **Self Test Result**
- **Description**: The results of the last self test, and may have the following values:
- OK: self test indicates good battery
- BT: self test failed due to insufficient battery capacity
- NG: self test failed due to overload
- NO: No results
- **Available for machines**: all
- **Startup Time**
- **Description**: The time/date that apcupsd was started.
- **Available for machines**: all
- **Status**
- **Description**: The current status of the UPS (ONLINE, CHARGING, ONBATT, etc.)
- **Available for machines**: all
- **Time Left**
- **Description**: The remaining runtime left on batteries as estimated by the UPS.
- **Available for machines**: all
- **Time on Battery**
- **Description**: Time in seconds currently on batteries, or 0.
- **Available for machines**: all
- **Mode**
- **Description**: The mode in which apcupsd is operating as specified in the configuration file (UPSMODE)
- **Available for machines**: all
- **Transfer from Battery**
- **Description**: Time and date of last transfer from batteries.
- **Available for machines**: all
- **Transfer to Battery**
- **Description**: Time and date of last transfer to batteries.
- **Available for machines**: all
- **Remarks**: This entity only becomes available after a tranfer to battery event happens.
- **Battery Status**
- **Description**: The status of the batteries.
- **Available for machines**: Back-UPS Pro and Smart-UPS
- **Line Frequency**
- **Description**: Line frequency in hertz as given by the UPS.
- **Available for machines**: Back-UPS Pro and Smart-UPS
- **Load Apparent Power**
- **Description**: An "apparent load" condition, indicating the calculated load on the UPS based on the voltage and current. This is a measure of how much power the UPS is supplying to connected devices, often reported as a percentage of its capacity.
- **Available for machines**: Back-UPS Pro and Smart-UPS
- **Output Voltage**
- **Description**: The voltage the UPS is supplying to your equipment
- **Available for machines**: Back-UPS Pro and Smart-UPS
- **Bad Batteries**
- **Description**: The number of bad battery packs.
- **Available for machines**: Smart-UPS
- **Dip Switch Settings**
- **Description**: The current dip switch settings on UPSes that have them.
- **Available for machines**: Smart-UPS
- **Low Battery Signal**
- **Description**: The remaining runtime below which the UPS sends the low battery signal. At this point apcupsd will force an immediate emergency shutdown.
- **Available for machines**: Smart-UPS
- **Shutdown Delay**
- **Description**: The grace delay that the UPS gives after receiving a power down command from apcupsd before it powers off your equipment.
- **Available for machines**: Smart-UPS
- **Wake Delay**
- **Description**: The amount of time the UPS will wait before restoring power to your equipment after a power off condition when the power is restored.
- **Available for machines**: Smart-UPS
- **External Batteries**
- **Description**: The number of external batteries as defined by the user. A correct number here helps the UPS compute the remaining runtime more accurately.
- **Available for machines**: Smart-UPS
- **Internal Temperature**
- **Description**: Internal UPS temperature as supplied by the UPS.
- **Available for machines**: Smart-UPS
- **Input Voltage Status**
- **Description**: The input line voltage status. "OK" indicates normal operation.
- **Available for machines**: Smart-UPS
- **Master Update**
- **Description**: The last time the master sent an update to the device.
- **Available for machines**: Smart-UPS
- **Input Voltage High**
- **Description**: The maximum line voltage since the UPS was started, as reported by the UPS.
- **Available for machines**: Smart-UPS
- **Input Voltage Low**
- **Description**: The minimum line voltage since the UPS was started, as returned by the UPS.
- **Available for machines**: Smart-UPS
- **Nominal Output Voltage**
- **Description**: The output voltage that the UPS will attempt to supply when on battery power.
- **Available for machines**: Smart-UPS
- **Nominal Apparent Power**
- **Description**: The rated apparent power capacity.
- **Available for machines**: Smart-UPS
- **Output Current**
- **Description**: The output current being supplied by the UPS to the connected devices
- **Available for machines**: Smart-UPS
- **Restore Requirement**
- **Description**: The percentage charge that the batteries must have after a power off condition before the UPS will restore power to your equipment.
- **Available for machines**: Smart-UPS
- **Self Test Interval**
- **Description**: The interval in hours between automatic self tests.
- **Available for machines**: Smart-UPS
- **Transfer from Battery**
- **Description**: The date and time of last transfer off battery since apcupsd startup.
- **Available for machines**: Smart-UPS
- **Ambient Humidity**
- **Description**: The humidity as measured by the UPS.
- **Available for machines**: Smart-UPS with optional accessories (e.g., temperature/humidity sensors or SNMP network cards).
- **Ambient Temperature**
- **Description**: The ambient temperature as measured by the UPS.
- **Available for machines**: Smart-UPS with optional accessories (e.g., temperature/humidity sensors or SNMP network cards).
- **Status Data**
- **Description**: Header record indicating the STATUS format revision level, the number of records that follow the APC statement, and the number of bytes that follow the record.
- **Available for machines**: all
- **Remarks**: Disabled by default for advanced uses.
- **Model**
- **Description**: The old APC model identification code.
- **Available for machines**: Smart-UPS
- **Remarks**: Disabled by default for advanced uses.
- **Cable Type**
- **Description**: The cable as specified in the configuration file (UPSCABLE).
- **Available for machines**: all
- **Remarks**: Disabled by default for advanced uses.
- **Status Date**
- **Description**: The date and time that the information was last obtained from the UPS.
- **Available for machines**: all
- **Remarks**: Disabled by default for advanced uses.
- **Driver**
- **Description**: The driver used to communicate with the UPS.
- **Available for machines**: all
- **Remarks**: Disabled by default for advanced uses.
- **Firmware Version**
- **Description**: The firmware revision number as reported by the UPS.
- **Available for machines**: all
- **Remarks**: Disabled by default for advanced uses.
- **Hostname**
- **Description**: The name of the machine that collected the UPS data.
- **Available for machines**: all
- **Remarks**: Disabled by default for advanced uses.
- **Last Transfer**
- **Description**: The reason for the last transfer to batteries.
- **Available for machines**: all
- **Remarks**: Disabled by default for advanced uses.
- **Manufacture Date**
- **Description**: The date the UPS was manufactured.
- **Available for machines**: Smart-UPS
- **Remarks**: Disabled by default for advanced uses.
- **Model**
- **Description**: The UPS model as derived from information from the UPS.
- **Available for machines**: all
- **Remarks**: Disabled by default for advanced uses.
- **Register 1 Fault**
- **Description**: The value from the UPS fault register 1.
- **Available for machines**: Smart-UPS
- **Remarks**: Disabled by default for advanced uses.
- **Register 2 Fault**
- **Description**: The value from the UPS fault register 2.
- **Available for machines**: Smart-UPS
- **Remarks**: Disabled by default for advanced uses.
- **Register 3 Fault**
- **Description**: The value from the UPS fault register 3.
- **Available for machines**: Smart-UPS
- **Remarks**: Disabled by default for advanced uses.
- **Sensitivity**
- **Description**: The sensitivity level of the UPS to line voltage fluctuations.
- **Available for machines**: all
- **Remarks**: Disabled by default for advanced uses.
- **Serial Number**
- **Description**: The UPS serial number.
- **Available for machines**: all
- **Remarks**: Disabled by default for advanced uses.
- **Status Flag**
- **Description**: Status flag. English version is given by STATUS.
- **Available for machines**: all
- **Remarks**: Disabled by default for advanced uses.
- **Name**
- **Description**: The name of the UPS as stored in the EEPROM or in the UPSNAME directive in the configuration file.
- **Available for machines**: all
- **Remarks**: Disabled by default for advanced uses.
- **Daemon Info**
- **Description**: The apcupsd release number, build date, and platform.
- **Available for machines**: all
- **Remarks**: Disabled by default for advanced uses.
## Examples
@ -147,7 +375,7 @@ mode: single
triggers:
- trigger: numeric_state
entity_id:
- sensor.gogoups_load
- sensor.apc_ups_load
above: 80
conditions: []
actions:
@ -164,7 +392,7 @@ The integration {% term polling polls %} data from your APC UPS Daemon every 60
## Known limitations
This integration does not allow you to control the UPS. For example, you cannot run a self-test. To run a self-test, use the `aptest` command provided by [apcupsd](http://www.apcupsd.org/).
This integration does not allow you to control the UPS. For example, you cannot run a self-test. To run a self-test, use the `apctest` command provided by [apcupsd](http://www.apcupsd.org/).
## Troubleshooting

View File

@ -58,7 +58,7 @@ The following device classes are supported for covers.
- **garage**: Control of a garage door that provides access to a garage.
- **gate**: Control of a gate. Gates are found outside of a structure and are typically part of a fence.
- **shade**: Control of shades, which are a continuous plane of material or connected cells that expanded or collapsed over an opening, such as window shades.
- **shutter**: Control of shutters, which are linked slats that swing out/in to covering an opening or may be tilted to partially cover an opening, such as indoor or exterior window shutters.
- **shutter**: Control of shutters. Shutters are linked slats that can be raised or lowered to cover an opening, such as window or door roller shutters. Some shutters (for example, some indoor or exterior window shutters) swing out/in to cover an opening or may be tilted to provide partial cover.
- **window**: Control of a physical window that opens and closes or may tilt.
## Actions

View File

@ -152,7 +152,7 @@ The configuration snippet below adds a template sensor containing the current fo
action:
- service: environment_canada.get_forecasts
target:
entity_id: weather.ottawa_kanata_orleans_forecast
entity_id: weather.NAME
response_variable: forecasts
sensor:
- name: Weather Forecast Daily

View File

@ -160,7 +160,7 @@ Now add your setup to your {% term "`configuration.yaml`" %} file, such as:
# Example configuration.yaml entry
google_assistant:
project_id: YOUR_PROJECT_ID
service_account: !include SERVICE_ACCOUNT.JSON
service_account: !include SERVICE_ACCOUNT.json
report_state: true
exposed_domains:
- switch

View File

@ -44,7 +44,7 @@ You can access the **History** panel from the side bar. To export the data, foll
By default, the recorder stores the sensor data for 10 days. Older data is purged automatically. The data for the last 10 days is taken from the recorder.
If you select a time frame that exceeds 10 days, the data is taken from the long term statistics table. The long term statistics data is sampled and averaged once per hour, to save storage. Therefore, the values might look different from what you see from the recorder data, which shows the measured values at the sample rate defined for that sensor. The detailed data will be shown with a darker line on graphs.
If you select a time frame that exceeds 10 days, the data is taken from the long term statistics table. Long term statistics are saved for sensors with a state_class of measurement, total or total_increasing. The long term statistics data is sampled and averaged once per hour, to save storage. Therefore, the values might look different from what you see from the recorder data, which shows the measured values at the sample rate defined for that sensor. The detailed data will be shown with a darker line on graphs.
<img class="no-shadow" src='/images/integrations/history/history-panel_including-long-term-storage.png' alt='If the chosen time frame exceeds the retention period defined in the recorder, the long term statistics table is used as a data source.'>

View File

@ -1192,7 +1192,7 @@ The program key needs to be added to the integration. To help with that, you can
#### Symptom: "the "active program" and "selected program" entities are not provided by the integration"
The the "active program" and "selected program" entities are not provided by the integration, and the downloaded device diagnostics file does not list any programs.
The "active program" and "selected program" entities are not provided by the integration, and the downloaded device diagnostics file does not list any programs.
##### Description

View File

@ -91,6 +91,14 @@ Groups are instantly created in Home Assistant when created in the native Homema
Devices are created with a delay of 30 seconds in Home Assistant when created in the native HomematicIP APP.
Within this delay the device registration should be completed in the App, otherwise the device name will be a default one based on the device type. This can easily be fixed in the Home Assistant entity registry afterwards.
## Use HmIP-DLD Door Lock Drive in Home Assistant
If you are unable to control the **HmIP-DLD** device via Home Assistant, you may need to allow the Home Assistant device to control the **HmIP-DLD** in the HomematicIP app.
To do this, navigate to the **Access Control** section in your HomematicIP app and enable the necessary permissions.
Currently, the **HmIP-DLD** can only be used in Home Assistant without a PIN. Ensure that no PIN is set for the device in the HomematicIP app.
## Implemented and tested devices
- homematicip_cloud.alarm_control_panel

View File

@ -88,7 +88,7 @@ automation:
entity_id: light.living_room
data:
brightness: 255
kelvin: 2700
color_temp_kelvin: 2700
```
```yaml
# Ledlist morning on, red

View File

@ -759,7 +759,7 @@ state_topic:
required: false
type: string
supported_color_modes:
description: A list of color modes supported by the list. Possible color modes are `onoff`, `brightness`, `color_temp`, `hs`, `xy`, `rgb`, `rgbw`, `rgbww`, `white`. Note that if `onoff` **or** `brightness` are used, that must be the _only_ value in the list.
description: A list of color modes supported by the light. Possible color modes are `onoff`, `brightness`, `color_temp`, `hs`, `xy`, `rgb`, `rgbw`, `rgbww`, `white`. Note that if `onoff` **or** `brightness` are used, that must be the _only_ value in the list.
required: false
type: list
transition:

View File

@ -25,22 +25,41 @@ ha_zeroconf: true
ha_quality_scale: platinum
---
The Peblar {% term integration %} integrates your [Peblar Rocksolid EV Charger]
with Home Assistant. Allowing you to monitor the charging status and energy
consumption of your electric vehicle connected to the Peblar charger, while
also providing the ability to add the charger to your Home Assistant
energy dashboard.
The Peblar {% term integration %} integrates the [Peblar Rocksolid EV Charger] into your smart home ecosystem. It enables real-time monitoring of charging status, tracking energy consumption, controlling charging behavior, and integrating EV charging data into the Home Assistant energy dashboard.
[Peblar Rocksolid EV Charger]: https://peblar.com/
## Use cases
The Peblar integration connects your EV charger to Home Assistant, providing comprehensive data and control capabilities. Here's how you can benefit from this integration in your smart home:
- **Monitor your EV charging in real time** - Track charging status, current power draw, and session energy consumption directly from your dashboard.
- **Optimize your home energy management** - Add your charger to the Home Assistant energy dashboard to integrate EV charging into your overall energy monitoring system.
- **Create smart charging automations** such as:
- Receiving notifications when your vehicle completes charging
- Automatically adjusting charging modes based on solar production forecasts
- Getting alerts when the charger detects errors or issues
- Scheduling charging during off-peak electricity hours
- Optimizing charging based on electricity prices and your travel schedule
- **Stay up to date with software** - Receive notifications when firmware or customization updates are available for your Peblar charger.
- **Control charging remotely** - Start, stop, or adjust charging parameters from anywhere using the Home Assistant app.
## Supported devices
The following rocksolid Pebler EV chargers are supported by this integration:
The following Peblar Rocksolid EV chargers are supported by this integration:
- Peblar Home
- Peblar Home Plus
- Peblar Business
## Prerequisites
Before setting up the Peblar integration, make sure:
- Your Peblar charger is connected to your home network
- You know the hostname or IP address of the charger on your network
- You have the password used to access the charger's local web interface
{% include integrations/config_flow.md %}
### Configuration parameters
@ -49,47 +68,22 @@ The following rocksolid Pebler EV chargers are supported by this integration:
Host:
description: The hostname or IP address of your Peblar charger on your home network.
Password:
description: The password as used to log in to the Peblar device' local web interface.
description: The password used to log in to the Peblar device's local web interface.
{% endconfiguration_basic %}
The above configuration can also be adjusted later via
{% my integrations title="**Settings** > **Devices & services**" %},
click {% icon "mdi:dots-vertical" %} and select **Reconfigure**.
## Use cases
This integration provides all the information about your rock-solid EV charger
from Peblar. There are multiple use cases for this integration, such as:
- Monitoring the charging status of your electric vehicle.
- Adding the charger to your Home Assistant energy dashboard, allowing you to
monitor the energy consumption of your electric vehicle as part of your home
energy usage.
- Creating automations, for example:
- To notify you when the charging of your electric vehicle is complete.
- Turn off solar-only charging when the expected solar production is not
sufficient today.
- Notify when the charger has detected an error or has raised a warning.
- See updates in Home Assistant when there are updates available for your
Peblar charger.
The above configuration can also be adjusted later via {% my integrations title="**Settings** > **Devices & services**" %}, click {% icon "mdi:dots-vertical" %} and select **Reconfigure**.
## Supported functionality
The Peblar integration provides a whole lot of functionality to Home Assistant.
All of them are provided as entities in Home Assistant. Below is an overview of
the entities provided by this integration.
Below is a complete overview of the entities this integration provides.
### Binary sensors
The binary sensors provided are used to indicate the health status of the
charger. The following binary sensors are available:
- **Active error**: Indicates if the charger has detected an error. If this
sensor is on ({% term state %}: `on`) an error has been detected, otherwise, it is off
({% term state %}: `off`).
- **Active warning**: Indicates if the charger has raised a warning. If this
- sensor is on ({% term state %}: `on`) a warning has been raised, otherwise, it is off
({% term state %}: `off`).
- **Active error**: Indicates if the charger has detected an error. If this sensor is on ({% term state %}: `on`) an error has been detected, otherwise, it is off ({% term state %}: `off`).
- **Active warning**: Indicates if the charger has raised a warning. If this sensor is on ({% term state %}: `on`) a warning has been raised, otherwise, it is off ({% term state %}: `off`).
If any of these binary sensors are on, you should check the charger's local
web interface for more information about the error or warning.
@ -105,11 +99,8 @@ documentation for information on how to do this.
The buttons provided by this integration can be used to trigger an action on
the charger. The following buttons are available:
- **Identify**: This button can be used to identify the charger. This can be
useful if you have multiple chargers and want to identify which one is which.
Once pressed, the LED on the charger will start blinking for a few seconds.
- **Restart**: This button can be used to restart the charger. This can be
useful if the charger is not responding as expected.
- **Identify**: This button can be used to identify the charger. This can be useful if you have multiple chargers and want to identify which one is which. Once pressed, the LED on the charger will start blinking for a few seconds.
- **Restart**: This button can be used to restart the charger. This can be useful if the charger is not responding as expected.
{% important %}
These buttons are disabled by default. If you want to use them, you need
@ -121,33 +112,23 @@ documentation for information on how to do this.
This integration provides a single number entity: **Charge limit**.
Using this entity, you can set the maximum current the charger can provide to
your electric vehicle. The value of this entity is in amperes (A).
Using this entity, you can set the maximum current the charger can provide to your electric vehicle. The value of this entity is in amperes (A).
The minimum value for this entity is 6A, and the maximum value is depending on
your charger's configuration. The value can be set in increments of 1A.
The minimum value for this entity is 6A, and the maximum value is depending on your charger's configuration. The value can be set in increments of 1A.
### Selects
This integration provides a single select entity: **Smart charging**.
It reflects the same smart charging state as is shown on the charger's local
web interface, and allows you to control the charging behavior of the charger.
It reflects the same smart charging state as is shown on the charger's local web interface, and allows you to control the charging behavior of the charger.
The following options are available:
- **Default** ({% term state %}: `default`): The charger will charge the electric vehicle
as soon as it is connected.
- **Fast solar** ({% term state %}: `fast_solar`): The charger will fast charge the
electric vehicle with the overproduction of solar energy, but will also use
grid power if the solar production is not sufficient.
- **Smart solar** ({% term state %}: `smart_solar`): The charger will charge the electric
vehicle with the overproduction of solar energy, but will also use grid power
if the solar production is not sufficient.
- **Pure solar** ({% term state %}: `solar_only`): The charger will only charge the
electric vehicle with the overproduction of solar energy.
- **Scheduled** ({% term state %}: `scheduled`): The charger will charge the electric
vehicle according to the schedule configured on the charger.
- **Default** ({% term state %}: `default`): The charger will charge the electric vehicle as soon as it is connected.
- **Fast solar** ({% term state %}: `fast_solar`): The charger will fast charge the electric vehicle with the overproduction of solar energy, but will also use grid power if the solar production is not sufficient.
- **Smart solar** ({% term state %}: `smart_solar`): The charger will charge the electric vehicle with the overproduction of solar energy, but will also use grid power if the solar production is not sufficient.
- **Pure solar** ({% term state %}: `solar_only`): The charger will only charge the electric vehicle with the overproduction of solar energy.
- **Scheduled** ({% term state %}: `scheduled`): The charger will charge the electric vehicle according to the schedule configured on the charger.
### Sensors
@ -161,98 +142,48 @@ by adding the **Lifetime energy** sensor to the energy dashboard configuration
as a device.
{% endtip %}
- **Current**: The current current (in amperes) the charger is consuming to
charge your electric vehicle. This is a combined value for all your phases.
Additionally, three additionally sensors are available, if your charging is
using multiple phases:
- **Current Phase 1**\*\*: The current current (in amperes) the charger is
consuming on phase 1.
- **Current Phase 2**\*\*: The current current (in amperes) the charger is
consuming on phase 2.
- **Current Phase 3**\*\*: The current current (in amperes) the charger is
consuming on phase 3.
- **Lifetime energy**: The total energy (in kilowatt-hours) consumed by the
charger since it was installed. **This is the recommended sensor to use in the
Home Assistant energy dashboard.**
- **Limit source**: The source/origin of the current charging limit that is
in effect. The source can be one of the following:
- _Charging cable_ ({% term state %}: `charging_cable`): The current limit is
the maximum current the charging cable handle.
- _Current limiter_ ({% term state %}: `current_limiter`): The current limit is
set by the current limiter.
- _Dynamic load balancing_ ({% term state %}: `dynamic_load_balancing`): The current
limit is set by the dynamic load balancing feature.
- _External power limit_ ({% term state %}: `external_power_limit`): The current
limit is set by an external power limiter.
- _Group load balancing_ ({% term state %}: `group_load_balancing`): The current
limit is set by the group load balancing feature, which is a feature that
allows multiple chargers to share the available power.
- _Hardware limitation_ ({% term state %}: `hardware_limitation`): The current limit
is limited by the hardware of the charger that can't provide more current.
- _High temperature_ ({% term state %}: `high_temperature`): The current limit is
limited due to high temperatures.
- _Household power limit_ ({% term state %}: `household_power_limit`): The current
limit is set by the household power limit feature, which is a feature that
allows the charger to limit the current to prevent overloading the household
power.
- _Installer limitation_ ({% term state %}: `installer_limitation`): The current
limit is set by the installer, for example, to prevent overloading the fuse
of the house.
- _Local Modbus API_ ({% term state %}: `local_modbus_api`): The current limit is
set by software using the local Modbus API.
- _Local REST API_ ({% term state %}: `local_rest_api`): The current limit is set
by software using the local REST API. Home Assistant uses this API to set
the current limit, so if you see this state, it means the current limit is
likely set through Home Assistant.
- _OCPP smart charging_ ({% term state %}: `ocpp_smart_charging`): The current limit
is set by the OCPP smart charging feature.
- _Overcurrent protection_ ({% term state %}: `overcurrent_protection`): The current
limit is limited due to overcurrent protection.
- _Phase imbalance_ ({% term state %}: `phase_imbalance`): The current limit is
limited due to phase imbalance in the electrical installation.
- _Power factor_ ({% term state %}: `power_factor`): The current limit is limited
due to a low power factor in the electrical installation.
- _Solar charging_ ({% term state %}: `solar_charging`): The current limit is set
by the solar charging feature of the charger. This means the charger is
awaiting an overproduction of solar energy to start charging.
- **Power**: The current power (in Watts) the charger is consuming to charge
- **Current**: The present current (in amperes) the charger is consuming to charge your electric vehicle. This is a combined value for all your phases. Additionally, three phase-specific sensors are available if your charging is using multiple phases:
- **Current Phase 1**\*\*: The current (in amperes) the charger is consuming on phase 1.
- **Current Phase 2**\*\*: The current (in amperes) the charger is consuming on phase 2.
- **Current Phase 3**\*\*: The current (in amperes) the charger is consuming on phase 3.
- **Lifetime energy**: The total energy (in kilowatt-hours) consumed by the charger since it was installed. **This is the recommended sensor to use in the Home Assistant energy dashboard.**
- **Limit source**: The source/origin of the current charging limit that is in effect. The source can be one of the following:
- _Charging cable_ ({% term state %}: `charging_cable`): The current limit is the maximum current the charging cable can handle.
- _Current limiter_ ({% term state %}: `current_limiter`): The current limit is set by the current limiter.
- _Dynamic load balancing_ ({% term state %}: `dynamic_load_balancing`): The current limit is set by the dynamic load balancing feature.
- _External power limit_ ({% term state %}: `external_power_limit`): The current limit is set by an external power limiter.
- _Group load balancing_ ({% term state %}: `group_load_balancing`): The current limit is set by the group load balancing feature, which is a feature that allows multiple chargers to share the available power.
- _Hardware limitation_ ({% term state %}: `hardware_limitation`): The current limit is limited by the hardware of the charger that can't provide more current.
- _High temperature_ ({% term state %}: `high_temperature`): The current limit is limited due to high temperatures.
- _Household power limit_ ({% term state %}: `household_power_limit`): The current limit is set by the household power limit feature, which is a feature that allows the charger to limit the current to prevent overloading the household power.
- _Installer limitation_ ({% term state %}: `installer_limitation`): The current limit is set by the installer, for example, to prevent overloading the fuse of the house.
- _Local Modbus API_ ({% term state %}: `local_modbus_api`): The current limit is set by software using the local Modbus API.
- _Local REST API_ ({% term state %}: `local_rest_api`): The current limit is set by software using the local REST API. Home Assistant uses this API to set the current limit, so if you see this state, it means the current limit is likely set through Home Assistant.
- _OCPP smart charging_ ({% term state %}: `ocpp_smart_charging`): The current limit is set by the OCPP smart charging feature.
- _Overcurrent protection_ ({% term state %}: `overcurrent_protection`): The current limit is limited due to overcurrent protection.
- _Phase imbalance_ ({% term state %}: `phase_imbalance`): The current limit is limited due to phase imbalance in the electrical installation.
- _Power factor_ ({% term state %}: `power_factor`): The current limit is limited due to a low power factor in the electrical installation.
- _Solar charging_ ({% term state %}: `solar_charging`): The current limit is set by the solar charging feature of the charger. This means the charger is awaiting an overproduction of solar energy to start charging.
- **Power**: The power consumption (in Watts) the charger is using to charge
your electric vehicle. This is a combined value for all your phases.
Additionally, three additionally sensors are available, if your charging is
Additionally, three phase-specific sensors are available if your charging is
using multiple phases:
- **Power Phase 1**\*\*: The current power (in Watts) the charger is consuming
on phase 1.
- **Power Phase 2**\*\*: The current power (in Watts) the charger is consuming
on phase 2.
- **Power Phase 3**\*\*: The current power (in Watts) the charger is consuming
on phase 3.
- **Session energy**: The total energy (in kilowatt-hours) consumed by the
charger during the current charging session. This sensor is reset when a
new charging session starts. While you could, it is **not** recommended to
use this sensor in the Home Assistant energy dashboard. Use the **Lifetime
energy** sensor instead.
- **State**: The current state of the charger. The state can be one of the
following:
- _Charging_ ({% term state %}: `charging`): The charger is currently charging the
electric vehicle.
- _Error_ ({% term state %}: `error`): The charger has detected an error and is
currently not charging the electric vehicle.
- _Fault_ ({% term state %}: `fault`): The charger has detected a fault and is
currently not charging the electric vehicle.
- _No EV connected_ ({% term state %}: `no_ev_connected`): The charger is currently not
connected to an electric vehicle.
- _Suspended_ ({% term state %}: `suspended`): The charger is currently not charging
the electric vehicle, but is ready to start charging when needed.
- **Power Phase 1**\*\*: The power consumption (in watts) on phase 1.
- **Power Phase 2**\*\*: The power consumption (in watts) on phase 2.
- **Power Phase 3**\*\*: The power consumption (in watts) on phase 3.
- **Session energy**: The total energy (in kilowatt-hours) consumed by the charger during the current charging session. This sensor resets when a new charging session starts. While possible, it is **not** recommended to use this sensor in the Home Assistant energy dashboard. Use the **Lifetime energy** sensor instead.
- **State**: The current state of the charger. The state can be one of the following:
- _Charging_ ({% term state %}: `charging`): The charger is currently charging the electric vehicle.
- _Error_ ({% term state %}: `error`): The charger has detected an error and is currently not charging the electric vehicle.
- _Fault_ ({% term state %}: `fault`): The charger has detected a fault and is currently not charging the electric vehicle.
- _No EV connected_ ({% term state %}: `no_ev_connected`): The charger is currently not connected to an electric vehicle.
- _Suspended_ ({% term state %}: `suspended`): The charger is currently not charging the electric vehicle, but is ready to start charging when needed.
- _Invalid_ ({% term state %}: `invalid`): The charger is in an invalid state.
- **Uptime**\*\*: The total time the charger has been running since the last
restart. This sensor is reset when the charger is restarted.
- **Voltage**: The current voltage (in volts) the charger is using to charge.
Only available if your charger is connected to a single-phase power source.
- **Voltage Phase 1**\*\*: The current voltage (in volts) on phase 1. Only
available if your charger is connected to at least a two-phase power source.
- **Voltage Phase 2**\*\*: The current voltage (in volts) on phase 2. Only
available if your charger is connected to at least a two-phase power source.
- **Voltage Phase 3**\*\*: The current voltage (in volts) on phase 3.
Only available if your charger is connected to a three-phase power source.
- **Uptime**\*\*: The total time the charger has been running since the last restart. This sensor is reset when the charger is restarted.
- **Voltage**: The voltage the charger is using to charge. Only available if your charger is connected to a single-phase power source.
- **Voltage Phase 1**\*\*: The voltage on phase 1. Only available if your charger is connected to at least a two-phase power source.
- **Voltage Phase 2**\*\*: The voltage on phase 2. Only available if your charger is connected to at least a two-phase power source.
- **Voltage Phase 3**\*\*: The voltage on phase 3. Only available if your charger is connected to a three-phase power source.
{% important %}
The sensors marked with \*\* are disabled by default. If you want to use them,
@ -264,52 +195,38 @@ documentation for information on how to do this.
This integration provides two switch entities:
- **Charge**: This switch allows you to start or stop/pause the charging of
your electric vehicle. This can be helpful if you want to temporarily stop
charging your electric vehicle, for example, to avoid charging during
expensive peak hours.
- **Force single phase**: This switch can be used to force the charger to use a
single phase for charging your electric vehicle. This can be useful if you
want to limit your current draw from the charger to a single phase, for
example, to prevent overloading your electrical installation.
- **Charge**: This switch allows you to start or stop/pause the charging of your electric vehicle. This can be helpful if you want to temporarily stop charging your electric vehicle, for example, to avoid charging during expensive peak hours.
- **Force single phase**: This switch can be used to force the charger to use a single phase for charging your electric vehicle. This can be useful if you want to limit your current draw from the charger to a single phase, for example, to prevent overloading your electrical installation.
{% note %}
The **Force single phase** switch is only available if your charger is
connected to multiple phases. If your charger is connected to a single-phase
power source, this switch will not be created.
The **Force single phase** switch is only available if your charger is connected to multiple phases. If your charger is connected to a single-phase power source, this switch will not be created.
{% endnote %}
### Updates
The Peblar integration provides two update entities for the Pebler charger:
The Peblar integration provides two update entities for the Peblar charger:
- **Firmware**: Indicates if there is a firmware update available for the
charger. The firmware can be thought of as the operating system of the charger.
- **Customization**: Indicates if there is a customization update available for
the charger. The customization can be thought as the user interface of the
charger that you see when you log in to the charger's local web interface.
- **Firmware**: Indicates if there is a firmware update available for the charger. The firmware can be thought of as the operating system of the charger.
- **Customization**: Indicates if there is a customization update available for the charger. The customization can be thought of as the user interface of the charger that you see when you log in to the charger's local web interface.
Software updates cannot be installed through Home Assistant. You need to log in
to the charger's local web interface to install the updates.
Software updates cannot be installed through Home Assistant. You need to log in to the charger's local web interface to install the updates.
## Data updates
This integration is a local polling integration, meaning it will check for
changes to all the entities by frequently polling the Peblar charger on your
home network.
This integration uses local {% term polling %}, meaning it checks for changes to all entities by regularly communicating with the Peblar charger on your home network.
There are three different polling frequencies used by this integration:
The integration uses three different polling frequencies:
- **every 10 seconds**: For all sensors and binary sensors, ensuring you
have the latest insights into your electric vehicle's charging status.
- **every 5 minutes**: It will check for configuration changes to the charger,
this affects all configuration entities, like the smart charging mode and
the current limit.
- **every 2 hours**: It will check for updates to the charger itself, ensuring
you are aware of any updates available for your Peblar charger.
- **Every 10 seconds**: Updates all sensors and binary sensors, providing you
with the latest insights into your electric vehicle's charging status.
- **Every 5 minutes**: Checks for configuration changes to the charger,
affecting all configuration entities such as smart charging mode and
current limit.
- **Every 2 hours**: Checks for updates to the charger itself, ensuring
you're aware of any available updates for your Peblar charger.
While this integration uses local polling, configuration changes made to the
Peblar charger from Home Assistant will be reflected in the charger almost
Although this integration uses local polling, any configuration changes you make to the
Peblar charger from Home Assistant will appear on the charger almost
instantly.
## Actions
@ -323,12 +240,11 @@ The following examples show how to use the Peblar integration in Home
Assistant automations. These examples are just a starting point, and you can
use them as inspiration to create your own automations.
Feel free to contribute more examples to this documentation ❤️.
Feel free to contribute more examples to this documentation ❤️. Have you created a useful automation with your Peblar charger? Consider contributing it to help other users get the most from their integration!
### Notify when there is an software update available
### Notify when a software update is available
The following example sends a notification to your mobile device when there is
a software update available for your Peblar charger.
The following example sends a notification to your mobile device when a software update becomes available for your Peblar charger.
```yaml
automation:
@ -345,8 +261,8 @@ automation:
title: "Peblar charger update available!"
message: >
There is a software update available for your Peblar charger.
Please log in to the charger's local web interface to install the
update.
Please log in to the charger's local web interface to install
the update.
```
### Notify when an issue is detected
@ -375,30 +291,25 @@ automation:
data:
title: "Peblar charger issue detected!"
message: >
An issue with your Peblar charger has been detected. Please check
the charger's local web interface for more information.
An issue with your Peblar charger has been detected.
Please check the charger's local web interface for more information.
```
## Known limitations
Not all functionality of the Peblar charger is available through this
integration. The following limitations are known:
Not all functionality of the Peblar charger is available through this integration. The following limitations are known:
- The Peblar APIs currently aren't communicating that the charger is awaiting
authentication (for example, using an RFID card) before it can start
charging. As a result, you will see a suspended charging status in Home
Assistant, while the charger is awaiting authentication.
- Home Assistant uses and manages the charger's REST API. This means that
the use of this integration will enable the REST API on the charger
automatically. It is possible to use the REST API directly in parallel
with this integration.
- Peblar is also sold as white-label products, like the [CoolBlue BlueBuilt](https://www.coolblue.nl/en/charging-stations/our-charging-stations), [Eneco Connectric®](https://www.eneco.nl/campagnes/laadpalen/) or [Shell Recharge](https://www.shell.nl/b2b-business/shell-fleet-solutions/electric-charging/at-home-ev-charging.html#thuisladers).
This integration is tested with the Peblar branded products, and it is unknown
if it works with white-label products.
- The Peblar APIs currently don't communicate when the charger is awaiting authentication (for example, using an RFID card) before it can start charging. As a result, you will see a suspended charging status in Home Assistant when the charger is actually awaiting authentication.
- Home Assistant uses and manages the charger's REST API. This means that the use of this integration will enable the REST API on the charger automatically. It is possible to use the REST API directly in parallel with this integration.
- Peblar is also sold as white-label products, such as [CoolBlue BlueBuilt](https://www.coolblue.nl/en/charging-stations/our-charging-stations), [Eneco Connectric®](https://www.eneco.nl/campagnes/laadpalen/) and [Shell Recharge](https://www.shell.nl/b2b-business/shell-fleet-solutions/electric-charging/at-home-ev-charging.html#thuisladers). This integration has been tested only with Peblar branded products, and it's unknown whether it works with these white-label versions.
## Troubleshooting
There are no commonly known issues with this integration.
If you're experiencing issues with your Peblar charger integration, try these general troubleshooting steps:
1. Make sure your Peblar charger is powered on and properly connected to your home network.
2. Verify that you can access the charger's local web interface directly using the same hostname or IP address configured in Home Assistant.
3. If the integration shows as unavailable, try restarting both your Peblar charger and Home Assistant.
## Removing the integration

View File

@ -19,16 +19,92 @@ ha_platforms:
ha_integration_type: service
---
[RDW](https://www.rdw.nl) is the Netherlands Vehicle Authority. Their tasks
are the licensing of vehicles and vehicle parts, supervision and enforcement,
registration, information provision, and issuing documents.
The **RDW** {% term integration %} connects with the [RDW](https://www.rdw.nl) (Netherlands Vehicle Authority) open data service to retrieve and monitor information about your Dutch registered vehicles in Home Assistant. RDW is the government organization responsible for vehicle registration, licensing, supervision, and enforcement in the Netherlands.
The RDW data is open data, available for public use. This integration looks
up any dutch registered vehicle by its license plate and keeps that
information in Home Assistant.
## Use case
This information, and the sensors provided, can be helpful, for example,
by sending alerts when it is time to get your car checked for the
required general periodic inspection (APK).
With this integration, you can keep track of important vehicle information like periodic inspection (<abbr title="Algemene Periodieke Keuring">APK</abbr>) expiration dates, insurance status, and recall notifications directly in your Home Assistant dashboard. This saves you from having to manually check the RDW website or wait for paper notifications in the mail. You can set up automations to receive timely reminders when your vehicle needs attention.
## Prerequisites
To use this integration, you need:
1. A vehicle with Dutch registration (license plate)
2. The license plate number of the vehicle you want to monitor
{% include integrations/config_flow.md %}
{% configuration_basic %}
License plate:
description: "The Dutch license plate number of your vehicle. Enter without spaces or dashes (for example, AB123C instead of AB-123-C)."
{% endconfiguration_basic %}
## Supported functionality
### Entities
The **RDW** integration provides the following entities for your vehicle:
#### Binary sensors
- **Liability insured**: Shows whether your vehicle has current liability insurance.
- **Pending recall**: Indicates if your vehicle has an open recall notice that requires attention.
#### Sensors
- **APK expiration**: The date when your vehicle's periodic technical inspection (APK) expires.
- **Ascription date**: The date when your vehicle was registered to its current owner.
## Examples
### Creating a vehicle recall alert automation
This automation sends you an important notification when the RDW reports a safety recall for your vehicle:
```yaml
# Automation to alert you about safety recalls for your vehicle
automation:
- alias: "Vehicle recall alert"
trigger:
- platform: state
entity_id: binary_sensor.rdw_ab123c_pending_recall
to: "on"
action:
- service: notify.mobile_app
data:
title: "Vehicle recall alert"
message: "Your vehicle has a pending safety recall. Please contact your dealer."
```
## Data updates
The **RDW** integration {% term polling polls %} data from the RDW open database once an hour. This update frequency is appropriate for vehicle-related information since this data typically doesn't change frequently.
## Known limitations
- This integration only works with Dutch vehicle license plates.
## Troubleshooting
### Vehicle information not found
#### Symptom: "Unknown license plate"
When trying to set up the integration, the form shows the message "Unknown license plate."
##### Description
This happens when the license plate is valid but RDW doesn't have information about this vehicle in its database.
##### Resolution
1. Double-check that you've entered the correct license plate number.
2. Make sure the vehicle is registered in the Netherlands.
3. Very new registrations might take some time to appear in the open data.
4. Check the [RDW website](https://www.rdw.nl) to see if it shows up there.
## Removing the integration
This integration follows standard integration removal. No additional steps are required.
{% include integrations/remove_device_service.md %}

View File

@ -62,7 +62,11 @@ There are four generations of devices and all generations are supported by this
Shelly BLU series devices (e.g. Shelly BLU H&T) are not supported; please use BTHome integration to configure such devices with Home Assistant. The exception to this is Shelly BLU TRV, which is supported by this integration via Shelly BLU Gateway Gen3.
## Shelly device configuration (generation 1)
## Data updates
Shelly devices push updates to Home Assistant upon changes for all main functions of the device. For push updates to work correctly, some devices need additional configuration:
### Shelly device configuration (generation 1)
Generation 1 devices use the `CoIoT` protocol to communicate with the integration. `CoIoT` must be enabled in the device settings. Navigate to the local IP address of your Shelly device, **Internet & Security** > **ADVANCED - DEVELOPER SETTINGS** and check the box **Enable CoIoT**.
@ -79,7 +83,7 @@ The list below will help you diagnose and fix the problem:
- The missing push updates may be related to the WiFi network range. If using a WiFi network with several access points, enable **Internet & Security** >> **WiFi Client AP Roaming** option. Consider moving Shelly device closer to the WiFi access point. Consider adding another WiFi access point, which will improve the connection quality with the device.
- If you think your Shelly devices are working correctly and don't want to change your network/configuration, you can ignore the repair issue. Still, you must know you are giving up the best experience of using first-generation Shelly devices with Home Assistant.
## Shelly device configuration (generation 2+)
### Shelly device configuration (generation 2+)
Generation 2+ devices use the `RPC` protocol to communicate with the integration. **Battery-operated devices** (even if USB connected) may need manual outbound WebSocket configuration if Home Assistant cannot correctly determine your instance's internal URL or the outbound WebSocket was previously configured for a different Home Assistant instance. In this case, navigate to the local IP address of your Shelly device, **Settings** >> **Connectivity** >> **Outbound WebSocket** and check the box **Enable Outbound WebSocket**, under server enter the following address:
@ -90,6 +94,23 @@ In case your installation is set up to use SSL encryption (HTTP**S** with certif
Integration is communicating directly with the device; cloud connection is not needed.
{% endnote %}
### Shelly entities that poll data from the device (generation 1)
The following disabled by default entities {% term polling poll %} data from the device every 60 seconds:
- Cloud connected sensor
- RSSI sensor
- Uptime sensor
- Firmware update
### Shelly entities that poll data from the device (generation 2+)
The following disabled by default entities {% term polling poll %} data from the device every 60 seconds:
- Device temperature sensor
- RSSI sensor
- Uptime sensor
## Bluetooth Support
Shelly Gen 2 and newer devices (excluding battery-powered models) can act as Bluetooth proxies, forwarding advertisement data. You can enable either active or passive listening through the devices options flow.

View File

@ -191,6 +191,7 @@ Certain vehicles, including all vehicles manufactured since late 2023, require v
The integration expects your private key to be located at `config/tesla_fleet.key`.
Your public key must be added to each of your vehicles by visiting https://tesla.com/_ak/YOUR.DOMAIN and following the instructions in the Tesla app.
If you're using an iPhone, you may need to use Safari to open the webpage and finish the setup.
For more details see [Tesla Fleet API vehicle commands documentation](https://developer.tesla.com/docs/fleet-api/endpoints/vehicle-commands#key-pairing).

View File

@ -15,7 +15,7 @@ ha_zeroconf: true
related:
- docs: /yellow/
title: Home Assistant Yellow - hub
- docs: /skyconnect/
- docs: /connectzbt1/
title: Home Assistant Connect ZBT-1 - Zigbee/Thread USB stick
- docs: /integrations/matter/
title: Matter

View File

@ -19,70 +19,57 @@ ha_integration_type: service
ha_quality_scale: silver
---
The Twente Milieu {% term integration %} enables you to monitor the upcoming
waste collection schedules provided by
[Twente Milieu](https://www.twentemilieu.nl/) for various waste categories.
This integration helps you stay informed about the next pickup dates for
different types of waste, ensuring you never miss a collection day.
The **Twente Milieu** {% term integration %} enables you to monitor the upcoming waste collection schedules provided by [Twente Milieu](https://www.twentemilieu.nl/), a waste collection company serving municipalities in the Twente region of the Netherlands, including Enschede, Hengelo, Almelo, Borne, Hof van Twente, Oldenzaal, and Losser. This integration helps you stay informed about the next pickup dates for different types of waste (like organic, paper, plastic, and non-recyclable), ensuring you never miss a collection day.
{% include integrations/config_flow.md %}
### Configuration parameters
{% configuration_basic %}
Postal code:
description: The postal code of the address, for example "7500AA".
House number:
description: The house number of the address.
House letter/additional:
description: The house letter or additional information of the address.
description: The house letter or additional information of the address, if applicable.
{% endconfiguration_basic %}
## Use cases
The integration provides sensors for the next waste pickup dates. You can use
this information to create automations, for example, to remind you to put out
the waste bins the night before the pickup.
With the Twente Milieu integration, you can:
Besides the sensors, the integration also provides a calendar to Home Assistant.
Meaning you can view all upcoming waste pickups in the calendar dashboard.
- Monitor upcoming waste collection dates for different waste types
- Create automations to remind you to put out your waste bins before collection day
- View all your upcoming waste pickups in the calendar dashboard
- See at a glance when your next waste collection is due
## Supported functionality
### Calendar
The integration provides a calendar to Home Assistant. You can view
all upcoming waste pickups in the calender dashboard.
The integration provides a calendar entity that displays all upcoming waste collection dates from Twente Milieu. You can view this calendar in your {% my calendar title="Calendar dashboard" %}.
### Sensors
This integration provides sensors for the following waste pickup dates from
Twente Milieu:
This integration creates the following sensors for upcoming waste collection dates:
- Next plastic waste pickup date.
- Next organic waste pickup date.
- Next paper waste pickup date.
- Next non-recyclable waste pickup date.
- Next Christmas Tree pickup date.
- Next plastic waste pickup date
- Next organic waste pickup date
- Next paper waste pickup date
- Next non-recyclable waste pickup date
- Next Christmas tree pickup date (seasonal)
Each sensor provides the next scheduled date for its respective waste type, allowing you to track when to put out specific bins.
## Data updates
The integration will update its information by polling Twente Milieu every
hour. This ensures the data in Home Assistant is up to date.
## Actions
This integration does not provide additional actions.
The integration updates its information by {% term polling %} the Twente Milieu service every hour. This ensures your waste collection schedule in Home Assistant stays current.
## Examples
The following examples show how to use the Twente Milieu integration in Home
Assistant automations.
Below are practical examples of how you can use the Twente Milieu integration in your automations.
### Send notification the evening before the garbage pickup day
The following example sends a notification to your mobile device the evening
before the garbage pickup day. This ensures your bins are out on time.
This example sends a notification to your mobile device the evening before collection day, ensuring you remember to put out the correct bin.
```yaml
automation:
@ -92,42 +79,43 @@ automation:
event: start
entity_id: calendar.twente_milieu
offset: "-6:00:00"
# This triggers 6 hours before the calendar event starts
actions:
- action: notify.mobile_app_your_device
data:
title: "Garbage day!"
message: >
message: >
Reminder: Tomorrow is {{ trigger.calendar_event.summary }} pickup
day. Don't forget to put out the bin!
```
### Send notification at the end of day to haul in the empty bin again
### Send notification at the end of day to bring in the empty bin
The following example sends a notification to your mobile device at the end of
the day to remind you to haul in the empty bin again.
This example sends a notification to remind you to bring the empty bin back in after collection.
```yaml
automation:
- alias: "Reminder to haul in the bin"
- alias: "Reminder to bring in the bin"
triggers:
- trigger: calendar
event: end
event: end
entity_id: calendar.twente_milieu
offset: "-4:00:00"
# This triggers 4 hours before the calendar event ends
actions:
- action: notify.mobile_app_your_device
data:
title: "Haul in the bin!"
message: >
Reminder Garbage has been picked up today. Don't forget to haul in
the bin!
title: "Bring in the bin!"
message: >
Reminder: The waste has been collected today. Don't forget to
bring in your empty bin!
```
## Known limitations
There are no known limitations for this integration.
- Home Assistant currently doesn't support translating calendar items. Therefore, waste collection events in the calendar will always be displayed in English, regardless of your language settings.
## Troubleshooting
@ -135,7 +123,6 @@ There are no commonly known issues with this integration.
## Removing the integration
This integration follows standard integration removal. No extra steps are
required.
This integration follows standard integration removal. No additional steps are required.
{% include integrations/remove_device_service.md %}

View File

@ -14,7 +14,7 @@ og_image: /images/blog/2022-07-12-partner-program/partner_program_og.jpg
---
{% note %}
**This blog is outdated.** For the latest information on the partner program, please visit our [Works with Home Assistant webpage](https://partner.home-assistant.io/).
**This blog is outdated.** For the latest information on the partner program, please visit our [Works with Home Assistant webpage](https://works-with.home-assistant.io/).
{% endnote %}
With Home Assistant, we integrate with over 1000 different APIs. The majority of these integrations are created and maintained by the Home Assistant community. Over the years a number of companies have stepped up to work with our community offering samples and engineering support. In a few cases, we saw companies pick up the maintenance of integrating their products in Home Assistant.

View File

@ -103,12 +103,12 @@ own dashboards, many simply want something that works for their household.
<img class="no-shadow" alt="Screenshot viewing an area of the new experimental Areas dashboard" src="/images/blog/2025-04/areas-dashboard-detail.png" />
The new experimental Areas Dashboard automatically generates a ready-to-use
dashboard based on the areas youve set up in your home. It uses sections and
tile cards for a modern, clean, and intuitive look—instantly. No more starting
The new experimental [Areas dashboard](/dashboards/dashboards/#areas-dashboard) automatically generates a ready-to-use
dashboard based on the areas youve set up in your home. It uses [sections](/dashboards/sections/) and
[tile cards](/dashboards/tile/) for a modern, clean, and intuitive look—instantly. No more starting
from a blank slate!
Each area now has its own dedicated page, giving you a clear and organized view
Each [area](/docs/organizing/areas/) now has its own dedicated page, giving you a clear and organized view
of the devices in that space. Entities, such as lights, covers, cameras,
and more, are automatically grouped by domain so you can easily locate the ones
you need.
@ -125,20 +125,20 @@ based on your preferences.
<img class="no-shadow" alt="Screenshot showing the overview page of the new Areas dashboard" src="/images/blog/2025-04/areas-dashboard-overview.png" />
If you havent organized your devices into areas yet, nows the perfect time to
If you havent [organized your devices into areas](/docs/organizing/areas/) yet, nows the perfect time to
start—its key to unlocking this new dashboard experience. To get
started with the Areas dashboard, go to
started with the [Areas dashboard](/dashboards/dashboards/#areas-dashboard), go to
**{% my lovelace_dashboards title="Settings > Dashboards" %}**, and select
**Add Dashboard** in the bottom right, next select the **Areas (experimental)**
option from the dialog:
<img class="no-shadow" alt="Screenshot of the dialog when adding a new dashboard, showing the new option to add the new experimental Area dashboard" src="/images/blog/2025-04/areas-experimental-dialog.png" />
The new experimental Areas Dashboard previews whats to come. Weve learned from
The new experimental [Areas dashboard](/dashboards/dashboards/#areas-dashboard) previews whats to come. Weve learned from
our users that they organize their homes in different ways—by rooms,
by function, by device, and more. They often combine all of the above,
and therefore, our upcoming default dashboard will accommodate
all these methods of organization.
all these methods of [organization](/docs/organizing/).
Over time, this foundation will grow into a flexible system that adapts to
your priorities, whether thats keeping an eye on security, managing energy use,
@ -158,7 +158,7 @@ dashboard built for your home, try it!
It has been a while since we introduced a new card, but this release, we
thought it might be _**time**_ to add a new one! Thanks to [@mrdarrengriffin],
Home Assistant now features a Clock card!
Home Assistant now features a [Clock card](/dashboards/clock/)!
<img class="no-shadow" alt="Screenshot showing a dashboard with a large clock card on it, indicating the current time" src="/images/blog/2025-04/card-clock.png" />

View File

@ -23,26 +23,20 @@ I'm sure you're all wondering, "*Missy, what is a Community Day?*". In its simpl
### Locations and registering to attend
We already have **13 events** hosted by several of us who work on Home Assistant 😎! To coordinate these, we are using Luma, a site focused on tech meetups. All the current events can be found on our [Home Assistant Community Day](https://lu.ma/haday2025) calendar, including:
To coordinate all these meetups, we are using Luma, a site focused on tech meetups. All the current events can be found below or on our [Home Assistant Community Day](https://lu.ma/haday2025) calendar.
**Europe**
- [Aveiro, Portugal](https://lu.ma/p9eo4v3t)
- [Bordeaux, France](https://lu.ma/shxhyi6u)
- [London, United Kingdom](https://lu.ma/fa5ez3t7)
- [Madrid, Spain](https://lu.ma/o6pqbjv8)
- [Porto, Portugal](https://lu.ma/uozbfr6n)
- [Prague, Czech Republic](https://lu.ma/dhudha0z)
- [Utrecht, Netherlands](https://lu.ma/e2wyv8k0)
- [Vienna, Austria](https://lu.ma/2vjs7dab)
<iframe
data-src="https://lu.ma/embed/calendar/cal-QXZXEJrvB3UaI63/events?lt=light"
width="100%"
height="600"
frameborder="0"
style="border: 1px solid #bfcbda88; border-radius: 4px;"
allowfullscreen=""
aria-hidden="false"
tabindex="0"
></iframe>
**North America**
- [Brooklyn, New York](https://lu.ma/efkt35on)
- [Charlotte, North Carolina](https://lu.ma/3kbb2dte)
- [Houston, Texas](https://lu.ma/g5o66to2)
- [Redmond, Washington](https://lu.ma/qb0hhhkm)
- [Twin Cities, Minnesota](https://lu.ma/ljwdnjmc)
All Community Day events are free, so **[register before spaces run out!](https://lu.ma/haday2025)** (No worries, there are waitlists!)
All Community Day events are free, so **[register before spaces run out!](https://lu.ma/haday2025)** (No worries, there are waitlists!). We also have people who work full-time on Home Assistant attending these events. To find out who you can meet, head over to Luma 😎!
### Host your own

View File

@ -25,9 +25,9 @@ The following screenshot shows a fully populated dashboard in [sections view](/d
A fully populated dashboard in Sections view layout
</p>
### Multiple dashboards
### Different dashboard types
In the sidebar on the left, you see the names of different dashboards. Home Assistant comes with [multiple dashboards](/dashboards/dashboards/) out of the box.
In the sidebar on the left, you see the names of different dashboards. Home Assistant comes with [different dashboard types](/dashboards/dashboards/) out of the box.
- Overview
- Energy
@ -138,7 +138,7 @@ In the following steps, we will create a new dashboard and edit some card settin
If you want to learn more about dashboards, views, and cards, take a look at these topics:
1. Take a look at the [introduction to dashboards](/dashboards/) and learn about [multiple dashboards](/dashboards/dashboards).
1. Take a look at the [introduction to dashboards](/dashboards/) and learn about [dashboard types](/dashboards/dashboards).
2. Learn more about [view types](/dashboards/views/)
3. Learn how to [add cards](/dashboards/cards/#adding-cards-to-your-dashboard) to a view.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB