diff --git a/.github/workflows/add_prs_to_project.yml b/.github/workflows/add_prs_to_project.yml index b5b49f24413..e46d10d9144 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@v1.0.0 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 e677d37f2f8..c95522c5320 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 f4014f68b01..b93880fc1e4 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.61.0' - gem 'ruby-lsp', '0.14.4' + 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 9f68e9669b9..df714cd9b43 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -27,11 +27,11 @@ 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.3) + i18n (1.14.4) concurrent-ruby (~> 1.0) - racc (~> 1.7) jekyll (4.3.3) addressable (~> 2.4) colorator (~> 1.0) @@ -74,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) @@ -85,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) @@ -101,8 +101,8 @@ GEM ffi (~> 1.0) regexp_parser (2.9.0) rexml (3.2.6) - rouge (4.2.0) - rubocop (1.61.0) + rouge (4.2.1) + rubocop (1.62.1) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) @@ -110,12 +110,12 @@ GEM rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml (>= 3.2.5, < 4.0) - rubocop-ast (>= 1.30.0, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.31.1) + rubocop-ast (1.31.2) parser (>= 3.3.0.4) - ruby-lsp (0.14.4) + ruby-lsp (0.14.6) language_server-protocol (~> 3.17.0) prism (>= 0.22.0, < 0.25) sorbet-runtime (>= 0.5.10782) @@ -123,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) @@ -135,7 +135,7 @@ GEM rack-protection (= 4.0.0) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - sorbet-runtime (0.5.11285) + sorbet-runtime (0.5.11311) stringex (2.8.6) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -157,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.61.0) - ruby-lsp (= 0.14.4) + 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 9c0ada1e718..8279d13f2ed 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 0cd7452cf09..47bf50b257f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,10 +17,10 @@ "remark-lint-no-shell-dollars": "^3.1.2", "remark-lint-ordered-list-marker-style": "^3.1.2", "remark-lint-ordered-list-marker-value": "^3.1.2", - "remark-lint-prohibited-strings": "^3.1.0", + "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==", + "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.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", + "@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" @@ -4656,18 +4656,24 @@ } }, "node_modules/remark-lint-prohibited-strings": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-3.1.0.tgz", - "integrity": "sha512-zwfDDdYl7ye0gEHcwhdkv1ZGXj1ibw4gnLLZkkvySnDdTz2tshY3fOJLY5NikbVseaIRVGOr5qa+8J9WNQT/fA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-4.0.0.tgz", + "integrity": "sha512-dfLF4da5v3klRAdkHBLpNIC7WpvNdN7Eylgf+p19HPJn53CaxqlGjFvAQDAJU83xXEPWAmdonlx04GIS5ryLow==", "dev": true, "dependencies": { "escape-string-regexp": "^5.0.0", "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.1", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.1" + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile-location": "^5.0.1" } }, + "node_modules/remark-lint-prohibited-strings/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, "node_modules/remark-lint-prohibited-strings/node_modules/escape-string-regexp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", @@ -4680,6 +4686,117 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-prohibited-strings/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-prohibited-strings/node_modules/vfile-location": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", + "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-prohibited-strings/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remark-lint-unordered-list-marker-style": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.1.2.tgz", @@ -5954,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==", + "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.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", + "@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", @@ -6096,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 6b818913c85..c5b33b5a2c0 100644 --- a/package.json +++ b/package.json @@ -12,10 +12,10 @@ "remark-lint-no-shell-dollars": "^3.1.2", "remark-lint-ordered-list-marker-style": "^3.1.2", "remark-lint-ordered-list-marker-value": "^3.1.2", - "remark-lint-prohibited-strings": "^3.1.0", + "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 1d15ac7a700..387a933e319 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 9d1938b50b0..3ef81b0f406 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 %}.

Screenshot of the alarm panel card @@ -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 245aa329303..df4a38b81d6 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 %}.

Screenshot of the area card @@ -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 88ce2c1eba7..e54540751b4 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 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 f29605ce1e4..3705e87e120 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).

Screenshot of the 
@@ -52,3 +52,8 @@ entities:
   - calendar.calendar_1
   - calendar.calendar_2
 ```
+
+## Related topics
+
+- [Themes](/integrations/frontend/)
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/conditional.markdown b/source/_dashboards/conditional.markdown
index 9c4d23f1696..3cf505e9a5e 100644
--- a/source/_dashboards/conditional.markdown
+++ b/source/_dashboards/conditional.markdown
@@ -1,6 +1,6 @@
 ---
 type: card
-title: Conditional Card
+title: Conditional card
 sidebar_label: Conditional
 description: The Conditional card displays another card based on conditions.
 ---
@@ -36,6 +36,7 @@ card:
 ## Examples
 
 Only show when all the conditions are met:
+
 ```yaml
 type: conditional
 conditions:
@@ -59,6 +60,7 @@ card:
 ```
 
 Example condition where only one of the conditions needs to be met:
+
 ```yaml
 type: conditional
 conditions:
@@ -188,3 +190,7 @@ users:
   description: User ID that can see the card (unique hex value found on the Users configuration page).
   type: list
 {% endconfiguration %}
+
+## Related topics
+
+- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/energy.markdown b/source/_dashboards/energy.markdown
index ca0f3467417..f09f2a4fa3b 100644
--- a/source/_dashboards/energy.markdown
+++ b/source/_dashboards/energy.markdown
@@ -1,13 +1,13 @@
 ---
 type: card
-title: "Energy Cards"
-sidebar_label: Energy Cards
+title: "Energy cards"
+sidebar_label: Energy cards
 description: "An overview of the energy cards that are available."
 ---
 
-This is a list of all the cards used in the energy dashboard, you can also place them anywhere you want in your dashboard.
+This is a list of all the cards used in the energy dashboard. You can also place them anywhere you want in your dashboard.
 
-At the moment there are no configuration options available for these cards, you can configure them on the {% my config_energy title="energy configuration page" %}.
+Currently, there are no configuration options available for these cards. You can configure them on the {% my config_energy title="energy configuration page" %}.
 
 ## Energy date picker
 
@@ -16,10 +16,11 @@ At the moment there are no configuration options available for these cards, you
   Screenshot of the Energy date selection card.
 </p>
 
-This card will allow you to pick what data to show. Changing it in this card will influence the data in all other cards.
+This card allows you to pick what data to show. Changing it in this card will influence the data in all other cards.
 Specific dates and ranges can be selected by opening the date range picker. The current period can be compared to the previous one using the compare data option within the menu.
 
 ### Example
