diff --git a/.github/workflows/add_prs_to_project.yml b/.github/workflows/add_prs_to_project.yml
index b5b49f24413e..8b819a2670b2 100644
--- a/.github/workflows/add_prs_to_project.yml
+++ b/.github/workflows/add_prs_to_project.yml
@@ -18,7 +18,7 @@ jobs:
app_id: ${{ secrets.PROJECTS_APP_ID }}
private_key: ${{ secrets.PROJECTS_APP_PEM }}
- name: Add to Project
- uses: actions/add-to-project@v0.6.0
+ uses: actions/add-to-project@v0.6.1
with:
project-url: https://github.com/orgs/home-assistant/projects/10
github-token: ${{ steps.token.outputs.token }}
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index e677d37f2f88..c95522c53201 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -8,7 +8,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out files from GitHub
- uses: actions/checkout@v4.1.1
+ uses: actions/checkout@v4.1.2
- name: Setting up Node.js
uses: actions/setup-node@v4.0.2
with:
@@ -25,7 +25,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out files from GitHub
- uses: actions/checkout@v4.1.1
+ uses: actions/checkout@v4.1.2
- name: Setting up Node.js
uses: actions/setup-node@v4.0.2
with:
diff --git a/Gemfile b/Gemfile
index b869d50e8647..b93880fc1e46 100644
--- a/Gemfile
+++ b/Gemfile
@@ -10,8 +10,8 @@ group :development do
gem 'stringex', '2.8.6'
# > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189
gem 'sassc', '2.1.0'
- gem 'rubocop', '1.62.0'
- gem 'ruby-lsp', '0.14.5'
+ gem 'rubocop', '1.62.1'
+ gem 'ruby-lsp', '0.14.6'
gem 'rackup', '2.1.0'
end
@@ -23,7 +23,7 @@ group :jekyll_plugins do
end
gem 'sinatra', '4.0.0'
-gem 'nokogiri', '1.16.2'
+gem 'nokogiri', '1.16.3'
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
# and associated library
diff --git a/Gemfile.lock b/Gemfile.lock
index bb5ec4b23141..dab70b00c15f 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -27,7 +27,8 @@ GEM
eventmachine (1.2.7)
ffi (1.16.3)
forwardable-extended (2.6.0)
- google-protobuf (3.25.3-x86_64-linux)
+ google-protobuf (4.26.0-x86_64-linux)
+ rake (>= 13)
http_parser.rb (0.8.0)
i18n (1.14.4)
concurrent-ruby (~> 1.0)
@@ -73,7 +74,7 @@ GEM
multi_json (1.15.0)
mustermann (3.0.0)
ruby2_keywords (~> 0.0.1)
- nokogiri (1.16.2-x86_64-linux)
+ nokogiri (1.16.3-x86_64-linux)
racc (~> 1.4)
parallel (1.24.0)
parser (3.3.0.5)
@@ -84,7 +85,7 @@ GEM
prism (0.24.0)
public_suffix (5.0.4)
racc (1.7.3)
- rack (3.0.9.1)
+ rack (3.0.10)
rack-protection (4.0.0)
base64 (>= 0.1.0)
rack (>= 3.0.0, < 4)
@@ -100,8 +101,8 @@ GEM
ffi (~> 1.0)
regexp_parser (2.9.0)
rexml (3.2.6)
- rouge (4.2.0)
- rubocop (1.62.0)
+ rouge (4.2.1)
+ rubocop (1.62.1)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
@@ -114,7 +115,7 @@ GEM
unicode-display_width (>= 2.4.0, < 3.0)
rubocop-ast (1.31.2)
parser (>= 3.3.0.4)
- ruby-lsp (0.14.5)
+ ruby-lsp (0.14.6)
language_server-protocol (~> 3.17.0)
prism (>= 0.22.0, < 0.25)
sorbet-runtime (>= 0.5.10782)
@@ -122,8 +123,8 @@ GEM
ruby2_keywords (0.0.5)
safe_yaml (1.0.5)
sass (3.4.25)
- sass-embedded (1.71.1-x86_64-linux-gnu)
- google-protobuf (~> 3.25)
+ sass-embedded (1.72.0-x86_64-linux-gnu)
+ google-protobuf (>= 3.25, < 5.0)
sass-globbing (1.1.5)
sass (>= 3.1)
sassc (2.1.0-x86_64-linux)
@@ -134,7 +135,7 @@ GEM
rack-protection (= 4.0.0)
rack-session (>= 2.0.0, < 3)
tilt (~> 2.0)
- sorbet-runtime (0.5.11287)
+ sorbet-runtime (0.5.11305)
stringex (2.8.6)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
@@ -156,11 +157,11 @@ DEPENDENCIES
jekyll-paginate (= 1.1.0)
jekyll-sitemap (= 1.4.0)
jekyll-toc (= 0.18.0)
- nokogiri (= 1.16.2)
+ nokogiri (= 1.16.3)
rackup (= 2.1.0)
rake (= 13.1.0)
- rubocop (= 1.62.0)
- ruby-lsp (= 0.14.5)
+ rubocop (= 1.62.1)
+ ruby-lsp (= 0.14.6)
sass-globbing (= 1.1.5)
sassc (= 2.1.0)
sinatra (= 4.0.0)
diff --git a/_config.yml b/_config.yml
index 9c0ada1e7184..8279d13f2ed4 100644
--- a/_config.yml
+++ b/_config.yml
@@ -110,8 +110,8 @@ social:
# Home Assistant release details
current_major_version: 2024
current_minor_version: 3
-current_patch_version: 0
-date_released: 2024-03-06
+current_patch_version: 3
+date_released: 2024-03-22
# Either # or the anchor link to latest release notes in the blog post.
# Must be prefixed with a # and have double quotes around it.
diff --git a/package-lock.json b/package-lock.json
index 23b61048fe8f..47bf50b257fb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,7 +20,7 @@
"remark-lint-prohibited-strings": "^4.0.0",
"remark-lint-unordered-list-marker-style": "^3.1.2",
"remark-stringify": "^11.0.0",
- "textlint": "^14.0.3",
+ "textlint": "^14.0.4",
"textlint-filter-rule-comments": "^1.2.2",
"textlint-rule-common-misspellings": "^1.0.1",
"textlint-rule-terminology": "^4.0.1"
@@ -416,68 +416,68 @@
"dev": true
},
"node_modules/@textlint/ast-tester": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.0.3.tgz",
- "integrity": "sha512-TNArbA0a/9nxJadZDsnfV6I4kB6C+Vb6BmFbDxBglS/NWtFqI9SYPV2tRhGBnTHFyTl5bgyzrAyb2FNSxbrSuQ==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.0.4.tgz",
+ "integrity": "sha512-SQ/2DjxVlDVeCEjVlD8c8R2Sl3VGDZEx8o9+i8bV8NUdY8qsSHbo29/BfiUZf/uaX6eeNpZsurtstJ25hbVrsQ==",
"dev": true,
"dependencies": {
- "@textlint/ast-node-types": "^14.0.3",
+ "@textlint/ast-node-types": "^14.0.4",
"debug": "^4.3.4"
}
},
"node_modules/@textlint/ast-tester/node_modules/@textlint/ast-node-types": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.3.tgz",
- "integrity": "sha512-umIMn3yy2arl9QHH2fEhCxVgbLbQFC8NpzYbAzOQ4Y5m+p0RQaKClHtHXnDqsXHp6WKAVAXxcuFolW2SZMnhDQ==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.4.tgz",
+ "integrity": "sha512-O7L1pgle030Co9ou1+6e2/6GgcIpKgqwEc0XiBabokc22Yl0QEkrf00K/usBDmSx+wo1ficWBux2mfBEF0jnDA==",
"dev": true
},
"node_modules/@textlint/ast-traverse": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.0.3.tgz",
- "integrity": "sha512-rZ0PwLWuLlAOkDp/9wGsHa1jZMjNdJ3CpZMPTNnqEppaxb3o4OKFbjt2Hh87E215B84Cz8KaeKFT/QEn+YiRjA==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.0.4.tgz",
+ "integrity": "sha512-bzFC7UJ2FvhjH5ekXGQ0i9vjK+xzMT69gHBsYVEl+TtbplnH2YY3+sbw6B1j3LocJuo6xngZ2YWXXqmQlKgzLg==",
"dev": true,
"dependencies": {
- "@textlint/ast-node-types": "^14.0.3"
+ "@textlint/ast-node-types": "^14.0.4"
}
},
"node_modules/@textlint/ast-traverse/node_modules/@textlint/ast-node-types": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.3.tgz",
- "integrity": "sha512-umIMn3yy2arl9QHH2fEhCxVgbLbQFC8NpzYbAzOQ4Y5m+p0RQaKClHtHXnDqsXHp6WKAVAXxcuFolW2SZMnhDQ==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.4.tgz",
+ "integrity": "sha512-O7L1pgle030Co9ou1+6e2/6GgcIpKgqwEc0XiBabokc22Yl0QEkrf00K/usBDmSx+wo1ficWBux2mfBEF0jnDA==",
"dev": true
},
"node_modules/@textlint/config-loader": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.0.3.tgz",
- "integrity": "sha512-uUDVKEkIcq7VDljM6RWIpz76TvHQfOjXh+CFgZ/oVScSsPuvqR3TeBRLm8tgyho4MKmdTtHrhmuZj5DQrTOxig==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.0.4.tgz",
+ "integrity": "sha512-qgAvZ1RcTq58+yNbzhaKHsb52yHRxt8SRpG7S4WFjYj2DEStjIxzssSQvlZtEBjSUQ7RZNJ93d+pL0YK8MIVoA==",
"dev": true,
"dependencies": {
- "@textlint/kernel": "^14.0.3",
- "@textlint/module-interop": "^14.0.3",
- "@textlint/types": "^14.0.3",
- "@textlint/utils": "^14.0.3",
+ "@textlint/kernel": "^14.0.4",
+ "@textlint/module-interop": "^14.0.4",
+ "@textlint/types": "^14.0.4",
+ "@textlint/utils": "^14.0.4",
"debug": "^4.3.4",
"rc-config-loader": "^4.1.3",
"try-resolve": "^1.0.1"
}
},
"node_modules/@textlint/feature-flag": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.0.3.tgz",
- "integrity": "sha512-qDQr8qA3glb6WF0cgmhG2OST5zTY5ft6OJ/J6smDoKse/1cnPlFwbvDLvrlxwnmWDyujvqb3p9Kw7GDToTIxYg==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.0.4.tgz",
+ "integrity": "sha512-1FMZqnjOA4KVpt/aloI1fNs46P0rUeHWcCRKl33/08wRHHMdcbaN4EsHkq7UfriuSfFgUuiyeo0bPjCpv15hhQ==",
"dev": true
},
"node_modules/@textlint/fixer-formatter": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.0.3.tgz",
- "integrity": "sha512-Uk8CYLRye7KglYa1y8kW1BikA7kJ6bn9xK6FX93iwcL5yz9vOUUHYz9IINcOdg1NYfST4KaDbnBNKGfeQqr52Q==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.0.4.tgz",
+ "integrity": "sha512-HkMxzGPo/pgA9UvddqJG6qm62ICNgil3AmBVp0QpOv5uTV1u9gCSQ5jOdb/aOJBw7W8fd+CcnEsEBYn9HT8e6A==",
"dev": true,
"dependencies": {
- "@textlint/module-interop": "^14.0.3",
- "@textlint/types": "^14.0.3",
+ "@textlint/module-interop": "^14.0.4",
+ "@textlint/types": "^14.0.4",
"chalk": "^4.1.2",
"debug": "^4.3.4",
- "diff": "^5.1.0",
+ "diff": "^5.2.0",
"string-width": "^4.2.3",
"strip-ansi": "^6.0.1",
"text-table": "^0.2.0",
@@ -485,39 +485,39 @@
}
},
"node_modules/@textlint/kernel": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.0.3.tgz",
- "integrity": "sha512-RRyY7oL6CD5JwD3cgl8KvSd80rbnJKSUXTsn2ZAtLAjqJR+io0tVZLkQwij7diXaMjCnoJQfmnbIJf8C29/G5Q==",
- "dev": true,
- "dependencies": {
- "@textlint/ast-node-types": "^14.0.3",
- "@textlint/ast-tester": "^14.0.3",
- "@textlint/ast-traverse": "^14.0.3",
- "@textlint/feature-flag": "^14.0.3",
- "@textlint/source-code-fixer": "^14.0.3",
- "@textlint/types": "^14.0.3",
- "@textlint/utils": "^14.0.3",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.0.4.tgz",
+ "integrity": "sha512-6WNoEBZ4lYTYOGK4EEEdjp+kgxSSC1nIFwN6tY9XGVkd4OACzDNothVTvJBwaX73FWFG5zoSjnNQxBDPUHMc8g==",
+ "dev": true,
+ "dependencies": {
+ "@textlint/ast-node-types": "^14.0.4",
+ "@textlint/ast-tester": "^14.0.4",
+ "@textlint/ast-traverse": "^14.0.4",
+ "@textlint/feature-flag": "^14.0.4",
+ "@textlint/source-code-fixer": "^14.0.4",
+ "@textlint/types": "^14.0.4",
+ "@textlint/utils": "^14.0.4",
"debug": "^4.3.4",
"fast-equals": "^4.0.3",
"structured-source": "^4.0.0"
}
},
"node_modules/@textlint/kernel/node_modules/@textlint/ast-node-types": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.3.tgz",
- "integrity": "sha512-umIMn3yy2arl9QHH2fEhCxVgbLbQFC8NpzYbAzOQ4Y5m+p0RQaKClHtHXnDqsXHp6WKAVAXxcuFolW2SZMnhDQ==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.4.tgz",
+ "integrity": "sha512-O7L1pgle030Co9ou1+6e2/6GgcIpKgqwEc0XiBabokc22Yl0QEkrf00K/usBDmSx+wo1ficWBux2mfBEF0jnDA==",
"dev": true
},
"node_modules/@textlint/linter-formatter": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.0.3.tgz",
- "integrity": "sha512-CSwrE7LH/0KeQPP6/Nar5sakI+c1ToaYc14MwjWKCljK9RqkZCBFZqEWdy7LhXeIL5Pwf2BhsdGOImx14NpyHw==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.0.4.tgz",
+ "integrity": "sha512-EQZJPydExEIvBARkdmkoGsKWie1ekNAiqerQgIqwPb3SqOzKnlaDGrZOMy40HufTcacZrrvlbByDyai6m30+Lw==",
"dev": true,
"dependencies": {
"@azu/format-text": "^1.0.2",
"@azu/style-format": "^1.0.1",
- "@textlint/module-interop": "^14.0.3",
- "@textlint/types": "^14.0.3",
+ "@textlint/module-interop": "^14.0.4",
+ "@textlint/types": "^14.0.4",
"chalk": "^4.1.2",
"debug": "^4.3.4",
"js-yaml": "^3.14.1",
@@ -531,12 +531,12 @@
}
},
"node_modules/@textlint/markdown-to-ast": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.0.3.tgz",
- "integrity": "sha512-+CkWt9a9pd1+Rl37dqiiEGQ2f2faLX/vd7qiV+OTfkKUyHQ0HkOLK7sfbPpTx5ee5+5fKVMTStTTHrFZz5mlBw==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.0.4.tgz",
+ "integrity": "sha512-D9UUxnRJoNROVjOa9bhoQPDdRvlvS/xP3MJo0Kl6b/mJFi0dOlW31WUfpOFjZkp4uXkL+oo0ji7AMnmV6JORsQ==",
"dev": true,
"dependencies": {
- "@textlint/ast-node-types": "^14.0.3",
+ "@textlint/ast-node-types": "^14.0.4",
"debug": "^4.3.4",
"mdast-util-gfm-autolink-literal": "^0.1.3",
"remark-footnotes": "^3.0.0",
@@ -548,9 +548,9 @@
}
},
"node_modules/@textlint/markdown-to-ast/node_modules/@textlint/ast-node-types": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.3.tgz",
- "integrity": "sha512-umIMn3yy2arl9QHH2fEhCxVgbLbQFC8NpzYbAzOQ4Y5m+p0RQaKClHtHXnDqsXHp6WKAVAXxcuFolW2SZMnhDQ==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.4.tgz",
+ "integrity": "sha512-O7L1pgle030Co9ou1+6e2/6GgcIpKgqwEc0XiBabokc22Yl0QEkrf00K/usBDmSx+wo1ficWBux2mfBEF0jnDA==",
"dev": true
},
"node_modules/@textlint/markdown-to-ast/node_modules/bail": {
@@ -780,73 +780,73 @@
}
},
"node_modules/@textlint/module-interop": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.0.3.tgz",
- "integrity": "sha512-76K6y4wNCZH3+BGziJm6iGPbKsBtb214332EgdXDMNsYah51LPT9YrXuOI1ROyxvfVoztJMH0MDZdtdY/t7cig==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.0.4.tgz",
+ "integrity": "sha512-okv52pRSQ1aeC8rim8qp2D2Fmj/oKDYGY2itdeZhj9E/vdkU9/r7OpdcxyuNiuqLEd/sWw03EAwt3S6mlfNIOw==",
"dev": true
},
"node_modules/@textlint/source-code-fixer": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.0.3.tgz",
- "integrity": "sha512-/htnQzs+8qMIiZWQEpFF4+PgxDhi6flP+qIdoL8l5Q/jbIIZbGgOz9pdEFwnwOur/ddqFfuOKy5GtwZDoF+gOg==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.0.4.tgz",
+ "integrity": "sha512-gIUeWjF0WdSwgCUhW310hKJsWOyRyFe6PGaqqCk7Mhc+vVcePfmC8mmmhVgeuyys/Dhe+0iaP4M1eJf4COaIQw==",
"dev": true,
"dependencies": {
- "@textlint/types": "^14.0.3",
+ "@textlint/types": "^14.0.4",
"debug": "^4.3.4"
}
},
"node_modules/@textlint/text-to-ast": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.0.3.tgz",
- "integrity": "sha512-NrlZQ5RO3O6aSqDMzLzGWhKP5Rx2UlbGulVgO2sQ+59837+32cHjzrV+J1nBVVcsfsv+GOFperfo5C/Rn+F7SA==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.0.4.tgz",
+ "integrity": "sha512-r2KSnKzhsCIvX72yX+7sEuu9nDQIS4+xRsSffuXYB0etRQUI6VTTsE6Ibd6yMbEsMDUF4BfKWzNGn+bQ8U7oHA==",
"dev": true,
"dependencies": {
- "@textlint/ast-node-types": "^14.0.3"
+ "@textlint/ast-node-types": "^14.0.4"
}
},
"node_modules/@textlint/text-to-ast/node_modules/@textlint/ast-node-types": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.3.tgz",
- "integrity": "sha512-umIMn3yy2arl9QHH2fEhCxVgbLbQFC8NpzYbAzOQ4Y5m+p0RQaKClHtHXnDqsXHp6WKAVAXxcuFolW2SZMnhDQ==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.4.tgz",
+ "integrity": "sha512-O7L1pgle030Co9ou1+6e2/6GgcIpKgqwEc0XiBabokc22Yl0QEkrf00K/usBDmSx+wo1ficWBux2mfBEF0jnDA==",
"dev": true
},
"node_modules/@textlint/textlint-plugin-markdown": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.0.3.tgz",
- "integrity": "sha512-1zwiwmayFRIElGdeCUXCJjlP+mpZDCCtcsNqB+07i/xi3UlSFM3NGRUzJ5CYQbjJ7Nrb3kmA5FKxB7xTMdZH4w==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.0.4.tgz",
+ "integrity": "sha512-mqQieI9U5GTRTjkK4Cj57Axl6fVloaA8g0+sCsp3TjmNWyEgGBvt3aw+FIUiFTvheg9L3RGe/aXgvp5ORADOAA==",
"dev": true,
"dependencies": {
- "@textlint/markdown-to-ast": "^14.0.3"
+ "@textlint/markdown-to-ast": "^14.0.4"
}
},
"node_modules/@textlint/textlint-plugin-text": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.0.3.tgz",
- "integrity": "sha512-dDRkNAoOH/HHxpC5Ghn89L90Ax5GQ4CIwCiV91qmjYUaCH710wkqRppBCEIHnS+1E/5wq1ukhTbGJjvxe7rP4w==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.0.4.tgz",
+ "integrity": "sha512-HwTQyOcwDRrPPHyD8lwSMyGR1ETasR2WK6BLO0PRbowRe6K/K4b9OBBd6+nJcRFa+9Nd6p7nxPzA2WxDi1X/Zg==",
"dev": true,
"dependencies": {
- "@textlint/text-to-ast": "^14.0.3"
+ "@textlint/text-to-ast": "^14.0.4"
}
},
"node_modules/@textlint/types": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.0.3.tgz",
- "integrity": "sha512-Ft08kK3BNxbuRYb0BOEjSr9CkJyHIYBiUfWvaNcqhXESQLhplb5EfynkXw0uAerzhx9CxkdC2FcOFU+HIcuYRg==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.0.4.tgz",
+ "integrity": "sha512-SNdFG/GB6utYeHmNfoAMlI+K1NykPxK9TtilkEfhr/fF9TqmeeJ+6CMk5NLQzEvfKm6jUbv2pp5DPS27vo6GKg==",
"dev": true,
"dependencies": {
- "@textlint/ast-node-types": "^14.0.3"
+ "@textlint/ast-node-types": "^14.0.4"
}
},
"node_modules/@textlint/types/node_modules/@textlint/ast-node-types": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.3.tgz",
- "integrity": "sha512-umIMn3yy2arl9QHH2fEhCxVgbLbQFC8NpzYbAzOQ4Y5m+p0RQaKClHtHXnDqsXHp6WKAVAXxcuFolW2SZMnhDQ==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.4.tgz",
+ "integrity": "sha512-O7L1pgle030Co9ou1+6e2/6GgcIpKgqwEc0XiBabokc22Yl0QEkrf00K/usBDmSx+wo1ficWBux2mfBEF0jnDA==",
"dev": true
},
"node_modules/@textlint/utils": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.0.3.tgz",
- "integrity": "sha512-Rt7KFrqPpLmpTz3ftTbA8A4kUABwW8CuvgbAAOL/XYpejnQeGPmVfVF3b3AvDtD5jYjp4rPkXHGHDPJTj+lYwA==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.0.4.tgz",
+ "integrity": "sha512-/ThtVZCB/vB2e8+MnKquCFNO2cKXCPEGxFlkdvJ5g9q9ODpVyFcf2ogYoIlvR7cNotvq67zVjENS7dsGDNFEmw==",
"dev": true
},
"node_modules/@types/concat-stream": {
@@ -1319,9 +1319,9 @@
}
},
"node_modules/diff": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
- "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
+ "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
"dev": true,
"engines": {
"node": ">=0.3.1"
@@ -6071,23 +6071,23 @@
"dev": true
},
"node_modules/textlint": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.0.3.tgz",
- "integrity": "sha512-AqEG9OcGBSw4KHss55ZrBv75uWeruqTHfix3koQHwqnazRw3eAkFQwQ+NLpzMut+rIBWUUikUzuBN/SOG+obEw==",
- "dev": true,
- "dependencies": {
- "@textlint/ast-node-types": "^14.0.3",
- "@textlint/ast-traverse": "^14.0.3",
- "@textlint/config-loader": "^14.0.3",
- "@textlint/feature-flag": "^14.0.3",
- "@textlint/fixer-formatter": "^14.0.3",
- "@textlint/kernel": "^14.0.3",
- "@textlint/linter-formatter": "^14.0.3",
- "@textlint/module-interop": "^14.0.3",
- "@textlint/textlint-plugin-markdown": "^14.0.3",
- "@textlint/textlint-plugin-text": "^14.0.3",
- "@textlint/types": "^14.0.3",
- "@textlint/utils": "^14.0.3",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.0.4.tgz",
+ "integrity": "sha512-xPQkC/BftPjizjs31wci/791EjwfN11iRLrNKiPVBogYd1r+6TnSxbCERZhgXCGcD9tEHss0kOYc0+vPEEG8jg==",
+ "dev": true,
+ "dependencies": {
+ "@textlint/ast-node-types": "^14.0.4",
+ "@textlint/ast-traverse": "^14.0.4",
+ "@textlint/config-loader": "^14.0.4",
+ "@textlint/feature-flag": "^14.0.4",
+ "@textlint/fixer-formatter": "^14.0.4",
+ "@textlint/kernel": "^14.0.4",
+ "@textlint/linter-formatter": "^14.0.4",
+ "@textlint/module-interop": "^14.0.4",
+ "@textlint/textlint-plugin-markdown": "^14.0.4",
+ "@textlint/textlint-plugin-text": "^14.0.4",
+ "@textlint/types": "^14.0.4",
+ "@textlint/utils": "^14.0.4",
"debug": "^4.3.4",
"file-entry-cache": "^5.0.1",
"get-stdin": "^5.0.1",
@@ -6213,9 +6213,9 @@
}
},
"node_modules/textlint/node_modules/@textlint/ast-node-types": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.3.tgz",
- "integrity": "sha512-umIMn3yy2arl9QHH2fEhCxVgbLbQFC8NpzYbAzOQ4Y5m+p0RQaKClHtHXnDqsXHp6WKAVAXxcuFolW2SZMnhDQ==",
+ "version": "14.0.4",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.4.tgz",
+ "integrity": "sha512-O7L1pgle030Co9ou1+6e2/6GgcIpKgqwEc0XiBabokc22Yl0QEkrf00K/usBDmSx+wo1ficWBux2mfBEF0jnDA==",
"dev": true
},
"node_modules/to-regex-range": {
diff --git a/package.json b/package.json
index 274a357c8751..c5b33b5a2c04 100644
--- a/package.json
+++ b/package.json
@@ -15,7 +15,7 @@
"remark-lint-prohibited-strings": "^4.0.0",
"remark-lint-unordered-list-marker-style": "^3.1.2",
"remark-stringify": "^11.0.0",
- "textlint": "^14.0.3",
+ "textlint": "^14.0.4",
"textlint-filter-rule-comments": "^1.2.2",
"textlint-rule-common-misspellings": "^1.0.1",
"textlint-rule-terminology": "^4.0.1"
diff --git a/sass/custom/_landingpage.scss b/sass/custom/_landingpage.scss
index 1d15ac7a7000..387a933e3192 100644
--- a/sass/custom/_landingpage.scss
+++ b/sass/custom/_landingpage.scss
@@ -831,6 +831,18 @@ $ha__primary_color: #03a9f4;
}
.distributors {
+ details {
+ width: 100%;
+ justify-content: space-between;
+ padding: 16px 24px;
+ color: #222222;
+ margin: auto;
+
+ summary.region {
+ display: list-item;
+ }
+ }
+
a {
text-decoration: none;
diff --git a/source/_dashboards/alarm-panel.markdown b/source/_dashboards/alarm-panel.markdown
index 9d1938b50b07..3ef81b0f4065 100644
--- a/source/_dashboards/alarm-panel.markdown
+++ b/source/_dashboards/alarm-panel.markdown
@@ -5,7 +5,7 @@ sidebar_label: Alarm panel
description: "The alarm panel card allows you to arm and disarm your alarm control panel integrations."
---
-The alarm panel card allows you to arm and disarm your [alarm control panel](/integrations/#alarm) integrations.
+The alarm panel card allows you to arm and disarm your [alarm control panel](/integrations/#alarm) {% term integrations %}.
@@ -81,3 +81,8 @@ states:
- arm_night
- armed_custom_bypass
```
+
+## Related topics
+
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/area.markdown b/source/_dashboards/area.markdown
index 245aa3293036..df4a38b81d6f 100644
--- a/source/_dashboards/area.markdown
+++ b/source/_dashboards/area.markdown
@@ -5,7 +5,7 @@ sidebar_label: Area
description: "The area card gives control of your entities in a specified area."
---
-The area card lets you control and monitor an individual area.
+The area card lets you control and monitor an individual {% term area %}.
@@ -16,9 +16,9 @@ The area card lets you control and monitor an individual area.
All options for this card can be configured via the user interface.
-Buttons will appear on the card for the entities in the area including fan, light and switch. A motion sensor icon will appear in the top left if a motion sensor is in the area and motion is detected by the motion sensor.
+Buttons will appear on the card for the {% term entities %} in the area including fan, light, and switch. A motion sensor icon will appear in the top left if a motion sensor is in the area and if motion is detected by the motion sensor.
-If a camera is added to the area you can show the camera feed instead of the area picture.
+If a camera is added to the {% term area %} you can show the camera feed instead of the area picture.
## YAML configuration
@@ -86,3 +86,8 @@ navigation_path: my_bedroom
show_camera: true
theme: green
```
+
+## Related topics
+
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/button.markdown b/source/_dashboards/button.markdown
index 88ce2c1eba71..e54540751b42 100644
--- a/source/_dashboards/button.markdown
+++ b/source/_dashboards/button.markdown
@@ -136,3 +136,10 @@ tap_action:
Screenshot of the button card with script service.
+
+## Related topics
+
+- [Card actions](/dashboards/actions/)
+- [Scripts](/docs/scripts/)
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/calendar.markdown b/source/_dashboards/calendar.markdown
index f29605ce1e4a..3705e87e1203 100644
--- a/source/_dashboards/calendar.markdown
+++ b/source/_dashboards/calendar.markdown
@@ -5,7 +5,7 @@ sidebar_label: Calendar
description: "The calendar card displays your calendar entities in a month, day and list view"
---
-The calendar card displays your [calendar](/integrations/#calendar) entities in a month, day and list view (7 days).
+The calendar card displays your [calendar](/integrations/#calendar) {% term entities %} in a month, day, and list view (7 days).
Two picture cards in a horizontal stack card.
+
+## Related topics
+
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/humidifier.markdown b/source/_dashboards/humidifier.markdown
index 8b7d4bdd4ecc..93b721febf93 100644
--- a/source/_dashboards/humidifier.markdown
+++ b/source/_dashboards/humidifier.markdown
@@ -56,3 +56,8 @@ type: humidifier
entity: humidifier.bedroom
name: Bedroom Humidifier
```
+
+## Related topics
+
+- [Card features](/dashboards/features)
+- [Themes](/integrations/frontend/)
diff --git a/source/_dashboards/iframe.markdown b/source/_dashboards/iframe.markdown
index fdaa049ed417..d8a544e80b67 100644
--- a/source/_dashboards/iframe.markdown
+++ b/source/_dashboards/iframe.markdown
@@ -56,3 +56,7 @@ type: iframe
url: https://www.home-assistant.io
aspect_ratio: 75%
```
+
+## Related topics
+
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/light.markdown b/source/_dashboards/light.markdown
index f1cd3c965b5e..7023f9def8d6 100644
--- a/source/_dashboards/light.markdown
+++ b/source/_dashboards/light.markdown
@@ -80,3 +80,9 @@ name: My Office
Screenshot of the Light card names.
+
+## Related topics
+
+- [Card actions](/dashboards/actions/)
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/logbook.markdown b/source/_dashboards/logbook.markdown
index d4fdabb5c5e3..2ae88343fac7 100644
--- a/source/_dashboards/logbook.markdown
+++ b/source/_dashboards/logbook.markdown
@@ -65,3 +65,8 @@ entities:
- light.ceiling_lights
hours_to_show: 24
```
+
+## Related topics
+
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/map.markdown b/source/_dashboards/map.markdown
index ed3f48e4c98a..9370e83431f9 100644
--- a/source/_dashboards/map.markdown
+++ b/source/_dashboards/map.markdown
@@ -134,3 +134,8 @@ entities:
focus: false
hours_to_show: 48
```
+
+## Related topics
+
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/markdown.markdown b/source/_dashboards/markdown.markdown
index f1886128004b..bcac319e7c95 100644
--- a/source/_dashboards/markdown.markdown
+++ b/source/_dashboards/markdown.markdown
@@ -140,3 +140,8 @@ content: |
This is a success alert β check it out!
This is an alert with a title
```
+
+## Related topics
+
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/media-control.markdown b/source/_dashboards/media-control.markdown
index 0ba077b45e7f..0d4958f7e8a1 100644
--- a/source/_dashboards/media-control.markdown
+++ b/source/_dashboards/media-control.markdown
@@ -46,3 +46,8 @@ Basic example:
type: media-control
entity: media_player.lounge_room
```
+
+## Related topics
+
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/picture-elements.markdown b/source/_dashboards/picture-elements.markdown
index b494e2810dce..aa6433d9f6d8 100644
--- a/source/_dashboards/picture-elements.markdown
+++ b/source/_dashboards/picture-elements.markdown
@@ -401,7 +401,7 @@ user:
type: string
{% endconfiguration %}
-## Notes on Element Attributes
+## Notes on element attributes
### How to use the style object
@@ -573,3 +573,9 @@ elements:
top: 47%
left: 42%
```
+
+## Related topics
+
+- [Card actions](/dashboards/actions/)
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/picture-entity.markdown b/source/_dashboards/picture-entity.markdown
index e3f14b9eecc6..928fa7912f1e 100644
--- a/source/_dashboards/picture-entity.markdown
+++ b/source/_dashboards/picture-entity.markdown
@@ -138,3 +138,9 @@ tap_action:
{% endraw %}
The filename needs to be a path that is writable by Home Assistant in your system. You may need to configure `allowlist_external_dirs` ([documentation](/docs/configuration/basic/)).
+
+## Related topics
+
+- [Card actions](/dashboards/actions/)
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/picture-glance.markdown b/source/_dashboards/picture-glance.markdown
index c3a55842b14f..de065a649412 100644
--- a/source/_dashboards/picture-glance.markdown
+++ b/source/_dashboards/picture-glance.markdown
@@ -267,3 +267,9 @@ state_image:
"off": /local/living_room_off.png
entity: group.living.room
```
+
+## Related topics
+
+- [Card actions](/dashboards/actions/)
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/picture.markdown b/source/_dashboards/picture.markdown
index 5a2fca27cc0f..1ee6176e1917 100644
--- a/source/_dashboards/picture.markdown
+++ b/source/_dashboards/picture.markdown
@@ -1,6 +1,6 @@
---
type: card
-title: "Picture Card"
+title: "Picture card"
sidebar_label: Picture
description: "The picture card allows you to set an image to use for navigation to various paths in your interface or to call a service."
---
@@ -74,3 +74,9 @@ tap_action:
data:
entity_id: light.ceiling_lights
```
+
+## Related topics
+
+- [Card actions](/dashboards/actions/)
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/plant-status.markdown b/source/_dashboards/plant-status.markdown
index 031def937718..439f04260dfd 100644
--- a/source/_dashboards/plant-status.markdown
+++ b/source/_dashboards/plant-status.markdown
@@ -48,3 +48,8 @@ Basic example:
type: plant-status
entity: plant.bonsai
```
+
+## Related topics
+
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/sections.markdown b/source/_dashboards/sections.markdown
index acaa724ce76b..46b77fdf735d 100644
--- a/source/_dashboards/sections.markdown
+++ b/source/_dashboards/sections.markdown
@@ -6,16 +6,62 @@ description: "Lets you organize your cards in sections on a grid."
---
The sections view lets you organize your cards in sections on a grid.
-It allows you to group card directly in sections, without having to use horizontal or vertical stack cards.
+You can group cards without using horizontal or vertical stack cards.
-There are a few options to rearrange cards. You can move cards within the section,
-move them from one section into another or even move the entire section.
-You can also copy and paste cards.
+
+
+ A fully populated dashboard in Sections view layout
+
-To see how it works, check out the demo:
+
+
The sections view was released beginning of March 2024 and is experimental! Do not build your daily dashboard on top of it yet! We are still collecting feedback.
It is not possible to migrate dashboards into sections view.
+
+
+## Creating a sections view
+
+1. If you have multiple dashboards, in the left sidebar, select the dashboard to which you want to add the sections view.
+2. [Add a new view](/dashboards/views/#adding-a-view-to-a-dashboard) and under **View type**, select **Sections**.
+3. To add a card, select the **Add card** button.
+ - Follow the [steps on adding cards](/dashboards/cards/#adding-cards-to-your-dashboard).
+
+ ![Add Section button](/images/dashboards/sections_view_add-card-or-section.png)
+
+4. To add a section, select the **Create section** button.
+5. To edit the section title, select the
button.
+ - If you leave the section title empty, this line will be hidden.
+6. To delete a section, select the
button.
+
+## Rearranging sections and cards
+
+In the sections view, you can rearrange sections and cards by dragging them to a new location. This is not yet possible in other views.
+
+1. To edit your dashboard, in the top right corner, select the pencil icon.
+2. To rearrange sections, hold the
button and move the card.
+
+
+
+ Rearranging sections by dragging
+
+
+3. To rearrange cards, tap and hold the card and move it to your desired location.
+
+
+
+ Rearranging cards by dragging
+
+
+## Check out the demo
+
+Check out the demo from the March live stream on dashboards.
+## About the sections view layout
+
+To learn all about the design decisions and the grid layout used for the sections view, refer to the [Dashboard chapter 1 blog post](/blog/2024/03/04/dashboard-chapter-1/).
+
+## YAML configuration
+
{% configuration %}
type:
required: false
@@ -28,3 +74,6 @@ type:
- [Masonry view](/dashboards/masonry/)
- [Panel view](/dashboards/panel/)
- [Sidebar view](/dashboards/sidebar/)
+- [Dashboard chapter 1 blog post](/blog/2024/03/04/dashboard-chapter-1/)
+- [Adding cards to a view](/dashboards/cards/#adding-cards-to-your-dashboard)
+- [Adding a new view](/dashboards/views/#adding-a-view-to-a-dashboard)
\ No newline at end of file
diff --git a/source/_dashboards/sensor.markdown b/source/_dashboards/sensor.markdown
index 5769fb7f787a..c4196828d7e8 100644
--- a/source/_dashboards/sensor.markdown
+++ b/source/_dashboards/sensor.markdown
@@ -83,3 +83,8 @@ type: sensor
entity: sensor.illumination
name: Illumination
```
+
+## Related topics
+
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/shopping-list.markdown b/source/_dashboards/shopping-list.markdown
index 0c6e77eac834..882fed36a8a8 100644
--- a/source/_dashboards/shopping-list.markdown
+++ b/source/_dashboards/shopping-list.markdown
@@ -39,9 +39,14 @@ theme:
### Examples
-Title Example:
+Title example:
```yaml
type: shopping-list
title: shopping list
```
+
+## Related topics
+
+- [To-do list integration](/integrations/todo)
+- [Local to-do integration](/integrations/local_todo/)
\ No newline at end of file
diff --git a/source/_dashboards/statistic.markdown b/source/_dashboards/statistic.markdown
index 8e34f583fa94..e39895bae59c 100644
--- a/source/_dashboards/statistic.markdown
+++ b/source/_dashboards/statistic.markdown
@@ -171,4 +171,9 @@ period:
minutes: -20
seconds: -10
stat_type: change
-```
\ No newline at end of file
+```
+
+## Related topics
+
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/statistics-graph.markdown b/source/_dashboards/statistics-graph.markdown
index 9b5b31c0ce93..940059e3a207 100644
--- a/source/_dashboards/statistics-graph.markdown
+++ b/source/_dashboards/statistics-graph.markdown
@@ -96,3 +96,8 @@ entities:
- entity: sensor.inside_temperature
name: Inside
```
+
+## Related topics
+
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/thermostat.markdown b/source/_dashboards/thermostat.markdown
index 67b4d40cbf4b..5ca865065d83 100644
--- a/source/_dashboards/thermostat.markdown
+++ b/source/_dashboards/thermostat.markdown
@@ -5,7 +5,7 @@ sidebar_label: Thermostat
description: "The thermostat card gives control of your climate entity, allowing you to change the temperature and mode of the entity."
---
-The thermostat card gives control of your [climate](/integrations/#climate) entity, allowing you to change the temperature and mode of the entity.
+The thermostat card gives control of your [climate](/integrations/#climate) {% term entity %}, allowing you to change the temperature and mode of the {% term entity %}.
@@ -55,3 +55,8 @@ features:
type: thermostat
entity: climate.nest
```
+
+## Related topics
+
+- [Card features](/dashboards/features)
+- [Themes](/integrations/frontend/)
diff --git a/source/_dashboards/tile.markdown b/source/_dashboards/tile.markdown
index cc3e80d2aefd..514cfc144967 100644
--- a/source/_dashboards/tile.markdown
+++ b/source/_dashboards/tile.markdown
@@ -5,7 +5,7 @@ sidebar_label: Tile
description: "The tile card gives you a quick overview of your entity. The card allows you to toggle the entity, show the more-info dialog, or custom actions."
---
-The tile card gives you a quick overview of your entity. The card allows you to toggle the entity and show the more info dialog. A badge is shown for some entities like the [climate](/integrations/climate) or [person](/integrations/person) entities.
+The tile card gives you a quick overview of your {% term entity %}. The card allows you to toggle the {% term entity %} and show the more info dialog. A badge is shown for some {% term entities %} like the [climate](/integrations/climate) or [person](/integrations/person) {% term entities %}.
@@ -126,6 +126,12 @@ features:
- return_home
```
-## Available color tokens
+## Available colors
-Some color tokens are available to colorize the tile card : `primary`, `accent`, `disabled`, `red`, `pink`, `purple`, `deep-purple`, `indigo`, `blue`, `light-blue`, `cyan`, `teal`, `green`, `light-green`, `lime`, `yellow`, `amber`, `orange`, `deep-orange`, `brown`, `grey`, `blue-grey`, `black` and `white`.
\ No newline at end of file
+You want to colorize the tile card? Choose one of the following colors: `primary`, `accent`, `disabled`, `red`, `pink`, `purple`, `deep-purple`, `indigo`, `blue`, `light-blue`, `cyan`, `teal`, `green`, `light-green`, `lime`, `yellow`, `amber`, `orange`, `deep-orange`, `brown`, `grey`, `blue-grey`, `black` and `white`.
+
+## Related topics
+
+- [Card actions](/dashboards/actions/)
+- [Card features](/dashboards/features)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/vertical-stack.markdown b/source/_dashboards/vertical-stack.markdown
index 0e13b9ce21ef..08768af6955f 100644
--- a/source/_dashboards/vertical-stack.markdown
+++ b/source/_dashboards/vertical-stack.markdown
@@ -71,3 +71,7 @@ cards:
Create a grid layout using vertical and horizontal stack.
+
+## Related topics
+
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/weather-forecast.markdown b/source/_dashboards/weather-forecast.markdown
index 5e6f3a4e1980..55c8fadd5307 100644
--- a/source/_dashboards/weather-forecast.markdown
+++ b/source/_dashboards/weather-forecast.markdown
@@ -153,3 +153,8 @@ Example theme configuration:
```yaml
--weather-icon-sunny: url("/local/sunny.png")
```
+
+## Related topics
+
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown
index dc4fcc8a8890..ae76aad53d6a 100644
--- a/source/_docs/automation/trigger.markdown
+++ b/source/_docs/automation/trigger.markdown
@@ -257,7 +257,24 @@ automation:
{% endraw %}
-More dynamic and complex calculations can be done with `value_template`.
+More dynamic and complex calculations can be done with `value_template`. The variable 'state' is the [state object](/docs/configuration/state_object) of the entity specified by `entity_id`.
+
+The state of the entity can be referenced like this:
+
+{% raw %}
+
+```yaml
+automation:
+ trigger:
+ - platform: numeric_state
+ entity_id: sensor.temperature
+ value_template: "{{ state.state | float * 9 / 5 + 32 }}"
+ above: 70
+```
+
+{% endraw %}
+
+Attributes of the entity can be referenced like this:
{% raw %}
diff --git a/source/_docs/automation/troubleshooting.markdown b/source/_docs/automation/troubleshooting.markdown
index a41825249f6d..458a88dc5b2a 100644
--- a/source/_docs/automation/troubleshooting.markdown
+++ b/source/_docs/automation/troubleshooting.markdown
@@ -3,43 +3,72 @@ title: "Troubleshooting automations"
description: "Tips on how to troubleshoot your automations."
---
+Automations and {% term scripts %} can be debugged in a few different ways. You can [test run](#testing-your-automation) the full sequence of actions, or test each condition and action separately. [Traces](#traces) let you see details of every step after an automation is run. For complicated automations with {% term templates %}, see the section [testing templates](#testing-templates).
+
+## Testing your automation
+
+Many automations can be tested directly in the automation editor UI.
+
+### Running the entire automation
+
+In the three dots menu in the automation list or automation editor UI, select the **Run** button. This will execute all of the {% term actions %}, while skipping all {% term triggers %} and {% term conditions %}. This lets you test the full sequence of actions, as if the automation was triggered and all conditions were true. Note that any [trigger ID](/docs/automation/trigger/#trigger-id) used in your triggers will not be active when you test this way. The Trigger ID or any data passed by in the `trigger` data in conditions or actions can't be tested directly this way.
+
+You can also trigger an automation manually. This can test the conditions as if the automation was triggered by an event. Navigate to {% my developer_services title="**Developer tools** > **Services**" %}. In the service selection drop-down, select **Automation: Trigger**, then **Choose entity** to select the automation you are testing. Toggle whether to skip the conditions, then **Call service**. If needed, additional `trigger` or other data can be added in the YAML view for testing. The [trigger](/docs/automation/trigger/) page has more information about data within the trigger.
+
+Testing with complex triggers, conditions, and variables can be difficult. Note that using the **Run** button will skip all triggers and conditions, while **Developer Tools** can be used with or without checking conditions.
+
+### Running individual actions or conditions
+
+In the automation editor UI, each {% term condition %} and {% term action %} can be tested individually. Select the three dots menu, then the **Test** button.
+
+- Testing a condition will highlight it to show whether the condition passed at the moment it was tested. If all conditions pass, then the automation will run when triggered. Testing building blocks like an **and** condition will report whether the whole block registers as true or false, or you can test individual conditions within the building block.
+
+- Testing an action block will run that block immediately.
+
+Note that complex automations that depend on previous blocks, such as trigger IDs, variables in templates, or service calls that return data to use in subsequent blocks, cannot be tested this way.
+
+If you are writing automations in YAML, it is also useful to go to {% my server_controls title="**Developer tools** > **YAML**" %}** and in the Configuration validation section, select the **Check configuration** button. This is to make sure there are no syntax errors before restarting Home Assistant. In order for **Check configuration** to be visible, you must enable **Advanced Mode** on {% my profile title="your user profile" %}.
+
+## Traces
+
When an {% term automation %} is run, all steps are recorded and a trace is made. From the UI, open **Settings**, which is located in the sidebar, then select **Automations & Scenes** to go to the automation editor or click this button directly: {% my automations badge %}
-Click on the clock icon next to an automation to enter the debugging screen. Alternatively, click on **Show trace** directly from a Logbook automation entry.
+From the automation editor UI, or in the automations list in the three dots menu, select **Traces**. Alternatively, select an automation entry shown in the Logbook.
![Automation tracing example](/images/integrations/automation/automation-tracing.png)
The above screenshot shows a previous run of an automation. The automation is displayed using an interactive graph, highlighting which path the automation took. Each node in the graph can be clicked to view the details on what happened with the automation during that specific step. It traces the complete run of an automation.
-The debugging screen is split into four features, the first being the Step Details which provides all details for each step of the automation. The second feature is the Trace Timeline which the screenshot above shows and where the automation can be followed on a timeline. The next is Related logbook entries, as the name says a logbook for all the entries related to the specific trace. The last two features are Automation Config and optionally Blueprint Config for the automation YAML code.
+The right side of the trace screen has tabs with more information:
+
+- **Step Details** shows data and results of the step that is currently highlighted.
+- **Automation Config** shows the full YAML configuration at the time the automation was run.
+- **Trace Timeline**, shown in the screenshot above, lists the steps that were executed and their timing.
+- **Related logbook entries**, shows a logbook for all the entries related to the specific trace.
+- **Blueprint Config** will only be shown if the automation was created from a {% term blueprint %}.
+
+The top bar shows the date and time the automation was triggered. Use the left and right arrows to view previous runs of the automation.
Automations created in YAML must have an [`id`](/docs/automation/yaml/#migrating-your-yaml-automations-to-automationsyaml) assigned in order for debugging traces to be stored.
-#### Traces
+### Trace configuration
The last 5 traces are recorded for all automations. It is possible to change this by adding the following code to your automation.
+{% raw %}
+
```yaml
trace:
- stored_traces: 1
+ stored_traces: 20
```
-[template]: /docs/configuration/templating/
-
-## Testing your automation
-
-It is generally a difficult task to test an automation, especially if it includes several triggers and some conditions.
-
-Please note that if you click on **Trigger** of an automation in the frontend, **only the `action` part will be executed** by Home Assistant. That means you **can't** test your trigger or condition part that way. It also means that if your automation uses some data from triggers, it won't work properly as well just because `trigger` is not defined in this scenario.
-
-All this makes that Trigger feature pretty limited and nearly useless for debugging purposes so you need to find another way.
-Make sure you check and adapt to your circumstances appropriate examples from Automation Trigger, Conditions and Actions.
+{% endraw %}
-It is also useful to go to **{% my server_controls title="Developer Tools -> YAML" %}** and click on **Check Configuration** button in Configuration validation section to make sure there are no syntax errors before restarting Home Assistant. In order for **Check configuration** to be visible, you must enable **Advanced Mode** on {% my profile title="your user profile" %}.
+## Testing templates
-If your automation uses templates in any part, you can do the following to make sure it works as expected:
+If your automation uses [templates](/docs/configuration/templating/) in any part, you can do the following to make sure it works as expected:
-1. Go to **{% my developer_template title="Developer tools -> Template" %}** tab.
+1. Go to {% my developer_template title="**Developer tools** > **Template**" %} tab.
2. Create all variables (sources) required for your template as described at the end of [this](https://www.home-assistant.io/docs/configuration/templating/#processing-incoming-data) paragraph.
3. Copy your template code and paste it in Template editor straight after your variables.
4. If necessary, change your sources' value and check if the template works as you want and does not generate any errors.
diff --git a/source/_docs/energy/individual-devices.markdown b/source/_docs/energy/individual-devices.markdown
index 6e17a2516a54..ec6222a18c22 100644
--- a/source/_docs/energy/individual-devices.markdown
+++ b/source/_docs/energy/individual-devices.markdown
@@ -19,6 +19,6 @@ Smart relays sit behind your "normal" switches and make them smart. It allows yo
## Devices with power (W) sensors
-Some smart devices, such as air conditioning, boilers, and others, may provide a power sensor, measured in Watts. You can use the [Integration (Riemann sum integral) integration](/integrations/integration/#energy) to calculate the energy your device is using. You can then use the energy sensor in the Energy Dashboard, as individual devices.
+Some smart devices, such as air conditioning, boilers, and others, may provide a power sensor, measured in Watts. You can use the [Integration (Riemann sum integral) integration](/integrations/integration/#energy) to calculate the energy your device is using. You can then use the energy sensor in the Energy Dashboard, as individual devices. For information on setting up an entity for use in the **Energy** dashboard, refer to the [energy FAQ](/docs/energy/faq/#troubleshooting-missing-entities).
diff --git a/source/_docs/energy/water.markdown b/source/_docs/energy/water.markdown
index b371a82abe0a..699530796bae 100644
--- a/source/_docs/energy/water.markdown
+++ b/source/_docs/energy/water.markdown
@@ -5,9 +5,19 @@ description: "Learn how to add information about your water usage to Home Assist
Home Assistant allows you to track your water usage in the home energy management too.
-Although water usage is not strictly "energy", it is still a valuable resource to track and monitor as it is often tightly coupled with energy usage (like gas). Additionally, it can help you reduce your ecological footprint by using less water.
+Although water usage is not strictly "energy", it is still a valuable resource to track and monitor as it is often tightly coupled with energy usage (like gas). Additionally, it can help you reduce your ecological footprint by using less water.
-## Hardware
+### Home water meters
+
+There are several ways to measure water usage in your home. Multiple methods exist for reading your water usage. Older water meters typically feature a common arrow or only display total consumption. For these meters, you may require an [AI-on-the-edge-device](https://github.com/jomjol/AI-on-the-edge-device) with an ESP32 camera. While effective, this solution can be tedious to set up as it leans towards a DIY approach.
+
+Newer water meters are equipped with a rotary disk that can be read using two methods. The first method utilizes light sensors, while the second method employs proximity sensors. The proximity sensor detects changes in the magnetic field, with each rotation of the disk representing one liter of water used. Meanwhile, the light sensor method operates on an autocorrelation technique, providing accuracy down to 100 milliliters instead of the traditional one-liter step.
+
+For most water meters, the rotary encoder disk suffices the light sensor version. However, some older or specialized meters may necessitate the use of a proximity meter instead.
+
+Home Assistant also has integrations build into the platform that connect with existing products
+
+## Home Assistant integrations
Home Assistant will need to know the amount of water that is being consumed to be able to track usage. Several [water metering (fluid flow rate sensor device)](https://en.wikipedia.org/wiki/Water_metering) hardware options are available to do this. Depending on your setup, the required hardware is provided by your public water utility company, or you may need to buy your own.
@@ -18,7 +28,6 @@ We have the following integrations available for existing products that can prov
- [Flo](/integrations/flo)
- [Flume](/integrations/flume)
- [HomeWizard Energy](/integrations/homewizard)
-- [P1 Monitor](/integrations/p1_monitor)
- [StreamLabs](/integrations/streamlabswater)
- [Suez Water](/integrations/suez_water)
@@ -28,20 +37,29 @@ There are also products for water usage monitoring that are based on existing co
- [Zigbee](/integrations/zha)
- [Matter (BETA)](/integrations/matter)
-Alternatively, the following shops sell ESPHome-based devices, that use a proximity sensor to detect a rotating magnet in your water meter and use that pulse to count each liter of water used.
+## Community-made sensors
+
+If your water meter lacks a rotary disk, magnetic disk, or coil. There are alternative solutions available to seamlessly integrate water monitoring into your smart home setup:
+
+- [AI-on-the-edge-device](https://github.com/jomjol/AI-on-the-edge-device) is a project running on an ESP32-CAM and can be fully integrated into Home Assistant using the Home Assistant Discovery Functionality of MQTT. It digitalizes your gas/water/electricity meter display and provides its data in various ways.![Photo of the AI-on-the-edge-device Workflow](/images/docs/energy/
+
+Alternatively, the following shops sell ESPHome-based devices that use a 3-phase light sensor to detect a rotating disk in your water meter and convert this to the amount of water used in milliliters (ml):
+- [Muino water meter reader](https://watermeter.muino.nl/) (ESPHome)
+
+Alternatively, the following shops sell ESPHome-based devices, that use a proximity sensor to detect a rotating magnet in your water meter and use that pulse to count each liter of water used:
- [S0tool](https://s0tool.nl/) ("Made for ESPHome" approved)
- [Waterlezer dongle](https://smart-stuff.nl/product/esphome-waterlezer-dongle/) (Dutch)
- [Slimme Watermeter Gateway](https://smartgateways.nl/product/slimme-watermeter-gateway/) (Dutch)
- [watermeterkit.nl](https://watermeterkit.nl/) (Dutch)
-Alternatively, the following shops sell ESPHome-based devices that use a 3-phase light sensor to detect a rotating disk in your water meter and convert this to the amount of water used in milliliters (ml).
-- [Muino water meter reader](https://watermeter.muino.nl/)
+## DIY
Maybe you like to build one yourself?
- - Pieter Brinkman has quite a [nice blog article on how to create your own water sensor](https://www.pieterbrinkman.com/2022/02/02/build-a-cheap-water-usage-sensor-using-esphome-home-assistant-and-a-proximity-sensor/) using ESPHome, or [build a water meter](https://www.ztatz.nl/p1-monitor-watermeter/) that works with the [P1 Monitor](/integrations/p1_monitor) integration.
- - [AI-on-the-edge-device](https://github.com/jomjol/AI-on-the-edge-device) is a project running on an ESP32-CAM and can be fully integrated into Home Assistant using the Home Assistant Discovery Functionality of MQTT. It digitalizes your gas/water/electricity meter display and provides its data in various ways.![Photo of the AI-on-the-edge-device Workflow](/images/docs/energy/ai-on-the-edge-device.jpg)
- - [watermeter](https://github.com/nohn/watermeter) running classic OCR and statistical pattern recognition on any system supporting Docker
+- Pieter Brinkman has quite a [nice blog article on how to create your own water sensor](https://www.pieterbrinkman.com/2022/02/02/build-a-cheap-water-usage-sensor-using-esphome-home-assistant-and-a-proximity-sensor/) using ESPHome, or [build a water meter](https://www.ztatz.nl/p1-monitor-watermeter/) that works with the [P1 Monitor](/integrations/p1_monitor) integration.
+- [AI-on-the-edge-device](https://github.com/jomjol/AI-on-the-edge-device) is a project running on an ESP32-CAM and can be fully integrated into Home Assistant using the Home Assistant Discovery Functionality of MQTT. It digitalizes your gas/water/electricity meter display and provides its data in various ways.![Photo of the AI-on-the-edge-device Workflow](/images/docs/energy/ai-on-the-edge-device.jpg)
+- [watermeter](https://github.com/nohn/watermeter) running classic OCR and statistical pattern recognition on any system supporting Docker
+- [Muino water meter reader 3-phase](https://muino.nl/product/3-phase-muino-light-sensor-encoder/) Using the 3-phase sensor technique, a battery-powered version can be possible with this sensor.
If you manually integrate your sensors, for example, using the [MQTT](/integrations/mqtt) or [RESTful](/integrations/rest) integrations: Make sure you set and provide the `device_class`, `state_class`, and `unit_of_measurement` for those sensors.
diff --git a/source/_docs/locked_out.md b/source/_docs/locked_out.md
index dd4be294f07e..c1ab8a227675 100644
--- a/source/_docs/locked_out.md
+++ b/source/_docs/locked_out.md
@@ -9,7 +9,7 @@ or need to recover your data.
## Forgot user name
If youβve forgotten your username, ask the owner to help you.
-If you are the owner and have forgotten your user name, then you need to [prepare the system to start a new onboarding process](/docs/locked_out/#to-prepare-the-system-to-start-a-new-onboarding-process).
+If you are using the Home Assistant Operating System and have access to the Home Assistant server, you can connect a terminal and enter the `auth list` command. This command lists all users that are registered on your Home Assistant.
## Forgot password
@@ -131,3 +131,9 @@ For Windows or macOS you will need third party software. Below are some options.
- Windows: (read-only access to the SD)
- macOS:
+
+## Related topics
+
+- [Reset the Green](https://green.home-assistant.io/guides/reset/)
+- [Reset the Yellow](https://yellow.home-assistant.io/guides/factory-reset/)
+- [Listing all user names via command line](/common-tasks/os/#listing-all-users-from-the-command-line)
\ No newline at end of file
diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown
index 98999558da3f..f7b5ee49517a 100644
--- a/source/_docs/scripts.markdown
+++ b/source/_docs/scripts.markdown
@@ -7,11 +7,13 @@ no_toc: true
Scripts are a sequence of {% term actions %} that Home Assistant will execute. Scripts are available as an entity through the standalone [Script integration] but can also be embedded in {% term automations %} and [Alexa/Amazon Echo] configurations.
-When the script is executed within an automation the `trigger` variable is available. See [Available-Trigger-Data](/docs/automation/templating/#available-trigger-data).
+When the script is executed within an {% term automation %}, the `trigger` variable is available. See [Available-Trigger-Data](/docs/automation/templating/#available-trigger-data).
-The script syntax basic structure is a list of key/value maps that contain actions. If a script contains only 1 action, the wrapping list can be omitted.
+## Script syntax
-All actions support an optional `alias`.
+The script syntax basic structure is a list of key/value maps that contain {% term actions %}. If a script contains only 1 {% term action %}, the wrapping list can be omitted.
+
+All {% term actions %} support an optional `alias`.
```yaml
# Example script integration containing script syntax
@@ -31,9 +33,9 @@ script:
{{ page.content | markdownify | toc_only }}
-## Call a Service
+## Call a service
-The most important one is the action to call a service. This can be done in various ways. For all the different possibilities, have a look at the [service calls page].
+The most important one is the action to call a {% term service %}. This can be done in various ways. For all the different possibilities, have a look at the [service calls page].
```yaml
- alias: "Bedroom lights on"
@@ -44,9 +46,9 @@ The most important one is the action to call a service. This can be done in vari
brightness: 100
```
-### Activate a Scene
+### Activate a scene
-Scripts may also use a shortcut syntax for activating scenes instead of calling the `scene.turn_on` service.
+Scripts may also use a shortcut syntax for activating {% term scenes %} instead of calling the `scene.turn_on` service.
```yaml
- scene: scene.morning_living_room
@@ -54,7 +56,7 @@ Scripts may also use a shortcut syntax for activating scenes instead of calling
## Variables
-The variables action allows you to set/override variables that will be accessible by templates in actions after it. See also [script variables] for how to define variables accessible in the entire script.
+The variables {% term action %} allows you to set/override variables that will be accessible by templates in {% term action %} after it. See also [script variables] for how to define variables accessible in the entire script.
{% raw %}
@@ -91,11 +93,11 @@ Variables can be templated.
{% endraw %}
-### Scope of Variables
+### Scope of variables
Variables have local scope. This means that if a variable is changed in a nested sequence block, that change will not be visible in an outer sequence block.
-Inside the `if` sequence the `variables` action will only alter the `people` variable for that sequence.
+Inside the `if` sequence the `variables` {% term action %} will only alter the `people` variable for that sequence.
{% raw %}
@@ -125,13 +127,13 @@ sequence:
{% endraw %}
-## Test a Condition
+## Test a condition
-While executing a script you can add a condition in the main sequence to stop further execution. When a condition does not return `true`, the script will stop executing. There are many different conditions which are documented at the [conditions page].
+While executing a script you can add a condition in the main sequence to stop further execution. When a condition does not return `true`, the script will stop executing. For documentation on the many different conditions refer to the [conditions page].
-The `condition` action only stops executing the current sequence block. When it is used inside a [repeat](#repeat-a-group-of-actions) action, only the current iteration of the `repeat` loop will stop. When it is used inside a [choose](#choose-a-group-of-actions) action, only the actions within that `choose` will stop.
+The `condition` {% term action %} only stops executing the current sequence block. When it is used inside a [repeat](#repeat-a-group-of-actions) action, only the current iteration of the `repeat` loop will stop. When it is used inside a [choose](#choose-a-group-of-actions) action, only the {% term actions %} within that `choose` will stop.
@@ -204,11 +206,11 @@ All forms accept templates.
## Wait
-These actions allow a script to wait for entities in the system to be in a certain state as specified by a template, or some event to happen as expressed by one or more triggers.
+These {% term actions %} allow a script to wait for entities in the system to be in a certain state as specified by a template, or some event to happen as expressed by one or more triggers.
### Wait for a template
-This action evaluates the template, and if true, the script will continue. If not, then it will wait until it is true.
+This {% term action %} evaluates the template, and if true, the script will continue. If not, then it will wait until it is true.
The template is re-evaluated whenever an entity ID that it references changes state. If you use non-deterministic functions like `now()` in the template it will not be continuously re-evaluated, but only when an entity ID that is referenced is changed. If you need to periodically re-evaluate the template, reference a sensor from the [Time and Date](/integrations/time_date/) integration that will update minutely or daily.
@@ -224,7 +226,7 @@ The template is re-evaluated whenever an entity ID that it references changes st
### Wait for a trigger
-This action can use the same triggers that are available in an automation's `trigger` section. See [Automation Trigger](/docs/automation/trigger). The script will continue whenever any of the triggers fires. All previously defined [trigger variables](/docs/automation/trigger#trigger-variables), [variables](#variables) and [script variables] are passed to the trigger.
+This {% term action %} can use the same triggers that are available in an automation's `trigger` section. See [Automation Trigger](/docs/automation/trigger). The script will continue whenever any of the triggers fires. All previously defined [trigger variables](/docs/automation/trigger#trigger-variables), [variables](#variables) and [script variables] are passed to the trigger.
{% raw %}
```yaml
@@ -324,9 +326,9 @@ This can be used to take different actions based on whether or not the condition
```
{% endraw %}
-## Fire an Event
+## Fire an event
-This action allows you to fire an event. Events can be used for many things. It could trigger an automation or indicate to another integration that something is happening. For instance, in the below example it is used to create an entry in the logbook.
+This {% term action %} allows you to fire an event. Events can be used for many things. It could trigger an {% term automation %} or indicate to another integration that something is happening. For instance, in the below example it is used to create an entry in the logbook.
```yaml
- alias: "Fire LOGBOOK_ENTRY event"
@@ -356,7 +358,7 @@ The `event_data` accepts templates.
### Raise and Consume Custom Events
-The following automation example shows how to raise a custom event called `event_light_state_changed` with `entity_id` as the event data. The action part could be inside a script or an automation.
+The following {% term automation %} example shows how to raise a custom event called `event_light_state_changed` with `entity_id` as the event data. The {% term action %} part could be inside a script or an {% term automation %}.
```yaml
- alias: "Fire Event"
@@ -370,7 +372,7 @@ The following automation example shows how to raise a custom event called `event
state: "on"
```
-The following automation example shows how to capture the custom event `event_light_state_changed` with an [Event Automation Trigger](/docs/automation/trigger#event-trigger), and retrieve corresponding `entity_id` that was passed as the event trigger data, see [Available-Trigger-Data](/docs/automation/templating/#available-trigger-data) for more details.
+The following {% term automation %} example shows how to capture the custom event `event_light_state_changed` with an [Event Automation Trigger](/docs/automation/trigger#event-trigger), and retrieve corresponding `entity_id` that was passed as the event trigger data, see [Available-Trigger-Data](/docs/automation/templating/#available-trigger-data) for more details.
{% raw %}
@@ -389,7 +391,7 @@ The following automation example shows how to capture the custom event `event_li
## Repeat a group of actions
-This action allows you to repeat a sequence of other actions. Nesting is fully supported.
+This {% term action %} allows you to repeat a sequence of other {% term actions %}. Nesting is fully supported.
There are three ways to control how many times the sequence will be run.
### Counted repeat
@@ -566,7 +568,7 @@ For example:
### Repeat loop variable
-A variable named `repeat` is defined within the repeat action (i.e., it is available inside `sequence`, `while` & `until`.)
+A variable named `repeat` is defined within the repeat {% term action %} (i.e., it is available inside `sequence`, `while` & `until`.)
It contains the following fields:
field | description
@@ -577,7 +579,7 @@ field | description
## If-then
-This action allow you to conditionally (`if`) run a sequence of actions (`then`)
+This {% term action %} allow you to conditionally (`if`) run a sequence of actions (`then`)
and optionally supports running other sequence when the condition didn't
pass (`else`).
@@ -600,13 +602,13 @@ script:
message: "Skipped cleaning, someone is home!"
```
-This action supports nesting, however, if you find yourself using nested if-then
+This {% term action %} supports nesting, however, if you find yourself using nested if-then
actions in the `else` part, you may want to consider using
[choose](#choose-a-group-of-actions) instead.
-## Choose a Group of Actions
+## Choose a group of actions
-This action allows you to select a sequence of other actions from a list of sequences.
+This {% term action %} allows you to select a sequence of other {% term actions %} from a list of sequences.
Nesting is fully supported.
Each sequence is paired with a list of conditions. (See the [conditions page] for available options and how multiple conditions are handled.) The first sequence whose conditions are all true will be run.
@@ -614,7 +616,7 @@ An _optional_ `default` sequence can be included which will be run only if none
An _optional_ `alias` can be added to each of the sequences, excluding the `default` sequence.
-The `choose` action can be used like an "if/then/elseif/then.../else" statement. The first `conditions`/`sequence` pair is like the "if/then", and can be used just by itself. Or additional pairs can be added, each of which is like an "elif/then". And lastly, a `default` can be added, which would be like the "else."
+The `choose` {% term action %} can be used like an "if/then/elseif/then.../else" statement. The first `conditions`/`sequence` pair is like the "if/then", and can be used just by itself. Or additional pairs can be added, each of which is like an "elif/then". And lastly, a `default` can be added, which would be like the "else."
{% raw %}
@@ -696,7 +698,7 @@ automation:
More `choose` can be used together. This is the case of an IF-IF.
-The following example shows how a single automation can control entities that aren't related to each other but have in common the same trigger.
+The following example shows how a single {% term automation %} can control entities that aren't related to each other but have in common the same trigger.
When the sun goes below the horizon, the `porch` and `garden` lights must turn on. If someone is watching the TV in the living room, there is a high chance that someone is in that room, therefore the living room lights have to turn on too. The same concept applies to the `studio` room.
@@ -753,13 +755,13 @@ automation:
## Parallelizing actions
-By default, all sequences of actions in Home Assistant run sequentially. This
-means the next action is started after the current action has been completed.
+By default, all sequences of {% term actions %} in Home Assistant run sequentially. This
+means the next {% term action %} is started after the current action has been completed.
This is not always needed, for example, if the sequence of actions doesn't rely
on each other and order doesn't matter. For those cases, the `parallel` action
-can be used to run the actions in the sequence in parallel, meaning all
-the actions are started at the same time.
+can be used to run the {% term actions %} in the sequence in parallel, meaning all
+the {% term actions %} are started at the same time.
The following example shows sending messages out at the same time (in parallel):
@@ -802,32 +804,32 @@ script:
-Running actions in parallel can be helpful in many cases, but use it with
+Running {% term actions %} in parallel can be helpful in many cases, but use it with
caution and only if you need it.
There are some caveats (see below) when using parallel actions.
While it sounds attractive to parallelize, most of the time, just the regular
-sequential actions will work just fine.
+sequential {% term actions %} will work just fine.
-Some of the caveats of running actions in parallel:
+Some of the caveats of running {% term actions %} in parallel:
-- There is no order guarantee. The actions will be started in parallel, but
+- There is no order guarantee. The {% term actions %} will be started in parallel, but
there is no guarantee that they will be completed in the same order.
-- If one action fails or errors, the other actions will keep running until
+- If one {% term action %} fails or errors, the other {% term actions %} will keep running until
they too have finished or errored.
-- Variables created/modified in one parallelized action are not available
- in another parallelized action. Each step in a parallelized has its own scope.
+- Variables created/modified in one parallelized {% term action %} are not available
+ in another parallelized {% term action %}. Each step in a parallelized has its own scope.
## Stopping a script sequence
It is possible to halt a script sequence at any point and return script responses
-using the `stop` action.
+using the `stop` {% term action %}.
-The `stop` action takes a text as input explaining the reason for halting the
-sequence. This text will be logged and shows up in the automations and
+The `stop` {% term action %} takes a text as input explaining the reason for halting the
+sequence. This text will be logged and shows up in the {% term automations %} and
script traces.
`stop` can be useful to halt a script halfway through a sequence when,
@@ -847,7 +849,7 @@ response data must contains a mapping of key/value pairs.
```
There is also an `error` option, to indicate we are stopping because of
-an unexpected error. It stops the sequence as well, but marks the automation
+an unexpected error. It stops the sequence as well, but marks the {% term automation %}
or script as failed to run.
```yaml
@@ -857,20 +859,20 @@ or script as failed to run.
## Continuing on error
-By default, a sequence of actions will be halted when one of the actions in
-that sequence encounters an error. The automation or script will be halted,
-an error is logged, and the automation or script run is marked as errored.
+By default, a sequence of {% term actions %} will be halted when one of the {% term actions %} in
+that sequence encounters an error. The {% term automation %} or script will be halted,
+an error is logged, and the {% term automation %} or script run is marked as errored.
Sometimes these errors are expected, for example, because you know the service
you call can be problematic at times, and it doesn't matter if it fails.
-You can set `continue_on_error` for those cases on such an action.
+You can set `continue_on_error` for those cases on such an {% term action %}.
-The `continue_on_error` is available on all actions and is set to
-`false`. You can set it to `true` if you'd like to continue the action
-sequence, regardless of whether that action encounters an error.
+The `continue_on_error` is available on all {% term actions %} and is set to
+`false`. You can set it to `true` if you'd like to continue the {% term action %}
+sequence, regardless of whether that {% term action %} encounters an error.
-The example below shows the `continue_on_error` set on the first action. If
-it encounters an error; it will continue to the next action.
+The example below shows the `continue_on_error` set on the first {% term action %}. If
+it encounters an error; it will continue to the next {% term action %}.
```yaml
- alias: "If this one fails..."
@@ -891,8 +893,8 @@ or errors that Home Assistant does not handle.
## Disabling an action
-Every individual action in a sequence can be disabled, without removing it.
-To do so, add `enabled: false` to the action. For example:
+Every individual {% term action %} in a sequence can be disabled, without removing it.
+To do so, add `enabled: false` to the {% term action %}. For example:
```yaml
# Example script with a disabled action
@@ -916,8 +918,8 @@ script:
## Respond to a conversation
-The `set_conversation_response` script action allows returning a custom response
-when an automation is triggered by a conversation engine, for example a voice
+The `set_conversation_response` script {% term action %} allows returning a custom response
+when an {% term automation %} is triggered by a conversation engine, for example a voice
assistant. The conversation response can be templated.
{% raw %}
@@ -931,7 +933,7 @@ assistant. The conversation response can be templated.
{% endraw %}
-The response is handed to the conversation engine when the automation finishes. If
+The response is handed to the conversation engine when the {% term automation %} finishes. If
the `set_conversation_response` is executed multiple times, the most recent
response will be handed to the conversation engine. To clear the response, set it
to `None`:
@@ -941,7 +943,7 @@ to `None`:
set_conversation_response: ~
```
-If the automation was not triggered by a conversation engine, the response
+If the {% term automation %} was not triggered by a conversation engine, the response
will not be used by anything.
[Script integration]: /integrations/script/
diff --git a/source/_docs/scripts/service-calls.markdown b/source/_docs/scripts/service-calls.markdown
index 03424e8a7d6b..d94130181ee9 100644
--- a/source/_docs/scripts/service-calls.markdown
+++ b/source/_docs/scripts/service-calls.markdown
@@ -28,7 +28,7 @@ Instead of targeting an entity, you can also target an {% term area %} or {% ter
This is done with the `target` key.
A `target` is a map that contains at least one of the following: `area_id`, `device_id`, `entity_id`.
-Each of these can be a list.
+Each of these can be a list. The values should be lower-cased.
The following example uses a single service call to turn on the lights in the
living room area, 2 additional light devices and 2 additional light entities:
diff --git a/source/_includes/common-tasks/commandline.md b/source/_includes/common-tasks/commandline.md
index 530ea7087d7d..455bb86d9da4 100644
--- a/source/_includes/common-tasks/commandline.md
+++ b/source/_includes/common-tasks/commandline.md
@@ -100,7 +100,25 @@ Use "ha [command] --help" for more information about a command.
```
{% if page.installation == "os" %}
+
### Console access
You can also access the Home Assistant Operating System via a directly connected keyboard and monitor, the console.
+
+#### Wiping the data disk wipe from the command line
+
+In Home Assistant Operating System, the `ha os datadisk wipe` command wipes the data disk. The command deletes all user data as well as Home Assistant Core, Supervisor, and any installed add-ons.
+
+The command `ha os datadisk wipe` marks the data partition (either internal on the eMMC or the SD card, or on an external attached data disk) as to be cleared on the next reboot. The command automatically reboots the system. Upon reboot, the data is cleared. Then the system continues to boot and reinstalls the latest version of all Home Assistant components.
+
+The `ha os datadisk wipe` command can only be run from the local terminal. Connect a display and keyboard and use the terminal.
+
+Note, if you have a Home Assistant Yellow, there is a red hardware button to wipe the data disk. Follow the procedure on [resetting the device](https://yellow.home-assistant.io/guides/factory-reset/).
+
+#### Listing all users from the command line
+
+In Home Assistant Operating System, the `ha auth list` command lists all users that are registered on your Home Assistant.
+
+The `ha auth list` command can only be run from the local terminal. Connect a display and keyboard and use the terminal.
+
{% endif %}
diff --git a/source/_includes/dashboard/edit_dashboard.md b/source/_includes/dashboard/edit_dashboard.md
index 1817057c574a..0e5d9dd0bb1a 100644
--- a/source/_includes/dashboard/edit_dashboard.md
+++ b/source/_includes/dashboard/edit_dashboard.md
@@ -9,4 +9,4 @@ To add the {{ title | downcase }} to your user interface:
- By editing the dashboard, you are taking over control of this dashboard.
- This means that it is no longer automatically updated when new dashboard elements become available.
- To continue, in the dialog, select the three dots menu, then select **Take control**.
-2. In the bottom right corner, select the **Add card** button and select from the card picker.
+2. [Add a card](/dashboards/cards/#adding-cards-to-your-dashboard) to your dashboard.
diff --git a/source/_includes/integrations/building_block_integration.md b/source/_includes/integrations/building_block_integration.md
index d6a8240dbb12..e7b4df2cd39f 100644
--- a/source/_includes/integrations/building_block_integration.md
+++ b/source/_includes/integrations/building_block_integration.md
@@ -5,6 +5,11 @@
**Building block integration**
-The {{ name | downcase }} integration cannot be directly used. You cannot create your own {{ domain | replace: "_", " " }} entities using this integration. This integration is a building block for other integrations to use, enabling them to create {{ domain | replace: "_", " " }} entities for you.
+This {{ name | downcase }} is a building block integration that cannot be added to your Home Assistant directly but is used and provided by other integrations.
+
+A building block integration differs from the typical integration that connects to a device or service. Instead, other integrations that do integrate a device or service into Home Assistant use this {{ name | downcase }} building block to provide entities, services, and other functionality that you can use in your automations or dashboards.
+
+If one of your integrations features this building block, this page documents the functionality the {{ name | downcase }} building block offers.
+
diff --git a/source/_integrations/aftership.markdown b/source/_integrations/aftership.markdown
index 6a1c935dca88..ad71021b6b99 100644
--- a/source/_integrations/aftership.markdown
+++ b/source/_integrations/aftership.markdown
@@ -21,7 +21,7 @@ The sensor value shows the number of packages that are not in `Delivered` state.
To use this sensor, you need an [AfterShip Account](https://accounts.aftership.com/register) and set up an API Key. To set up an API Key go to [AfterShip API](https://admin.aftership.com/settings/api-keys) page, and copy existing key or generate a new one.
-AfterShip recently removed the tracking API functionality from the Forever Free plan. The tracking API functionality requires at least the Essentials plan.
+AfterShip removed the Tracking API functionality from the Forever Free plan, and also no longer offers it in the Essentials plan. Using this integration now requires at least the [Pro](https://www.aftership.com/pricing/tracking) plan.
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/alpha_vantage.markdown b/source/_integrations/alpha_vantage.markdown
index 5f837f1c9ecc..8aafb68ec00b 100644
--- a/source/_integrations/alpha_vantage.markdown
+++ b/source/_integrations/alpha_vantage.markdown
@@ -75,7 +75,9 @@ foreign_exchange:
## API information
-Alpha Vantage offers two tiers of the API key, one free and one paid for. If you are using the free version you will be limited to five queries per minute. This means that you'll likely only be able to have one or two ticker entries. The paid version starts at thirty queries per minute increasing ticker quantity quite a bit.
+Alpha Vantage offers two tiers of the API key, one free and one paid for. If you are using the free version, you will be limited to twenty-five queries per day. The sensor polls every 5 minutes, so you will only get data for the first two hours per day.
+
+The paid version starts at 75 queries per minute, increasing ticker quantity quite a bit.
## Examples
diff --git a/source/_integrations/comelit.markdown b/source/_integrations/comelit.markdown
index a89cde2a80fc..fac72dc7ed6e 100644
--- a/source/_integrations/comelit.markdown
+++ b/source/_integrations/comelit.markdown
@@ -2,7 +2,13 @@
title: Comelit SimpleHome
description: Instructions on how to integrate Comelit SimpleHome home automation devices into Home Assistant.
ha_category:
+ - Alarm
+ - Climate
+ - Cover
+ - Humidifier
- Light
+ - Sensor
+ - Switch
ha_release: '2023.9'
ha_domain: comelit
ha_config_flow: true
diff --git a/source/_integrations/ecobee.markdown b/source/_integrations/ecobee.markdown
index 4176b11e101f..081a0fe89a93 100644
--- a/source/_integrations/ecobee.markdown
+++ b/source/_integrations/ecobee.markdown
@@ -183,12 +183,12 @@ Delete a vacation on the selected ecobee thermostat.
### Service `ecobee.resume_program`
-Resumes the currently active schedule.
+Resumes the standard active schedule of presets. This cancels any manual temperature settings or selected preset. This will not cancel vacation events, use `delete_vacation`.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------ |
-| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Use `entity_id: all` to target all. |
-| `resume_all` | no | true or false |
+| `entity_id` | yes | String or list of strings that point at `entity_id`s of climate devices to control. Omit to target all ecobee thermostats. |
+| `resume_all` | no | `true` will resume the standard schedule. `false` will only cancel the latest active event, which is not used often. |
### Service `ecobee.set_fan_min_on_time`
@@ -196,7 +196,7 @@ Sets the minimum amount of time that the fan will run per hour.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------ |
-| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Use `entity_id: all` to target all. |
+| `entity_id` | yes | String or list of strings that point at `entity_id`'s of climate devices to control. Omit to target all ecobee thermostats. |
| `fan_min_on_time` | no | integer (e.g., 5) |
### Service `ecobee.set_dst_mode`
@@ -205,7 +205,7 @@ Enable/disable automatic daylight savings time.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------------ |
-| `entity_id` | yes | ecobee thermostat on which to set daylight savings time mode |
+| `entity_id` | yes | ecobee thermostat on which to set daylight savings time mode. Omit to target all ecobee thermostats. |
| `dst_enabled` | no | true or false |
### Service `ecobee.set_mic_mode`
@@ -214,7 +214,7 @@ Enable/disable Alexa mic (only for ecobee 4).
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------------- |
-| `entity_id` | yes | ecobee thermostat on which to set the mic mode |
+| `entity_id` | yes | ecobee thermostat on which to set the mic mode. Omit to target all ecobee thermostats. |
| `mic_enabled` | no | true or false |
### Service `ecobee.set_occupancy_modes`
@@ -223,6 +223,6 @@ Enable/disable Smart Home/Away and Follow Me modes.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------- |
-| `entity_id` | yes | ecobee thermostat on which to set occupancy modes |
+| `entity_id` | yes | ecobee thermostat on which to set occupancy modes. Omit to target all ecobee thermostats. |
| `auto_away` | yes | true or false |
| `follow_me` | yes | true or false |
diff --git a/source/_integrations/ecovacs.markdown b/source/_integrations/ecovacs.markdown
index 07ba9b23e328..547b03ca821d 100644
--- a/source/_integrations/ecovacs.markdown
+++ b/source/_integrations/ecovacs.markdown
@@ -134,7 +134,7 @@ Finally, if a vacuum becomes unavailable (usually due to being idle and off its
## Self-hosted configuration
Depending on your setup of the self-hosted instance, you can connect to the server using the following settings:
-- `Username`: Enter the e-mail address configured in your instance. If authentication is disabled, you can enter any valid e-mail address.
+- `Username`: Enter the email address configured in your instance. If authentication is disabled, you can enter any valid email address.
- `Password`: Enter the password configured in your instance. If authentication is disabled, you can enter any string (series of characters).
- `REST URL`: http://`SELF_HOSTED_INSTANCE`:8007
- `MQTT URL`: mqtts://`SELF_HOSTED_INSTANCE`:8883
diff --git a/source/_integrations/emulated_roku.markdown b/source/_integrations/emulated_roku.markdown
index 4cc1ca53a370..b7df1de04c48 100644
--- a/source/_integrations/emulated_roku.markdown
+++ b/source/_integrations/emulated_roku.markdown
@@ -124,6 +124,12 @@ The following is an example implementation of an automation:
entity_id: media_player.amplifier
```
+### Video tutorial
+
+This comprehensive video tutorial explains how events work in Home Assistant and how you can set up Emulated Roku to control a media player using a physical remote control.
+
+
+
## Troubleshooting
If you change your advertised IP or ports, you will have to re-add the emulated Roku in your app.
diff --git a/source/_integrations/enphase_envoy.markdown b/source/_integrations/enphase_envoy.markdown
index 66af2318574d..68744b878461 100644
--- a/source/_integrations/enphase_envoy.markdown
+++ b/source/_integrations/enphase_envoy.markdown
@@ -99,3 +99,76 @@ This integration provides several values suitable for the energy dashboard:
[^3]: Only applies when using Envoy S Metered / IQ Gateway Metered with installed and configured current transformers (CT).
There are no readily available battery energy sensors for use with the `Home Battery storage`. You can consider using the Encharge `real_power_mw` entity as an input to Riemann integrators for charge (negative) or discharge (positive) values. As the [polling interval](#polling-interval) is 1 minute, these may be off though.
+
+## Debug logs and diagnostics
+
+This integration provides debug log and diagnostics report as described in the [Home Assistant troubleshooting pages](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics).
+
+### Debug log
+
+When experiencing issues during the use of the integration, enable the debug log for the Envoy / IQ Gateway. This will add details on the data collection to the Home Assistant log file. Leave the debug log enabled long enough to capture the occurrence of the issue. If the issue is intermittent, this may take a while and it may grow the log file quite a bit.
+
+If you're expecting features to show but they are not shown, reload the integration while debug logging is enabled.
+When this integration is loaded, it will scan the Envoy / IQ Gateway for available features and configure these as needed. Following this initial scan, only data for the found features is collected. Performing a reload with debug enabled results in the debug log containing the initial full scan to assist with analyzing any missing features. Some features are disabled by default, and you need to enable them if you want them to show. Verify this before starting a debug session.
+
+The debug log will show all communication with the Envoy / IQ Gateway. Lines starting with entities are log entries for the integration:
+
+```txt
+2024-03-07 11:20:11.897 DEBUG (MainThread) [homeassistant.components.enphase_envoy
+2024-03-07 11:20:11.898 DEBUG (MainThread) [pyenphase.envoy
+```
+
+Below a typical data request / reply sequence in the log file. These lines will contain the data details received from the Envoy / IQ Gateway.
+
+```txt
+... [pyenphase.envoy] Requesting https://192.168.1.2/ivp/meters with timeout ...
+... [pyenphase.envoy] Request reply from https://192.168.1.2/ivp/meters status 200:...
+```
+
+The end of a collection cycle is marked by:
+
+```txt
+... [homeassistant.components.enphase_envoy.coordinator] Finished fetching Envoy 123456 data in 1.234 seconds (success: True)
+```
+
+### Diagnostics
+
+The diagnostics file is a JSON file and includes a `data` section with the details for this integration. The file can be viewed with any text editor[^4]. The data section has 5 major subsections which reflects how the integration is setup and data is used. Below the 5 subsections, each collapsed.
+
+[^4]: Use of a JSON-aware viewer is not required but makes inspecting the file easier.
+
+```JSON
+ "data": {
+ "config_entry": { ...
+ },
+ "envoy_properties": { ...
+ },
+ "raw_data": { ...
+ },
+ "envoy_model_data": { ...
+ },
+ "envoy_entities_by_device": [ ...
+ ]
+ }
+}
+```
+
+#### Config entry
+
+Shows the integration configuration created when the integration was added.
+
+#### Envoy properties
+
+Shows the conclusions of the initial data scan and what features were identified, including the detected firmware version in the Envoy.
+
+#### Raw data
+
+Shows the data collected from the Envoy during the last data scan when the diagnostic report was created. If in doubt about data shown in the dashboards, consult this section to find the raw data sent by the Envoy. The integration is not modifying this data, it's just providing the data to the entities.
+
+#### Envoy model data
+
+Shows the data of the Envoy extracted from the raw_data into Envoy class data used by the Home Assistant integration. This is a subset of the full raw dataset.
+
+#### Envoy entities by device
+
+Shows all entities created by the integration based on the findings of the initial scan, grouped by device. Entity state based on the last data collection cycle is included. State values here come from the Envoy model data and are the values visible in the dashboards.
diff --git a/source/_integrations/event.markdown b/source/_integrations/event.markdown
index 1053cda4ce30..7522304a5956 100644
--- a/source/_integrations/event.markdown
+++ b/source/_integrations/event.markdown
@@ -83,3 +83,9 @@ The following device classes are supported by event entities:
- **button**: For remote control buttons.
- **doorbell**: Specifically for buttons that are used as a doorbell.
- **motion**: For motion events detected by a motion sensor.
+
+### Video tutorial
+
+This comprehensive video tutorial explains how events work in Home Assistant and how you can set up Emulated Roku to control a media player using a physical remote control.
+
+
diff --git a/source/_integrations/freebox.markdown b/source/_integrations/freebox.markdown
index f58ecbb8f95f..a6e53b60d852 100644
--- a/source/_integrations/freebox.markdown
+++ b/source/_integrations/freebox.markdown
@@ -2,7 +2,7 @@
title: Freebox
description: Instructions on how to integrate Freebox routers into Home Assistant.
ha_category:
- - Alarm Control Panel
+ - Alarm
- Camera
- Network
- Presence detection
diff --git a/source/_integrations/google_assistant_sdk.markdown b/source/_integrations/google_assistant_sdk.markdown
index 804046dfa42d..750bba81ba8e 100644
--- a/source/_integrations/google_assistant_sdk.markdown
+++ b/source/_integrations/google_assistant_sdk.markdown
@@ -2,6 +2,7 @@
title: Google Assistant SDK
description: Instructions on how to use Google Assistant SDK in Home Assistant.
ha_category:
+ - Notifications
- Voice
ha_iot_class: Cloud Polling
ha_release: 2023.1
diff --git a/source/_integrations/google_mail.markdown b/source/_integrations/google_mail.markdown
index b4dbf38860bd..2d42bfd34db8 100644
--- a/source/_integrations/google_mail.markdown
+++ b/source/_integrations/google_mail.markdown
@@ -89,6 +89,6 @@ data:
### Video tutorial
-This video tutorial explains how to set up Gmail in Home Assistant and how you can create a dashboard and automations to send e-mail and toggle your out-of-office notice.
+This video tutorial explains how to set up Gmail in Home Assistant and how you can create a dashboard and automations to send email and toggle your out-of-office notice.
diff --git a/source/_integrations/heatmiser.markdown b/source/_integrations/heatmiser.markdown
index 4b655d86db96..3052e54f036b 100644
--- a/source/_integrations/heatmiser.markdown
+++ b/source/_integrations/heatmiser.markdown
@@ -13,7 +13,7 @@ ha_platforms:
ha_integration_type: integration
---
-The `heatmiser` climate platform let you control [Heatmiser DT/DT-E/PRT/PRT-E](https://www.heatmisershop.co.uk/room-thermostats/) thermostats from Heatmiser. The module itself is currently setup to work over a RS232 -> RS485 converter, therefore it connects over IP.
+The `heatmiser` climate platform lets you control [Heatmiser DT/DT-E/PRT/PRT-E](https://www.heatmisershop.co.uk/room-thermostats/) thermostats from Heatmiser. The module itself is currently set up to work over a RS232 -> RS485 converter, therefore it connects over IP.
Further work would be required to get this setup to connect over Wi-Fi, but the HeatmiserV3 Python module being used is a full implementation of the V3 protocol.
diff --git a/source/_integrations/history_stats.markdown b/source/_integrations/history_stats.markdown
index 83d836cbfa04..3b018340db8a 100644
--- a/source/_integrations/history_stats.markdown
+++ b/source/_integrations/history_stats.markdown
@@ -37,7 +37,7 @@ sensor:
entity_id: light.my_lamp
state: "on"
type: time
- start: "{{ now().replace(hour=0, minute=0, second=0) }}"
+ start: "{{ today_at() }}"
end: "{{ now() }}"
```
@@ -147,7 +147,7 @@ Here are some examples of periods you could work with, and what to write in your
{% raw %}
```yaml
- start: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
+ start: "{{ today_at() }}"
end: "{{ now() }}"
```
@@ -158,7 +158,7 @@ Here are some examples of periods you could work with, and what to write in your
{% raw %}
```yaml
- end: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
+ end: "{{ today_at() }}"
duration:
hours: 24
```
@@ -170,7 +170,7 @@ Here are some examples of periods you could work with, and what to write in your
{% raw %}
```yaml
- start: "{{ now().replace(hour=6, minute=0, second=0, microsecond=0) }}"
+ start: "{{ today_at('06:00') }}"
duration:
hours: 5
```
@@ -179,12 +179,12 @@ Here are some examples of periods you could work with, and what to write in your
**Current week**: starts last Monday at 00:00, ends right now.
-Here, last Monday is _today_ as a timestamp, minus 86400 times the current weekday (86400 is the number of seconds in one day, the weekday is 0 on Monday, 6 on Sunday).
+Here, last Monday is today at 00:00, minus the current weekday (the weekday is 0 on Monday, 6 on Sunday).
{% raw %}
```yaml
- start: "{{ as_timestamp( now().replace(hour=0, minute=0, second=0, microsecond=0) ) - now().weekday() * 86400 }}"
+ start: "{{ today_at() - timedelta(days=now().weekday()) }}"
end: "{{ now() }}"
```
@@ -195,7 +195,7 @@ Here, last Monday is _today_ as a timestamp, minus 86400 times the current weekd
{% raw %}
```yaml
- start: "{{ now().replace(day=1, hour=0, minute=0, second=0, microsecond=0 ) }}"
+ start: "{{ today_at().replace(day=1) }}"
end: "{{ now() }}"
```
@@ -206,8 +206,8 @@ Here, last Monday is _today_ as a timestamp, minus 86400 times the current weekd
{% raw %}
```yaml
- start: "{{ now().replace(day=1, month=now().month-1, hour=0, minute=0, second=0, microsecond=0) }}"
- end: "{{ now().replace(day=1, hour=0, minute=0, second=0, microsecond=0) }}"
+ start: "{{ (today_at().replace(day=1) - timedelta(days=1)).replace(day=1) }}"
+ end: "{{ today_at().replace(day=1) }}"
```
{% endraw %}
@@ -217,7 +217,7 @@ Here, last Monday is _today_ as a timestamp, minus 86400 times the current weekd
{% raw %}
```yaml
- end: "{{ (now().replace(minute=0, second=0, microsecond=0) + timedelta(hours=8)).replace(hour=16) }}"
+ end: "{{ (now() + timedelta(hours=8)).replace(hour=16, minute=0, second=0, microsecond=0) }}"
duration:
hours: 24
```
@@ -229,7 +229,7 @@ Here, last Monday is _today_ as a timestamp, minus 86400 times the current weekd
{% raw %}
```yaml
- end: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
+ end: "{{ today_at() }}"
duration:
days: 30
```
diff --git a/source/_integrations/html5.markdown b/source/_integrations/html5.markdown
index c7055c289abd..201fcbedc1f2 100644
--- a/source/_integrations/html5.markdown
+++ b/source/_integrations/html5.markdown
@@ -42,7 +42,7 @@ vapid_prv_key:
required: true
type: string
vapid_email:
- description: The e-mail account of your Google account associated with your Firebase project, [see configuring the platform](#configuring-the-platform).
+ description: The email account of your Google account associated with your Firebase project, [see configuring the platform](#configuring-the-platform).
required: true
type: string
{% endconfiguration %}
diff --git a/source/_integrations/icloud.markdown b/source/_integrations/icloud.markdown
index 5dfe2d2cd89a..c21090c0f3b9 100644
--- a/source/_integrations/icloud.markdown
+++ b/source/_integrations/icloud.markdown
@@ -68,7 +68,7 @@ This service will play the Lost iPhone sound on your iDevice. It will still ring
| Service data attribute | Optional | Description |
|---------------------------|----------|---------------------------------------------------------|
-| `account` | no | E-mail address of the iCloud account |
+| `account` | no | Email address of the iCloud account |
| `device_name` | no | Human Friendly device name like Bob's iPhone |
### Service `icloud.display_message`
diff --git a/source/_integrations/lifx_cloud.markdown b/source/_integrations/lifx_cloud.markdown
index 6c137206b754..7dfd11e404ec 100644
--- a/source/_integrations/lifx_cloud.markdown
+++ b/source/_integrations/lifx_cloud.markdown
@@ -44,7 +44,7 @@ timeout:
You create your API token on the LIFX website:
1. Sign in to the [LIFX Cloud](https://cloud.lifx.com/)
-2. Click on your e-mail address and select _Personal Access Tokens_
+2. Click on your email address and select _Personal Access Tokens_
3. Now click _Generate New Token_
4. Enter a meaningful label, such as 'Home Assistant'
5. Click _Generate_
diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown
index c52818bb0b12..9bc7cbbde59b 100644
--- a/source/_integrations/light.mqtt.markdown
+++ b/source/_integrations/light.mqtt.markdown
@@ -363,7 +363,7 @@ state_topic:
required: false
type: string
state_value_template:
- description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the state value. The template should match the payload `on` and `off` values, so if your light uses `power on` to turn on, your `state_value_template` string should return `power on` when the switch is on. For example if the message is just `on`, your `state_value_template` should be `power {{ value }}`."
+ description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the state value. The template should return the `payload_on` and `payload_off` values, so if your light uses `power on` to turn on, your `state_value_template` string should return `power on` when the switch is on. For example, if the message is just `on`, your `state_value_template` should be `power {{ value }}`. When your `payload_on = 27`, `payload_off = 'off'`, then this template might be `'off' if value_json.my_custom_brightness_field <= 0 else 27`."
required: false
type: template
unique_id:
diff --git a/source/_integrations/llamalab_automate.markdown b/source/_integrations/llamalab_automate.markdown
index f4a6b85f9ef0..70495c6e137e 100644
--- a/source/_integrations/llamalab_automate.markdown
+++ b/source/_integrations/llamalab_automate.markdown
@@ -41,7 +41,7 @@ api_key:
required: true
type: string
to:
- description: E-Mail address the Automate-Fiber is configured for.
+ description: Email address the Automate-Fiber is configured for.
required: true
type: string
device:
@@ -71,7 +71,7 @@ Receiving cloud messages in Automate:
4. Connect OK from Flow beginning to IN of Cloud receive
5. Connect OK from Cloud receive to Toast show
6. Connect OK form Toast show to IN of Cloud receive
-7. Tap Cloud receive and select the E-Mail account as setup in your configuration
+7. Tap Cloud receive and select the email account as setup in your configuration
8. Assign a variable name for the Payload
9. Tap Toast show and set the message value to the variable you've specified
diff --git a/source/_integrations/local_todo.markdown b/source/_integrations/local_todo.markdown
index 3786fe8e9a65..19aadb9bb15f 100644
--- a/source/_integrations/local_todo.markdown
+++ b/source/_integrations/local_todo.markdown
@@ -1,5 +1,5 @@
---
-title: Local To-do
+title: Local to-do
description: Instructions on how to use local to-do lists in Home Assistant.
ha_category:
- To-do list
@@ -22,3 +22,8 @@ See the [**To-do list** integration](/integrations/todo) for additional details
about to-do list entities.
{% include integrations/config_flow.md %}
+
+## Related topics
+
+- [**To-do list** integration](/integrations/todo)
+- [Shopping list card](/dashboards/shopping-list/)
\ No newline at end of file
diff --git a/source/_integrations/loqed.markdown b/source/_integrations/loqed.markdown
index 1243fc9354b8..06e64c5e86fb 100644
--- a/source/_integrations/loqed.markdown
+++ b/source/_integrations/loqed.markdown
@@ -32,7 +32,7 @@ On the [LOQED personal access token website](https://integrations.production.loq
{% details "Generate access token" %}
-1. Login with your LOQED App e-mail address (you need to be an admin).
+1. Login with your LOQED App email address (you need to be an admin).
2. Select **Create**.
3. Give your personal access token a name (this will not be used further on, but we recommend something like "Home Assistant" to recognize it as used by Home Assistant).
4. Select **Save**.
@@ -55,5 +55,5 @@ First, remove the integration from Home Assistant. This will remove any configur
On [LOQED personal access token website](https://integrations.production.loqed.com/personal-access-tokens), please follow the following steps:
-1. Login with your LOQED App e-mail address (you need to be admin).
+1. Login with your LOQED App email address (you need to be admin).
2. Select **delete** on the Personal Access Token you used when creating this integration.
diff --git a/source/_integrations/matter.markdown b/source/_integrations/matter.markdown
index 26228765db96..01e786283bf7 100644
--- a/source/_integrations/matter.markdown
+++ b/source/_integrations/matter.markdown
@@ -122,8 +122,8 @@ Make sure you have all these components ready before trying to add a Matter devi
- Have either an Android or iPhone ready and Bluetooth enabled. For information why Bluetooth is required, refer to the section on [Bluetooth used during commissioning](#bluetooth-used-during-commissioning):
- Android:
- - Have an Android phone (a full Android, not F-Droid).
- - Have the latest version of the Home Assistant Companion app installed.
+ - Have the Android version 8.1 or higher.
+ - Have the latest version of the Home Assistant Companion app, installed from the Play Store (full version).
- If you are using {% term Thread %}: Make sure there is a Thread border router device (Nest Hub (2nd Gen) or Nest Wi-Fi Pro) present in your home network.
- iPhone
- Have the iOS version 16 or higher
diff --git a/source/_integrations/notify.markdown b/source/_integrations/notify.markdown
index 0564ec0a8a55..b1e8e4f120b7 100644
--- a/source/_integrations/notify.markdown
+++ b/source/_integrations/notify.markdown
@@ -11,9 +11,9 @@ ha_domain: notify
ha_integration_type: entity
---
-The `notify` integration makes it possible to send notifications to a wide variety of platforms. To use it you have to setup at least one notification target (notifier), check the [integrations list](/integrations/#notifications) for one that fits your use case.
+The **Notify** {% term integration %} makes it possible to send notifications to a wide variety of platforms. To use it, you have to set up at least one notification target (notifier). Check the [integrations list](/integrations/#notifications) for one that fits your use case.
-If you want to send notifications to the Home Assistant web interface, you may use the [Persistent Notification integration](/integrations/persistent_notification/). The Persistent Notification integration is also available as an automatically configured notifier. See [its documentation](/integrations/persistent_notification/) for more details.
+If you want to send notifications to the Home Assistant web interface, you may use the [Persistent Notification integration](/integrations/persistent_notification/). It is available as an automatically configured notifier. See [its documentation](/integrations/persistent_notification/) for more details.
{% include integrations/building_block_integration.md %}
@@ -28,43 +28,64 @@ Once loaded, the `notify` platform will expose a service that can be called to s
| `target` | yes | Some platforms allow specifying a recipient that will receive the notification. See your platform page if it is supported.
| `data` | yes | On platforms who have extended functionality. See your platform page if it is supported.
-The notify integration supports specifying [templates](/docs/configuration/templating/). This will allow you to use the current state of Home Assistant in your notifications.
+## Usage
-In an [action](/getting-started/automation-action/) of your [automation setup](/getting-started/automation/) it could look like this with a customized subject.
+The different **Notify** integrations you have set up will each show up as a different automation {% term action %} or {% term service %} call that you can use.
-Be aware that you might want to change the actual service to whatever service you are actually using since `notify.notify` is shorthand for the first notify service the system can find and might therefore not be working as intended.
+One notification integration is automatically included, the Persistent Notifications which creates a notification in the sidebar of the web interface of Home Assistant. This can be chosen with the action named "Notifications: Send a persistent notification" which uses the service `notify.persistent_notification`.
-```yaml
-action:
- service: notify.notify
- data:
- message: "Your message goes here"
- title: "Custom subject"
-```
+Another common notification integration is via the companion app for Android or iPhone. This can be chosen with the action "Send a notification via mobile_app_your_phone_name" which uses the service `notify.mobile_app_your_phone_name`. See the [companion app documentation](https://companion.home-assistant.io/docs/notifications/notifications-basic) for lots of customization options.
+
+With any of these integrations, the `message` data input in the automation editor is the main text that will be sent. Other fields are optional, and some integrations support additional `data` or `target` information to customize the action. For more details, refer to their integration documentation.
+
+Be aware that the `notify.notify` service is shorthand for the first notify service the system can find. It might not work as intended. Choose a specific service to make sure your message goes to the right place.
+
+Notifications can also be sent using [Notify groups](https://www.home-assistant.io/integrations/group/#notify-groups). These allow you to send notification to multiple devices with a single call, or to update which device is notified by only changing it in a single place.
### Test if it works
-After you setup a [notifier](/integrations/#notifications) a simple way to test if you have set up your notify platform correctly, is to open **Developer Tools** from the sidebar and then select the **Services** tab. Choose your service from the **Service** dropdown menu, enter the sample below into the **Service Data** field, and press the **CALL SERVICE** button.
+After you setup a [notifier](/integrations/#notifications), a simple way to test if you have set up your notify platform correctly is to open {% my developer_services title="**Developer tools** > **Services**" %}** tab from the sidebar. Choose your service from the **Service** dropdown menu depending on the integration you want to test, such as **Notifications: Send a persistent notification** or **Notifications: Send a notification via mobile_app_your_phone_name**. Enter your message into the **message** field, and select the **CALL SERVICE** button.
+
+### Examples
+
+In the **Developer Tools**, on the **Services** tab, select the **Notifications: Send a persistent notification** action. Enter a message and test sending it.
+
+If you switch to view the YAML data under **Developer Tools**, it will appear as below. The same {% term action %} can be chosen in {% term automation %} actions %, whose YAML will appear the same:
{% raw %}
-```json
-{
- "message": "The sun is {% if is_state('sun.sun', 'above_horizon') %}up{% else %}down{% endif %}!"
-}
+```yaml
+service: notify.persistent_notification
+data:
+ message: "Can you hear me now?"
```
{% endraw %}
-The automation equivalent would be:
+
+
+The notify integration supports specifying [templates](/docs/configuration/templating/). This will allow you to use the current state of entities in Home Assistant in your notifications, or use more complex logic to decide the message that is sent.
+
+{% raw %}
+
+```yaml
+action:
+ service: notify.persistent_notification
+ data:
+ message: "You have {{ states('todo.shopping_list') }} items on your shopping list."
+```
+
+{% endraw %}
{% raw %}
```yaml
action:
- service: notify.notify
+ service: notify.persistent_notification
data:
message: "The sun is {% if is_state('sun.sun', 'above_horizon') %}up{% else %}down{% endif %}!"
```
{% endraw %}
+
+
diff --git a/source/_integrations/opower.markdown b/source/_integrations/opower.markdown
index ffaf532d00c0..4c24f8f3c212 100644
--- a/source/_integrations/opower.markdown
+++ b/source/_integrations/opower.markdown
@@ -43,7 +43,7 @@ More than 175 utilities use Opower. Currently only the following utilities are s
- Pacific Gas & Electric (PG&E)
- Portland General Electric (PGE)
- Puget Sound Energy (PSE)
-- Seattle City Light (SCL)
+- Seattle City Light (SCL) - *provides consumption data, but no cost data*
When you add the Opower integration to Home Assistant, you will need to provide your utility account's authentication details to enable retrieving your energy data.
This is typically the same information needed to access your utility's website.
@@ -87,8 +87,8 @@ For electricity:
- Current bill electric cost to date
- Current bill electric forecasted usage (for the first few days of the bill this is 0)
- Current bill electric forecasted cost (for the first few days of the bill this is 0)
-- Typical monthly electric usage
-- Typical monthly electric cost
+- Typical monthly electric usage (based on the same month for previous years, not populated for accounts younger than a year)
+- Typical monthly electric cost (based on the same month for previous years, not populated for accounts younger than a year)
For gas:
@@ -96,8 +96,8 @@ For gas:
- Current bill gas cost to date
- Current bill gas forecasted usage (for the first few days of the bill this is 0)
- Current bill gas forecasted cost (for the first few days of the bill this is 0)
-- Typical monthly gas usage
-- Typical monthly gas cost
+- Typical monthly gas usage (based on the same month for previous years, not populated for accounts younger than a year)
+- Typical monthly gas cost (based on the same month for previous years, not populated for accounts younger than a year)
Note the unit for gas is CCF (centum cubic feet). 1 CCF is one hundred cubic feet which is equivalent to 1 therm.
diff --git a/source/_integrations/pushover.markdown b/source/_integrations/pushover.markdown
index a9a357eb55c6..7d5351f6b329 100644
--- a/source/_integrations/pushover.markdown
+++ b/source/_integrations/pushover.markdown
@@ -88,7 +88,6 @@ alexa:
service: notify.notify
data:
message: "The location of {{ User }} has been queried via Alexa."
- data:
title: "Home Assistant"
target: pixel
data:
diff --git a/source/_integrations/sendgrid.markdown b/source/_integrations/sendgrid.markdown
index d89881d1803c..222c75bef0c5 100644
--- a/source/_integrations/sendgrid.markdown
+++ b/source/_integrations/sendgrid.markdown
@@ -42,7 +42,7 @@ api_key:
required: true
type: string
sender:
- description: The e-mail address of the sender.
+ description: The email address of the sender.
required: true
type: string
sender_name:
diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown
index cb03ff42505b..73bb6b1837df 100644
--- a/source/_integrations/shelly.markdown
+++ b/source/_integrations/shelly.markdown
@@ -3,13 +3,16 @@ title: Shelly
description: Integrate Shelly devices
ha_category:
- Binary sensor
+ - Climate
- Cover
+ - Event
- Energy
- Light
- Number
- Sensor
- Switch
- Update
+ - Valve
ha_release: 0.115
ha_codeowners:
- '@balloob'
diff --git a/source/_integrations/sma.markdown b/source/_integrations/sma.markdown
index b08bc9e122bd..e648b37b953f 100644
--- a/source/_integrations/sma.markdown
+++ b/source/_integrations/sma.markdown
@@ -17,10 +17,15 @@ ha_integration_type: integration
The SMA Solar integration will poll a [SMA](http://www.sma-solar.com/) [(US)](https://www.sma-america.com/) solar inverter, energy meter or battery inverter and present the values as sensors in Home Assistant.
-The integration uses the web interface of the device. Before you start, make sure you are able to connect to the solar inverter from your favorite web browser.
{% include integrations/config_flow.md %}
+## Supported Devices
+
+Not all inverters, energy meters and batteries from SMA are supported.
+
+The integration uses the device's web interface (called webconnect). Before you start, make sure you are able to connect to the solar inverter from your favorite web browser. Devices with the ennexos operating system (like the Tripower X series) and all Energy Meters (SMA Energy Meter and SMA Sunny Home Manager) are not supported.
+
## Sensors
The SMA WebConnect module supports a wide variety of sensors, but not all of these have been mapped in the `pysma` library. Currently available sensors can be found below. Feel free to submit additional sensors to be added as standard sensors to the [pysma library](https://github.com/rklomp/pysma/blob/master/pysma/definitions.py).
diff --git a/source/_integrations/smtp.markdown b/source/_integrations/smtp.markdown
index f4256e6e7f15..d7defba2304f 100644
--- a/source/_integrations/smtp.markdown
+++ b/source/_integrations/smtp.markdown
@@ -1,6 +1,6 @@
---
title: SMTP
-description: Instructions on how to add e-mail notifications to Home Assistant.
+description: Instructions on how to add email notifications to Home Assistant.
ha_category:
- Notifications
ha_iot_class: Cloud Push
@@ -11,9 +11,9 @@ ha_platforms:
ha_integration_type: integration
---
-The SMTP platform allows you to deliver notifications from Home Assistant to an e-mail recipient.
+The SMTP platform allows you to deliver notifications from Home Assistant to an email recipient.
-To enable notification by e-mail in your installation, add the following to your `configuration.yaml` file:
+To enable notification by email in your installation, add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
@@ -24,7 +24,7 @@ notify:
recipient: "YOUR_RECIPIENT"
```
-Check your e-mail provider configuration or help pages to get the correct SMTP settings.
+Check your email provider configuration or help pages to get the correct SMTP settings.
{% configuration %}
name:
@@ -33,11 +33,11 @@ name:
type: string
default: notify
sender:
- description: E-mail address of the sender.
+ description: email address of the sender.
required: true
type: string
recipient:
- description: Default E-mail address of the recipient of the notification. This can be a recipient address or a list of addresses for multiple recipients.
This is where you want to send your E-mail notifications by default (when not specifying `target` in the service call). Any E-mail address(es) specified in the service call's `target` field will override this recipient content.
+ description: Default email address of the recipient of the notification. This can be a recipient address or a list of addresses for multiple recipients.
This is where you want to send your email notifications by default (when not specifying `target` in the service call). Any email address(es) specified in the service call's `target` field will override this recipient content.
required: true
type: [list, string]
server:
@@ -184,10 +184,10 @@ burglar:
To learn more about how to use notifications in your automations, please see the [getting started with automation page](/getting-started/automation/).
-## Specific E-Mail Provider Configuration
+## Specific email provider configuration
-Check below some configurations examples for specific e-mail providers.
-If you are in doubt about the SMTP settings required, check your e-mail provider configuration or help pages for more information about its specific SMTP configuration.
+Check below some configurations examples for specific email providers.
+If you are in doubt about the SMTP settings required, check your email provider configuration or help pages for more information about its specific SMTP configuration.
### Google Mail
diff --git a/source/_integrations/switchbot.markdown b/source/_integrations/switchbot.markdown
index 9176f454e187..35f23a9debb3 100644
--- a/source/_integrations/switchbot.markdown
+++ b/source/_integrations/switchbot.markdown
@@ -45,6 +45,8 @@ If you have multiple devices of the same type, you need to get the BTLE MAC addr
Please note, device names configured in the SwitchBot app are not transferred into Home Assistant.
+Some SwitchBot devices need to be configured within the app before being controlled by Home Assistant, such as calibrating the cover open/close limits or pairing two covers to move together.
+
{% include integrations/config_flow.md %}
## Supported devices
diff --git a/source/_integrations/todo.markdown b/source/_integrations/todo.markdown
index f037f008d344..c7b62ea55af3 100644
--- a/source/_integrations/todo.markdown
+++ b/source/_integrations/todo.markdown
@@ -11,13 +11,13 @@ ha_codeowners:
ha_integration_type: entity
---
-The to-do list integration provides to-do list entities, allowing other integrations
-to integrate to-do lists into Home Assistant. To-do lists are shown on the to-do list
+The **To-do list** {% term integration %} provides to-do list {% term entities %}, allowing other integrations
+to integrate to-do lists into Home Assistant. To-do lists are shown on the **To-do lists**
dashboard for tracking items and whether or not they have been completed.
{% include integrations/building_block_integration.md %}
-For example, [Local To-do](/integrations/local_todo/) is a fully local integration to create to-do lists and tasks within your Home Assistant instance, [Shopping list](/integrations/shopping_list) specifically for shopping that can be added to with Assist, or other integrations work with online services providing to-do list data.
+For example, [Local to-do](/integrations/local_todo/) is a fully local integration to create to-do lists and tasks within your Home Assistant instance, [Shopping list](/integrations/shopping_list) specifically for shopping that can be added to with Assist, or other integrations work with online services providing to-do list data.
## Viewing and managing to-do lists
@@ -30,12 +30,18 @@ in the main sidebar of your Home Assistant instance.
The state of a to-do list entity is a number, which represents the number of
incomplete items in the list.
+## Blueprint to add an item to a dedicated list
+
+This blueprint allows you to create a script to add an
+item to a pre-configured to-do list.
+
+{% my blueprint_import badge blueprint_url="https://community.home-assistant.io/t/add-to-do-item/699193" %}
+
## Services
Some to-do list integrations allow Home Assistant to manage the to-do items in the list. The
services provided by some to-do list entities are described below or you can read more about [Service Calls](/docs/scripts/service-calls/).
-
### Service `todo.get_items`
Get to-do items from a to-do list. A to-do list `target` is selected with a [target selector](/docs/blueprint/selectors/#target-selector). The `data` payload supports the following fields:
@@ -134,3 +140,8 @@ service: todo.remove_completed_items
target:
entity_id: todo.personal_tasks
```
+
+## Related topics
+
+- [Local to-do integration](/integrations/local_todo/)
+- [Shopping list card](/dashboards/shopping-list/)
\ No newline at end of file
diff --git a/source/_integrations/vodafone_station.markdown b/source/_integrations/vodafone_station.markdown
index a727c3835016..b2d0209a179a 100644
--- a/source/_integrations/vodafone_station.markdown
+++ b/source/_integrations/vodafone_station.markdown
@@ -2,7 +2,9 @@
title: Vodafone Station
description: Instructions on how to integrate Vodafone Station routers into Home Assistant.
ha_category:
+ - Button
- Presence detection
+ - Sensor
ha_release: 2023.9
ha_domain: vodafone_station
ha_config_flow: true
diff --git a/source/_integrations/xiaomi_miio.markdown b/source/_integrations/xiaomi_miio.markdown
index ea1b227c08d1..436c5e4aca9a 100644
--- a/source/_integrations/xiaomi_miio.markdown
+++ b/source/_integrations/xiaomi_miio.markdown
@@ -2042,7 +2042,7 @@ pip3 install pycryptodome pybase64 requests
python3 token_extractor.py
```
-3. Provide e-mail address or username for Xiaomi's account, password and country of the account (most used: CN - China Mainland, DE - Germany etc.)
+3. Provide email address or username for Xiaomi's account, password and country of the account (most used: CN - China Mainland, DE - Germany etc.)
4. Script will print out all devices connected to the account with their IP address and tokens for use in Home Assistant.
### Xiaomi Home app (Xiaomi Aqara Gateway, Android & iOS)
diff --git a/source/_posts/2024-03-06-release-20243.markdown b/source/_posts/2024-03-06-release-20243.markdown
index 90e56bd2cd62..cfb97237b577 100644
--- a/source/_posts/2024-03-06-release-20243.markdown
+++ b/source/_posts/2024-03-06-release-20243.markdown
@@ -55,6 +55,9 @@ happen during my absence this beta. π₯°
- [Other noteworthy changes](#other-noteworthy-changes)
- [New integrations](#new-integrations)
- [Integrations now available to set up from the UI](#integrations-now-available-to-set-up-from-the-ui)
+- [Release 2024.3.1 - March 14](#release-202431---march-14)
+- [Release 2024.3.2 - March 22](#release-202432---march-22)
+- [Release 2024.3.3 - March 22](#release-202433---march-22)
- [Need help? Join the community!](#need-help-join-the-community)
- [Backward-incompatible changes](#backward-incompatible-changes)
- [All changes](#all-changes)
@@ -425,6 +428,280 @@ The following integration us now available via the Home Assistant UI:
[@DeerMaximum]: https://github.com/DeerMaximum
[Velux]: /integrations/velux
+## Release 2024.3.1 - March 14
+
+- Fix optional Jellyfin RunTimeTicks ([@j-stienstra] - [#108254])
+- Add auto fan mode icon ([@mattmccormack] - [#110185])
+- Ignore AussieBroadband services that don't support usage information ([@FieldofClay] - [#110253])
+- Use friendly name for camera media source ([@OnFreund] - [#110882])
+- Improve discovering upnp/igd device by always using the SSDP-discovery for the Unique Device Name ([@StevenLooman] - [#111487])
+- Update the numato-gpio dependency of the numato integration to v0.12.0 ([@clssn] - [#112272])
+- Disable updating ZHA coordinator path from discovery info ([@puddly] - [#112415])
+- Bump intents to 2024.3.6 ([@synesthesiam] - [#112515])
+- Weatherflow_cloud backing lib bump ([@jeeftor] - [#112262])
+- Bump weatherflow4py to 0.1.14 ([@jeeftor] - [#112554])
+- Restore the juicenet integration ([@emontnemery] - [#112578])
+- Fix incorrect filtering of unsupported locales in bring-api ([@tr4nt0r] - [#112589])
+- Include pytedee_async logger in tedee integration ([@zweckj] - [#112590])
+- Issue warning modbus configuration when modbus configuration is empty ([@janiversen] - [#112618])
+- modbus scan_interval: 0 is correct configuration ([@janiversen] - [#112619])
+- Update frontend to 20240307.0 ([@bramkragten] - [#112620])
+- Make hass-nabucasa a core requirement ([@emontnemery] - [#112623])
+- Bump aioautomower to 2024.3.0 ([@Thomas55555] - [#112627])
+- Bump pymodbus to v3.6.5 ([@janiversen] - [#112629])
+- Bump axis to v52 ([@Kane610] - [#112632])
+- Update Loqed helper for more logging ([@mikewoudenberg] - [#112646])
+- Bump weatherflow4py to 0.1.17 ([@jeeftor] - [#112661])
+- Bump `aionotion` to 2024.03.0 ([@bachya] - [#112675])
+- Make sure Notion saves new refresh token upon startup ([@bachya] - [#112676])
+- Fix tado climate service ([@alinbalutoiu] - [#112686])
+- Downgrade `pysnmp-lextudio` to version `5.0.34` ([@bieniu] - [#112696])
+- Allow duplicate names in different modbus entities ([@janiversen] - [#112701])
+- Guard against db corruption when renaming entities ([@bdraco] - [#112718])
+- Fix local calendar handling of empty recurrence ids ([@allenporter] - [#112745])
+- Bump pyenphase to 1.19.2 ([@catsmanac] - [#112747])
+- Bump bthome-ble to 3.7.0 ([@thecode] - [#112783])
+- Upgrade `pysnmp-lextudio` to version `6.0.9` ([@lextm] - [#112795])
+- Bump openwrt-luci-rpc version to 1.1.17 ([@mrchi] - [#112796])
+- Fix google_asssistant sensor state reporting ([@jbouwh] - [#112838])
+- Fix MJPEG fallback when still image URL is missing with basic auth ([@bdraco] - [#112861])
+- Bump boschshcpy to 0.2.82 ([@FlyingFeng2021] - [#112890])
+- Add missing translation placeholder in Hydrawise ([@dknowles2] - [#113007])
+- Bump bthome-ble to 3.8.0 ([@Ernst79] - [#113008])
+- Bump axis to v53 ([@Kane610] - [#113019])
+- Fix availability for GIOS index sensors ([@bieniu] - [#113021])
+- Bump ical to 7.0.1 and always use home assistant timezone for local todo dtstart ([@allenporter] - [#113034])
+- Fix some handle leaks in rainforest_raven ([@cottsay] - [#113035])
+- Fix hvac_mode for viessmann devices with heatingCooling mode ([@folke] - [#113054])
+- components/gardena_bluetooth: Improve avaliability reliability ([@alistair23] - [#113056])
+- Fix for controlling Hue switch entities ([@marcelveldt] - [#113064])
+- Bump rova to 0.4.1 ([@LukasdeBoer] - [#113066])
+- Fix colormode attribute on grouped Hue light ([@marcelveldt] - [#113071])
+- Bump axis to v54 ([@Kane610] - [#113091])
+- Bump aiodhcpwatcher to 0.8.1 ([@bdraco] - [#113096])
+- bump pytedee_async to 0.2.16 ([@zweckj] - [#113135])
+- Add message from Bad Request errors to HassioAPIError ([@agners] - [#113144])
+- Bump intents to 2023.3.12 ([@synesthesiam] - [#113160])
+- Bump airthings_ble to 0.7.1 ([@LaStrada] - [#113172])
+- Bump rokuecp to 0.19.2 ([@ctalkington] - [#113198])
+- Bump `brother` library to version `4.0.2` ([@bieniu] - [#113235])
+- Hotfix import error in ZHA for 2024.3.1 patch release ([@frenck] - [#113250])
+- Fix Twitch auth token refresh ([@jonnybergdahl] - [#112833])
+- Fix failing google diagnostics test ([@bdraco] - [#113095])
+- Add diagnostics for IPP ([@ctalkington] - [#113205])
+- Apply suggestion failures fail supervisor repair ([@mdegat01] - [#113372])
+- Supervisor issues update retries on failure ([@mdegat01] - [#113373])
+- Add loggers to Husqvarna Automower ([@Thomas55555] - [#113381])
+- Bump pyipp to 0.15.0 ([@ctalkington] - [#113204])
+
+[#108254]: https://github.com/home-assistant/core/pull/108254
+[#110185]: https://github.com/home-assistant/core/pull/110185
+[#110253]: https://github.com/home-assistant/core/pull/110253
+[#110882]: https://github.com/home-assistant/core/pull/110882
+[#111133]: https://github.com/home-assistant/core/pull/111133
+[#111441]: https://github.com/home-assistant/core/pull/111441
+[#111487]: https://github.com/home-assistant/core/pull/111487
+[#111648]: https://github.com/home-assistant/core/pull/111648
+[#112262]: https://github.com/home-assistant/core/pull/112262
+[#112272]: https://github.com/home-assistant/core/pull/112272
+[#112415]: https://github.com/home-assistant/core/pull/112415
+[#112515]: https://github.com/home-assistant/core/pull/112515
+[#112516]: https://github.com/home-assistant/core/pull/112516
+[#112554]: https://github.com/home-assistant/core/pull/112554
+[#112578]: https://github.com/home-assistant/core/pull/112578
+[#112589]: https://github.com/home-assistant/core/pull/112589
+[#112590]: https://github.com/home-assistant/core/pull/112590
+[#112618]: https://github.com/home-assistant/core/pull/112618
+[#112619]: https://github.com/home-assistant/core/pull/112619
+[#112620]: https://github.com/home-assistant/core/pull/112620
+[#112623]: https://github.com/home-assistant/core/pull/112623
+[#112627]: https://github.com/home-assistant/core/pull/112627
+[#112629]: https://github.com/home-assistant/core/pull/112629
+[#112632]: https://github.com/home-assistant/core/pull/112632
+[#112646]: https://github.com/home-assistant/core/pull/112646
+[#112661]: https://github.com/home-assistant/core/pull/112661
+[#112675]: https://github.com/home-assistant/core/pull/112675
+[#112676]: https://github.com/home-assistant/core/pull/112676
+[#112686]: https://github.com/home-assistant/core/pull/112686
+[#112696]: https://github.com/home-assistant/core/pull/112696
+[#112701]: https://github.com/home-assistant/core/pull/112701
+[#112718]: https://github.com/home-assistant/core/pull/112718
+[#112745]: https://github.com/home-assistant/core/pull/112745
+[#112747]: https://github.com/home-assistant/core/pull/112747
+[#112783]: https://github.com/home-assistant/core/pull/112783
+[#112795]: https://github.com/home-assistant/core/pull/112795
+[#112796]: https://github.com/home-assistant/core/pull/112796
+[#112833]: https://github.com/home-assistant/core/pull/112833
+[#112838]: https://github.com/home-assistant/core/pull/112838
+[#112861]: https://github.com/home-assistant/core/pull/112861
+[#112890]: https://github.com/home-assistant/core/pull/112890
+[#113007]: https://github.com/home-assistant/core/pull/113007
+[#113008]: https://github.com/home-assistant/core/pull/113008
+[#113019]: https://github.com/home-assistant/core/pull/113019
+[#113021]: https://github.com/home-assistant/core/pull/113021
+[#113034]: https://github.com/home-assistant/core/pull/113034
+[#113035]: https://github.com/home-assistant/core/pull/113035
+[#113054]: https://github.com/home-assistant/core/pull/113054
+[#113056]: https://github.com/home-assistant/core/pull/113056
+[#113064]: https://github.com/home-assistant/core/pull/113064
+[#113066]: https://github.com/home-assistant/core/pull/113066
+[#113071]: https://github.com/home-assistant/core/pull/113071
+[#113091]: https://github.com/home-assistant/core/pull/113091
+[#113095]: https://github.com/home-assistant/core/pull/113095
+[#113096]: https://github.com/home-assistant/core/pull/113096
+[#113135]: https://github.com/home-assistant/core/pull/113135
+[#113144]: https://github.com/home-assistant/core/pull/113144
+[#113160]: https://github.com/home-assistant/core/pull/113160
+[#113172]: https://github.com/home-assistant/core/pull/113172
+[#113198]: https://github.com/home-assistant/core/pull/113198
+[#113204]: https://github.com/home-assistant/core/pull/113204
+[#113205]: https://github.com/home-assistant/core/pull/113205
+[#113235]: https://github.com/home-assistant/core/pull/113235
+[#113250]: https://github.com/home-assistant/core/pull/113250
+[#113372]: https://github.com/home-assistant/core/pull/113372
+[#113373]: https://github.com/home-assistant/core/pull/113373
+[#113381]: https://github.com/home-assistant/core/pull/113381
+[@Ernst79]: https://github.com/Ernst79
+[@FieldofClay]: https://github.com/FieldofClay
+[@FlyingFeng2021]: https://github.com/FlyingFeng2021
+[@Kane610]: https://github.com/Kane610
+[@LaStrada]: https://github.com/LaStrada
+[@LukasdeBoer]: https://github.com/LukasdeBoer
+[@OnFreund]: https://github.com/OnFreund
+[@StevenLooman]: https://github.com/StevenLooman
+[@Thomas55555]: https://github.com/Thomas55555
+[@agners]: https://github.com/agners
+[@alinbalutoiu]: https://github.com/alinbalutoiu
+[@alistair23]: https://github.com/alistair23
+[@allenporter]: https://github.com/allenporter
+[@bachya]: https://github.com/bachya
+[@balloob]: https://github.com/balloob
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@bramkragten]: https://github.com/bramkragten
+[@catsmanac]: https://github.com/catsmanac
+[@clssn]: https://github.com/clssn
+[@cottsay]: https://github.com/cottsay
+[@ctalkington]: https://github.com/ctalkington
+[@dknowles2]: https://github.com/dknowles2
+[@emontnemery]: https://github.com/emontnemery
+[@folke]: https://github.com/folke
+[@frenck]: https://github.com/frenck
+[@j-stienstra]: https://github.com/j-stienstra
+[@janiversen]: https://github.com/janiversen
+[@jbouwh]: https://github.com/jbouwh
+[@jeeftor]: https://github.com/jeeftor
+[@jonnybergdahl]: https://github.com/jonnybergdahl
+[@lextm]: https://github.com/lextm
+[@marcelveldt]: https://github.com/marcelveldt
+[@mattmccormack]: https://github.com/mattmccormack
+[@mdegat01]: https://github.com/mdegat01
+[@mikewoudenberg]: https://github.com/mikewoudenberg
+[@mrchi]: https://github.com/mrchi
+[@puddly]: https://github.com/puddly
+[@synesthesiam]: https://github.com/synesthesiam
+[@thecode]: https://github.com/thecode
+[@tr4nt0r]: https://github.com/tr4nt0r
+[@zweckj]: https://github.com/zweckj
+
+## Release 2024.3.2 - March 22
+
+- Streamline Notion config entry updates (refresh token and user ID) ([@bachya] - [#112832])
+- Bump aioautomower to 2024.3.2 ([@Thomas55555] - [#113162])
+- Bump aioautomower to 2024.3.3 ([@Thomas55555] - [#113430])
+- Check for EA release channel for UniFi Protect ([@AngellusMortis] - [#113432])
+- Bump `pysnmp-lextudio` to version `6.0.11` ([@lextm] - [#113463])
+- Tado fix water heater ([@erwindouna] - [#113464])
+- Bump aiodhcpwatcher to 0.8.2 ([@bdraco] - [#113466])
+- Bump axis to v55 ([@Kane610] - [#113479])
+- Bump croniter to 2.0.2 ([@dgomes] - [#113494])
+- Revert setting communication delay in Risco init ([@OnFreund] - [#113497])
+- Bump pyrisco to 0.5.10 ([@OnFreund] - [#113505])
+- Fix missing context when running script from template entity ([@emontnemery] - [#113523])
+- Bump ical to 7.0.3 to fix local-todo persisted with invalid DTSTART values ([@allenporter] - [#113526])
+- Fix Airthings BLE illuminance sensor name ([@joostlek] - [#113560])
+- Ignore Shelly block update with cfgChanged None ([@thecode] - [#113587])
+- Catch `TimeoutError` in `Brother` config flow ([@bieniu] - [#113593])
+- Bump axis to v56 ([@Kane610] - [#113608])
+- Bump pyunifiprotect to 5.0.1 ([@AngellusMortis] - [#113630])
+- Bump pyunifiprotect to 5.0.2 ([@AngellusMortis] - [#113651])
+- Add removal condition to Shelly battery sensor ([@bieniu] - [#113703])
+- Bump aioraven to 0.5.2 ([@cottsay] - [#113714])
+- Fix unknown values in onewire ([@epenet] - [#113731])
+- Bump pymodbus v3.6.6 ([@janiversen] - [#113796])
+- Catch API errors in cast media_player service handlers ([@emontnemery] - [#113839])
+- Bump pychromecast to 14.0.1 ([@emontnemery] - [#113841])
+- Fix startup race in cast ([@emontnemery] - [#113843])
+- Redact the area of traccar server geofences ([@ludeeus] - [#113861])
+- Bump pytedee_async to 0.2.17 ([@zweckj] - [#113933])
+- Bump axis to v57 ([@Kane610] - [#113952])
+
+[#111133]: https://github.com/home-assistant/core/pull/111133
+[#111441]: https://github.com/home-assistant/core/pull/111441
+[#111648]: https://github.com/home-assistant/core/pull/111648
+[#112516]: https://github.com/home-assistant/core/pull/112516
+[#112832]: https://github.com/home-assistant/core/pull/112832
+[#113162]: https://github.com/home-assistant/core/pull/113162
+[#113249]: https://github.com/home-assistant/core/pull/113249
+[#113430]: https://github.com/home-assistant/core/pull/113430
+[#113432]: https://github.com/home-assistant/core/pull/113432
+[#113463]: https://github.com/home-assistant/core/pull/113463
+[#113464]: https://github.com/home-assistant/core/pull/113464
+[#113466]: https://github.com/home-assistant/core/pull/113466
+[#113479]: https://github.com/home-assistant/core/pull/113479
+[#113494]: https://github.com/home-assistant/core/pull/113494
+[#113497]: https://github.com/home-assistant/core/pull/113497
+[#113505]: https://github.com/home-assistant/core/pull/113505
+[#113523]: https://github.com/home-assistant/core/pull/113523
+[#113526]: https://github.com/home-assistant/core/pull/113526
+[#113560]: https://github.com/home-assistant/core/pull/113560
+[#113587]: https://github.com/home-assistant/core/pull/113587
+[#113593]: https://github.com/home-assistant/core/pull/113593
+[#113608]: https://github.com/home-assistant/core/pull/113608
+[#113630]: https://github.com/home-assistant/core/pull/113630
+[#113651]: https://github.com/home-assistant/core/pull/113651
+[#113703]: https://github.com/home-assistant/core/pull/113703
+[#113714]: https://github.com/home-assistant/core/pull/113714
+[#113731]: https://github.com/home-assistant/core/pull/113731
+[#113796]: https://github.com/home-assistant/core/pull/113796
+[#113839]: https://github.com/home-assistant/core/pull/113839
+[#113841]: https://github.com/home-assistant/core/pull/113841
+[#113843]: https://github.com/home-assistant/core/pull/113843
+[#113861]: https://github.com/home-assistant/core/pull/113861
+[#113933]: https://github.com/home-assistant/core/pull/113933
+[#113952]: https://github.com/home-assistant/core/pull/113952
+[@AngellusMortis]: https://github.com/AngellusMortis
+[@Kane610]: https://github.com/Kane610
+[@OnFreund]: https://github.com/OnFreund
+[@Thomas55555]: https://github.com/Thomas55555
+[@allenporter]: https://github.com/allenporter
+[@bachya]: https://github.com/bachya
+[@balloob]: https://github.com/balloob
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@cottsay]: https://github.com/cottsay
+[@dgomes]: https://github.com/dgomes
+[@emontnemery]: https://github.com/emontnemery
+[@epenet]: https://github.com/epenet
+[@erwindouna]: https://github.com/erwindouna
+[@frenck]: https://github.com/frenck
+[@janiversen]: https://github.com/janiversen
+[@joostlek]: https://github.com/joostlek
+[@lextm]: https://github.com/lextm
+[@ludeeus]: https://github.com/ludeeus
+[@thecode]: https://github.com/thecode
+[@zweckj]: https://github.com/zweckj
+
+## Release 2024.3.3 - March 22
+
+- Update cosign to 2.2.3 ([@frenck] - [#113996])
+- Bump axis to v58 ([@Kane610] - [#114008])
+
+[#113996]: https://github.com/home-assistant/core/pull/113996
+[#114008]: https://github.com/home-assistant/core/pull/114008
+[@frenck]: https://github.com/frenck
+[@Kane610]: https://github.com/Kane610
+
## Need help? Join the community!
Home Assistant has a great community of users who are all more than willing
diff --git a/source/_posts/2024-16-03-voice-assistant-community-contest-winners-annoucement.markdown b/source/_posts/2024-16-03-voice-assistant-community-contest-winners-annoucement.markdown
new file mode 100644
index 000000000000..e629e1e76405
--- /dev/null
+++ b/source/_posts/2024-16-03-voice-assistant-community-contest-winners-annoucement.markdown
@@ -0,0 +1,129 @@
+---
+layout: post
+title: "And the winners of our voice assistant community contest are π₯ ..."
+description: "We organized a voice assistant contest. Here are the winners!"
+date: 2024-03-16 00:00:01
+date_formatted: "March 16, 2024"
+author: Jean-LoΓ―c Pouffier
+comments: true
+categories: Assist
+og_image: /images/blog/2024-01-11-voice-assistant-contest/banner.png
+---
+
+![](/images/blog/2024-01-11-voice-assistant-contest/banner.png)
+
+2023 was the [Year of the Voice](/blog/2022/12/20/year-of-voice/). It was a yearly goal to let users control Home Assistant in their own language. We organized a contest to celebrate what our voice assistants could enable with the community. The contest entries have been all amazing, the work produced outstanding. Personally, I learnt so much just reviewing all the entries, I learnt that our community is so creative and relentless. My personal project list grew quite a lot as I want to implement half of the entries at home! Today is the day we announce the winners!
+
+
+
+It is important to note that while Year of the Voice is over, voice is now part of Home Assistant just like automations or dashboards.
+The sharp focus is over, but voice will get updates forever, just like every other part of Home Assistant.
+
+The contest was split into 4 categories:
+
+- Most creative satellite ideas
+- Best Starting Guides
+- Best events organized, best group effort
+- Best voice experiences
+
+You can read more about the contest specifics in the [blog post announcing the contest](/blog/2024/01/17/voice-assistant-contest/).
+
+Due to a lack of entries, we removed the category βBest events organized, best group effortβ.
+
+
+## Most creative satellite ideas
+
+The competition was the most fierce in that category!
+
+On the one hand, it pleases me to see how many of you managed to create something unique, quirky, and creative using our voice assistant functionalities. This means that our voice assistant is indeed aligned with our value of Choice. On the other hand, it made picking a winner even more complex π¬.
+
+So without further ado, the winner of the βmost creative satellite ideasβ category is [dirtyharriv](https://community.home-assistant.io/u/dirtyharriv) and their [Bender Voice Assistant](https://community.home-assistant.io/t/bender-voice-assistant/682041).
+
+Congratulations on your entry! Your voice assistant embodies perfectly what we think when we talk about choice: Custom wake word, custom voice, in-character responses, a beautiful 3D printed case, LEDsβ¦ Itβs perfect!
+
+
+
+**[Dirtyharriv](https://community.home-assistant.io/u/dirtyharriv) wins a Home Assistant Green, a Home Assistant SkyConnect, and a spot on our livestream on the 10th of April to present their project!**
+
+We also have a lot of runners-up in this category, **they all win a Home Assistant SkyConnect!**
+
+- [Smartsaver](https://community.home-assistant.io/u/smartsaver) with their [Assist Mirror Satellite](https://community.home-assistant.io/t/assist-mirror-satellite/699264).
+- [Abrakhim](https://community.home-assistant.io/u/abrakhim) with their [R2D2 Satellite](https://community.home-assistant.io/t/r2d2-satellite/690701).
+- [Journeywithlogan](https://community.home-assistant.io/u/journeywithlogan) with their [LOLA59 Voice Assistant](https://community.home-assistant.io/t/lola59-voice-assistant-multisensor-apple-airplay/701723).
+- [DaWheelz](https://community.home-assistant.io/u/DaWheelz) with their [Jarvis Assistant](https://community.home-assistant.io/t/jarvis-assistant/695720).
+- [Johnd126](https://community.home-assistant.io/u/johnd126) with their [Old timey radio](https://community.home-assistant.io/t/my-old-timey-radio-voice-assistant-satellite-contest-entry/698238).
+- [NonaSuomy](https://community.home-assistant.io/u/NonaSuomy) with their [Vector voice assistant](https://community.home-assistant.io/t/vector-home-assistant-control/675165).
+- [Tesat](https://community.home-assistant.io/u/Tesat) with their [SmoT robot](https://community.home-assistant.io/t/smot-your-homeassistant-companion-robot/696369).
+- [MetalOnes](https://community.home-assistant.io/u/MetalOnes) with their [Vintage Radio](https://community.home-assistant.io/t/vintage-radio-voice-assistant/699049).
+- [Ejlane](https://community.home-assistant.io/u/ejlane) with their [Death Star Voice Assistant](https://community.home-assistant.io/t/death-star-voice-assistant/701706).
+- [Tpage](https://community.home-assistant.io/u/tpage) with their [Egg Voice Assistant](https://community.home-assistant.io/t/egg-voice-assistant/698819).
+
+## Best Starting Guides
+
+Again, lots of entries in this category, it amazes me to see how many of you tried hard to provide something that could be re-used by other members of the community, whether it was a device that you can purchase, hack, or build yourself, or a series of videos you can follow to set something up in your own home.
+
+Building something is already hard, but building something to offer it to others is even harder. This category was, to me, the category with the biggest amount of work done by the contestants, congratulations to you all.
+
+The winner of the βbest starting guidesβ category is [landonr](https://community.home-assistant.io/u/landonr) with their [homeThing S3](https://community.home-assistant.io/t/homething-s3-ipod-smart-home-remote-with-voice-control/702666).
+
+The homeThing blew us away, it's an iPod-style remote for your home that ticks so many boxes: Rotary dial, screen, IR blaster, microphone, speaker, battery ...
+
+Everything is open source, up to the custom PCB that [landonr](https://community.home-assistant.io/u/landonr) created. The ESPHome configuration is open source. This is the perfect device to have in your home!
+
+
+
+**[Landonr](https://community.home-assistant.io/u/landonr) wins a Home Assistant Green, a Home Assistant SkyConnect, and a spot on our livestream on the 10th of April to present their project!**
+
+We also have a few runners-up in this category, **they all win a Home Assistant SkyConnect!**
+
+- [FutureProofHomes](https://community.home-assistant.io/u/FutureProofHomes) and their [video series on the Wyoming protocol](https://community.home-assistant.io/t/futureproofhomes-wyoming-enhancements-yt-series-contest-entry/693723).
+- [Thorsten-voice](https://community.home-assistant.io/u/thorsten-voice) and their [tutorial series βHome Assistant β€οΈ Voiceβ](https://community.home-assistant.io/t/yt-tutorial-series-home-assistant-voice-cooking-recipe-style/696644).
+- [Thatguy_za](https://community.home-assistant.io/u/thatguy_za) and their [simple ESP32 voice assistant](https://community.home-assistant.io/t/my-esp32-based-voice-assistant-with-wake-word/697153).
+
+## Best voice experiences
+
+This category was not about hardware, it was about providing the best software experience that elevates the voice experience in Home Assistant. I had the most fun reviewing this category because most of the entries can be re-used at home without any particular hardware! Instant improvement of my system!
+
+The winner of the βbest voice experiencesβ category is [dinki](https://community.home-assistant.io/u/dinki) with their [View Assist](https://community.home-assistant.io/t/view-assist-visual-feedback-for-assist-voice-assistant-on-an-android-tablet-install-info-provided-on-wiki/699659).
+
+View Assist is a complete UI for Assist running on an old Android tablet that tries to replicate the UI of devices such as an Amazon Echo Show. It is very complete and well-documented, and I think can be a candidate for fully replacing a screen-based voice assistant such as an Amazon Echo Show or a Google Nest Hub.
+
+
+
+**[Dinki](https://community.home-assistant.io/u/dinki) wins a Home Assistant Green, a Home Assistant SkyConnect, and a spot on our livestream on the 10th of April to present their project!**
+
+We also have a lot of runners-up in this category, **they all win a Home Assistant SkyConnect!**
+
+- [ACiDGRiM](https://community.home-assistant.io/u/ACiDGRiM) and their [NodeRed ChatGPT-powered bedtime story agent](https://community.home-assistant.io/t/replace-yourself-with-ai-nodered-bedtime-story-from-chatgpt/699843).
+- [Lajos](https://community.home-assistant.io/u/Lajos) and their [improvement of the S3 Box firmware to display text](https://community.home-assistant.io/t/a-jrpg-style-conversation-with-the-voice-assistant-on-the-s3-box-3/697172).
+- [Amorfinv](https://community.home-assistant.io/u/amorfinv) and their [dice-activated voice assistant](https://community.home-assistant.io/t/dice-activated-voice-assistant/680506).
+- [JT1](https://community.home-assistant.io/u/JT1) and their [implementation of reminders in assist](https://community.home-assistant.io/t/local-voice-reminders-created-with-assist/698875).
+- [Nfragment](https://community.home-assistant.io/u/nfragment) and their [Linux UI using wyoming satellite](https://community.home-assistant.io/t/advanced-virtual-assistant-using-linux-as-a-wyoming-satellite/702013).
+- [DonNL](https://community.home-assistant.io/u/DonNL) and their [simple Assist goodnight routine](https://community.home-assistant.io/t/voice-assistent-contest-assist-goodnight-routine-for-everyone/676224).
+- [Richard_Albritton](https://community.home-assistant.io/u/Richard_Albritton) and their [cute Executive Dysfunction Automated Audio Medication Reminder monster](https://community.home-assistant.io/t/executive-dysfunction-automated-audio-medication-reminder-proof-of-concept/700668).
+- [Wishy](https://community.home-assistant.io/u/wishy) and their [food label printing solution](https://community.home-assistant.io/t/food-labels-via-a-dymo-label-printer/701986).
+
+I want to give a small shout-out to one of the runner-up: [Lajos](https://community.home-assistant.io/u/Lajos) and their [improvement of the S3 Box firmware to display text](https://community.home-assistant.io/t/a-jrpg-style-conversation-with-the-voice-assistant-on-the-s3-box-3/697172), you did something I personally considered impossible in the S3 box, and never tried to implement it because of this false assumption. Seeing your entry pushed me to give it a try and I am happy to announce that [very soon](https://github.com/esphome/firmware/pull/177), the official voice assistant firmware for the S3 boxes will allow everyone to display the spoken text of the request and the response on the screen.
+
+## Community choice
+
+We also asked you to vote for your favorite entry, the votes were fierce but one entry skyrocketed above the rest.
+
+It is my pleasure to announce that the community vote is [Rellu](https://community.home-assistant.io/u/Rellu) and their [HA-Visual-Voice-Assistant](https://community.home-assistant.io/t/voice-assistant-contest-ha-visual-voice-assistant/687593).
+
+HA-Visual-Voice-Assistant is an impressive voice experience that creates on-the-fly AI-generated videos of characters as visual feedback for Assist. The video that [Rellu](https://community.home-assistant.io/u/Rellu) provides in his entry is really complete, with the ability to change characters and language directly via voice. Great job!
+
+
+
+**[Rellu](https://community.home-assistant.io/u/Rellu) wins a Home Assistant Green, a Home Assistant SkyConnect, and a spot on our livestream on the 10th of April to present their project!**
+
+## Thank you
+
+Thank you to the Home Assistant community for subscribing to [Home Assistant Cloud](https://www.nabucasa.com/) to support Year of the Voice and the development of Home Assistant, ESPHome, and other projects in general.
+
+We will contact all winners and runners-up in the next few days to organize shipping.
+We are looking forward to having the winners on the livestream with us on the 10th of April.
+
+I hope you enjoyed this first Home Assistant contest, rest assured that it wonβt be the last.
+
+JLo, Over and Out.
\ No newline at end of file
diff --git a/source/changelogs/core-2024.3.markdown b/source/changelogs/core-2024.3.markdown
index 99db11ff3ace..133864a49aee 100644
--- a/source/changelogs/core-2024.3.markdown
+++ b/source/changelogs/core-2024.3.markdown
@@ -1016,6 +1016,280 @@ For a summary in a more readable format:
- Bump pytedee_async to 0.2.15 ([@zweckj] - [#112495])
- Allow start_time >= 1.1.7 ([@emontnemery] - [#112500])
+## Release 2024.3.1 - March 14
+
+- Fix optional Jellyfin RunTimeTicks ([@j-stienstra] - [#108254])
+- Add auto fan mode icon ([@mattmccormack] - [#110185])
+- Ignore AussieBroadband services that don't support usage information ([@FieldofClay] - [#110253])
+- Use friendly name for camera media source ([@OnFreund] - [#110882])
+- Improve discovering upnp/igd device by always using the SSDP-discovery for the Unique Device Name ([@StevenLooman] - [#111487])
+- Update the numato-gpio dependency of the numato integration to v0.12.0 ([@clssn] - [#112272])
+- Disable updating ZHA coordinator path from discovery info ([@puddly] - [#112415])
+- Bump intents to 2024.3.6 ([@synesthesiam] - [#112515])
+- Weatherflow_cloud backing lib bump ([@jeeftor] - [#112262])
+- Bump weatherflow4py to 0.1.14 ([@jeeftor] - [#112554])
+- Restore the juicenet integration ([@emontnemery] - [#112578])
+- Fix incorrect filtering of unsupported locales in bring-api ([@tr4nt0r] - [#112589])
+- Include pytedee_async logger in tedee integration ([@zweckj] - [#112590])
+- Issue warning modbus configuration when modbus configuration is empty ([@janiversen] - [#112618])
+- modbus scan_interval: 0 is correct configuration ([@janiversen] - [#112619])
+- Update frontend to 20240307.0 ([@bramkragten] - [#112620])
+- Make hass-nabucasa a core requirement ([@emontnemery] - [#112623])
+- Bump aioautomower to 2024.3.0 ([@Thomas55555] - [#112627])
+- Bump pymodbus to v3.6.5 ([@janiversen] - [#112629])
+- Bump axis to v52 ([@Kane610] - [#112632])
+- Update Loqed helper for more logging ([@mikewoudenberg] - [#112646])
+- Bump weatherflow4py to 0.1.17 ([@jeeftor] - [#112661])
+- Bump `aionotion` to 2024.03.0 ([@bachya] - [#112675])
+- Make sure Notion saves new refresh token upon startup ([@bachya] - [#112676])
+- Fix tado climate service ([@alinbalutoiu] - [#112686])
+- Downgrade `pysnmp-lextudio` to version `5.0.34` ([@bieniu] - [#112696])
+- Allow duplicate names in different modbus entities ([@janiversen] - [#112701])
+- Guard against db corruption when renaming entities ([@bdraco] - [#112718])
+- Fix local calendar handling of empty recurrence ids ([@allenporter] - [#112745])
+- Bump pyenphase to 1.19.2 ([@catsmanac] - [#112747])
+- Bump bthome-ble to 3.7.0 ([@thecode] - [#112783])
+- Upgrade `pysnmp-lextudio` to version `6.0.9` ([@lextm] - [#112795])
+- Bump openwrt-luci-rpc version to 1.1.17 ([@mrchi] - [#112796])
+- Fix google_asssistant sensor state reporting ([@jbouwh] - [#112838])
+- Fix MJPEG fallback when still image URL is missing with basic auth ([@bdraco] - [#112861])
+- Bump boschshcpy to 0.2.82 ([@FlyingFeng2021] - [#112890])
+- Add missing translation placeholder in Hydrawise ([@dknowles2] - [#113007])
+- Bump bthome-ble to 3.8.0 ([@Ernst79] - [#113008])
+- Bump axis to v53 ([@Kane610] - [#113019])
+- Fix availability for GIOS index sensors ([@bieniu] - [#113021])
+- Bump ical to 7.0.1 and always use home assistant timezone for local todo dtstart ([@allenporter] - [#113034])
+- Fix some handle leaks in rainforest_raven ([@cottsay] - [#113035])
+- Fix hvac_mode for viessmann devices with heatingCooling mode ([@folke] - [#113054])
+- components/gardena_bluetooth: Improve avaliability reliability ([@alistair23] - [#113056])
+- Fix for controlling Hue switch entities ([@marcelveldt] - [#113064])
+- Bump rova to 0.4.1 ([@LukasdeBoer] - [#113066])
+- Fix colormode attribute on grouped Hue light ([@marcelveldt] - [#113071])
+- Bump axis to v54 ([@Kane610] - [#113091])
+- Bump aiodhcpwatcher to 0.8.1 ([@bdraco] - [#113096])
+- bump pytedee_async to 0.2.16 ([@zweckj] - [#113135])
+- Add message from Bad Request errors to HassioAPIError ([@agners] - [#113144])
+- Bump intents to 2023.3.12 ([@synesthesiam] - [#113160])
+- Bump airthings_ble to 0.7.1 ([@LaStrada] - [#113172])
+- Bump rokuecp to 0.19.2 ([@ctalkington] - [#113198])
+- Bump `brother` library to version `4.0.2` ([@bieniu] - [#113235])
+- Hotfix import error in ZHA for 2024.3.1 patch release ([@frenck] - [#113250])
+- Fix Twitch auth token refresh ([@jonnybergdahl] - [#112833])
+- Fix failing google diagnostics test ([@bdraco] - [#113095])
+- Add diagnostics for IPP ([@ctalkington] - [#113205])
+- Apply suggestion failures fail supervisor repair ([@mdegat01] - [#113372])
+- Supervisor issues update retries on failure ([@mdegat01] - [#113373])
+- Add loggers to Husqvarna Automower ([@Thomas55555] - [#113381])
+- Bump pyipp to 0.15.0 ([@ctalkington] - [#113204])
+
+[#108254]: https://github.com/home-assistant/core/pull/108254
+[#110185]: https://github.com/home-assistant/core/pull/110185
+[#110253]: https://github.com/home-assistant/core/pull/110253
+[#110882]: https://github.com/home-assistant/core/pull/110882
+[#111133]: https://github.com/home-assistant/core/pull/111133
+[#111441]: https://github.com/home-assistant/core/pull/111441
+[#111487]: https://github.com/home-assistant/core/pull/111487
+[#111648]: https://github.com/home-assistant/core/pull/111648
+[#112262]: https://github.com/home-assistant/core/pull/112262
+[#112272]: https://github.com/home-assistant/core/pull/112272
+[#112415]: https://github.com/home-assistant/core/pull/112415
+[#112515]: https://github.com/home-assistant/core/pull/112515
+[#112516]: https://github.com/home-assistant/core/pull/112516
+[#112554]: https://github.com/home-assistant/core/pull/112554
+[#112578]: https://github.com/home-assistant/core/pull/112578
+[#112589]: https://github.com/home-assistant/core/pull/112589
+[#112590]: https://github.com/home-assistant/core/pull/112590
+[#112618]: https://github.com/home-assistant/core/pull/112618
+[#112619]: https://github.com/home-assistant/core/pull/112619
+[#112620]: https://github.com/home-assistant/core/pull/112620
+[#112623]: https://github.com/home-assistant/core/pull/112623
+[#112627]: https://github.com/home-assistant/core/pull/112627
+[#112629]: https://github.com/home-assistant/core/pull/112629
+[#112632]: https://github.com/home-assistant/core/pull/112632
+[#112646]: https://github.com/home-assistant/core/pull/112646
+[#112661]: https://github.com/home-assistant/core/pull/112661
+[#112675]: https://github.com/home-assistant/core/pull/112675
+[#112676]: https://github.com/home-assistant/core/pull/112676
+[#112686]: https://github.com/home-assistant/core/pull/112686
+[#112696]: https://github.com/home-assistant/core/pull/112696
+[#112701]: https://github.com/home-assistant/core/pull/112701
+[#112718]: https://github.com/home-assistant/core/pull/112718
+[#112745]: https://github.com/home-assistant/core/pull/112745
+[#112747]: https://github.com/home-assistant/core/pull/112747
+[#112783]: https://github.com/home-assistant/core/pull/112783
+[#112795]: https://github.com/home-assistant/core/pull/112795
+[#112796]: https://github.com/home-assistant/core/pull/112796
+[#112833]: https://github.com/home-assistant/core/pull/112833
+[#112838]: https://github.com/home-assistant/core/pull/112838
+[#112861]: https://github.com/home-assistant/core/pull/112861
+[#112890]: https://github.com/home-assistant/core/pull/112890
+[#113007]: https://github.com/home-assistant/core/pull/113007
+[#113008]: https://github.com/home-assistant/core/pull/113008
+[#113019]: https://github.com/home-assistant/core/pull/113019
+[#113021]: https://github.com/home-assistant/core/pull/113021
+[#113034]: https://github.com/home-assistant/core/pull/113034
+[#113035]: https://github.com/home-assistant/core/pull/113035
+[#113054]: https://github.com/home-assistant/core/pull/113054
+[#113056]: https://github.com/home-assistant/core/pull/113056
+[#113064]: https://github.com/home-assistant/core/pull/113064
+[#113066]: https://github.com/home-assistant/core/pull/113066
+[#113071]: https://github.com/home-assistant/core/pull/113071
+[#113091]: https://github.com/home-assistant/core/pull/113091
+[#113095]: https://github.com/home-assistant/core/pull/113095
+[#113096]: https://github.com/home-assistant/core/pull/113096
+[#113135]: https://github.com/home-assistant/core/pull/113135
+[#113144]: https://github.com/home-assistant/core/pull/113144
+[#113160]: https://github.com/home-assistant/core/pull/113160
+[#113172]: https://github.com/home-assistant/core/pull/113172
+[#113198]: https://github.com/home-assistant/core/pull/113198
+[#113204]: https://github.com/home-assistant/core/pull/113204
+[#113205]: https://github.com/home-assistant/core/pull/113205
+[#113235]: https://github.com/home-assistant/core/pull/113235
+[#113250]: https://github.com/home-assistant/core/pull/113250
+[#113372]: https://github.com/home-assistant/core/pull/113372
+[#113373]: https://github.com/home-assistant/core/pull/113373
+[#113381]: https://github.com/home-assistant/core/pull/113381
+[@Ernst79]: https://github.com/Ernst79
+[@FieldofClay]: https://github.com/FieldofClay
+[@FlyingFeng2021]: https://github.com/FlyingFeng2021
+[@Kane610]: https://github.com/Kane610
+[@LaStrada]: https://github.com/LaStrada
+[@LukasdeBoer]: https://github.com/LukasdeBoer
+[@OnFreund]: https://github.com/OnFreund
+[@StevenLooman]: https://github.com/StevenLooman
+[@Thomas55555]: https://github.com/Thomas55555
+[@agners]: https://github.com/agners
+[@alinbalutoiu]: https://github.com/alinbalutoiu
+[@alistair23]: https://github.com/alistair23
+[@allenporter]: https://github.com/allenporter
+[@bachya]: https://github.com/bachya
+[@balloob]: https://github.com/balloob
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@bramkragten]: https://github.com/bramkragten
+[@catsmanac]: https://github.com/catsmanac
+[@clssn]: https://github.com/clssn
+[@cottsay]: https://github.com/cottsay
+[@ctalkington]: https://github.com/ctalkington
+[@dknowles2]: https://github.com/dknowles2
+[@emontnemery]: https://github.com/emontnemery
+[@folke]: https://github.com/folke
+[@frenck]: https://github.com/frenck
+[@j-stienstra]: https://github.com/j-stienstra
+[@janiversen]: https://github.com/janiversen
+[@jbouwh]: https://github.com/jbouwh
+[@jeeftor]: https://github.com/jeeftor
+[@jonnybergdahl]: https://github.com/jonnybergdahl
+[@lextm]: https://github.com/lextm
+[@marcelveldt]: https://github.com/marcelveldt
+[@mattmccormack]: https://github.com/mattmccormack
+[@mdegat01]: https://github.com/mdegat01
+[@mikewoudenberg]: https://github.com/mikewoudenberg
+[@mrchi]: https://github.com/mrchi
+[@puddly]: https://github.com/puddly
+[@synesthesiam]: https://github.com/synesthesiam
+[@thecode]: https://github.com/thecode
+[@tr4nt0r]: https://github.com/tr4nt0r
+[@zweckj]: https://github.com/zweckj
+
+## Release 2024.3.2 - March 22
+
+- Streamline Notion config entry updates (refresh token and user ID) ([@bachya] - [#112832])
+- Bump aioautomower to 2024.3.2 ([@Thomas55555] - [#113162])
+- Bump aioautomower to 2024.3.3 ([@Thomas55555] - [#113430])
+- Check for EA release channel for UniFi Protect ([@AngellusMortis] - [#113432])
+- Bump `pysnmp-lextudio` to version `6.0.11` ([@lextm] - [#113463])
+- Tado fix water heater ([@erwindouna] - [#113464])
+- Bump aiodhcpwatcher to 0.8.2 ([@bdraco] - [#113466])
+- Bump axis to v55 ([@Kane610] - [#113479])
+- Bump croniter to 2.0.2 ([@dgomes] - [#113494])
+- Revert setting communication delay in Risco init ([@OnFreund] - [#113497])
+- Bump pyrisco to 0.5.10 ([@OnFreund] - [#113505])
+- Fix missing context when running script from template entity ([@emontnemery] - [#113523])
+- Bump ical to 7.0.3 to fix local-todo persisted with invalid DTSTART values ([@allenporter] - [#113526])
+- Fix Airthings BLE illuminance sensor name ([@joostlek] - [#113560])
+- Ignore Shelly block update with cfgChanged None ([@thecode] - [#113587])
+- Catch `TimeoutError` in `Brother` config flow ([@bieniu] - [#113593])
+- Bump axis to v56 ([@Kane610] - [#113608])
+- Bump pyunifiprotect to 5.0.1 ([@AngellusMortis] - [#113630])
+- Bump pyunifiprotect to 5.0.2 ([@AngellusMortis] - [#113651])
+- Add removal condition to Shelly battery sensor ([@bieniu] - [#113703])
+- Bump aioraven to 0.5.2 ([@cottsay] - [#113714])
+- Fix unknown values in onewire ([@epenet] - [#113731])
+- Bump pymodbus v3.6.6 ([@janiversen] - [#113796])
+- Catch API errors in cast media_player service handlers ([@emontnemery] - [#113839])
+- Bump pychromecast to 14.0.1 ([@emontnemery] - [#113841])
+- Fix startup race in cast ([@emontnemery] - [#113843])
+- Redact the area of traccar server geofences ([@ludeeus] - [#113861])
+- Bump pytedee_async to 0.2.17 ([@zweckj] - [#113933])
+- Bump axis to v57 ([@Kane610] - [#113952])
+
+[#111133]: https://github.com/home-assistant/core/pull/111133
+[#111441]: https://github.com/home-assistant/core/pull/111441
+[#111648]: https://github.com/home-assistant/core/pull/111648
+[#112516]: https://github.com/home-assistant/core/pull/112516
+[#112832]: https://github.com/home-assistant/core/pull/112832
+[#113162]: https://github.com/home-assistant/core/pull/113162
+[#113249]: https://github.com/home-assistant/core/pull/113249
+[#113430]: https://github.com/home-assistant/core/pull/113430
+[#113432]: https://github.com/home-assistant/core/pull/113432
+[#113463]: https://github.com/home-assistant/core/pull/113463
+[#113464]: https://github.com/home-assistant/core/pull/113464
+[#113466]: https://github.com/home-assistant/core/pull/113466
+[#113479]: https://github.com/home-assistant/core/pull/113479
+[#113494]: https://github.com/home-assistant/core/pull/113494
+[#113497]: https://github.com/home-assistant/core/pull/113497
+[#113505]: https://github.com/home-assistant/core/pull/113505
+[#113523]: https://github.com/home-assistant/core/pull/113523
+[#113526]: https://github.com/home-assistant/core/pull/113526
+[#113560]: https://github.com/home-assistant/core/pull/113560
+[#113587]: https://github.com/home-assistant/core/pull/113587
+[#113593]: https://github.com/home-assistant/core/pull/113593
+[#113608]: https://github.com/home-assistant/core/pull/113608
+[#113630]: https://github.com/home-assistant/core/pull/113630
+[#113651]: https://github.com/home-assistant/core/pull/113651
+[#113703]: https://github.com/home-assistant/core/pull/113703
+[#113714]: https://github.com/home-assistant/core/pull/113714
+[#113731]: https://github.com/home-assistant/core/pull/113731
+[#113796]: https://github.com/home-assistant/core/pull/113796
+[#113839]: https://github.com/home-assistant/core/pull/113839
+[#113841]: https://github.com/home-assistant/core/pull/113841
+[#113843]: https://github.com/home-assistant/core/pull/113843
+[#113861]: https://github.com/home-assistant/core/pull/113861
+[#113933]: https://github.com/home-assistant/core/pull/113933
+[#113952]: https://github.com/home-assistant/core/pull/113952
+[@AngellusMortis]: https://github.com/AngellusMortis
+[@Kane610]: https://github.com/Kane610
+[@OnFreund]: https://github.com/OnFreund
+[@Thomas55555]: https://github.com/Thomas55555
+[@allenporter]: https://github.com/allenporter
+[@bachya]: https://github.com/bachya
+[@balloob]: https://github.com/balloob
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@cottsay]: https://github.com/cottsay
+[@dgomes]: https://github.com/dgomes
+[@emontnemery]: https://github.com/emontnemery
+[@epenet]: https://github.com/epenet
+[@erwindouna]: https://github.com/erwindouna
+[@frenck]: https://github.com/frenck
+[@janiversen]: https://github.com/janiversen
+[@joostlek]: https://github.com/joostlek
+[@lextm]: https://github.com/lextm
+[@ludeeus]: https://github.com/ludeeus
+[@thecode]: https://github.com/thecode
+[@zweckj]: https://github.com/zweckj
+
+## Release 2024.3.3 - March 22
+
+- Update cosign to 2.2.3 ([@frenck] - [#113996])
+- Bump axis to v58 ([@Kane610] - [#114008])
+
+[#113996]: https://github.com/home-assistant/core/pull/113996
+[#114008]: https://github.com/home-assistant/core/pull/114008
+[@frenck]: https://github.com/frenck
+[@Kane610]: https://github.com/Kane610
+
[#100418]: https://github.com/home-assistant/core/pull/100418
[#101012]: https://github.com/home-assistant/core/pull/101012
[#101641]: https://github.com/home-assistant/core/pull/101641
diff --git a/source/dashboards/actions.markdown b/source/dashboards/actions.markdown
index 31de1e1b0aa8..1010ea4f4a89 100644
--- a/source/dashboards/actions.markdown
+++ b/source/dashboards/actions.markdown
@@ -5,7 +5,7 @@ description: "Define what an object does when interacted with."
Some cards have support for tap actions. These actions define what will happen when you tap or hold on an object within a card.
-Actions can be enabled on:
+Actions can be enabled on the following cards:
- [Button](/dashboards/button/)
- [Entities](/dashboards/entities/)
@@ -16,7 +16,7 @@ Actions can be enabled on:
- [Picture entity](/dashboards/picture-entity/)
- [Picture glance](/dashboards/picture-glance/)
-## Tap-Action
+## Tap action
Action that will be performed when an object on a card is tapped.
@@ -78,7 +78,7 @@ tap_action:
default: none
{% endconfiguration %}
-## Hold Action
+## Hold action
Action that will be performed when an object on a card is tapped, held for at least half a second and then released. Action will only be triggered once, not continuously during hold.
@@ -140,7 +140,7 @@ hold_action:
default: none
{% endconfiguration %}
-## Double-Tap Action
+## Double tap action
Action that will be performed when an object on a card is double-tapped.
@@ -264,3 +264,14 @@ hold_action:
## Limitations
It is not possible to use templates for actions. But calling a [script](/docs/scripts/) is a good alternative.
+
+## Related topics
+
+- [Button card](/dashboards/button/)
+- [Entities card](/dashboards/entities/)
+- [Glance card](/dashboards/glance/)
+- [Light card](/dashboards/light/)
+- [Picture card](/dashboards/picture/)
+- [Picture element card](/dashboards/picture-elements/)
+- [Picture entity card](/dashboards/picture-entity/)
+- [Picture glance card](/dashboards/picture-glance/)
\ No newline at end of file
diff --git a/source/dashboards/cards.markdown b/source/dashboards/cards.markdown
index 8da0fa247cd0..ae3936ff1f3d 100644
--- a/source/dashboards/cards.markdown
+++ b/source/dashboards/cards.markdown
@@ -1,6 +1,6 @@
---
title: "Cards"
-description: "Cards."
+description: "Introduction to the role of cards on the dashboard and how to add a card."
---
Each dashboard is made up of cards.
@@ -10,9 +10,81 @@ Each dashboard is made up of cards.
Screenshot of the masonry view with different types of cards.
-There are several built-in card types, each with their own configuration options. Select a card from the menu to view additional details and the options for that card.
+## Card categories
-
-
-Screenshot of the card menu.
-
\ No newline at end of file
+There are several different card types, each with their own configuration options. They can be categorized in terms of their function:
+
+- **Specific to a device type or service**: alarm, light, humidifier, thermostat, plant status, media control, weather forecast, shopping list, map, logbook, and calendar card
+- **Grouping other cards**: vertical stack, horizontal stack, and grid card
+- **Logic function**: conditional and entity filter card
+- **Display generic data**: sensor, history graph, statistic, statistics graph, energy, gauge, and webpage card
+- **Control devices and entities**: button and entity card
+- **Display data and control entities**: area, picture elements, and picture glance card
+
+## Card actions, features, header and footer widgets
+
+Some cards have support for [tap actions](/dashboards/actions/). These actions define what will happen when you tap or hold on an object within a card.
+
+Some cards have support for [features](/dashboards/actions/). These widgets add quick controls to the card. Supported features depend on the card and entity capabilities. Multiple features can be added to a single card.
+
+
+Screenshot of tile cards with features.
+
+
+Some cards have support for [header and footer widgets](/dashboards/header-footer/). These widgets fill up the entire available space in a card.
+
+
+Screenshot of an entities card with a picture header and buttons footer.
+
+
+## Adding cards to your dashboard
+
+1. If this is your first time editing a dashboard, [take control of the default dashboard](/dashboards/#get-started-with-your-own-dashboard).
+
+2. Choose one of the two methods to add cards to a dashboard:
+
+{% details "Using the Add card button" %}
+
+1. In the bottom right, select **Add card**.
+
+2. There are two methods to add a card: **By card** type and **By entity**:
+ - **By card** type:
+ - If you have an idea of what card type you want to use for an entity, browse the list of available cards.
+ - If you are using the **Sections** view, try the **Tile** card in the **Suggested cards** section.
+ ![Add card by Card type dialog](/images/blog/2024-03-dashboard-chapter-1/sections-add-card-by-card.png)
+
+ - **By entity**:
+ - If you want to add multiple entities at once, select them from the list.
+ - Then, select **Continue**.
+ ![Screenshot add cards by entity](/images/dashboards/dashboard_add-by-entity_02.png)
+
+3. Select **Add to dashboard**.
+ ![Screenshot card suggestions](/images/dashboards/dashboard_add-by-entity_04.png)
+
+{% enddetails %}
+
+{% details "Using the Add to dashboard button on device page" %}
+
+Another way to add entities to a dashboard is to use the **Device** page.
+
+1. Go to **{% my integrations title="Settings > Devices & services" %}**.
+2. On the integration card of interest, select **Devices**.
+ - If there are multiple devices, select the device from the list.
+
+3. In the **Controls** section, select **Add to Dashboard**.
+ ![Add to Dashboard button on the device page](/images/blog/2024-03-dashboard-chapter-1/sections-add-from-device-page.jpg)
+
+{% enddetails %}
+
+## Related topics
+
+- [Views](/dashboards/views/)
+- [Introduction to dashboards](/dashboards/)
+- [Take control of the default dashboard](/dashboards/#get-started-with-your-own-dashboard)
+
+### Cards
+
+- For a list of available card types and more detailed documentation, refer to the **Card types** section in the side navigation.
+- [Card tap actions](/dashboards/actions/)
+- [Card features](/dashboards/actions/)
+- [Card header and footer widgets](/dashboards/header-footer/)
\ No newline at end of file
diff --git a/source/dashboards/dashboards.markdown b/source/dashboards/dashboards.markdown
index 613947c94ab9..abcb82ff328a 100644
--- a/source/dashboards/dashboards.markdown
+++ b/source/dashboards/dashboards.markdown
@@ -5,7 +5,7 @@ description: "Multiple powerful and configurable dashboards in Home Assistant."
You can define multiple dashboards in Home Assistant. Each dashboard can be added to the sidebar. This makes it possible to create separate control dashboards for each individual part of your house.
-You can manage your dashboards via the user interface. Go to {% my lovelace_dashboards title="**Settings** > **Dashboards**" %}. Here you can see some of the defined dashboards and create new ones.
+Under {% my lovelace_dashboards title="**Settings** > **Dashboards**" %}, you can see your own dashboards and some of the predefined ones.
@@ -14,15 +14,16 @@ Screenshot of the Dashboard list.
## Home Assistant default dashboards
-Home Assistant ships with 5 predefined dashboards:
+Home Assistant ships with some dashboards out of the box:
- Overview
- Energy
- Map
- Logbook
- History
+- To-do lists
-Not all of predefined dashboards are listed under {% my lovelace_dashboards title="**Settings** > **Dashboards**" %}. **Map**, **Logbook**, and **History**, are powered by their respective integrations.
+Not all of the predefined dashboards are listed under {% my lovelace_dashboards title="**Settings** > **Dashboards**" %}. **Map**, **Logbook**, and **History**, are powered by their respective integrations.
### Map dashboard
@@ -34,7 +35,36 @@ The predefined **Logbook** dashboard is powered by the [Logbook integration](/in
### History dashboard
-The predefined **History** dashboard is powered by the [History integration](/integrations/logbook/). To learn about the data sources used and how to export data, refer to the documentation of the History integration.
+The predefined **History** dashboard is powered by the [History integration](/integrations/history/). To learn about the data sources used and how to export data, refer to the documentation of the History integration.
+
+### To-do lists dashboard
+
+The predefined **To-do lists** dashboard is powered by the [To-do integration](/integrations/todo/). To learn how to use to-do and shopping lists, refer to the documentation of the to-do list integration.
+
+## Creating a new dashboard
+
+The default **Overview** dashboard updates itself when you add new devices, as long as you do not edit the default dashboard. If you want a customized dashboard, it is recommended not to change the **Overview** dashboard, but to create a new dashboard instead.
+
+This will leave the default dashboard intact.
+
+1. Go to {% my lovelace_dashboards title="**Settings** > **Dashboards**" %}.
+2. Select **Add dashboard**.
+ ![Screenshot of the dashboard list](/images/dashboards/dashboard-manage-02.png)
+3. In the dialog, choose one of the options:
+ - If you want to start with a pre-populated dashboard, choose **Default dashboard**.
+ - If you want to start with a completely empty dashboard, choose **New dashboard from scratch**.
+4. In the **Add new dashboard** dialog, enter a name and select an icon.
+ - Define if this dashboard should be visible only to the admin user.
+ - Define if you want the dashboard to be listed in the sidebar.
+ - Select **Create**.
+ - **Result**: The dashboard is added.
+5. Open your new dashboard and in the top right of the screen, select the
button.
+6. If you chose **Default dashboard**, you need to take control before you can edit it:
+ - The **Edit dashboard** dialog appears.
+ - By editing the dashboard, you are taking over control of this dashboard.
+ - This means that it is no longer automatically updated when new dashboard elements become available.
+ - To continue, in the dialog, select the three dots menu, then select **Take control**.
+7. You can now [add a card](/dashboards/cards/#adding-cards-to-your-dashboard) or [add a view](/dashboards/views/#adding-a-view-to-a-dashboard).
## Using YAML for the Overview dashboard
@@ -226,4 +256,5 @@ views:
- [Logbook integration](/integrations/logbook/)
- [Map integration](/integrations/map/)
-- [History integration](/integrations/history/)
\ No newline at end of file
+- [History integration](/integrations/history/)
+- [To-do list integration](/integrations/todo/)
\ No newline at end of file
diff --git a/source/dashboards/features.markdown b/source/dashboards/features.markdown
index 144d11b69378..fcdcf3826b12 100644
--- a/source/dashboards/features.markdown
+++ b/source/dashboards/features.markdown
@@ -9,6 +9,12 @@ Some dashboard cards have support for features. These widgets add quick controls
Screenshot of tile cards with features.
+Features can be enabled on the following cards:
+
+- [Humidifier](/dashboards/humidifier/)
+- [Thermostat](/dashboards/thermostat/)
+- [Tile](/dashboards/tile/)
+
## Alarm modes
Widget that displays buttons to arm and disarm an [alarm](/integrations/alarm_control_panel).
@@ -538,3 +544,9 @@ operation_modes:
description: List of modes to show on the card. The list can contain `electric`, `gas`, `heat_pump`, `eco`, `performance`, `high_demand`, and `off`.
type: list
{% endconfiguration %}
+
+## Related topics
+
+- [Humidifier card](/dashboards/humidifier/)
+- [Thermostat card](/dashboards/thermostat/)
+- [Tile card](/dashboards/tile/)
diff --git a/source/dashboards/header-footer.markdown b/source/dashboards/header-footer.markdown
index 5e25b4241755..b48a122e903e 100644
--- a/source/dashboards/header-footer.markdown
+++ b/source/dashboards/header-footer.markdown
@@ -9,6 +9,12 @@ Some dashboard cards have support for header and footer widgets. These widgets f
Screenshot of an entities card with a picture header and buttons footer.
+Header and footer can be used on the following cards:
+
+- [Entity](/dashboards/entity/)
+- [Entities](/dashboards/entities/)
+- [Statictis](/dashboards/statistics/)
+
## Picture header & footer
Widget to show a picture as a header or a footer. A picture can have touch actions associated with it.
@@ -140,3 +146,10 @@ hours_to_show:
type: integer
default: 24
{% endconfiguration %}
+
+## Related topics
+
+- [Entity](/dashboards/entity/)
+- [Entities](/dashboards/entities/)
+- [Statictis](/dashboards/statistics/)
+- [Card actions](/dashboards/actions/)
\ No newline at end of file
diff --git a/source/dashboards/index.markdown b/source/dashboards/index.markdown
index 23cca5b5ec4f..ba52d11d0508 100644
--- a/source/dashboards/index.markdown
+++ b/source/dashboards/index.markdown
@@ -23,9 +23,7 @@ Try it yourself with [the interactive demo](https://demo.home-assistant.io).
## Get started with your own dashboard
-{% include dashboard/edit_dashboard.md %}
-
-For more detailed instructions, follow the step-by-step tutorial on [editing the **Overview** dashboard](/getting-started/onboarding_dashboard/).
+To create your own dashboard, follow the steps on [creating a new dashboard](/dashboards/dashboards/#creating-a-new-dashboard).
## Discuss dashboard
@@ -34,9 +32,13 @@ For more detailed instructions, follow the step-by-step tutorial on [editing the
## Related topics
-- [Community custom cards](https://github.com/custom-cards)
-- [Home Assistant cards](https://home-assistant-cards.bessarabov.com/)
-- [Material Design Icons](https://pictogrammers.com/library/mdi/)
- [Dashboard themes](/integrations/frontend/#defining-themes)
- [Interactive dashboard demo](https://demo.home-assistant.io)
-- [Editing the **Overview** dashboard](/getting-started/onboarding_dashboard/)
+- [Creating a new dashboard](/dashboards/dashboards/#creating-a-new-dashboard)
+
+### Cards
+
+- [About cards](/dashboards/cards/)
+- [Community custom cards](https://github.com/custom-cards)
+- [Home Assistant cards](https://home-assistant-cards.bessarabov.com/)
+
diff --git a/source/dashboards/views.markdown b/source/dashboards/views.markdown
index 60b2a8faeadd..22d10a1badda 100644
--- a/source/dashboards/views.markdown
+++ b/source/dashboards/views.markdown
@@ -3,7 +3,14 @@ title: "Views"
description: "A view is a tab inside a dashboard."
---
-A view is a tab inside a dashboard. Views control the layout.
+A view is a tab inside a dashboard. For example, the screenshot below shows a separate view for lights on the Overview dashboard.
+
+
+
+ A lights view tab on the Overview dashboard
+
+
+Views control the layout.
@@ -17,15 +24,27 @@ There are four different view types:
- **Masonry (default)**: Arranges cards in columns based on their card size.
- **Sections (experimental)**: Arranges cards in a grid system and lets you group them in sections.
+It is currently not possible to migrate your dashboard from one view type into another. For example, if you have a dashboard in masonry view, and want it in sections view, you need to create a new view.
+
## Adding a view to a dashboard
1. To add a view to your user interface, in the top right corner, select the pencil icon.
-2. Then, select the `+` button in the top menu bar.
+2. Select the `+` button in the top menu bar.
+
+ ![Views toolbar](/images/dashboards/views.png)
+
+3. Define the view settings:
+ - If you want a view title, enter the **Title**.
+ - If you want to see an icon, select the icon.
+ - Note: If an icon is defined, the title text only shows as a tooltip.
+ - We use [Material icons](https://pictogrammers.com/library/mdi/).
+ - Select the view type.
+
+ ![The create new view configuration dialog](/images/dashboards/dashboard_view_configuration_01.png)
-
-
- Use titles and icons to describe the content of views.
-
+4. On the **Badges** tab, add badges, if any.
+ - Note that the sidebar and panel views do not support badges.
+5. If this view should not be visible for some users, on the **Visibility** tab, disable the view for those users.
## Path
@@ -254,4 +273,6 @@ Subview configuration:
- [Masonry view](/dashboards/masonry/)
- [Panel view](/dashboards/panel/)
- [Sidebar view](/dashboards/sidebar/)
-- [Sections view](/dashboards/sections/)
\ No newline at end of file
+- [Sections view](/dashboards/sections/)
+- [About dashboards](/dashboards/)
+- [Adding cards to a view](/dashboards/cards/#adding-cards-to-your-dashboard)
\ No newline at end of file
diff --git a/source/getting-started/onboarding_dashboard.markdown b/source/getting-started/onboarding_dashboard.markdown
index 311e9448feb6..a4e35a2ece26 100644
--- a/source/getting-started/onboarding_dashboard.markdown
+++ b/source/getting-started/onboarding_dashboard.markdown
@@ -3,58 +3,135 @@ title: "Edit the dashboard"
description: "Instructions on editing the dashboard for the first time"
---
+Dashboards are customizable pages to display information about your smart home devices.
+
+## Dashboards, cards, and views
+
+The screenshot shows an **Overview** dashboard with many [cards](/dashboards/cards/) to represent sensor values. For example, the status of some lights, a media player, and some temperature values. It also shows control elements. For example, you can change the ventilation, the color of the lights, or turn on a smart TV and start YouTube.
+
+### Views
+
+The icons in the blue menu bar on top each represent a different tab. Each tab contains a [view](/dashboards/views/).
+
+
+
+Screenshot of a populated Overview dashboard with many devices.
+
+
+### Multiple dashboards
+
+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.
+
+- Overview
+- Energy
+- Map
+- Logbook
+- History
+- To-do lists
+
## First contact with the Overview dashboard
-The **Overview** [dashboard](/dashboards/) is the first page you see after the [onboarding process](/getting-started/onboarding). Dashboards are customizable pages to display information in Home Assistant.
+The **Overview** [dashboard](/dashboards/) is the first page you see after the [onboarding process](/getting-started/onboarding).
+
+If you just onboarded, your dashboard will be nearly empty. It shows cards for devices that were detected automatically. Your dashboard may look quite different, depending on the devices that you have at home.
+
+
+
+Screenshot of a new Overview dashboard with Bluetooth devices.
+
+
+Let's take a look at the devices that were detected and which cards are used to represent them on the dashboard.
+
+- 1 Sonos speaker: [media control](/dashboards/media-control/) card
+- 1 Person (away): [entities](/dashboards/entities/) card
+- 1 Weather forecast: [weather forecast](/dashboards/weather-forecast/) card
+- 2 temperature sensors: [entities](/dashboards/entities/) card
-By default, there are two dashboards: **Overview** and **Energy**. The image below shows a customized example of the **Overview** dashboard. If you just onboarded, your dashboard will be nearly empty.
+### Sonos speaker
-![Dashboard](/images/getting-started/lovelace.png)
+If you have a smart speaker connected to Wi-Fi, for example, this can be detected.
-The procedure below is optional. The idea is to learn some basics on changing the dashboard.
+### Person
-### To change a card on the Overview dashboard
+After onboarding, the first person shown here is the Home Assistant owner. Next to the name, it claims the person is **away**. You can track whether a person is present or not and create automations based on that. For example, turn down the heating when everyone has left the home. For more information on presence based automations, start with [presence detection](/getting-started/presence-detection/).
-1. To view your dashboard, go to **Overview**.
- - Your dashboard might not have much on it yet.
+### Weather forecast
+
+The weather forecast card is shown automatically if you provided a location during onboarding.
+
+### Temperature sensors
+
+The temperature sensors are shown because the Home Assistant device used here (Raspberry Pi) has a built-in Bluetooth module. In Giulia's home, there were 2 Bluetooth temperature sensors present. If your Home Assistant does not have a Bluetooth module (yet), Bluetooth devices in your home won't be shown automatically.
+
+If your Home Assistant has other controllers, such as a [Zigbee](/integrations/zha/) or a [Z-Wave](/integrations/zwave_js/) controller, and you have Zigbee or Z-Wave devices, these could be detected and shown here. However, these devices usually need to be paired first.
+
+## Creating a new dashboard and edit cards
+
+The default **Overview** dashboard updates automatically when you add new devices. However, once you start editing the default dashboard, it no longer updates automatically. For this reason, we start here by adding a new dashboard. This lets us keep the default **Overview** dashboard.
+
+In the following steps, we will create a new dashboard and edit some card settings.
+
+1. Go to {% my lovelace_dashboards title="**Settings** > **Dashboards**" %} and select **Add dashboard**.
+ ![Screenshot of the dashboard list](/images/dashboards/dashboard-manage-02.png)
+2. In the dialog, choose **Default dashboard**.
+3. In the **Add new dashboard** dialog, enter a name and select an icon.
+ - Leave the **Admin only** and **Show in sidebar** options as they are.
+ - Select **Create**.
+ - **Result**: The dashboard is added.
+4. Open your new dashboard and in the top right of the screen, select the
button.
+5. By editing the dashboard, you are taking over control of this dashboard.
+ - This means that it is no longer automatically updated when new dashboard elements become available.
+ - To continue, in the dialog, select the three dots menu, then select **Take control**.
+ - Read and accept this before continuing.
+6. Your dashboard might not have much on it yet.
- If you have smart home devices in your home, some may have been connected automatically.
- In this example, some Bluetooth temperature sensors and an AV receiver connected automatically.
- Some cards are there by default, such as the weather, a card for the person who set up the system, and the text-to-speech service.
![Dashboard after onboarding a new device](/images/getting-started/onboarding_dashboard_01.png)
-2. To view the weather forecast for the next few days, select the weather card.
+7. Next, we want to edit the weather card.
+ - Select the weather card.
+ - Then, select the cogwheel.
![Weather details](/images/getting-started/weather_card_details_01.png)
-3. To change the units used on the card, select the cogwheel.
- - Change the units if you like.
- - Do not change any of the other settings for now.
- - Once you are done, select **Update**.
+8. Change any of the units, if you like.
+ - Do not change the **Entity ID**.
+ - Once you are done, select **Update**.
![Weather details](/images/getting-started/onboarding_card_settings_01.png)
-4. To change the type of dashboard card, in the top right corner, select the pencil icon, then, in the **Edit dashboard** dialog, select the three dots and select **Take control**.
- ![Take control of the dashboard](/images/getting-started/dashboard-take-control.png)
- - Read and accept this before continuing.
- - On the dashboard, select the weather card, select the three dots, then **Device info**.
+9. Next, we want to add a new card for this weather {% term service %}.
+ - Select the weather card again, select the three dots, then **Device info**.
- Under **Sensors**, select **Add to dashboard**, then **Pick different card**.
![Dashboard - change the card type](/images/getting-started/onboarding_pick_different_card_01.png)
-5. From the list, select **Weather forecast**.
-6. Select the details to be shown on the card.
- ![Dashboard - change the card details](/images/getting-started/onboarding_card_settings_02.png)
- - **Save** your changes
- - You now see the forecast card on the dashboard.
-
-7. Now let's delete the other weather card.
- - In the top right corner, select the pencil.
- ![Dashboard - edit the dashboard](/images/getting-started/onboarding_edit_dashboard_01.png)
- - On the card, select the three-dot menu and select **Delete**.
- ![Dashboard - delete card](/images/getting-started/onboarding_dashboard_delete_card.png)
-8. Finally, we want to move the weather card to the top left corner.
- - On the bottom of the card, select the number or use the minus button to enter `1`.
- - Repeat this on other cards, if you want to move them around.
- - When you are done, in the top right corner, select **Done**.
-9. Congratulations! You have completed your first dashboard customization.
+10. From the list, select **Show current weather and forecast**.
+11. Select the details to be shown on the card.
+ ![Dashboard - change the card details](/images/getting-started/onboarding_card_settings_02.png)
+ - **Save** your changes
+ - You now see the forecast card on the dashboard.
+
+12. Now let's delete the other weather card.
+ - In the top right corner, select the pencil.
+ ![Dashboard - edit the dashboard](/images/getting-started/onboarding_edit_dashboard_01.png)
+ - On the card, select the three-dot menu and select **Delete**.
+ ![Dashboard - delete card](/images/getting-started/onboarding_dashboard_delete_card.png)
+13. Finally, we want to move the weather card to the top left corner.
+ - On the bottom of the card, select the number or use the minus button to enter `1`.
+ - Repeat this on other cards, if you want to move them around.
+ - When you are done, in the top right corner, select **Done**.
+14. If you want to change any of the other cards, select the **Edit** button on the card.
+15. Congratulations! You have completed your first dashboard customization.
+
+## Learning more about dashboards
+
+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).
+2. Learn about the different [view types](/dashboards/views/).
+3. Learn how to [add cards](/dashboards/cards/#adding-cards-to-your-dashboard) to a view.
+
+## Next step: integrations
To continue with this tutorial, select the button below to learn about {% term integrations %}.
@@ -63,4 +140,5 @@ To continue with this tutorial, select the button below to learn about {% term i
## Related topics
- [Dashboards](/dashboards/)
-- [Views](/dashboards/views/)
\ No newline at end of file
+- [Views](/dashboards/views/)
+- [Add cards to views](/dashboards/cards/#adding-cards-to-your-dashboard)
diff --git a/source/green/index.html b/source/green/index.html
index 6c7745bd104e..595498a5abc4 100644
--- a/source/green/index.html
+++ b/source/green/index.html
@@ -2308,339 +2308,408 @@