diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index f3788e50271..3d510c891e8 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -12,7 +12,7 @@ jobs: pull-requests: write runs-on: ubuntu-latest steps: - - uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10.0.0 + - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0 if: ${{ github.repository_owner == 'home-assistant' }} with: repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 83c4031a1c5..32e77e985cb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,7 +10,7 @@ jobs: - name: Check out files from GitHub uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Setting up Node.js - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version: 20 cache: "npm" @@ -37,7 +37,7 @@ jobs: - name: Check out files from GitHub uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Setting up Node.js - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version: 20 cache: "npm" diff --git a/CODEOWNERS b/CODEOWNERS index 147cc8ee540..a3867fcb0c5 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -8,6 +8,11 @@ # https://github.com/blog/2392-introducing-code-owners # Pages + +# Non-integration pages (manually maintained) +source/privacy/index.markdown @frenck + +# Integration pages (auto-synced from core) source/_integrations/3_day_blinds.markdown @starkillerOG source/_integrations/_integration_docs_template.markdown @home-assistant/core source/_integrations/abode.markdown @shred86 diff --git a/Gemfile b/Gemfile index 73015375b2b..2f043899b98 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' ruby '> 2.5.0' group :development do - gem 'rake', '13.3.0' + gem 'rake', '13.3.1' gem 'jekyll', '4.4.1' gem 'compass', '1.0.3' gem 'sass-globbing', '1.1.5' @@ -11,8 +11,8 @@ group :development do # > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189 gem 'sassc', '2.1.0' gem 'sass-embedded', '1.93.2' - gem 'rubocop', '1.81.1' - gem 'ruby-lsp', '0.26.1' + gem 'rubocop', '1.81.6' + gem 'ruby-lsp', '0.26.2' gem 'rackup', '2.2.1' end @@ -23,7 +23,7 @@ group :jekyll_plugins do gem 'jekyll-toc', '0.19.0' end -gem 'sinatra', '4.1.1' +gem 'sinatra', '4.2.1' gem 'nokogiri', '1.18.10' # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem diff --git a/Gemfile.lock b/Gemfile.lock index 9fe310ee82f..b496be0fbf0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -5,7 +5,7 @@ GEM public_suffix (>= 2.0.2, < 7.0) ast (2.4.3) base64 (0.3.0) - bigdecimal (3.2.3) + bigdecimal (3.3.1) chunky_png (1.4.0) colorator (1.1.0) commonmarker (0.23.12) @@ -30,10 +30,10 @@ GEM ffi (1.17.2-arm64-darwin) ffi (1.17.2-x86_64-linux-gnu) forwardable-extended (2.6.0) - google-protobuf (4.32.1-arm64-darwin) + google-protobuf (4.33.0-arm64-darwin) bigdecimal rake (>= 13) - google-protobuf (4.32.1-x86_64-linux-gnu) + google-protobuf (4.33.0-x86_64-linux-gnu) bigdecimal rake (>= 13) http_parser.rb (0.8.0) @@ -70,7 +70,7 @@ GEM nokogiri (~> 1.12) jekyll-watch (2.2.1) listen (~> 3.0) - json (2.15.0) + json (2.15.2) kramdown (2.5.1) rexml (>= 3.3.9) kramdown-parser-gfm (1.1.0) @@ -91,16 +91,16 @@ GEM nokogiri (1.18.10-x86_64-linux-gnu) racc (~> 1.4) parallel (1.27.0) - parser (3.3.9.0) + parser (3.3.10.0) ast (~> 2.4.1) racc pathutil (0.16.2) forwardable-extended (~> 2.6) - prism (1.5.1) + prism (1.6.0) public_suffix (6.0.2) racc (1.8.1) - rack (3.2.1) - rack-protection (4.1.1) + rack (3.2.3) + rack-protection (4.2.1) base64 (>= 0.1.0) logger (>= 1.6.0) rack (>= 3.0.0, < 4) @@ -110,7 +110,7 @@ GEM rackup (2.2.1) rack (>= 3) rainbow (3.1.1) - rake (13.3.0) + rake (13.3.1) rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) @@ -119,7 +119,7 @@ GEM regexp_parser (2.11.3) rexml (3.4.4) rouge (4.6.1) - rubocop (1.81.1) + rubocop (1.81.6) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) @@ -133,7 +133,7 @@ GEM rubocop-ast (1.47.1) parser (>= 3.3.7.2) prism (~> 1.4) - ruby-lsp (0.26.1) + ruby-lsp (0.26.2) language_server-protocol (~> 3.17.0) prism (>= 1.2, < 2.0) rbs (>= 3, < 5) @@ -151,11 +151,11 @@ GEM ffi (~> 1.9) sassc (2.1.0-x86_64-linux) ffi (~> 1.9) - sinatra (4.1.1) + sinatra (4.2.1) logger (>= 1.6.0) mustermann (~> 3.0) rack (>= 3.0.0, < 4) - rack-protection (= 4.1.1) + rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) stringex (2.8.6) @@ -182,13 +182,13 @@ DEPENDENCIES jekyll-toc (= 0.19.0) nokogiri (= 1.18.10) rackup (= 2.2.1) - rake (= 13.3.0) - rubocop (= 1.81.1) - ruby-lsp (= 0.26.1) + rake (= 13.3.1) + rubocop (= 1.81.6) + ruby-lsp (= 0.26.2) sass-embedded (= 1.93.2) sass-globbing (= 1.1.5) sassc (= 2.1.0) - sinatra (= 4.1.1) + sinatra (= 4.2.1) stringex (= 2.8.6) tzinfo (~> 2.0) tzinfo-data diff --git a/_config.yml b/_config.yml index 67f69b3f6ad..4c624f0f16d 100644 --- a/_config.yml +++ b/_config.yml @@ -108,8 +108,8 @@ social: # Home Assistant release details current_major_version: 2025 current_minor_version: 10 -current_patch_version: 0 -date_released: 2025-10-01 +current_patch_version: 4 +date_released: 2025-10-24 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/package-lock.json b/package-lock.json index 1c48fceb960..d54fbfb35dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "remark-lint-prohibited-strings": "^4.0.0", "remark-lint-unordered-list-marker-style": "^4.0.1", "remark-stringify": "^11.0.0", - "textlint": "^15.2.2", + "textlint": "^15.2.3", "textlint-filter-rule-allowlist": "^4.0.0", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", @@ -144,9 +144,9 @@ "license": "MIT" }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.17.3.tgz", - "integrity": "sha512-JPwUKWSsbzx+DLFznf/QZ32Qa+ptfbUlHhRLrBQBAFu9iI1iYvizM4p+zhhRDceSsPutXp4z+R/HPVphlIiclg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.20.0.tgz", + "integrity": "sha512-kOQ4+fHuT4KbR2iq2IjeV32HiihueuOf1vJkq18z08CLZ1UQrTc8BXJpVfxZkq45+inLLD+D4xx4nBjUelJa4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -267,68 +267,68 @@ } }, "node_modules/@textlint/ast-node-types": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.2.tgz", - "integrity": "sha512-9ByYNzWV8tpz6BFaRzeRzIov8dkbSZu9q7IWqEIfmRuLWb2qbI/5gTvKcoWT1HYs4XM7IZ8TKSXcuPvMb6eorA==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.3.tgz", + "integrity": "sha512-GEhoxfmh6TF+xC8TJmAUwOzzh0J6sVDqjKhwTTwetf7YDdhHbIv1PuUb/dTadMVIWs1H0+JD4Y27n6LWMmqn9Q==", "dev": true, "license": "MIT" }, "node_modules/@textlint/ast-tester": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-15.2.2.tgz", - "integrity": "sha512-puwnJSPOeqtPQslz6ehfEF1wqoTb/iTebHj+vy6zePpHhBZRJdZKOqPe7p83Atetc8O5SEYa1aJ8ur8sSm0wQw==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-15.2.3.tgz", + "integrity": "sha512-eT0DBbQTa7Hm0JRRHT9vUv6VoIuY19eqI8UL2I7AzE820DSrrNkgGg/ZxB9I6BCDK/Yg96lJ45fMIeOFPvuJaQ==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.2.2", - "debug": "^4.4.1" + "@textlint/ast-node-types": "15.2.3", + "debug": "^4.4.3" } }, "node_modules/@textlint/ast-traverse": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-15.2.2.tgz", - "integrity": "sha512-5uZCNp6fSYvDgQW3LGnJYC90ac1qWhUZJtjE1tI0fPk7U14Gr0Qu5FEOMuW0YUV5aoo3P1OpwrKPt2U6FFlrvg==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-15.2.3.tgz", + "integrity": "sha512-XqlEVbQanAu40pGrtoRJzV3bWUxiCvqpu6FBmHotUgah1jjNWe6DQRkDsjcil9qXrVjXfQFAjG8ZuDk9/sUcGg==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.2.2" + "@textlint/ast-node-types": "15.2.3" } }, "node_modules/@textlint/config-loader": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-15.2.2.tgz", - "integrity": "sha512-uFlxTMhgS0jLzdn4xd3TDS/3QWlE8br2LQVnCjdNmvyU7qNpXHy/9+XUEfbvVMyBXrfBnDIFY4AQAXfhGdOo7g==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-15.2.3.tgz", + "integrity": "sha512-dSedypITXGyh/Bz0t/tQU1NMyehfZeeYhEMtfqpdFY6a3ABLpfaZpOMOZd9EP4zwu2oi2OsooQBMbn/ZdXJ12w==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/kernel": "15.2.2", - "@textlint/module-interop": "15.2.2", - "@textlint/resolver": "15.2.2", - "@textlint/types": "15.2.2", - "@textlint/utils": "15.2.2", - "debug": "^4.4.1", + "@textlint/kernel": "15.2.3", + "@textlint/module-interop": "15.2.3", + "@textlint/resolver": "15.2.3", + "@textlint/types": "15.2.3", + "@textlint/utils": "15.2.3", + "debug": "^4.4.3", "rc-config-loader": "^4.1.3" } }, "node_modules/@textlint/feature-flag": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-15.2.2.tgz", - "integrity": "sha512-SX//fr056jGT3aRDbPTz4k0kEqyHRTvbHTr7HgC3yuksO89NKl605gmU9flrykBZC+i4GOMcR2BL4SweiNXbTg==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-15.2.3.tgz", + "integrity": "sha512-XW2NVj3K7Pi8jlgwxKMUh7L1y+EMN+s47TtEC1rkagI581THgHnAyAe+/aHZsF/CJEwevZtGnaan2MY1rnbsYA==", "dev": true, "license": "MIT" }, "node_modules/@textlint/fixer-formatter": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-15.2.2.tgz", - "integrity": "sha512-wX52sevPrM/hWDAolBm5yJkSQ5QGmLYMja4C1Ao3o/HVO5eI/Q6PS8amtoGJOilOXKrVV0hBuEwGdrXuyGngXw==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-15.2.3.tgz", + "integrity": "sha512-cdA3Pt2aaR2NKDBqv/rZiZ8VIuTsUZYX1uaq6v2T2HDFlHn46gv6A4TPg8w5ACpoHid1+kADqe67GRpCxPb9rQ==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/module-interop": "15.2.2", - "@textlint/resolver": "15.2.2", - "@textlint/types": "15.2.2", + "@textlint/module-interop": "15.2.3", + "@textlint/resolver": "15.2.3", + "@textlint/types": "15.2.3", "chalk": "^4.1.2", - "debug": "^4.4.1", + "debug": "^4.4.3", "diff": "^5.2.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", @@ -342,38 +342,38 @@ "dev": true }, "node_modules/@textlint/kernel": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-15.2.2.tgz", - "integrity": "sha512-xFtIx3thI3SC2wk4uApJ5lW0cks4pkSfoRejfYoAMwPd1VyvFhCsQQWNRTyXIlXfNIGT6qY82SoPyXvi3XF6Zg==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-15.2.3.tgz", + "integrity": "sha512-A+YVhh5cFMDrNbnhA754/PT2WrVirQ/zCvGKJz/+yKR+ju97eQc6wZOcu/vYAEsS0+vDZRyR/opD+aOaI3GHZA==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.2.2", - "@textlint/ast-tester": "15.2.2", - "@textlint/ast-traverse": "15.2.2", - "@textlint/feature-flag": "15.2.2", - "@textlint/source-code-fixer": "15.2.2", - "@textlint/types": "15.2.2", - "@textlint/utils": "15.2.2", - "debug": "^4.4.1", + "@textlint/ast-node-types": "15.2.3", + "@textlint/ast-tester": "15.2.3", + "@textlint/ast-traverse": "15.2.3", + "@textlint/feature-flag": "15.2.3", + "@textlint/source-code-fixer": "15.2.3", + "@textlint/types": "15.2.3", + "@textlint/utils": "15.2.3", + "debug": "^4.4.3", "fast-equals": "^4.0.3", "structured-source": "^4.0.0" } }, "node_modules/@textlint/linter-formatter": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.2.2.tgz", - "integrity": "sha512-oMVaMJ3exFvXhCj3AqmCbLaeYrTNLqaJnLJMIlmnRM3/kZdxvku4OYdaDzgtlI194cVxamOY5AbHBBVnY79kEg==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.2.3.tgz", + "integrity": "sha512-gnFGl8MejAS4rRDPKV2OYvU0Tb0iJySOPDahf+RCK30b615UqY6CjqWxXw1FvXfT3pHPoRrefVu39j1AKm2ezg==", "dev": true, "license": "MIT", "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "15.2.2", - "@textlint/resolver": "15.2.2", - "@textlint/types": "15.2.2", + "@textlint/module-interop": "15.2.3", + "@textlint/resolver": "15.2.3", + "@textlint/types": "15.2.3", "chalk": "^4.1.2", - "debug": "^4.4.1", + "debug": "^4.4.3", "js-yaml": "^3.14.1", "lodash": "^4.17.21", "pluralize": "^2.0.0", @@ -384,14 +384,14 @@ } }, "node_modules/@textlint/markdown-to-ast": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-15.2.2.tgz", - "integrity": "sha512-7LsDOCApuM5463e4mfJAORyOMDxzJGmfDfoT6RtwL5P1T1kKGxLl5yudzdfm8++WB8v4wJZZEUQqppejeDRs9Q==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-15.2.3.tgz", + "integrity": "sha512-5kz75TBEOUQIpqCaV65l98YSIpfyOyTKSn4et9A//iSbjiwZHDK3HBo2jDWdkHmGX28+w1hBFDR7/eFMnbxAJQ==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.2.2", - "debug": "^4.4.1", + "@textlint/ast-node-types": "15.2.3", + "debug": "^4.4.3", "mdast-util-gfm-autolink-literal": "^0.1.3", "neotraverse": "^0.6.18", "remark-footnotes": "^3.0.0", @@ -645,9 +645,9 @@ } }, "node_modules/@textlint/module-interop": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.2.2.tgz", - "integrity": "sha512-2rmNcWrcqhuR84Iio1WRzlc4tEoOMHd6T7urjtKNNefpTt1owrTJ9WuOe60yD3FrTW0J/R0ux5wxUbP/eaeFOA==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.2.3.tgz", + "integrity": "sha512-dV6M3ptOFJjR5bgYUMeVqc8AqFrMtCEFaZEiLAfMufX29asYonI2K8arqivOA69S2Lh6esyij6V7qpQiXeK/cA==", "dev": true, "license": "MIT" }, @@ -675,69 +675,69 @@ } }, "node_modules/@textlint/resolver": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.2.2.tgz", - "integrity": "sha512-4hGWjmHt0y+5NAkoYZ8FvEkj8Mez9TqfbTm3BPjoV32cIfEixl2poTOgapn1rfm73905GSO3P1jiWjmgvii13Q==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.2.3.tgz", + "integrity": "sha512-Qd3udqo2sWa3u0sYgDVd9M/iybBVBJLrWGaID6Yzl9GyhdGi0E6ngo3b9r+H6psbJDIaCKi54IxvC9q5didWfA==", "dev": true, "license": "MIT" }, "node_modules/@textlint/source-code-fixer": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-15.2.2.tgz", - "integrity": "sha512-Cstr9wjK7toLmY2hhlZ3YcIh8o/gr7E5dpCd9IalNiMBedvvLYuOfhktKgUa4E7oFcGtl0leDPgx5ENDY25JDw==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-15.2.3.tgz", + "integrity": "sha512-DfKy15kGFG8ddEYDyeRKilVI3nTSdEp5/sw7ariyUXk2spAW8xdToRpgeMaluF4Cp5gcGa6bVOTDJapj/UfFvA==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/types": "15.2.2", - "debug": "^4.4.1" + "@textlint/types": "15.2.3", + "debug": "^4.4.3" } }, "node_modules/@textlint/text-to-ast": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-15.2.2.tgz", - "integrity": "sha512-IphrojtJw3eW/1JMm/Hzc0dsDFALpEzjankABS6tIHMvB2O+2wejRDbDaqmgCgMCr+lGKoMNg5Xvlr5x9XRxww==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-15.2.3.tgz", + "integrity": "sha512-xweE4sDTz56tLy90UXcjn/YEYZr2NH/Kh4Kr5FmQ8K4MtJXOVOubnwmN9503/Vmj4Mq9uNuEzR35D4H2LVHriQ==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.2.2" + "@textlint/ast-node-types": "15.2.3" } }, "node_modules/@textlint/textlint-plugin-markdown": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-15.2.2.tgz", - "integrity": "sha512-JzmHAtC2C4LOpJ/JD2YsqBZt9ej4khFFDI0d9E6P9y9AO/HOEv4GeT7aAjGGPG6AVO977aGiJ92EK9kTwlVnIQ==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-15.2.3.tgz", + "integrity": "sha512-fpHuWt1Tonl+UuObH5upByvPWQjd9swu+beMlrSagBWTFblEyNxGwgaQkTjaWC/SYqJn4TkTsT1c1IZJaHV5oQ==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/markdown-to-ast": "15.2.2", - "@textlint/types": "15.2.2" + "@textlint/markdown-to-ast": "15.2.3", + "@textlint/types": "15.2.3" } }, "node_modules/@textlint/textlint-plugin-text": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-15.2.2.tgz", - "integrity": "sha512-bZYlxw8S9zsuJgx2EAR23RFyQ3JtyuIDUA3dbt5Sov2eo20LitNjDIqrQgDo85widbOD/6rG7VioNesV1/6HFw==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-15.2.3.tgz", + "integrity": "sha512-d5a1dXCYqx3cz8Q8dg5JFqWGbZHbfnYIKsue5DndEY6YtZ99JnaAvReo6GuJK5Pg+6pgOys2OvyZRxFA4D59fQ==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/text-to-ast": "15.2.2", - "@textlint/types": "15.2.2" + "@textlint/text-to-ast": "15.2.3", + "@textlint/types": "15.2.3" } }, "node_modules/@textlint/types": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.2.2.tgz", - "integrity": "sha512-X2BHGAR3yXJsCAjwYEDBIk9qUDWcH4pW61ISfmtejau+tVqKtnbbvEZnMTb6mWgKU1BvTmftd5DmB1XVDUtY3g==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.2.3.tgz", + "integrity": "sha512-i8XVmDHJwykMXcGgkSxZLjdbeqnl+voYAcIr94KIe0STwgkHIhwHJgb/tEVFawGClHo+gPczF12l1C5+TAZEzQ==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.2.2" + "@textlint/ast-node-types": "15.2.3" } }, "node_modules/@textlint/utils": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-15.2.2.tgz", - "integrity": "sha512-uPCfBl2NF4tiXGjAE5DAwah0Bn/EFsgtXhDEIJV4hsSfBQBD8Guqnh8MvJj25fvZaQS+MTNGiEC6bFXtIMHuAg==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-15.2.3.tgz", + "integrity": "sha512-B5OHi1P6JA0Hy04MmmTeNXFTsSfvgbbqQAWj9iUHg+GhPtd8GyFzb0uxLDIp1oqAGN8eM2hR/n8vwz4WsfPqMw==", "dev": true, "license": "MIT" }, @@ -1338,9 +1338,9 @@ } }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { @@ -1574,13 +1574,13 @@ } }, "node_modules/eventsource-parser": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.5.tgz", - "integrity": "sha512-bSRG85ZrMdmWtm7qkF9He9TNRzc/Bm99gEJMaQoHJ9E6Kv9QBbsldh2oMj7iXmYNEAVvNgvv5vPorG6W+XtBhQ==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", "dev": true, "license": "MIT", "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/execall": { @@ -1702,9 +1702,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "dev": true, "funding": [ { @@ -2438,7 +2438,8 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.sortby": { "version": "4.7.0", @@ -4446,13 +4447,14 @@ "dev": true }, "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=16" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/picocolors": { @@ -4571,19 +4573,36 @@ } }, "node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", + "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", - "iconv-lite": "0.6.3", + "iconv-lite": "0.7.0", "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/rc-config-loader": { @@ -6755,28 +6774,28 @@ "dev": true }, "node_modules/textlint": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-15.2.2.tgz", - "integrity": "sha512-0V02Lvs7GJfXPNJgBVhayysW+9qe0bZVmyD8FrYzkW70xZcSoVK4Hdl6825wpQqn8KgdB171WNYlWq5FPEAPgg==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-15.2.3.tgz", + "integrity": "sha512-TV6STsR0iDSuBtQTtgtAlQVT65OubHcpxOIGxWgRCBfRqlEwdkD6v3tx6ydE16nk0VdpPJP3/PuIMLKQSQk/ZA==", "dev": true, "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.17.2", - "@textlint/ast-node-types": "15.2.2", - "@textlint/ast-traverse": "15.2.2", - "@textlint/config-loader": "15.2.2", - "@textlint/feature-flag": "15.2.2", - "@textlint/fixer-formatter": "15.2.2", - "@textlint/kernel": "15.2.2", - "@textlint/linter-formatter": "15.2.2", - "@textlint/module-interop": "15.2.2", - "@textlint/resolver": "15.2.2", - "@textlint/textlint-plugin-markdown": "15.2.2", - "@textlint/textlint-plugin-text": "15.2.2", - "@textlint/types": "15.2.2", - "@textlint/utils": "15.2.2", - "debug": "^4.4.1", - "file-entry-cache": "^10.1.3", + "@modelcontextprotocol/sdk": "^1.19.1", + "@textlint/ast-node-types": "15.2.3", + "@textlint/ast-traverse": "15.2.3", + "@textlint/config-loader": "15.2.3", + "@textlint/feature-flag": "15.2.3", + "@textlint/fixer-formatter": "15.2.3", + "@textlint/kernel": "15.2.3", + "@textlint/linter-formatter": "15.2.3", + "@textlint/module-interop": "15.2.3", + "@textlint/resolver": "15.2.3", + "@textlint/textlint-plugin-markdown": "15.2.3", + "@textlint/textlint-plugin-text": "15.2.3", + "@textlint/types": "15.2.3", + "@textlint/utils": "15.2.3", + "debug": "^4.4.3", + "file-entry-cache": "^10.1.4", "glob": "^10.4.5", "md5": "^2.3.0", "optionator": "^0.9.4", diff --git a/package.json b/package.json index 11a4bdf7745..3d0b6395fe3 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "remark-lint-prohibited-strings": "^4.0.0", "remark-lint-unordered-list-marker-style": "^4.0.1", "remark-stringify": "^11.0.0", - "textlint": "^15.2.2", + "textlint": "^15.2.3", "textlint-filter-rule-allowlist": "^4.0.0", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", diff --git a/sass/homeassistant/_overrides.scss b/sass/homeassistant/_overrides.scss index 8f0466ee948..3169da728a4 100644 --- a/sass/homeassistant/_overrides.scss +++ b/sass/homeassistant/_overrides.scss @@ -1256,7 +1256,6 @@ article.listing { text-align: center; img { - background-color: unset; border-radius: 20px; border: unset; @@ -1268,6 +1267,12 @@ article.listing { width: 100%; } + &.fw{ + img { + max-width: 100%; + } + } + &.nb { img { border-radius: unset; diff --git a/source/404.html b/source/404.html index d9c9f946a9b..155757ad6f5 100644 --- a/source/404.html +++ b/source/404.html @@ -11,7 +11,7 @@ body_id: not_found
- + + - + + diff --git a/source/_integrations/aosmith.markdown b/source/_integrations/aosmith.markdown index aa4e697154c..f2f79adcac2 100644 --- a/source/_integrations/aosmith.markdown +++ b/source/_integrations/aosmith.markdown @@ -29,6 +29,7 @@ Before using this integration, your water heater must be connected to a Wi-Fi ne - EE12-50R55DVF - EE12-50H55DVF - EE12-55H55DVF +- HETF-50-100 - HPA10-40H45DV - HPA10-50H45DV - HPA10-66H45DV diff --git a/source/_integrations/apcupsd.markdown b/source/_integrations/apcupsd.markdown index f0a7cea0b18..fc0f5d2ee7e 100644 --- a/source/_integrations/apcupsd.markdown +++ b/source/_integrations/apcupsd.markdown @@ -179,7 +179,7 @@ Some sensors are disabled by default, since they provide information that is onl - **Transfer to Battery** - **Description**: Time and date of last transfer to batteries. - **Available for machines**: all - - **Remarks**: This entity only becomes available after a tranfer to battery event happens. + - **Remarks**: This entity only becomes available after a transfer to battery event happens. - **Battery Status** - **Description**: The status of the batteries. diff --git a/source/_integrations/azure_data_explorer.markdown b/source/_integrations/azure_data_explorer.markdown index cb131a4a011..c7bc3f01c17 100644 --- a/source/_integrations/azure_data_explorer.markdown +++ b/source/_integrations/azure_data_explorer.markdown @@ -62,10 +62,10 @@ There are a few differences between the **PAYG** and **Free** versions: 3. Write and perform the following statements one by one, replacing the placeholder content between the <> with the copied values (including the brackets). ```KQL -// Give the Service Pricipal write access to the database +// Give the Service Principal write access to the database .add database ['
diff --git a/source/_integrations/daikin.markdown b/source/_integrations/daikin.markdown
index e3df334a558..eb00e424fd6 100644
--- a/source/_integrations/daikin.markdown
+++ b/source/_integrations/daikin.markdown
@@ -20,12 +20,6 @@ ha_platforms:
ha_integration_type: integration
---
-{% warning %}
-
-Daikin has removed their local API in newer products. They offer a Onecta cloud API for controlling Daikin devices through the cloud, see the [Daikin Europe Developer Portal](https://developer.cloud.daikineurope.com) for more details. This affects units fitted with the BRP069C4x wifi adapter. Units listed under Supported Hardware below continue to have access to local control. Additionally the older but commonly available BRP072A42 adapter can be fitted to most if not all newer units for access to local control.
-
-{% endwarning %}
-
The **Daikin** {% term integration %} integrates Daikin air conditioning systems into Home Assistant.
There is currently support for the following device types within Home Assistant:
@@ -40,20 +34,16 @@ There is currently support for the following device types within Home Assistant:
- The Australian version of the Daikin Wifi Controller Unit BRP072A42, which is operated by the [Daikin Mobile Controller (iOS)](https://itunes.apple.com/au/app/daikin-mobile-controller/id917168708?mt=8) ([Android](https://play.google.com/store/apps/details?id=ao.daikin.remoapp)) application. Confirmed working on a Daikin Cora Series Reverse Cycle Split System Air Conditioner 2.5kW Cooling FTXM25QVMA with operation mode, temp, fan swing (3d, horizontal, vertical).
- BRP072Cxx based units (including Zena devices)*.
- The United States version of the Wifi Controller Unit (BRP072A43), which is powered by the [Daikin Comfort Control](https://play.google.com/store/apps/details?id=us.daikin.comfortcontrols) application. Confirmed working on a Daikin Wall Units FTXS09LVJU, FTXS15LVJU, FTXS18LVJU and a Floor Unit FVXS15NVJU with operation mode, temp, fan swing (3d, horizontal, vertical).
+- BRP069C4x/BRP084Cxx units using firmware 2.8.0 was added in HA 2025.9.
- The Australian version of the Daikin Wifi Controller for **AirBase** units (BRP15B61), which is operated by the [Daikin Airbase](https://play.google.com/store/apps/details?id=au.com.daikin.airbase) application.
- **SKYFi** based units, which is operated by the SKYFi application*.
-{% note %}
-
-- BRP072Cxx adapters require an API key to be entered, which is labelled "KEY" on the device sticker alongside SSID, MAC, and S/N. Password should be left blank.
-- SKYFi-based units require a password to be entered. API key should be left blank.
-- Other models are auto-detected and the API key and password fields must be left blank.
-- BRP084Cxx firmware update from 1.19.0 to 2.8.0 breaks local API there is however ongoing work in fixing local API support again.
-
-{% endnote %}
+If your unit is not in the list above there is another option, to buy and install an [ESP32-Faikin](https://github.com/revk/ESP32-Faikin).
{% include integrations/config_flow.md %}
+If your device is set up with password, use the password. If it has an API key, use the API key. In all other cases, leave the fields blank.
+
{% note %}
If your Daikin unit does not reside in the same network as your Home Assistant instance, i.e. your network is segmented, note that a couple of UDP connections are made during discovery:
diff --git a/source/_integrations/default_config.markdown b/source/_integrations/default_config.markdown
index 7e07591bc9d..938e44bdcf9 100644
--- a/source/_integrations/default_config.markdown
+++ b/source/_integrations/default_config.markdown
@@ -16,6 +16,7 @@ This {% term integration %} is a meta-component and configures a default set of
- [Assist pipeline](/integrations/assist_pipeline/) (`assist_pipeline`)
- [Backup](/integrations/backup/) (`backup`)
- [Bluetooth](/integrations/bluetooth/) (`bluetooth`)
+- [Cloud](/integrations/cloud/) (`cloud`)
- [Configuration](/integrations/config/) (`config`)
- [Conversation](/integrations/conversation/) (`conversation`)
- [DHCP discovery](/integrations/dhcp/) (`dhcp`)
@@ -32,6 +33,7 @@ This {% term integration %} is a meta-component and configures a default set of
- [Simple Service Discovery Protocol (SSDP)](/integrations/ssdp/) (`ssdp`)
- [Stream](/integrations/stream/) (`stream`)
- [Sun](/integrations/sun/) (`sun`)
+- [Usage Prediction](/integrations/usage_prediction/) (`usage_prediction`)
- [USB](/integrations/usb/) (`usb`)
- [Webhooks](/integrations/webhook) (`webhook`)
- [Zero-configuration networking (zeroconf)](/integrations/zeroconf/) (`zeroconf`)
diff --git a/source/_integrations/droplet.markdown b/source/_integrations/droplet.markdown
index 07386c39cc2..0a551b42152 100644
--- a/source/_integrations/droplet.markdown
+++ b/source/_integrations/droplet.markdown
@@ -70,3 +70,13 @@ This integration follows standard integration removal process.
{% include integrations/remove_device_service.md %}
4. To prevent Droplet from showing up as a discovered device after its removal, disable the local API in the Droplet app under **Settings** > **Smart Home Integrations** > **Home Assistant**.
+
+## FAQ & Troubleshooting
+
+### Q: Why does Droplet’s volume sensor sometimes show negative values?
+
+**A**: The volume reported by Droplet over local API is point-to-point, meaning that each new value represents the difference in volume recorded since this data was last sent. Even when you’re not using appliances in your home, there can still be activity in your pipes. Droplet tries to be very accurate and is sensitive to small flows, which can include water sloshing back and forth, or slight movement as a result of pressure differences. Small negative values are to be expected, and are reported so that cumulative statistics reported in Home Assistant (or other consumers of the API) can be fully accurate.
+
+### Q: Why is my Droplet failing to authenticate with Home Assistant?
+
+**A**: If your Droplet is failing to authenticate, try waiting 1-2 minutes after enabling Home Assistant or regenerating the code in the Droplet app. It may take a moment for the Droplet to be ready to accept connections.
diff --git a/source/_integrations/ecobee.markdown b/source/_integrations/ecobee.markdown
index d90c107318c..2a09c066c02 100644
--- a/source/_integrations/ecobee.markdown
+++ b/source/_integrations/ecobee.markdown
@@ -260,7 +260,7 @@ Enable/disable Smart Home/Away and Follow Me modes.
### Service `ecobee.set_sensors_in_climate`
-Set which sensors are active on a termostat for a specific climate program.
+Set which sensors are active on a thermostat for a specific climate program.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
diff --git a/source/_integrations/ecovacs.markdown b/source/_integrations/ecovacs.markdown
index 422cf2ab687..4614a9a83ce 100644
--- a/source/_integrations/ecovacs.markdown
+++ b/source/_integrations/ecovacs.markdown
@@ -28,12 +28,16 @@ ha_platforms:
ha_integration_type: integration
---
-The `ecovacs` {% term integration %} is the main integration to integrate [Ecovacs](https://www.ecovacs.com) (Deebot) vacuums and mowers. You will need your Ecovacs account information (username, password) to discover and control vacuums and mowers in your account.
+The `ecovacs` {% term integration %} is the main integration to integrate [Ecovacs](https://www.ecovacs.com) (Deebot) vacuums and mowers.
-{% include integrations/config_flow.md %}
+## Prerequisites
+
+You will need your Ecovacs account information (username, password) to discover and control vacuums and mowers in your account.
Additional note: There are some issues during the password encoding. Using some special characters (e.g., `-`) in your password does not work.
+{% include integrations/config_flow.md %}
+
With `advanced_mode` enabled, users can use their self-hosted instance over the cloud servers. Self-hosting comes with some requirements and limitations. See [Self-hosted configuration](#self-hosted-configuration) for additional details.
## Provided entities
@@ -213,3 +217,9 @@ In any case, when reporting an issue, please enable [debug logging](/docs/config
Because Ecovacs doesn't provide a public documentation about their APIs, the support of devices is based on reverse engineering of the communication of the device. This reverse engineering can only be done by persons, who are in possession of such a device and the knowledge how to do the reverse engineering. Therefore the support of devices heavily depends on contributions from the community.
If your device is not supported, please request for help or contribute on your own the support of your device directly to the [`deebot_client`](https://github.com/DeebotUniverse/client.py) library.
+
+## Removing the integration
+
+This integration follows standard integration removal.
+
+{% include integrations/remove_device_service.md %}
\ No newline at end of file
diff --git a/source/_integrations/enphase_envoy.markdown b/source/_integrations/enphase_envoy.markdown
index a3e0806e089..d09c2972a5b 100644
--- a/source/_integrations/enphase_envoy.markdown
+++ b/source/_integrations/enphase_envoy.markdown
@@ -249,7 +249,7 @@ When used with [multiphase CT phase data](#ct-aggregate-and-phase-data), disable
#### Grid Balanced import/export sensor entities
-When the Envoy Metered is equipped with a [total-consumption CT](#current-transformers) instead of a [net-consumption CT](#current-transformers), no individual entities for Grid import and export are available, as these are not measured. Instead, the balance (difference) of grid import and export is available in a single entity, disabled by default, enable as desired.
+When the Envoy Metered is equipped with either a [total-consumption CT](#current-transformers) or a [net-consumption CT](#current-transformers), the balance of grid import and export is available as well. The balanced power and energy entities are disabled by default, enable these as desired.
- **Envoy SN balanced net power consumption**: Current power exchange from (positive) / to (negative) the grid in W, default display in kW.
(This is the same value as [Envoy SN Current net power consumption](#grid-sensor-entities) when using a net-consumption CT.)
@@ -493,46 +493,15 @@ With a [net-consumption CT](#grid-sensor-entities) installed, both grid consumpt
- For **Grid consumption**, use the **Envoy SN Lifetime net energy consumption** entity.
- For **Return to grid**, use the **Envoy SN Lifetime net energy production** entity.
-#### Electricity grid with total-consumption CT
+#### Electricity grid with balanced consumption entities
-With a [total-consumption CT](#grid-balanced-importexport-sensor-entities) installed, only the balanced grid import-export value is available. This value is not suited for direct use with the energy dashboard. It will require some templating to split the value into an import and export value.
+With a [total-consumption CT](#grid-balanced-importexport-sensor-entities) or a [net-consumption CT](#grid-sensor-entities) installed, the balanced grid import-export energy value is available. This value is not suited for direct use with the energy dashboard. It will require some templating to split the value into an import and export value.
-{% details "Concept to split balanced Grid value into individual import-export values" %}
+To split the balanced energy value **Envoy SN Lifetime balanced net energy consumption** into import-export values, a sensor [blueprint template](/integrations/template/#using-blueprints) named [`Filter positive or negative value changes in a sensor entity`](https://community.home-assistant.io/t/filter-positive-or-negative-value-changes-in-a-sensor-entity/943919/1) is available in the community blueprints exchange.
-The concept is to track value changes of the **Envoy SN Lifetime balanced net energy consumption** entity, add positive changes to a grid_import entity and add negative changes to a grid_export entity.
+Import the blueprint using the **import blueprint to** button. This will install the blueprint as `/config/blueprints/template/catsmanac/Filter_positive_or_negative_value_changes_in_sensor_entity.yaml`. Use the directions and templates in the blueprint exchange topic to implement such a split.
-{% raw %}
-
-```yaml
-
-- trigger:
- - platform: state
- entity_id: sensor.envoy_sn_lifetime_balanced_net_energy_consumption
-
- sensor:
- - name: "Grid import"
- unique_id: calculated_envoy_grid_import
- unit_of_measurement: "Wh"
- state: "{{ this.state | int(0) + ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | max) }}"
- device_class: energy
- state_class: total_increasing
- - name: "Grid export"
- unique_id: calculated_envoy_grid_export
- unit_of_measurement: "Wh"
- state: "{{ this.state | int(0) - ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | min) }}"
- device_class: energy
- state_class: total_increasing
-```
-
-{% endraw %}
-
-The above example does not address handling `unavailable` or `unknown` states, value changes over Home Assistant outages nor changing UOM to a preferred one. Examples for these exist in various community topics.
-
-{% tip %}
-Alternatively, this can be done by splitting the **Envoy SN balanced net power consumption** into power import and export and two Riemann sum integral helpers to calculate energy from the power values.
-{% endtip %}
-
-{% enddetails %}
+Alternatively, creating 2 split energy sensors can be done by splitting the **Envoy SN balanced net power consumption** into power import and export using [filter range](/integrations/filter/#range) helpers. These are then the source for two Riemann sum integral helpers to calculate energy from the power values.
### Home battery storage
@@ -551,108 +520,19 @@ Without a [storage CT](#aggregated-iq-battery-sensor-entities) installed, only t
##### Home battery storage data using battery power
-Battery power is the current power flow in or out of an individual battery. Using the summed Power values of all batteries, the result needs to be split in 2 entities, representing total power in and power out. Next, each entity needs to be integrated into energy, using two Riemann sum integral helpers. The resulting data can be used for Energy going into the battery and Energy coming out of the battery.
+Battery power is the current power flow in or out of an individual battery. Using the summed Power values of all batteries, the result needs to be split in 2 entities, representing total power in and power out.
-{% details "Concept to split Battery power value into individual import-export power values" %}
+This can be done using the [filter range](/integrations/filter/#range) helper. Next, each entity needs to be integrated into energy, using two Riemann sum integral helpers. The resulting data can be used for Energy going into the battery and Energy coming out of the battery.
-The concept is to first sum all battery Power values using a combine state helper. Then track value changes of the summed value entity, add positive values to a battery_charge power entity and add negative values to a battery_discharge power entity.
-
-{% raw %}
-
-```yaml
-
-- trigger:
- - platform: state
- entity_id: sensor.envoy_sn_summed_battery_power_entity
-
- sensor:
- - name: "Battery charge power"
- unique_id: calculated_envoy_battery_charge_power
- unit_of_measurement: "W"
- state: "{{ [0, trigger.to_state.state | int ] | max }}"
- device_class: power
- state_class: measurement
- - name: "Battery discharge power"
- unique_id: calculated_envoy_battery_discharge_power
- unit_of_measurement: "W"
- state: "{{ [0, 0 - trigger.to_state.state | int ] | max) }}"
- device_class: power
- state_class: measurement
-```
-
-{% endraw %}
-
-Use both calculated values as a source for the 2 left Riemann integrators to obtain the energy charged and discharged. The above example does not address handling `unavailable` or `unknown` states, value changes over Home Assistant outages, nor conversion losses.
-
-If desired, this can also be done for individual batteries, see below concept.
-
-{% raw %}
-
-```yaml
-
-template:
- - sensor:
- - name: Battery xxx charge power
- unique_id: calculated_envoy_battery_xxx_charge_power
- state_class: measurement
- icon: mdi:battery-charging
- unit_of_measurement: W
- device_class: power
- state: >
- {{ [0, states('sensor.encharge_xxxx_power') | int ] | max }}
-
- - name: Battery xxx discharge power
- unique_id: calculated_envoy_battery_xxx_discharge_power
- state_class: measurement
- icon: mdi:battery-charging
- unit_of_measurement: W
- device_class: power
- state: >
- {{ [0, 0 - states('sensor.encharge_xxxx_power') | int ] | max }}
-```
-
-Use both calculated values as a source for 2 left Riemann integrators to obtain energy charged and discharged.
-
-{% endraw %}
-
-{% enddetails %}
+If desired, this can also be done in a similar way for individual batteries.
##### Home battery storage data on the available battery energy
Changes in the Available battery energy are a result from Energy going in or out of the battery. Splitting these energy changes into 2 entities, one tracking positive changes, one the negative changes, results in data that can be used for Energy going into the battery and Energy coming out off the battery. This method does not account for conversion losses as Energy content changes do not exactly match actual energy flow in and out of the battery.
-{% details "Concept to split Available battery energy value into individual import-export values" %}
+To split the changes in Available battery energy into charge-discharge values, a sensor [blueprint template](/integrations/template/#using-blueprints) named [`Filter positive or negative value changes in a sensor entity`](https://community.home-assistant.io/t/filter-positive-or-negative-value-changes-in-a-sensor-entity/943919/1) is available in the community blueprints exchange.
-The concept is to track value changes of the **Envoy SN Available battery energy** entity, add positive changes to a battery_charge entity and add negative changes to a battery_discharge entity.
-
-{% raw %}
-
-```yaml
-
-- trigger:
- - platform: state
- entity_id: sensor.envoy_sn_available_battery_energy
-
- sensor:
- - name: "Battery charge"
- unique_id: calculated_envoy_battery_charge
- unit_of_measurement: "Wh"
- state: "{{ this.state | int(0) + ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | max }}"
- device_class: energy
- state_class: total_increasing
- - name: "Battery discharge"
- unique_id: calculated_envoy_battery_discharge
- unit_of_measurement: "Wh"
- state: "{{ this.state | int(0) - ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | min }}"
- device_class: energy
- state_class: total_increasing
-```
-
-{% endraw %}
-
-The above example does not address handling `unavailable` or `unknown` states, value changes over Home Assistant outages nor conversion losses.
-
-{% enddetails %}
+Import the blueprint using the **import blueprint to** button. This will install the blueprint as `/config/blueprints/template/catsmanac/Filter_positive_or_negative_value_changes_in_sensor_entity.yaml`. Use the directions and templates in the blueprint exchange topic to implement such a split using the **Envoy SN available battery energy** entity as source entity. Add positive changes to a battery_charge entity and add negative changes to a battery_discharge entity.
### Individual devices
@@ -807,7 +687,7 @@ Envoy Metered without installed CT, running older firmware versions, reportedly
### Lifetime energy production decreases by 1.2 MWh
-Envoy Standard (not Metered), running firmware 8.2.4264, reportedly decreases the **Lifetime energy production** value by 1.2 MWh at irregular times. The current hypothesis is that the step change occurs when one of the inverters exceeds an internal lifetime joules counter of 32 bit, which is 1.19 MWh, and resets to zero. This leads to a decrease of 1.2 MWh in the aggregated value for all inverters. It's not clear if this also happens for the metered Envoy.
+The envoy, as of firmware 8.2.4264, reportedly decreases the **Lifetime energy production** value by 1.2 MWh at irregular times. The current hypothesis is that the step change occurs when one of the inverters exceeds an internal lifetime joules counter of 32 bit, which is 1.19 MWh, and resets to zero. This leads to a decrease of 1.2 MWh in the aggregated value for all inverters.
{% details "History example for Envoy Lifetime energy production value decrease" %}
@@ -819,6 +699,10 @@ The example below shows decreases when multiple inverters reach a 1.2 MWh lifeti
{% enddetails %}
+To correct for this issue, a sensor [blueprint template](/integrations/template/#using-blueprints) named [`Correct Envoy lifetime production energy`](https://community.home-assistant.io/t/correct-envoy-lifetime-production-energy/942918/1) is available in the community blueprints exchange.
+
+Import the blueprint using the **import blueprint to** button. This will install the blueprint as `/config/blueprints/template/marcelhoogantink/correct_envoy_lifetime_production_energy.yaml`. Use the templates shown in the blueprint exchange to implement an entity with a corrected lifetime value.
+
### Missing inverter data
If you are not seeing all your installed [inverters](#sensor-entities), and you have more than 49 inverters installed, and you are running HA 2025.7, 2025.7.1, or 2025.7.2, then upgrade HA to 2025.7.3 or newer. Due to a limitation in the Envoy firmware. Only the inverter details for 49 inverters are available. In the mentioned releases, any more inverters got dropped. The 2025.7.3 version fixed this by only using the inverter base data, which does not have this limitation.
diff --git a/source/_integrations/environment_canada.markdown b/source/_integrations/environment_canada.markdown
index 58f025d73ae..1dc79ed8abe 100644
--- a/source/_integrations/environment_canada.markdown
+++ b/source/_integrations/environment_canada.markdown
@@ -33,15 +33,17 @@ Choose your weather location using either:
## Entities
-The integration will create the entities listed below. Some of the entities are disabled by default and can be enabled via the integration's Entities page.
+The integration will create the entities listed below.
### Weather
- Current conditions, daily forecast, and hourly forecast
-### Camera
+### Radar map (Camera)
-- Loop of radar imagery from the last 3 hours (disabled by default). Also, by default, this entity uses the radar rain layer from 1 April to 30 November and the snow layer from 1 December to 31 March. The rain/snow layer can be changed using the action described below.
+- Loop of radar imagery from the last 3 hours.
+- This entity is disabled by default can be enabled in the entry's settings dialog.
+- By default, this entity uses the radar rain layer from 1 April to 30 November and the snow layer from 1 December to 31 March. The rain/snow layer can be changed using the action described below.
### Sensors
@@ -49,13 +51,13 @@ The integration will create the entities listed below. Some of the entities are
- Current condition
- Forecast summary
-- [Icon code](https://dd.weather.gc.ca/citypage_weather/docs/Current_Conditions_Icons-Icones_conditions_actuelles.pdf) of current condition
+- [Icon code](https://dd.weather.gc.ca/today/citypage_weather/docs/Current_Conditions_Icons-Icones_conditions_actuelles.pdf) of current condition
- Barometric pressure
- Pressure tendency
- Humidity
- Visibility
- UV index
-- Air quality (AQHI)
+- Air quality health index (AQHI)
#### Temperature
@@ -76,7 +78,6 @@ The integration will create the entities listed below. Some of the entities are
#### Precipitation
- Probability of precipitation
-- Precipitation yesterday
#### Alerts
@@ -104,7 +105,7 @@ The first course of action should be to check if there are known problems with t
### Sensor `unavailable` or `unknown`
-Not all weather stations provide a complete set of weather/sensor data. The data that is retrieved by this integration can be found [here](https://dd.weather.gc.ca/citypage_weather/xml/). Browsing the XML data for your station will help you to understand what data is (un)available.
+Not all weather stations provide a complete set of weather/sensor data. The data that is retrieved by this integration can be found [here](https://dd.weather.gc.ca/today/citypage_weather/). Browsing the XML data for your station will help you to understand what data is (un)available.
## Template sensors
diff --git a/source/_integrations/foscam.markdown b/source/_integrations/foscam.markdown
index 34a9dd35a0d..9f198006cfe 100644
--- a/source/_integrations/foscam.markdown
+++ b/source/_integrations/foscam.markdown
@@ -224,4 +224,4 @@ elements:
### Extra CGI Commands
-Foscam Webcams which support CGI Commands can be controlled by Home Assistant ([Source](https://www.foscam.es/descarga/Foscam-IPCamera-CGI-User-Guide-AllPlatforms-2015.11.06.pdf)).
+Foscam Webcams which support CGI Commands can be controlled by Home Assistant ([Source](https://community.jeedom.com/uploads/short-url/2A5aSBcCyoVZOdpiFC8HRDAOxqG.pdf)).
diff --git a/source/_integrations/freedompro.markdown b/source/_integrations/freedompro.markdown
index 16230374a21..e7cff0b211b 100644
--- a/source/_integrations/freedompro.markdown
+++ b/source/_integrations/freedompro.markdown
@@ -42,7 +42,7 @@ You will need to obtain an API key from Freedompro's app to use this integration
2. Register and create your first home.
3. Make sure you have at least one accessory paired with the Freedompro Cloud before starting integration.
4. Switch to the **Profile** tab (bottom right corner).
-5. Scroll down to the **Developper tools** and tap **Api Key**.
+5. Scroll down to the **Developer tools** and tap **Api Key**.
6. Generate an API key.
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/fritzbox.markdown b/source/_integrations/fritzbox.markdown
index 7b163e0cf2c..2bedfc71409 100644
--- a/source/_integrations/fritzbox.markdown
+++ b/source/_integrations/fritzbox.markdown
@@ -28,7 +28,7 @@ ha_codeowners:
ha_integration_type: hub
---
-The FRITZ!SmartHome integration for Home Assistant allows you to integrate [FRITZ! Smart Home](https://en.fritz.com/products/smart-home/) (_former AVM FRITZ!DECT_) devices like plugs, thermostats or shutter drivers as also trigger so called smart home templates (_contains settings for Smart Home devices of the same type_).
+The FRITZ!SmartHome integration for Home Assistant allows you to integrate [FRITZ! Smart Home](https://fritz.com/en/collections/smart-home/) (_former AVM FRITZ!DECT_) devices like plugs, thermostats or shutter drivers as also trigger so called smart home templates (_contains settings for Smart Home devices of the same type_).
#### Tested devices
@@ -56,7 +56,7 @@ The FRITZ!SmartHome integration for Home Assistant allows you to integrate [FRIT
## Prerequisites
-Please note that in a [mesh](https://en.fritz.com/service/knowledge-base/dok/FRITZ-Box-7590/3329_Mesh-with-FRITZ/) setup, only the FRITZ!Box with the mesh master role should be added with the FRITZ!SmartHome integration.
+Please note that in a [mesh](https://fritz.com/en/apps/knowledge-base/FRITZ-Box-7590/3329_Mesh-with-FRITZ/) setup, only the FRITZ!Box with the mesh master role should be added with the FRITZ!SmartHome integration.
### Username
@@ -111,7 +111,7 @@ Shutter drivers like the [Homepilot RolloTron DECT 1213][rademacher_rollotron_de
### Templates
-Self defined [templates](https://en.fritz.com/guide/three-smart-home-templates-that-will-make-your-life-easier) within the FRITZ!Box smart home configuration menu, will be integrated as {% term button %} entities and those can be triggered from within Home Assistant.
+Self defined [templates](https://fritz.com/en/apps/knowledge-base/FRITZ-Box-7590/3708_Creating-a-template-and-scene-for-smart-home-devices) within the FRITZ!Box smart home configuration menu, will be integrated as {% term button %} entities and those can be triggered from within Home Assistant.
### Thermostats
@@ -148,15 +148,15 @@ The availability of these {% term sensor %} and {% term binary_sensor "binary se
- Open window detected
- Temperature
-[fritzbox_5590_fiber]: https://en.fritz.com/products/fritzbox/fritzbox-5590-fiber
-[fritzbox_7590_ax]: https://en.fritz.com/products/fritzbox/fritzbox-7590-ax
-[fritzbox_7530_ax]: https://en.fritz.com/products/fritzbox/fritzbox-7530-ax
-[fritzdect_200]: https://en.fritz.com/products/smart-home/fritzsmart-energy-200
-[fritzdect_210]: https://en.fritz.com/products/smart-home/fritzsmart-energy-210
-[fritzdect_302]: https://en.fritz.com/products/smart-home/fritzsmart-thermo-302
-[fritzdect_350]: https://en.fritz.com/products/smart-home/fritzsmart-control-350
-[fritzdect_440]: https://en.fritz.com/products/smart-home/fritzsmart-control-440
-[fritz_smart_gateway]: https://en.fritz.com/products/smart-home/fritzsmart-gateway
+[fritzbox_5590_fiber]: https://fritz.com/en/products/fritz-box-5590-fiber-20002981
+[fritzbox_7590_ax]: https://fritz.com/en/products/fritz-box-7590-ax-20002998
+[fritzbox_7530_ax]: https://fritz.com/en/products/fritz-box-7530-ax-20002930
+[fritzdect_200]: https://fritz.com/en/products/fritz-dect-200-20002572
+[fritzdect_210]: https://fritz.com/en/products/fritz-dect-210-20002723
+[fritzdect_302]: https://fritz.com/en/products/fritz-smart-thermo-302-20003120
+[fritzdect_350]: https://fritz.com/en/products/fritz-dect-440-20002905
+[fritzdect_440]: https://fritz.com/en/products/fritz-smart-control-350-20003119
+[fritz_smart_gateway]: https://fritz.com/en/products/fritz-smart-gateway-20003012
[rademacher_rollotron_dect_1213]: https://www.rademacher.de/shop/rollladen-sonnenschutz/elektrischer-gurtwickler/rollotron-dect-1213
## Troubleshooting
diff --git a/source/_integrations/google_assistant_sdk.markdown b/source/_integrations/google_assistant_sdk.markdown
index 5c93b5ff3b6..db9b5da700c 100644
--- a/source/_integrations/google_assistant_sdk.markdown
+++ b/source/_integrations/google_assistant_sdk.markdown
@@ -130,6 +130,8 @@ If you have an error with your credentials you can delete them in the [Applicati
If commands don't work try removing superfluous words such as "the". E.g. "play rain sounds on bedroom speaker" instead of "play rain sounds on the bedroom speaker".
+If commands to a specific device (like streaming a camera to a Google TV) fail, you may need to enable "Personal Results" on that device itself. For example, on a Google TV or Chromecast with Google TV, this setting may be located under `Settings > Privacy > Google Assistant > Personal Results`. This may be required in addition to enabling it in the Google Home app.
+
If broadcasting doesn't work, make sure: the speakers aren't in do not disturb mode, the Home Assistant server is in the same network as the speakers.
The easiest way to check if the integration is working is to check [My Google Activity](https://myactivity.google.com/myactivity) for the issued commands and their responses.
@@ -157,7 +159,7 @@ You can use the `google_assistant_sdk.send_text_command` action to send commands
| Data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `command` | no | Command(s) to send to Google Assistant. |
-| `media_player` | yes | Name(s) of media player entities to play response on |
+| `media_player` | yes | Name(s) of media player entities to play the Google Assistant's audio response on. This does **not** target the device for the command itself. |
Examples:
@@ -168,13 +170,23 @@ data:
```
```yaml
-# Say a joke on the living room speaker
+# Say a joke on the living room speaker. The `media_player` entity receives the audio response.
action: google_assistant_sdk.send_text_command
data:
command: "tell me a joke"
media_player: media_player.living_room_speaker
```
+```yaml
+# Stream a camera to a Chromecast-enabled TV or display.
+# The target device ("living room tv") must be part of the command itself.
+action: google_assistant_sdk.send_text_command
+data:
+ command: "show the front door camera on the living room tv"
+```
+
+Note: To control a specific device, like streaming a camera to a TV, you must include the device's name (as known by Google Assistant) in the text `command`. The `media_player` parameter is only used for playing back Google Assistant's audio response and will not direct the video stream.
+
You can send multiple commands in the same conversation context which is useful to unlock doors or open covers that need a PIN. Example:
```yaml
diff --git a/source/_integrations/hassio.markdown b/source/_integrations/hassio.markdown
index 15b585d2009..e26eea74290 100644
--- a/source/_integrations/hassio.markdown
+++ b/source/_integrations/hassio.markdown
@@ -73,7 +73,7 @@ For Home Assistant Host, the following sensors are available:
For each installed add-on Supervisor provides following binary sensors:
-(These entities are disabled by default and must be reenabled to appear)
+(These entities are disabled by default and must be re-enabled to appear)
| Sensor | Enabled by default | Description |
| ------- | ------------------ | ----------- |
diff --git a/source/_integrations/homee.markdown b/source/_integrations/homee.markdown
index 0e2ba87673e..4703f12998a 100644
--- a/source/_integrations/homee.markdown
+++ b/source/_integrations/homee.markdown
@@ -1,6 +1,6 @@
---
-title: Homee
-description: Instructions on how to setup Homee devices in Home Assistant.
+title: homee
+description: Instructions on how to setup homee devices in Home Assistant.
ha_category:
- Alarm
- Binary sensor
@@ -44,17 +44,17 @@ ha_integration_type: hub
ha_quality_scale: silver
---
-[Homee](https://hom.ee) is a smart home system, able to integrate various protocols such as Z-Wave, Zigbee, EnOcean, and more. The Homee {% term integration %} will let you use the {% term devices %} from your Homee in Home Assistant.
+[homee](https://hom.ee) is a smart home system, able to integrate various protocols such as Z-Wave, Zigbee, EnOcean, and more. The homee {% term integration %} will let you use the {% term devices %} from your homee in Home Assistant.
## Prerequisites
-You need to create a new user in your Homee app. Create a user that is only used by Home Assistant. For security reasons, it's recommended to:
+You need to create a new user in your homee app. Create a user that is only used by Home Assistant. For security reasons, it's recommended to:
- Use a strong, unique password.
- Restrict the user's permissions for what you want to do from Home Assistant.
- Do not use this account for any other purpose.
-1. In your Homee app, in the top-left corner, tap the menu button.
+1. In your homee app, in the top-left corner, tap the menu button.
2. On the top right of the opening menu, tap the gear {% icon "mdi:gear-outline" %} icon.
3. Choose **Manage users**.
4. Choose **Add user** and configure the desired values.
@@ -63,7 +63,7 @@ You need to create a new user in your Homee app. Create a user that is only used
{% configuration_basic %}
Host:
- description: The IP Address of your Homee.
+ description: The IP Address of your homee.
User:
description: The username you chose in the Prerequisites.
Password:
@@ -71,11 +71,11 @@ Password:
{% endconfiguration_basic %}
Available devices will automatically show up in your Home Assistant installation.
-New devices added to Homee will be automatically discovered after a restart of Home Assistant. This restart is only required when adding new devices, not for state updates of existing devices.
+New devices added to homee will be automatically discovered after a restart of Home Assistant. This restart is only required when adding new devices, not for state updates of existing devices.
## Limitations
-Changed values are reported from Homee in defined time intervals and not always in realtime. For example, while a cover moves, the position is updated only every few seconds and intermediate states may be missed by Home Assistant.
+Changed values are reported from homee in defined time intervals and not always in realtime. For example, while a cover moves, the position is updated only every few seconds and intermediate states may be missed by Home Assistant.
## Troubleshooting
@@ -83,7 +83,7 @@ First, see the general [Home Assistant troubleshooting guide](/docs/configuratio
The **homee** integration supports [debug logs and diagnostics](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics).
-### Homee device not working as expected
+### homee device not working as expected
Make sure, the {% term device %} works as expected in homee.
If a homee device shows up in Home Assistant, but does not work as expected or is missing {% term entities %}, open a [report](https://github.com/home-assistant/core/issues) and attach error logs and the device's {% term diagnostics %} data.
@@ -105,6 +105,6 @@ This integration supports reconfiguration, allowing you to change the IP address
## Removing the integration
-This integration follows standard integration removal, and once the integration is removed, you can also remove the dedicated user from your Homee.
+This integration follows standard integration removal, and once the integration is removed, you can also remove the dedicated user from your homee.
{% include integrations/remove_device_service.md %}
diff --git a/source/_integrations/imeon_inverter.markdown b/source/_integrations/imeon_inverter.markdown
index cb65a35e90a..c915c0c69e8 100644
--- a/source/_integrations/imeon_inverter.markdown
+++ b/source/_integrations/imeon_inverter.markdown
@@ -27,7 +27,7 @@ The Imeon Energy Inverter {% term integrations %} will poll an [Imeon](https://i
- The Imeon inverter must be connected to the local network.
- [OS One](https://imeon-energy.com/os-one/) version must be **1.8.1.4** or higher.
-- *ModuleAPI* application must be activated on the OS One pannel of your Imeon inverter.
+- *ModuleAPI* application must be activated on the OS One panel of your Imeon inverter.
- To do so, connect to **OS One** > **Applications** and by hovering over *ModuleAPI*, select **Activate**.
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/imgw_pib.markdown b/source/_integrations/imgw_pib.markdown
index e7ff8557d59..635b27ae579 100644
--- a/source/_integrations/imgw_pib.markdown
+++ b/source/_integrations/imgw_pib.markdown
@@ -25,17 +25,60 @@ Hydrological station:
description: "Select a hydrological station from the list of available stations."
{% endconfiguration_basic %}
-## Sensors
-
-Sensor entities added to Home Assistant:
-
-- Water level
-- Water flow (if a given hydrological station supports it)
-- Water temperature (if a given hydrological station supports it)
-- Hydrological alert (provides information on hydrological alerts for a given river and area)
-
## Removing the integration
This integration follows standard integration removal, no extra steps are required.
{% include integrations/remove_device_service.md %}
+
+## Supported functionality
+
+The IMGW-PIB integration provides the following entities.
+
+### Sensors
+
+- **Water level**
+ - **Description**: Water level in the river or reservoir at the measurement point
+- **Water flow**
+ - **Description**: River water flow at the measurement point
+ - **Remarks**: Not available for all hydrological stations
+- **Water temperature**
+ - **Description**: Water temperature in the river or reservoir at the measurement point
+ - **Remarks**: Not available for all hydrological stations
+- **Hydrological alert**
+ - **Description**: Provides information on hydrological alerts for a given river or reservoir
+
+## Data updates
+
+By default, the integration {% term polling polls %} data from the IMGW-PIB API every 30 minutes.
+
+## Possible use-cases
+
+- Monitor hydrological alerts to protect your family and property from floods.
+- Monitor river water levels to gain long-term insight into climate change in your area.
+
+## Examples
+
+### Create a hydrological alert notification
+
+This automation will create a persistent notification with the content and probability of a hydrological alert:
+
+```yaml
+automation:
+ - alias: Hydrological alert
+ triggers:
+ - trigger: state
+ entity_id:
+ - sensor.warta_oborniki_hydrological_alert
+ from: no_alert
+ actions:
+ - action: persistent_notification.create
+ data:
+ title: Hydrological alert!
+ message: "{{ trigger.to_state.state }}, probability {{ trigger.to_state.attributes.probability }}%"
+```
+
+## Known limitations
+
+- The integration provides data for hydrological stations available through the public IMGW-PIB API. Some hydrological stations are not available in this data and therefore the integration does not support them.
+- Not all hydrological stations provide all data, so the set of entities for individual stations may differ.
diff --git a/source/_integrations/intent_script.markdown b/source/_integrations/intent_script.markdown
index ef332fb75ad..12e7b1f47bb 100644
--- a/source/_integrations/intent_script.markdown
+++ b/source/_integrations/intent_script.markdown
@@ -124,3 +124,13 @@ intent_script:
```
{% endraw %}
+
+## Actions
+
+Available actions: `reload`.
+
+### Action `intent_script.reload`
+
+Reloads the intent script from the YAML-configuration, as a quicker alternative to restarting Home Assistant.
+
+This action takes no data attributes.
diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown
index 405f2a414b8..ed987e802bb 100644
--- a/source/_integrations/knx.markdown
+++ b/source/_integrations/knx.markdown
@@ -602,7 +602,7 @@ knx:
# time and date exposures
- type: time
address: "0/0/1"
- # entitiy exposures
+ # entity exposures
- type: temperature
entity_id: sensor.owm_temperature
address: "0/0/2"
diff --git a/source/_integrations/konnected_esphome.markdown b/source/_integrations/konnected_esphome.markdown
index dc241d50884..3897d65610c 100644
--- a/source/_integrations/konnected_esphome.markdown
+++ b/source/_integrations/konnected_esphome.markdown
@@ -42,6 +42,16 @@ ha_dhcp: true
ha_zeroconf: true
---
-[Konnected](https://konnected.io/) devices work locally and integrate seamlessly with the [ESPHome](/integrations/esphome/) {% term integration %} in Home Assistant. As all connectivity is done locally, status updates and device control from Home Assistant happen instantly.
+[Konnected](https://konnected.io/) is a member of the Made for ESPHome program.
-{% include integrations/supported_brand.md %}
\ No newline at end of file
+Konnected devices work locally and integrate seamlessly with the [ESPHome](/integrations/esphome/) {% term integration %} in Home Assistant. As all connectivity is done locally, status updates and device control from Home Assistant happen instantly.
+
+{% include integrations/supported_brand.md %}
+
+## Supported devices
+
+The following devices are known to be supported by the integration. They are certified under the [Works with Home Assistant](https://partner.home-assistant.io/) program.
+
+- [Konnected Smart Garage Door Opener blaQ](https://konnected.io/products/smart-garage-door-opener-blaq-myq-alternative)
+- [Konnected Smart Garage Door Opener White (v2)](https://konnected.io/products/smart-garage-door-opener)
+- [Konnected Alarm Panel Pro](https://konnected.io/collections/smart-alarm-panels)
diff --git a/source/_integrations/lcn.markdown b/source/_integrations/lcn.markdown
index 3850726630d..507b882d3e9 100644
--- a/source/_integrations/lcn.markdown
+++ b/source/_integrations/lcn.markdown
@@ -80,7 +80,7 @@ They are ideal to be used in automation scripts or for the `template` platforms.
{% endnote %}
-## Setting up devices and entites
+## Setting up devices and entities
The `lcn` hardware modules and groups are represented by Home Assistant *devices*. The periphery of each `lcn` module is represented by Home Assistant *entities*. Peripheries are, for example, the output ports, relays, and variables of a module. Refer to the description of each [platform](#platforms) to learn about which entity should be used for which periphery.
diff --git a/source/_integrations/lightwave.markdown b/source/_integrations/lightwave.markdown
index e62adaa0c51..6b4aed5c041 100644
--- a/source/_integrations/lightwave.markdown
+++ b/source/_integrations/lightwave.markdown
@@ -116,7 +116,7 @@ The first use of a light or switch will try to register with your Lightwave WiFi
Lightwave Thermostatic Radiator Values (TRV) are supported.
Earlier integrations required a proxy - See [LWProxy](https://github.com/ColinRobbins/Homeassistant-Lightwave-TRV).
-This capabilty is still supported, but no longer required.
+This capability is still supported, but no longer required.
```yaml
# Example TRV configuration.yaml for TRVs
diff --git a/source/_integrations/livisi.markdown b/source/_integrations/livisi.markdown
index 6ec35438dd4..77bb642baf6 100644
--- a/source/_integrations/livisi.markdown
+++ b/source/_integrations/livisi.markdown
@@ -30,7 +30,7 @@ The following devices are currently supported by this integration:
- Wall Switches (ISS, ISS2)
- Window-Door Sensor (WDS)
-## Prequisites
+## Prerequisites
This integration communicates with the local version of LIVISI SmartHome only.
diff --git a/source/_integrations/mastodon.markdown b/source/_integrations/mastodon.markdown
index 57c62e8cff9..9a3a85c85de 100644
--- a/source/_integrations/mastodon.markdown
+++ b/source/_integrations/mastodon.markdown
@@ -81,8 +81,9 @@ Example post action that will post a status using your account's default visibil
```yaml
- action: mastodon.post
- config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
- status: "A toot from Home Assistant"
+ data:
+ config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
+ status: "A toot from Home Assistant"
```
{% endraw %}
@@ -97,9 +98,10 @@ This will post a status to Mastodon, but visibility is marked as `private` so on
```yaml
- action: mastodon.post
- config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
- status: "A private toot from Home Assistant"
- visibility: private
+ data:
+ config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
+ status: "A private toot from Home Assistant"
+ visibility: private
```
{% endraw %}
@@ -114,9 +116,10 @@ This will post a status to Mastodon that includes an image.
```yaml
- action: mastodon.post
- config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
- status: "A media toot from Home Assistant"
- media: /config/www/funny_meme.png
+ data:
+ config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
+ status: "A media toot from Home Assistant"
+ media: /config/www/funny_meme.png
```
{% endraw %}
@@ -131,12 +134,13 @@ This will post a status to Mastodon that includes an image, with a description,
```yaml
- action: mastodon.post
- config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
- status: "A media toot from Home Assistant"
- visibility: unlisted
- media: /config/www/funny_meme.png
- media_description: "A funny meme"
- content_warning: "This might not be funny enough"
+ data:
+ config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID
+ status: "A media toot from Home Assistant"
+ visibility: unlisted
+ media: /config/www/funny_meme.png
+ media_description: "A funny meme"
+ content_warning: "This might not be funny enough"
```
{% endraw %}
diff --git a/source/_integrations/meteoalarm.markdown b/source/_integrations/meteoalarm.markdown
index 141c9ed7190..44ac62f0acc 100644
--- a/source/_integrations/meteoalarm.markdown
+++ b/source/_integrations/meteoalarm.markdown
@@ -16,6 +16,8 @@ ha_quality_scale: legacy
The `MeteoAlarm` platform allows one to watch for weather alerts in Europe from [MeteoAlarm](https://www.meteoalarm.org) (EUMETNET). To use this binary sensor, you need the country and the province name from [MeteoAlarm](https://feeds.meteoalarm.org). Please note that it is crucial to write the country name exactly as it appears in the URL starting with https://feeds.meteoalarm.org/feeds/meteoalarm-legacy-atom-, including any hyphens used in the name. Failure to do so may result in errors or incorrect data.
+The name of the province can be found using the [MeteoAlarm EMMA_ID Region explorer tool](https://saratoga-weather.org/meteoalarm-map/)
+
The binary sensor state shows the warning message if applicable. The details are available as attribute.
## Configuration
diff --git a/source/_integrations/modbus.markdown b/source/_integrations/modbus.markdown
index 7780962f166..80bb52f95a8 100644
--- a/source/_integrations/modbus.markdown
+++ b/source/_integrations/modbus.markdown
@@ -378,7 +378,7 @@ device_address:
unique_id:
description: "ID that uniquely identifies this entity.
Slaves will be given a unique_id of <