+
 ```yaml
 type: energy-date-selection
 ```
@@ -35,6 +36,7 @@ The energy usage graph card shows the amount of energy your house has consumed,
 It will also show the amount of energy your have returned to the grid.
 
 ### Example
+
 ```yaml
 type: energy-usage-graph
 ```
@@ -49,6 +51,7 @@ type: energy-usage-graph
 The solar production graph card shows the amount of energy your solar panels have produced per source, and if setup and available the forecast of the solar production.
 
 ### Example
+
 ```yaml
 type: energy-solar-graph
 ```
@@ -97,6 +100,7 @@ If setup, it will also tell you how many kWh of the energy you got from the grid
 If you set `link_dashboard` to `true`, the card will include a link to the energy dashboard.
 
 ### Example
+
 ```yaml
 type: energy-distribution
 link_dashboard: true
@@ -113,6 +117,7 @@ The energy sources table card shows all your energy sources, and the correspondi
 If setup, it will also show the costs and compensation per source and the total.
 
 ### Example
+
 ```yaml
 type: energy-sources-table
 ```
@@ -127,6 +132,7 @@ type: energy-sources-table
 The grid neutrality gauge card represents your energy dependency. If the needle is in the purple, you returned more energy to the grid than you consumed from it. If it 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 8b7d4bdd4ec..93b721febf9 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 fdaa049ed41..d8a544e80b6 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 f1cd3c965b5..7023f9def8d 100644 --- a/source/_dashboards/light.markdown +++ b/source/_dashboards/light.markdown @@ -80,3 +80,9 @@ name: My Office Screenshot of the Light card 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 d4fdabb5c5e..2ae88343fac 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 ed3f48e4c98..9370e83431f 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 f1886128004..bcac319e7c9 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 0ba077b45e7..0d4958f7e8a 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 b494e2810dc..aa6433d9f6d 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 e3f14b9eecc..928fa7912f1 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 c3a55842b14..de065a64941 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 5a2fca27cc0..1ee6176e191 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 031def93771..439f04260df 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 acaa724ce76..46b77fdf735 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 + 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 Edit icon button. + - If you leave the section title empty, this line will be hidden. +6. To delete a section, select the Delete icon 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 Move icon button and move the card. + +

+ Rearranging sections by dragging + Rearranging sections by dragging +

+ +3. To rearrange cards, tap and hold the card and move it to your desired location. + +

+ Rearranging cards by dragging + 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 5769fb7f787..c4196828d7e 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 0c6e77eac83..b0a955f7a8c 100644 --- a/source/_dashboards/shopping-list.markdown +++ b/source/_dashboards/shopping-list.markdown @@ -1,10 +1,10 @@ --- -type: card title: "Shopping list card" -sidebar_label: Shopping list description: "The shopping list card allows you to add, edit, check-off, and clear items from your shopping list." --- +Note: the shopping list card is no longer available as a card to add from the user interface. Use the [to-do list card](/dashboards/todo-list/) instead. + The shopping list card allows you to add, edit, check-off, and clear items from your shopping list.

@@ -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 8e34f583fa9..e39895bae59 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 9b5b31c0ce9..940059e3a20 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 67b4d40cbf4..5ca865065d8 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 %}.

Screenshot of the thermostat card @@ -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 cc3e80d2aef..514cfc14496 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 %}.

Screenshot of tile cards @@ -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/todo-list.markdown b/source/_dashboards/todo-list.markdown new file mode 100644 index 00000000000..51b358e1755 --- /dev/null +++ b/source/_dashboards/todo-list.markdown @@ -0,0 +1,73 @@ +--- +type: card +title: "To-do list card" +sidebar_label: To-do list +description: "The to-do list card allows you to add, edit, check-off, and clear items from your to-do list." +--- + +The to-do list card allows you to add, edit, check-off, and clear items from your to-do list. + +

+Screenshot of the to-do list card +Screenshot of the to-do list card. +

+ +## Adding a to-do list card + +1. [Add the card using the Add card button](/dashboards/cards/#adding-cards-to-your-dashboard). + - In the **By card** dialog, select the **To-do list** card. +2. In the **Entity** dropdown menu, select your list type. + - If it is your first time working with to-do lists, there is only **Shopping list** in the menu. + - This comes from the [shopping list integration](/integrations/shopping_list/), which is installed by default. + - This is the same **Shopping list** as the one on the **To-do list** dashboard (accessible via sidebar). + ![To-do card, list entities](/images/dashboards/cards-todo.png). +3. The to-do list card can display lists from different [to-do list](/integrations/#to-do-list) integrations, such as **Bring!** or **Todoist**. + - If you don't see your desired to-do list entity, you need to add its integration first. + - Once you've added a to-do list integration, the lists are also available on the to-do list dashboard. + +## YAML configuration + +All options for this card can be configured via the user interface. + +The following YAML options are available when you use YAML mode or just prefer to use YAML in the code editor in the UI. + +{% configuration %} +type: + required: true + description: "`todo-list`" + type: string +entity: + required: true + description: The to-do entity to show + type: string +title: + required: false + description: Title of to-do list. + type: string +theme: + required: false + description: Override the used theme for this card with any loaded theme. For more information about themes, see the [frontend documentation](/integrations/frontend/). + type: string +{% endconfiguration %} + +### Examples + +Title example: + +```yaml +type: todo-list +entity: todo-list +title: todo list +``` + +## Related topics + +- [To-do list integration documentation](/integrations/todo) +- [List of to-do list integrations](/integrations/#to-do-list) +- [Local to-do integration](/integrations/local_todo/) + +### Dashboards, cards, and themes + +- [Dashboards](/dashboards/dashboards/) +- [Dashboard cards](/dashboards/cards/) +- [Themes](/integrations/frontend/) \ No newline at end of file diff --git a/source/_dashboards/vertical-stack.markdown b/source/_dashboards/vertical-stack.markdown index 0e13b9ce21e..08768af6955 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 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 5e6f3a4e198..55c8fadd530 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 486eae20953..175745aa935 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 a41825249f6..458a88dc5b2 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/ +{% endraw %} -## Testing your automation +## Testing templates -It is generally a difficult task to test an automation, especially if it includes several triggers and some conditions. +If your automation uses [templates](/docs/configuration/templating/) in any part, you can do the following to make sure it works as expected: -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. - -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" %}. - -If your automation uses templates 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/backend/database.markdown b/source/_docs/backend/database.markdown index 5e53c82ea3d..f16cf2a2553 100644 --- a/source/_docs/backend/database.markdown +++ b/source/_docs/backend/database.markdown @@ -3,7 +3,7 @@ title: "Database" description: "Details about the database used by Home Assistant." --- -Home Assistant uses databases to store {% term events %} and parameters for history and tracking. The default database used is [SQLite](https://www.sqlite.org/) and the database file is stored in your [configuration directory](/getting-started/configuration/) (e.g., `/home-assistant_v2.db`); however, other databases can be used. If you prefer to run a database server (e.g., PostgreSQL), use the [`recorder` integration](/integrations/recorder/). +Home Assistant uses databases to store {% term events %} and parameters for history and tracking. The default database used is [SQLite](https://www.sqlite.org/) and the database file is stored in your [configuration directory](/getting-started/configuration/) (e.g., `/home-assistant_v2.db`); however, other databases can be used. If you prefer to run a database server (e.g., PostgreSQL), use the [`recorder`](/integrations/recorder/) integration. To work with SQLite database manually from the command-line, you will need an [installation](https://www.sqlitetutorial.net/download-install-sqlite/) of `sqlite3`. Alternatively [DB Browser for SQLite](https://sqlitebrowser.org/) provides a viewer for exploring the database data and an editor for executing SQL commands. First load your database with `sqlite3`: diff --git a/source/_docs/energy/individual-devices.markdown b/source/_docs/energy/individual-devices.markdown index 6e17a2516a5..ec6222a18c2 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). Graphic showing energy flowing from the home to individual devices. diff --git a/source/_docs/energy/water.markdown b/source/_docs/energy/water.markdown index a038990a8b1..699530796ba 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. -- [S0tool](https://huizebruin.github.io/s0tool/) ("Made for ESPHome" approved) +## 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 dd4be294f07..c1ab8a22767 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 98999558da3..f7b5ee49517 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 03424e8a7d6..d94130181ee 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 530ea7087d7..455bb86d9da 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 1817057c574..0e5d9dd0bb1 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 d6a8240dbb1..e7b4df2cd39 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 6a1c935dca8..ad71021b6b9 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 5f837f1c9ec..8aafb68ec00 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/bring.markdown b/source/_integrations/bring.markdown index 91e64bb628d..54f5da1882b 100644 --- a/source/_integrations/bring.markdown +++ b/source/_integrations/bring.markdown @@ -15,8 +15,15 @@ ha_platforms: - todo --- -The **Bring** integration allows you to interact with your [Bring!](https://www.getbring.com/) shopping lists within Home Assistant. +The **Bring!** integration allows you to interact with your [Bring!](https://www.getbring.com/) shopping lists within Home Assistant. For authentication, the integration requires the `email` and `password` you used for your Bring! account. If you want to automatically receive notifications via the Bring! app when Home Assistant adds or removes an item from the list, you should use a dedicated account (such as `email:Β your.name+ha@gmail.com`) to connect Home Assistant with [Bring!](https://www.getbring.com/). {% include integrations/config_flow.md %} + +## Related topics + +- [Bring!](https://www.getbring.com/) +- [To-do list integration documentation](/integrations/todo) +- [List of to-do list integrations](/integrations/#to-do-list) +- [To-do list card](/dashboards/todo-list/) \ No newline at end of file diff --git a/source/_integrations/caldav.markdown b/source/_integrations/caldav.markdown index e1e0c2f7ec9..374fc235739 100644 --- a/source/_integrations/caldav.markdown +++ b/source/_integrations/caldav.markdown @@ -14,7 +14,7 @@ ha_integration_type: integration ha_config_flow: true --- -The CalDAV integration allows you to connect your WebDAV calendar to Home Assistant +The **CalDAV** integration allows you to connect your WebDAV calendar to Home Assistant as one of these entity types: - A [calendar](/integrations/calendar) entity which can be used to trigger automations based on the start or end of an event using criteria such as the event name or description. @@ -203,3 +203,13 @@ to generate a new password for use by Home Assistant to avoid sharing your iClou password. {% enddetails %} + +## Related topics + +- [Calendar](/integrations/calendar) + +### To-do list + +- [To-do list integration documentation](/integrations/todo) +- [List of to-do list integrations](/integrations/#to-do-list) +- [To-do list card](/dashboards/todo-list/) \ No newline at end of file diff --git a/source/_integrations/comelit.markdown b/source/_integrations/comelit.markdown index e98216efd1b..2788798ed64 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 4176b11e101..081a0fe89a9 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 9a59c0da81f..b54caba1fa5 100644 --- a/source/_integrations/ecovacs.markdown +++ b/source/_integrations/ecovacs.markdown @@ -142,7 +142,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 4cc1ca53a37..b7df1de04c4 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/event.markdown b/source/_integrations/event.markdown index 1053cda4ce3..7522304a595 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 f58ecbb8f95..a6e53b60d85 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 804046dfa42..750bba81ba8 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 b4dbf38860b..2d42bfd34db 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/google_tasks.markdown b/source/_integrations/google_tasks.markdown index 30eee6edad2..8bfacb45d64 100644 --- a/source/_integrations/google_tasks.markdown +++ b/source/_integrations/google_tasks.markdown @@ -19,7 +19,7 @@ each task list, allowing you to create, update, or delete items on the list from
-The Google Tasks public API does not support viewing or setting the due time of tasks, only the due date. +The Google Tasks public API does not support viewing or setting the due time of tasks, only the due date.
@@ -78,3 +78,14 @@ The integration setup will next give you instructions to enter the [Application ## Troubleshooting If you have an error with your credentials, you can delete them in the [Application Credentials](/integrations/application_credentials/) user interface. + +## Related topics + +- [Google Tasks](https://support.google.com/tasks/answer/7675772) +- [Google Developers Console](https://console.cloud.google.com/apis/library/tasks.googleapis.com) + +### To-do list + +- [To-do list integration documentation](/integrations/todo) +- [List of to-do list integrations](/integrations/#to-do-list) +- [To-do list card](/dashboards/todo-list/) \ No newline at end of file diff --git a/source/_integrations/heatmiser.markdown b/source/_integrations/heatmiser.markdown index 4b655d86db9..3052e54f036 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 83d836cbfa0..3b018340db8 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/homewizard.markdown b/source/_integrations/homewizard.markdown index 559ad476e46..9bda7132412 100644 --- a/source/_integrations/homewizard.markdown +++ b/source/_integrations/homewizard.markdown @@ -66,7 +66,7 @@ Sensors for P1 meter, only available when smart meter exposes these values: - **Power failures**: Two sensors that indicate the number of power failures that have been detected by the smart meter. One for all power failures and another for 'long' power failures. - **Peak demand**: Belgium users are starting to get charged for the peak usage per month (see [capaciteitstarief](https://www.fluvius.be/thema/factuur-en-tarieven/capaciteitstarief)). Two sensors are available: One that shows the current quarterly average and another that shows the peak measured this month. Both these sensors are provided directly from the smart meter and can be used to keep the peak as low as possible. -Sensors for kWh meter: +Sensors for Energy Socket and kWh meter: - **Voltage (V)**: Active voltage that is measured on each phase. - **Current (A)**: Active current that is measured on each phase. - **Frequency (Hz)**: Net frequency. diff --git a/source/_integrations/html5.markdown b/source/_integrations/html5.markdown index c7055c289ab..201fcbedc1f 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/huawei_lte.markdown b/source/_integrations/huawei_lte.markdown index b9db96ba68b..bfc0e5e289f 100644 --- a/source/_integrations/huawei_lte.markdown +++ b/source/_integrations/huawei_lte.markdown @@ -105,6 +105,7 @@ Resume suspended integration. Devices we know to be working with this integration based on the [documentation of used libraries](https://github.com/Salamek/huawei-lte-api/#huawei-lte-api) and reports by users: - Huawei B310s-22 +- Huawei B315s-936 - Huawei B525s-23a - Huawei E5186s-22a - Huawei B618 diff --git a/source/_integrations/icloud.markdown b/source/_integrations/icloud.markdown index 5dfe2d2cd89..c21090c0f3b 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/iqvia.markdown b/source/_integrations/iqvia.markdown index 25f62223751..c75407cf22d 100644 --- a/source/_integrations/iqvia.markdown +++ b/source/_integrations/iqvia.markdown @@ -50,5 +50,5 @@ Example values include: | Particulate (<= 2.5 ΞΌm) | PM2.5 | [EPA: Particulate Matter (PM) Pollution](https://www.epa.gov/pm-pollution) | | Particulate (<= 10 ΞΌm) | PM10 | [EPA: Particulate Matter (PM) Pollution](https://www.epa.gov/pm-pollution) | | Ozone | O | [EPA: Ozone Pollution](https://www.epa.gov/ozone-pollution) | -| Sulpher Dioxide | SO2 | [EPA: Sulfur Dioxide (SO2) Pollution](https://www.epa.gov/so2-pollution) | +| Sulfur Dioxide | SO2 | [EPA: Sulfur Dioxide (SO2) Pollution](https://www.epa.gov/so2-pollution) | | Carbon Monoxide | CO | [EPA: Carbon Monoxide (CO) Pollution in Outdoor Air](https://www.epa.gov/co-pollution) | diff --git a/source/_integrations/lifx_cloud.markdown b/source/_integrations/lifx_cloud.markdown index 6c137206b75..7dfd11e404e 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 9f3ca8f53db..31ee29164a1 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 f4a6b85f9ef..70495c6e137 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 3786fe8e9a6..6b977d18659 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) +- [To-do list card](/dashboards/todo-list/) \ No newline at end of file diff --git a/source/_integrations/loqed.markdown b/source/_integrations/loqed.markdown index 1243fc9354b..06e64c5e86f 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 26228765db9..01e786283bf 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 0564ec0a8a5..b1e8e4f120b 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.notify + service: notify.persistent_notification + data: + message: "You have {{ states('todo.shopping_list') }} items on your shopping list." +``` + +{% endraw %} + +{% raw %} + +```yaml +action: + 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 558e4107d40..663b5bfc7ab 100644 --- a/source/_integrations/opower.markdown +++ b/source/_integrations/opower.markdown @@ -88,8 +88,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: @@ -97,8 +97,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/ourgroceries.markdown b/source/_integrations/ourgroceries.markdown index 8887fe86e44..45c5f147c58 100644 --- a/source/_integrations/ourgroceries.markdown +++ b/source/_integrations/ourgroceries.markdown @@ -18,3 +18,10 @@ This integration connects with an [OurGroceries](https://www.ourgroceries.com/) It adds a [to-do list entity](/integrations/todo) for each shopping list, allowing you to create, update, or delete items on the list from the **To-do list** dashboard. {% include integrations/config_flow.md %} + +## Related topics + +- [OurGroceries](https://www.ourgroceries.com/) +- [To-do list integration documentation](/integrations/todo) +- [List of to-do list integrations](/integrations/#to-do-list) +- [To-do list card](/dashboards/todo-list/) \ No newline at end of file diff --git a/source/_integrations/profiler.markdown b/source/_integrations/profiler.markdown index 8563b5cda1e..c9ec95f6aec 100644 --- a/source/_integrations/profiler.markdown +++ b/source/_integrations/profiler.markdown @@ -85,6 +85,8 @@ Start logging the growth of objects in memory. Periodically log the growth of new objects in memory. This service's primary use case is finding memory leaks. This service can be run for long periods to find slow leaks. For finding fast leaks, `profiler.start_log_object_sources` is preferred; however, it is much more CPU intensive. +See the [corresponding documentation for `growth()`](https://mg.pov.lt/objgraph/objgraph.html#objgraph.growth) regarding the format in which this data is logged. + ### Service profiler.stop_log_objects {% my developer_call_service badge service="profiler.stop_log_objects" %} diff --git a/source/_integrations/pushover.markdown b/source/_integrations/pushover.markdown index a9a357eb55c..7d5351f6b32 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/roku.markdown b/source/_integrations/roku.markdown index b00890dd64e..479a2252b0b 100644 --- a/source/_integrations/roku.markdown +++ b/source/_integrations/roku.markdown @@ -33,6 +33,8 @@ The Roku integration allows you to control a [Roku](https://www.roku.com/) devic When adding the integration, you will be asked to provide a {% term host %}. Unless you changed the hostname, this refers to the IP address of your Roku device. You can find the IP address or hostname in the network settings of your Roku device, by checking your router, or by using a network scanning tool. +If you are having issues connecting, you may have to adjust the settings on your Roku device to allow local control. The common setting is: `Settings / System / Advanced / Control by mobile apps / Network access` + There is currently support for the following device types within Home Assistant: - Media player diff --git a/source/_integrations/sendgrid.markdown b/source/_integrations/sendgrid.markdown index d89881d1803..222c75bef0c 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 b77c55063b2..4f19d13e9fb 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/shopping_list.markdown b/source/_integrations/shopping_list.markdown index 957202089ed..2f3ae95438d 100644 --- a/source/_integrations/shopping_list.markdown +++ b/source/_integrations/shopping_list.markdown @@ -16,7 +16,7 @@ ha_platforms: The `shopping_list` integration allows you to keep track of shopping list items. -Your shopping list will be accessible from the sidebar, and you can optionally add the [shopping list card](/dashboards/shopping-list/) to your dashboard. With the [conversation integration](/integrations/conversation/) you can add items to your shopping list using voice commands like "Add eggs to my shopping list." +Your shopping list will be accessible from the sidebar, and you can optionally add the [To-do list card](/dashboards/todo-list/) to your dashboard. With the [conversation integration](/integrations/conversation/), you can add items to your shopping list using voice commands like "Add eggs to my shopping list." {% include integrations/config_flow.md %} diff --git a/source/_integrations/sma.markdown b/source/_integrations/sma.markdown index b08bc9e122b..e648b37b953 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 f4256e6e7f1..d7defba2304 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/supla.markdown b/source/_integrations/supla.markdown index 219bf135504..ae0d209bcf6 100644 --- a/source/_integrations/supla.markdown +++ b/source/_integrations/supla.markdown @@ -23,7 +23,7 @@ Currently, only covers (shutters in SUPLA's terminology), gates, garage doors, a Right now, it's impossible to add a device -- all of them are discovered from SUPLA-CLOUD's servers or yours. -For more complete Home Assistant support based on MQTT autodiscovery, consider switching your Supla devices to MQTT (through the setup interface). Or use the MQTT broker provided by [Supla Cloud] (https://cloud.supla.org/integrations/mqtt-broker). +For more complete Home Assistant support based on MQTT autodiscovery, consider switching your Supla devices to MQTT (through the setup interface). Or use the MQTT broker provided by [Supla Cloud](https://cloud.supla.org/integrations/mqtt-broker). ## Configuration @@ -43,7 +43,7 @@ servers: type: list keys: server: - description: Address of the SUPLA-CLOUD server (either IP address or DNS name); can either be the (cloud hosted)[https://cloud.supla.org] instance, or a (self hosted)[https://github.com/SUPLA/supla-cloud] instance. + description: Address of the SUPLA-CLOUD server (either IP address or DNS name); can either be the [cloud hosted](https://cloud.supla.org) instance, or a [self hosted](https://github.com/SUPLA/supla-cloud) instance. required: true type: string access_token: diff --git a/source/_integrations/switchbot.markdown b/source/_integrations/switchbot.markdown index 9176f454e18..35f23a9debb 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 f037f008d34..1c4886f455b 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/) +- [To-do list card](/dashboards/todo-list/) \ No newline at end of file diff --git a/source/_integrations/todoist.markdown b/source/_integrations/todoist.markdown index a76b775331f..de18a3d42d9 100644 --- a/source/_integrations/todoist.markdown +++ b/source/_integrations/todoist.markdown @@ -19,7 +19,7 @@ ha_config_flow: true This platform allows you to connect to your [Todoist projects](https://todoist.com) as [todo](/integrations/todo/) or [calendar](/integrations/calendar/) entities. All tasks get updated roughly every 15 minutes. -A calendar entity will be `on` if you have a task due in that project. It will be `off` if all the tasks in the project are completed or if the project doesn't have any tasks at all. +A calendar entity will be `on` if you have a task due in that project. It will be `off` if all the tasks in the project are completed or if the project doesn't have any tasks at all. ## Prerequisites @@ -194,3 +194,15 @@ Here are two example JSON payloads resulting in the same task: Valid languages are: `en`, `da`, `pl`, `zh`, `ko`, `de`, `pt`, `ja`, `it`, `fr`, `sv`, `ru`, `es`, `nl` - **reminder_date** (*Optional*): When should the user be reminded of this task, in either YYYY-MM-DD format or YYYY-MM-DD HH:MM format (in UTC timezone). Mutually exclusive with `reminder_date_string`. + +## Related topics + +- [Todoist projects](https://todoist.com) +- [Calendar](/integrations/calendar/) + +## To-do list + +- [To-do list integration documentation](/integrations/todo) +- [List of to-do list integrations](/integrations/#to-do-list) +- [To-do list card](/dashboards/todo-list/)- +- [Dashboards](/dashboards/dashboards/) \ No newline at end of file diff --git a/source/_integrations/twilio.markdown b/source/_integrations/twilio.markdown index 7670508c090..9a9f7e706ad 100644 --- a/source/_integrations/twilio.markdown +++ b/source/_integrations/twilio.markdown @@ -47,7 +47,7 @@ To set it up, go to the integrations page in the configuration screen and find T You will get a URL of the following format: `https:///api/webhook/9940e99a26fae4dcf6fe0a478124b6b58b578ea4c55c9a584beb1c9f5057bb91`. To generate inbound events, you have to configure your [webhooks with Twilio](https://www.twilio.com/docs/glossary/what-is-a-webhook): - Go to your Twilio [console](https://www.twilio.com/console). - - Under **phone numbers** > **active numbers** > (select number) > **configure**. + - Under **phone numbers** > **manage** > **active numbers** > (select number) > **configure**. - Paste your URL in the webhook URL box for **A call comes in** and **A message comes in** and save. Events coming in from Twilio will be available as events in Home Assistant and are fired as `twilio_data_received`. The data specified by Twilio will be available as the event data. You can use this event to trigger automations. diff --git a/source/_integrations/vodafone_station.markdown b/source/_integrations/vodafone_station.markdown index a727c383501..b2d0209a179 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 ea1b227c08d..436c5e4aca9 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/2022-12-20-year-of-voice.markdown b/source/_posts/2022-12-20-year-of-voice.markdown index 195bf1979a2..b109e172fd6 100644 --- a/source/_posts/2022-12-20-year-of-voice.markdown +++ b/source/_posts/2022-12-20-year-of-voice.markdown @@ -22,6 +22,7 @@ _**TL;DR**: It is our goal for 2023 to let users control Home Assistant in their - [Year of the Voice - Chapter 3](/blog/2023/07/20/year-of-the-voice-chapter-3/) (July 20, 2023) - [Year of the Voice - Chapter 4](/blog/2023/10/12/year-of-the-voice-chapter-4-wakewords/) (October 12, 2023) - [Year of the Voice - Chapter 5](/blog/2023/12/13/year-of-the-voice-chapter-5/) (December 13, 2023) + - [Voice - Chapter 6](/blog/2024/02/21/voice-chapter-6/) (February 21, 2024)
diff --git a/source/_posts/2024-02-21-voice-chapter-6.markdown b/source/_posts/2024-02-21-voice-chapter-6.markdown index ec7b5d50efb..307bb7ad549 100644 --- a/source/_posts/2024-02-21-voice-chapter-6.markdown +++ b/source/_posts/2024-02-21-voice-chapter-6.markdown @@ -141,5 +141,5 @@ Thanks to our language leaders for extending the sentence support to all the var [Kevin Ahrendt]: https://www.kevinahrendt.com/ [debugging tools]: /voice_control/troubleshooting/#test-a-sentence-per-language-without-voice-without-executing-commands [intents]: https://developers.home-assistant.io/docs/intent_builtin -[Chapter 4]: /blog/2023/10/20/year-of-the-voice-chapter-4/ +[Chapter 4]: /blog/2023/10/12/year-of-the-voice-chapter-4-wakewords/ [m5-tutorial]: /voice_control/thirteen-usd-voice-remote/ diff --git a/source/_posts/2024-03-06-release-20243.markdown b/source/_posts/2024-03-06-release-20243.markdown index 90e56bd2cd6..cfb97237b57 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 00000000000..e629e1e7640 --- /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 +--- + +

+ +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 99db11ff3ac..133864a49ae 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 31de1e1b0aa..1010ea4f4a8 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 8da0fa247cd..ae3936ff1f3 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 -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. +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. +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 613947c94ab..abcb82ff328 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.

Screenshot of the dashboard list @@ -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 Edit icon 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 7b067779159..cc62befc47a 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). @@ -574,3 +580,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 5e25b424175..b48a122e903 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 23cca5b5ec4..ba52d11d050 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 60b2a8faead..22d10a1badd 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. + +

+ Screenshot of a light view tab on the Overview dashboard + A lights view tab on the Overview dashboard +

+ +Views control the layout.

The three basic view layouts: Panel, sidebar, and masonry @@ -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 - Use titles and icons to describe the content of views. -

+ ![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) + +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 311e9448feb..a4e35a2ece2 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 +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). -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. +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. -![Dashboard](/images/getting-started/lovelace.png) +

+Screenshot of the Overview dashboard with Bluetooth devices +Screenshot of a new Overview dashboard with Bluetooth devices. +

-The procedure below is optional. The idea is to learn some basics on changing the dashboard. +Let's take a look at the devices that were detected and which cards are used to represent them on the dashboard. -### To change a card on the Overview 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 -1. To view your dashboard, go to **Overview**. - - Your dashboard might not have much on it yet. +### Sonos speaker + +If you have a smart speaker connected to Wi-Fi, for example, this can be detected. + +### Person + +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/). + +### 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 Edit icon 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. +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. -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. +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 6c7745bd104..595498a5abc 100644 --- a/source/green/index.html +++ b/source/green/index.html @@ -2308,339 +2308,408 @@ frontpage_image: /images/frontpage/green-frontpage.png
+
+ Shipping to America +
+
+ Shipping to Asia +
+
+ Shipping to Australia +
+
+ Shipping to Europe +
+ +
+
+
πŸ‡¨πŸ‡Ώ
+
Alza.cz
+
Shipping from the Czech Republic
+
+ + + +
+
- -
-
-
πŸ‡΅πŸ‡Ή
-
Mauser
-
Shipping from Portugal
-
- - - -
-
+ +
+
+
πŸ‡΅πŸ‡±
+
Botland
+
Shipping from Poland
+
+ + + +
+
- -
-
-
πŸ‡©πŸ‡ͺ
-
mediarath
-
Shipping from Germany
-
- - - -
-
+ +
+
+
πŸ‡«πŸ‡·
+
Domadoo
+
Shipping from France
+
+ + + +
+
- -
-
-
πŸ‡ΈπŸ‡ͺ
-
m.nu
-
Shipping from Sweden
-
- - - -
-
+ +
+
+
πŸ‡¬πŸ‡§
+
Everything Smart Technology
+
Shipping from the United Kingdom
+
+ + + +
+
- -
-
-
πŸ‡­πŸ‡Ί
-
OkosOtthon Bolt
-
Shipping from Hungary
-
- - - -
-
+ +
+
+
πŸ‡­πŸ‡Ί
+
eWeLink device store
+
Shipping from Hungary
+
+ + + +
+
- -
-
-
πŸ‡¦πŸ‡Ί
-
Oz Smart Things
-
Shipping from Australia
-
- - - -
-
+ +
+
+
πŸ‡΅πŸ‡Ή
+
Mauser
+
Shipping from Portugal
+
+ + + +
+
- -
-
-
πŸ‡¨πŸ‡­
-
Pi-Shop.ch
-
Shipping from Switzerland
-
- - - -
-
+ +
+
+
πŸ‡©πŸ‡ͺ
+
mediarath
+
Shipping from Germany
+
+ + + +
+
- -
-
-
πŸ‡©πŸ‡°
-
RaspberryPi.dk
-
Shipping from Denmark
-
- - - -
-
+ +
+
+
πŸ‡ΈπŸ‡ͺ
+
m.nu
+
Shipping from Sweden
+
+ + + +
+
- -
-
-
πŸ‡¨πŸ‡³
-
Seeed Studio
-
Shipping from China, US and Germany
-
- - - -
-
+ +
+
+
πŸ‡­πŸ‡Ί
+
OkosOtthon Bolt
+
Shipping from Hungary
+
+ + + +
+
- -
-
-
πŸ‡ΈπŸ‡°
-
SmarterHOME
-
Shipping from Slovakia
-
- - - -
-
+ +
+
+
πŸ‡¨πŸ‡­
+
Pi-Shop.ch
+
Shipping from Switzerland
+
+ + + +
+
- -
-
-
πŸ‡¦πŸ‡Ί
-
Smart Guys
-
Shipping from Australia
-
- - - -
-
+ +
+
+
πŸ‡©πŸ‡°
+
RaspberryPi.dk
+
Shipping from Denmark
+
+ + + +
+
- -
-
-
πŸ‡¨πŸ‡­
-
Swiss-Domotique
-
Shipping from Switzerland
-
- - - -
-
+ +
+
+
πŸ‡¨πŸ‡³
+
Seeed Studio
+
Shipping from China, US and Germany
+
+ + + +
+
- -
-
-
πŸ‡¬πŸ‡§
-
The Pi Hut
-
Shipping from the United Kingdom
-
- - - -
-
+ +
+
+
πŸ‡ΈπŸ‡°
+
SmarterHOME
+
Shipping from Slovakia
+
+ + + +
+
- - - +
diff --git a/source/green/script.js b/source/green/script.js index 5c2b3cb8b5f..e880f83bbb9 100644 --- a/source/green/script.js +++ b/source/green/script.js @@ -23,6 +23,19 @@ function handleIntersect(entries, _observer) { }); } +const expandRegion = () => { + try { + const tz = Intl.DateTimeFormat().resolvedOptions().timeZone; + const continent = tz.replace( /^(Asia|America|Australia|Europe)\/.*$/, '$1' ); + + if ( continent != tz ) { + document.querySelector( `#dist_${continent.toLowerCase()}` ).open = true; + } + } catch ( ev ) { + // Ignore... + } +}; + window.addEventListener( "load", () => { @@ -67,6 +80,8 @@ window.addEventListener( }, { passive: true } ); + + expandRegion(); }, false ); diff --git a/source/images/dashboards/cards-todo.png b/source/images/dashboards/cards-todo.png new file mode 100644 index 00000000000..b7d40840db8 Binary files /dev/null and b/source/images/dashboards/cards-todo.png differ diff --git a/source/images/dashboards/dashboard-manage-02.png b/source/images/dashboards/dashboard-manage-02.png new file mode 100644 index 00000000000..8e3ceeada55 Binary files /dev/null and b/source/images/dashboards/dashboard-manage-02.png differ diff --git a/source/images/dashboards/dashboard_add-by-entity_02.png b/source/images/dashboards/dashboard_add-by-entity_02.png new file mode 100644 index 00000000000..989f31c45b8 Binary files /dev/null and b/source/images/dashboards/dashboard_add-by-entity_02.png differ diff --git a/source/images/dashboards/dashboard_add-by-entity_04.png b/source/images/dashboards/dashboard_add-by-entity_04.png new file mode 100644 index 00000000000..c936e8ffe5c Binary files /dev/null and b/source/images/dashboards/dashboard_add-by-entity_04.png differ diff --git a/source/images/dashboards/dashboard_view-tab.png b/source/images/dashboards/dashboard_view-tab.png new file mode 100644 index 00000000000..0db73de8017 Binary files /dev/null and b/source/images/dashboards/dashboard_view-tab.png differ diff --git a/source/images/dashboards/dashboard_view_configuration_01.png b/source/images/dashboards/dashboard_view_configuration_01.png new file mode 100644 index 00000000000..075fe1bf470 Binary files /dev/null and b/source/images/dashboards/dashboard_view_configuration_01.png differ diff --git a/source/images/dashboards/sections_view_add-card-or-section.png b/source/images/dashboards/sections_view_add-card-or-section.png new file mode 100644 index 00000000000..3f5ac636fd4 Binary files /dev/null and b/source/images/dashboards/sections_view_add-card-or-section.png differ diff --git a/source/images/dashboards/shopping_list_card.gif b/source/images/dashboards/shopping_list_card.gif deleted file mode 100644 index 34e221758d8..00000000000 Binary files a/source/images/dashboards/shopping_list_card.gif and /dev/null differ diff --git a/source/images/dashboards/todo-list_card_shopping-list.png b/source/images/dashboards/todo-list_card_shopping-list.png new file mode 100644 index 00000000000..041014783b7 Binary files /dev/null and b/source/images/dashboards/todo-list_card_shopping-list.png differ diff --git a/source/images/docs/scripts/sun-conditions.svg b/source/images/docs/scripts/sun-conditions.svg index acf6645e6d2..34f38a142a6 100644 --- a/source/images/docs/scripts/sun-conditions.svg +++ b/source/images/docs/scripts/sun-conditions.svg @@ -1,74 +1,586 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 00:00 - 06:00 - 12:00 - 18:00 - 00:00 - - - - - - - - - Before Sunrise - Before Sunrise +1:00:00 - After Sunrise - After Sunrise +1:00:00 - Before Sunset - Before Sunset +1:00:00 - After Sunset - After Sunset +1:00:00 - - AAAAAAAAAAAAAAAAAAAAAAA - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 00:00 + 06:00 + 12:00 + 18:00 + 00:00 + + + + + + + + + Before Sunrise + Before Sunrise +1:00:00 + After Sunrise + After Sunrise -1:00:00 + Before Sunset + Before Sunset -1:00:00 + After Sunset + After Sunset +1:00:00After Sunrise - 1:00:00 /Before Sunset +1:00:00Before Sunrise +1:00:00 /After Sunset -1:00:00 + + + diff --git a/source/images/frontpage/state-of-the-open-home-2024.png b/source/images/frontpage/state-of-the-open-home-2024.png new file mode 100644 index 00000000000..a80ba9d2f31 Binary files /dev/null and b/source/images/frontpage/state-of-the-open-home-2024.png differ diff --git a/source/images/getting-started/onboarding_dashboard_raspi_bluetooth.png b/source/images/getting-started/onboarding_dashboard_raspi_bluetooth.png new file mode 100644 index 00000000000..f1488244bfb Binary files /dev/null and b/source/images/getting-started/onboarding_dashboard_raspi_bluetooth.png differ diff --git a/source/index.html b/source/index.html index 579520e808b..7d6cec1c915 100644 --- a/source/index.html +++ b/source/index.html @@ -105,6 +105,17 @@ feedback: false -
- Home Assistant SkyConnect box includes: -
    -
  • Home Assistant SkyConnect USB Stick
  • -
  • 50cm/19.6in USB extension cable
  • -
-
- -
-
-
πŸ‡¨πŸ‡Ώ
-
ALZA
-
Shipping from the Czech Republic
-
- - - -
-
+
+ Shipping to America +
+
+ Shipping to Asia +
+
+ Shipping to Australia +
+
+ Shipping to Europe +
- -
-
-
πŸ‡©πŸ‡ͺ
-
mediarath
-
Shipping from Germany
-
- - - -
-
+ +
+
+
πŸ‡¨πŸ‡Ώ
+
ALZA
+
Shipping from the Czech Republic
+
+ + + +
+
- -
-
-
πŸ‡ΈπŸ‡ͺ
-
m.nu
-
Shipping from Sweden
-
- - - -
-
+ +
+
+
πŸ‡΅πŸ‡±
+
Botland
+
Shipping from Poland
+
+ + + +
+
- -
-
-
πŸ‡­πŸ‡Ί
-
OkosOtthon Bolt
-
Shipping from Hungary
-
- - - -
-
+ +
+
+
πŸ‡«πŸ‡·
+
Domadoo
+
Shipping from France
+
+ + + +
+
- -
-
-
πŸ‡©πŸ‡°
-
RaspberryPi.dk
-
Shipping from Denmark
-
- - - -
-
+ +
+
+
πŸ‡¬πŸ‡§
+
Everything Smart Technology
+
Shipping from the United Kingdom
+
+ + + +
+
- -
-
-
πŸ‡³πŸ‡±
-
Robbshop
-
Shipping from the Netherlands
-
- - - -
-
+ +
+
+
πŸ‡­πŸ‡Ί
+
eWeLink device store
+
Shipping from Hungary
+
+ + + +
+
- -
-
-
πŸ‡¨πŸ‡³
-
Seeed Studio
-
Shipping from China, US and Germany
-
- - - -
-
+ +
+
+
πŸ‡³πŸ‡±
+
HAshop
+
Shipping from the Netherlands
+
+ + + +
+
- -
-
-
πŸ‡ΈπŸ‡°
-
SmarterHOME
-
Shipping from Slovakia
-
- - - -
-
+ +
+
+
πŸ‡΅πŸ‡Ή
+
Mauser
+
Shipping from Portugal
+
+ + + +
+
- -
-
-
πŸ‡¦πŸ‡Ί
-
Smart Guys
-
Shipping from Australia
-
- - - -
-
+ +
+
+
πŸ‡©πŸ‡ͺ
+
mediarath
+
Shipping from Germany
+
+ + + +
+
- -
-
-
πŸ‡¨πŸ‡­
-
Swiss-Domotique
-
Shipping from Switzerland
-
- - - -
-
+ +
+
+
πŸ‡ΈπŸ‡ͺ
+
m.nu
+
Shipping from Sweden
+
+ + + +
+
- -
-
-
πŸ‡¬πŸ‡§
-
The Pi Hut
-
Shipping from the United Kingdom
-
- - - -
-
+ +
+
+
πŸ‡­πŸ‡Ί
+
OkosOtthon Bolt
+
Shipping from Hungary
+
+ + + +
+
- - - +
@@ -617,4 +670,15 @@ frontpage_image: /images/skyconnect/skyconnect-cover.png if (document.location.search === "?order") { showBuyDialog(); } + + try { + const tz = Intl.DateTimeFormat().resolvedOptions().timeZone; + const continent = tz.replace( /^(Asia|America|Australia|Europe)\/.*$/, '$1' ); + + if ( continent != tz ) { + document.querySelector( `#dist_${continent.toLowerCase()}` ).open = true; + } + } catch ( ev ) { + // Ignore... + } diff --git a/source/voice_control/voice_remote_local_assistant.markdown b/source/voice_control/voice_remote_local_assistant.markdown index f4992eabf0f..caadd0f74a4 100644 --- a/source/voice_control/voice_remote_local_assistant.markdown +++ b/source/voice_control/voice_remote_local_assistant.markdown @@ -53,7 +53,7 @@ For the quickest way to get your local Assist pipeline started, follow these ste - Depending on your language, you may be able to select different language variants. - If you like, pick one of the predefined wake words. ![Select wake word](/images/assist/assist_predefined_wakeword.png) - - You can even [define your own a wake word](/voice_control/create_wake_word/). This is not difficult to do, but you will need to set aside a bit of time for this. + - You can even [define your own wake word](/voice_control/create_wake_word/). This is not difficult to do, but you will need to set aside a bit of time for this. - Once you defined your own wake word, it will show in this pick list. 3. That's it. You ensured your voice commands can be processed locally on your device. diff --git a/source/yellow/index.html b/source/yellow/index.html index c4b362f484c..c2bff3222b7 100644 --- a/source/yellow/index.html +++ b/source/yellow/index.html @@ -349,159 +349,212 @@ frontpage_image: /images/frontpage/yellow-frontpage.jpg
+
+ Shipping to America +
- -
-
-
πŸ‡ΊπŸ‡Έ
-
ameriDroid
-
Shipping from US. Yellow Kit versions only. Also sells CM4 modules.
-
- - - -
-
+ +
+
+
πŸ‡ΊπŸ‡Έ
+
ameriDroid
+
Shipping from US. Yellow Kit versions only. Also sells CM4 modules.
+
+ + + +
+
- -
-
-
πŸ‡ΊπŸ‡Έ
-
CloudFree
-
Shipping from US. Yellow Kit versions only. Also sells CM4 modules.
-
- - - -
-
+ +
+
+
πŸ‡ΊπŸ‡Έ
+
CloudFree
+
Shipping from US. Yellow Kit versions only. Also sells CM4 modules.
+
+ + + +
+
- -
-
-
πŸ‡ΊπŸ‡Έ
-
Crowd Supply
-
Shipping from US. Yellow Kit versions only.
-
- - - -
-
+ +
+
+
πŸ‡ΊπŸ‡Έ
+
Crowd Supply
+
Shipping from US. Yellow Kit versions only.
+
+ + + +
+
- + +
+
+
πŸ‡¨πŸ‡³
+
Seeed Studio
+
Shipping from China, US and Germany. Also sells CM4 modules.
+
+ + + +
+
- -
-
-
πŸ‡΅πŸ‡Ή
-
Mauser
-
Shipping from Portugal. Yellow Kit versions only. Also sells CM4 modules.
-
- - -
-
+
+
+ Shipping to Asia +
+
+ Shipping to Europe +
- -
-
-
πŸ‡¨πŸ‡³
-
Seeed Studio
-
Shipping from China, US and Germany. Also sells CM4 modules.
-
- - - -
-
+ - - - +
@@ -543,4 +596,15 @@ frontpage_image: /images/frontpage/yellow-frontpage.jpg if (document.location.search === "?order") { showBuyDialog(); } + + try { + const tz = Intl.DateTimeFormat().resolvedOptions().timeZone; + const continent = tz.replace( /^(Asia|America|Australia|Europe)\/.*$/, '$1' ); + + if ( continent != tz ) { + document.querySelector( `#dist_${continent.toLowerCase()}` ).open = true; + } + } catch ( ev ) { + // Ignore... + } \ No newline at end of file