diff --git a/.github/workflows/add_prs_to_project.yml b/.github/workflows/add_prs_to_project.yml
index 8b819a2670b2..6f39aacaf4ed 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.1
+ uses: actions/add-to-project@v1.0.1
with:
project-url: https://github.com/orgs/home-assistant/projects/10
github-token: ${{ steps.token.outputs.token }}
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index c95522c53201..097f9b09bb0f 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.2
+ uses: actions/checkout@v4.1.4
- 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.2
+ uses: actions/checkout@v4.1.4
- name: Setting up Node.js
uses: actions/setup-node@v4.0.2
with:
diff --git a/.textlintrc.json b/.textlintrc.json
index 623a2d0aaf71..61ad2b3101c0 100644
--- a/.textlintrc.json
+++ b/.textlintrc.json
@@ -150,6 +150,7 @@
"iTunes",
"JSON-RPC",
"JSON",
+ "JuiceNet",
"Kafka",
"KEF",
"KNX",
diff --git a/CODEOWNERS b/CODEOWNERS
index 1593b27556e0..f6976ad1233c 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -188,10 +188,11 @@ source/_integrations/dnsip.markdown @gjohansson-ST
source/_integrations/doorbird.markdown @oblogic7 @bdraco @flacjacket
source/_integrations/dooya.markdown @starkillerOG
source/_integrations/dormakaba_dkey.markdown @emontnemery
+source/_integrations/downloader.markdown @erwindouna
source/_integrations/dremel_3d_printer.markdown @tkdrob
source/_integrations/drop_connect.markdown @ChandlerSystems @pfrazer
source/_integrations/dsmr.markdown @Robbie1221 @frenck
-source/_integrations/dsmr_reader.markdown @depl0y @glodenox
+source/_integrations/dsmr_reader.markdown @sorted-bits @glodenox
source/_integrations/duotecno.markdown @cereal2nd
source/_integrations/duquesne_light.markdown @tronikos
source/_integrations/dwd_weather_warnings.markdown @runningman84 @stephan192 @andarotajo
@@ -273,6 +274,7 @@ source/_integrations/frontend.markdown @home-assistant/frontend
source/_integrations/frontier_silicon.markdown @wlcrs
source/_integrations/fujitsu_anywair.markdown @Bre77
source/_integrations/fully_kiosk.markdown @cgarwood
+source/_integrations/fyta.markdown @dontinelli
source/_integrations/garages_amsterdam.markdown @klaasnicolaas
source/_integrations/gardena_bluetooth.markdown @elupus
source/_integrations/gaviota.markdown @starkillerOG
@@ -338,7 +340,7 @@ source/_integrations/homeassistant_sky_connect.markdown @home-assistant/core
source/_integrations/homeassistant_yellow.markdown @home-assistant/core
source/_integrations/homekit.markdown @bdraco
source/_integrations/homekit_controller.markdown @Jc2k @bdraco
-source/_integrations/homematic.markdown @pvizeli @danielperna84
+source/_integrations/homematic.markdown @pvizeli
source/_integrations/homewizard.markdown @DCSBL
source/_integrations/honeywell.markdown @rdfurman @mkmer
source/_integrations/http.markdown @home-assistant/core
@@ -393,6 +395,7 @@ source/_integrations/isy994.markdown @bdraco @shbatm
source/_integrations/izone.markdown @Swamp-Ig
source/_integrations/jellyfin.markdown @j-stienstra @ctalkington
source/_integrations/jewish_calendar.markdown @tsvi
+source/_integrations/juicenet.markdown @jesserockz
source/_integrations/justnimbus.markdown @kvanzuijlen
source/_integrations/jvc_projector.markdown @SteveEasley @msavazzi
source/_integrations/kaiterra.markdown @Michsior14
@@ -489,6 +492,7 @@ source/_integrations/monoprice.markdown @etsinko @OnFreund
source/_integrations/moon.markdown @fabaff @frenck
source/_integrations/mopeka.markdown @bdraco
source/_integrations/motion_blinds.markdown @starkillerOG
+source/_integrations/motionblinds_ble.markdown @LennP @jerrybboy
source/_integrations/motioneye.markdown @dermotduffy
source/_integrations/mqtt.markdown @emontnemery @jbouwh
source/_integrations/msteams.markdown @peroyvind
@@ -500,7 +504,7 @@ source/_integrations/mystrom.markdown @fabaff
source/_integrations/myuplink.markdown @pajzo @astrandb
source/_integrations/nam.markdown @bieniu
source/_integrations/nanoleaf.markdown @milanmeu
-source/_integrations/neato.markdown @dshokouhi @Santobert
+source/_integrations/neato.markdown @Santobert
source/_integrations/nederlandse_spoorwegen.markdown @YarmoM
source/_integrations/ness_alarm.markdown @nickw444
source/_integrations/nest.markdown @allenporter
@@ -539,6 +543,7 @@ source/_integrations/nzbget.markdown @chriscla
source/_integrations/obihai.markdown @dshokouhi @ejpenney
source/_integrations/octoprint.markdown @rfleming71
source/_integrations/ohmconnect.markdown @robbiet480
+source/_integrations/ollama.markdown @synesthesiam
source/_integrations/ombi.markdown @larssont
source/_integrations/omnilogic.markdown @oliver84 @djtimca @gentoosu
source/_integrations/onboarding.markdown @home-assistant/core
@@ -636,7 +641,6 @@ source/_integrations/recollect_waste.markdown @bachya
source/_integrations/recorder.markdown @home-assistant/core
source/_integrations/recovery_mode.markdown @home-assistant/core
source/_integrations/refoss.markdown @ashionky
-source/_integrations/rejseplanen.markdown @DarkFox
source/_integrations/remote.markdown @home-assistant/core
source/_integrations/renault.markdown @epenet
source/_integrations/renson.markdown @jimmyd-be
@@ -692,6 +696,7 @@ source/_integrations/sentry.markdown @dcramer @frenck
source/_integrations/senz.markdown @milanmeu
source/_integrations/serial.markdown @fabaff
source/_integrations/seven_segments.markdown @fabaff
+source/_integrations/seventeentrack.markdown @shaiu
source/_integrations/sfr_box.markdown @epenet
source/_integrations/sharkiq.markdown @JeffResc @funkybunch
source/_integrations/shell_command.markdown @home-assistant/core
@@ -724,6 +729,7 @@ source/_integrations/smarttub.markdown @mdz
source/_integrations/smarty.markdown @z0mbieprocess
source/_integrations/smhi.markdown @gjohansson-ST
source/_integrations/sms.markdown @ocalvo
+source/_integrations/smud.markdown @tronikos
source/_integrations/snapcast.markdown @luar123
source/_integrations/snooz.markdown @AustinBrunkhorst
source/_integrations/solaredge.markdown @frenck
diff --git a/Gemfile b/Gemfile
index b93880fc1e46..5f8b941da833 100644
--- a/Gemfile
+++ b/Gemfile
@@ -3,15 +3,15 @@ source 'https://rubygems.org'
ruby '> 2.5.0'
group :development do
- gem 'rake', '13.1.0'
+ gem 'rake', '13.2.1'
gem 'jekyll', '4.3.3'
gem 'compass', '1.0.3'
gem 'sass-globbing', '1.1.5'
gem 'stringex', '2.8.6'
# > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189
gem 'sassc', '2.1.0'
- gem 'rubocop', '1.62.1'
- gem 'ruby-lsp', '0.14.6'
+ gem 'rubocop', '1.63.4'
+ gem 'ruby-lsp', '0.16.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.3'
+gem 'nokogiri', '1.16.4'
# 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 dab70b00c15f..92da1fcf6cae 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -27,7 +27,7 @@ GEM
eventmachine (1.2.7)
ffi (1.16.3)
forwardable-extended (2.6.0)
- google-protobuf (4.26.0-x86_64-linux)
+ google-protobuf (4.26.1-x86_64-linux)
rake (>= 13)
http_parser.rb (0.8.0)
i18n (1.14.4)
@@ -60,7 +60,7 @@ GEM
nokogiri (~> 1.12)
jekyll-watch (2.2.1)
listen (~> 3.0)
- json (2.7.1)
+ json (2.7.2)
kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
@@ -74,16 +74,16 @@ GEM
multi_json (1.15.0)
mustermann (3.0.0)
ruby2_keywords (~> 0.0.1)
- nokogiri (1.16.3-x86_64-linux)
+ nokogiri (1.16.4-x86_64-linux)
racc (~> 1.4)
parallel (1.24.0)
- parser (3.3.0.5)
+ parser (3.3.1.0)
ast (~> 2.4.1)
racc
pathutil (0.16.2)
forwardable-extended (~> 2.6)
- prism (0.24.0)
- public_suffix (5.0.4)
+ prism (0.27.0)
+ public_suffix (5.0.5)
racc (1.7.3)
rack (3.0.10)
rack-protection (4.0.0)
@@ -95,14 +95,14 @@ GEM
rack (>= 3)
webrick (~> 1.8)
rainbow (3.1.1)
- rake (13.1.0)
+ rake (13.2.1)
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
ffi (~> 1.0)
regexp_parser (2.9.0)
rexml (3.2.6)
rouge (4.2.1)
- rubocop (1.62.1)
+ rubocop (1.63.4)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
@@ -113,17 +113,17 @@ GEM
rubocop-ast (>= 1.31.1, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 3.0)
- rubocop-ast (1.31.2)
- parser (>= 3.3.0.4)
- ruby-lsp (0.14.6)
+ rubocop-ast (1.31.3)
+ parser (>= 3.3.1.0)
+ ruby-lsp (0.16.6)
language_server-protocol (~> 3.17.0)
- prism (>= 0.22.0, < 0.25)
+ prism (>= 0.23.0, < 0.28)
sorbet-runtime (>= 0.5.10782)
ruby-progressbar (1.13.0)
ruby2_keywords (0.0.5)
safe_yaml (1.0.5)
sass (3.4.25)
- sass-embedded (1.72.0-x86_64-linux-gnu)
+ sass-embedded (1.75.0-x86_64-linux-gnu)
google-protobuf (>= 3.25, < 5.0)
sass-globbing (1.1.5)
sass (>= 3.1)
@@ -135,7 +135,7 @@ GEM
rack-protection (= 4.0.0)
rack-session (>= 2.0.0, < 3)
tilt (~> 2.0)
- sorbet-runtime (0.5.11305)
+ sorbet-runtime (0.5.11361)
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.3)
+ nokogiri (= 1.16.4)
rackup (= 2.1.0)
- rake (= 13.1.0)
- rubocop (= 1.62.1)
- ruby-lsp (= 0.14.6)
+ rake (= 13.2.1)
+ rubocop (= 1.63.4)
+ ruby-lsp (= 0.16.6)
sass-globbing (= 1.1.5)
sassc (= 2.1.0)
sinatra (= 4.0.0)
diff --git a/_config.yml b/_config.yml
index 8279d13f2ed4..94290300322d 100644
--- a/_config.yml
+++ b/_config.yml
@@ -109,9 +109,9 @@ social:
# Home Assistant release details
current_major_version: 2024
-current_minor_version: 3
-current_patch_version: 3
-date_released: 2024-03-22
+current_minor_version: 4
+current_patch_version: 4
+date_released: 2024-04-23
# Either # or the anchor link to latest release notes in the blog post.
# Must be prefixed with a # and have double quotes around it.
@@ -195,7 +195,7 @@ toc:
installation:
container: "ghcr.io/home-assistant/home-assistant"
versions:
- python: "3.11"
+ python: "3.12"
types:
odroid:
board: ODROID
diff --git a/package-lock.json b/package-lock.json
index 47bf50b257fb..727721e2bc02 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,15 +10,15 @@
"devDependencies": {
"remark-cli": "^12.0.0",
"remark-frontmatter": "^5.0.0",
- "remark-lint": "^9.1.2",
- "remark-lint-fenced-code-flag": "^3.1.2",
- "remark-lint-heading-increment": "^3.1.2",
- "remark-lint-heading-style": "^3.1.2",
- "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": "^10.0.0",
+ "remark-lint-fenced-code-flag": "^4.0.0",
+ "remark-lint-heading-increment": "^4.0.0",
+ "remark-lint-heading-style": "^4.0.0",
+ "remark-lint-no-shell-dollars": "^4.0.0",
+ "remark-lint-ordered-list-marker-style": "^4.0.0",
+ "remark-lint-ordered-list-marker-value": "^4.0.0",
"remark-lint-prohibited-strings": "^4.0.0",
- "remark-lint-unordered-list-marker-style": "^3.1.2",
+ "remark-lint-unordered-list-marker-style": "^4.0.0",
"remark-stringify": "^11.0.0",
"textlint": "^14.0.4",
"textlint-filter-rule-comments": "^1.2.2",
@@ -868,24 +868,24 @@
}
},
"node_modules/@types/estree": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz",
- "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
"dev": true
},
"node_modules/@types/estree-jsx": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz",
- "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
+ "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
"dev": true,
"dependencies": {
"@types/estree": "*"
}
},
"node_modules/@types/hast": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
- "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
"dev": true,
"dependencies": {
"@types/unist": "*"
@@ -1117,6 +1117,16 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/character-entities-legacy": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
@@ -1188,6 +1198,16 @@
"node": ">=8"
}
},
+ "node_modules/collapse-white-space": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz",
+ "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -1854,15 +1874,6 @@
"node": ">=6"
}
},
- "node_modules/kleur": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
- "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -2009,19 +2020,28 @@
}
},
"node_modules/mdast-comment-marker": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.1.2.tgz",
- "integrity": "sha512-HED3ezseRVkBzZ0uK4q6RJMdufr/2p3VfVZstE3H1N9K8bwtspztWo6Xd7rEatuGNoCXaBna8oEqMwUn0Ve1bw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-3.0.0.tgz",
+ "integrity": "sha512-bt08sLmTNg00/UtVDiqZKocxqvQqqyQZAg1uaRuO/4ysXV5motg7RolF5o5yy/sY1rG0v2XgZEqFWho1+2UquA==",
"dev": true,
"dependencies": {
- "@types/mdast": "^3.0.0",
- "mdast-util-mdx-expression": "^1.1.0"
+ "@types/mdast": "^4.0.0",
+ "mdast-util-mdx-expression": "^2.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/mdast-comment-marker/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
"node_modules/mdast-util-find-and-replace": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz",
@@ -2130,23 +2150,51 @@
}
},
"node_modules/mdast-util-from-markdown": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz",
- "integrity": "sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
+ "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
"dev": true,
"dependencies": {
- "@types/mdast": "^3.0.0",
- "@types/unist": "^2.0.0",
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
"decode-named-character-reference": "^1.0.0",
- "mdast-util-to-string": "^3.1.0",
- "micromark": "^3.0.0",
- "micromark-util-decode-numeric-character-reference": "^1.0.0",
- "micromark-util-decode-string": "^1.0.0",
- "micromark-util-normalize-identifier": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0",
- "unist-util-stringify-position": "^3.0.0",
- "uvu": "^0.5.0"
+ "devlop": "^1.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark": "^4.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-from-markdown/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/mdast-util-from-markdown/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/mdast-util-from-markdown/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",
@@ -2198,81 +2246,42 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/mdast-util-from-markdown": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
- "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
- "dev": true,
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "@types/unist": "^3.0.0",
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "mdast-util-to-string": "^4.0.0",
- "micromark": "^4.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-decode-string": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unist-util-stringify-position": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/mdast-util-phrasing": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.0.0.tgz",
- "integrity": "sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==",
- "dev": true,
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "unist-util-is": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/mdast-util-to-markdown": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz",
- "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==",
+ "node_modules/mdast-util-gfm": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz",
+ "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==",
"dev": true,
"dependencies": {
- "@types/mdast": "^4.0.0",
- "@types/unist": "^3.0.0",
- "longest-streak": "^3.0.0",
- "mdast-util-phrasing": "^4.0.0",
- "mdast-util-to-string": "^4.0.0",
- "micromark-util-decode-string": "^2.0.0",
- "unist-util-visit": "^5.0.0",
- "zwitch": "^2.0.0"
+ "mdast-util-gfm-autolink-literal": "^0.1.0",
+ "mdast-util-gfm-strikethrough": "^0.2.0",
+ "mdast-util-gfm-table": "^0.1.0",
+ "mdast-util-gfm-task-list-item": "^0.1.0",
+ "mdast-util-to-markdown": "^0.6.1"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/mdast-util-to-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
- "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+ "node_modules/mdast-util-gfm-autolink-literal": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz",
+ "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==",
"dev": true,
"dependencies": {
- "@types/mdast": "^4.0.0"
+ "ccount": "^1.0.0",
+ "mdast-util-find-and-replace": "^1.1.0",
+ "micromark": "^2.11.3"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/micromark": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz",
- "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==",
+ "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark": {
+ "version": "2.11.4",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
+ "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
"dev": true,
"funding": [
{
@@ -2285,553 +2294,86 @@
}
],
"dependencies": {
- "@types/debug": "^4.0.0",
"debug": "^4.0.0",
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-core-commonmark": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-combine-extensions": "^2.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-encode": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-resolve-all": "^2.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "micromark-util-subtokenize": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "parse-entities": "^2.0.0"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/micromark-core-commonmark": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz",
- "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==",
+ "node_modules/mdast-util-gfm-strikethrough": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz",
+ "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==",
"dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-factory-destination": "^2.0.0",
- "micromark-factory-label": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-factory-title": "^2.0.0",
- "micromark-factory-whitespace": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-classify-character": "^2.0.0",
- "micromark-util-html-tag-name": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-resolve-all": "^2.0.0",
- "micromark-util-subtokenize": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "mdast-util-to-markdown": "^0.6.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/micromark-factory-destination": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
- "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
+ "node_modules/mdast-util-gfm-strikethrough/node_modules/longest-streak": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
+ "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-to-markdown": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz",
+ "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==",
"dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "@types/unist": "^2.0.0",
+ "longest-streak": "^2.0.0",
+ "mdast-util-to-string": "^2.0.0",
+ "parse-entities": "^2.0.0",
+ "repeat-string": "^1.0.0",
+ "zwitch": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/mdast-util-frontmatter/node_modules/micromark-factory-label": {
+ "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-to-string": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
- "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
+ "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==",
"dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-factory-space": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
- "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-factory-title": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
- "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-factory-whitespace": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
- "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-util-character": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz",
- "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-util-chunked": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
- "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-util-classify-character": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
- "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-util-combine-extensions": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
- "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-util-decode-numeric-character-reference": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.0.tgz",
- "integrity": "sha512-pIgcsGxpHEtTG/rPJRz/HOLSqp5VTuIIjXlPI+6JSDlK2oljApusG6KzpS8AF0ENUMCHlC/IBb5B9xdFiVlm5Q==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-util-decode-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
- "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "decode-named-character-reference": "^1.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-util-encode": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
- "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-util-html-tag-name": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
- "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-util-normalize-identifier": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
- "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-util-resolve-all": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
- "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-util-sanitize-uri": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
- "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-encode": "^2.0.0",
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-util-subtokenize": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz",
- "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-util-symbol": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
- "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/mdast-util-frontmatter/node_modules/micromark-util-types": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
- "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/mdast-util-frontmatter/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/mdast-util-frontmatter/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/mdast-util-frontmatter/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/mdast-util-frontmatter/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/mdast-util-gfm": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz",
- "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==",
- "dev": true,
- "dependencies": {
- "mdast-util-gfm-autolink-literal": "^0.1.0",
- "mdast-util-gfm-strikethrough": "^0.2.0",
- "mdast-util-gfm-table": "^0.1.0",
- "mdast-util-gfm-task-list-item": "^0.1.0",
- "mdast-util-to-markdown": "^0.6.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-autolink-literal": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz",
- "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==",
- "dev": true,
- "dependencies": {
- "ccount": "^1.0.0",
- "mdast-util-find-and-replace": "^1.1.0",
- "micromark": "^2.11.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark": {
- "version": "2.11.4",
- "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
- "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "debug": "^4.0.0",
- "parse-entities": "^2.0.0"
- }
- },
- "node_modules/mdast-util-gfm-strikethrough": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz",
- "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==",
+ "node_modules/mdast-util-gfm-strikethrough/node_modules/zwitch": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
+ "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-gfm-table": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz",
+ "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==",
"dev": true,
"dependencies": {
- "mdast-util-to-markdown": "^0.6.0"
+ "markdown-table": "^2.0.0",
+ "mdast-util-to-markdown": "~0.6.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/mdast-util-gfm-strikethrough/node_modules/longest-streak": {
+ "node_modules/mdast-util-gfm-table/node_modules/longest-streak": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
"integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==",
@@ -2841,7 +2383,7 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-to-markdown": {
+ "node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown": {
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz",
"integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==",
@@ -2859,7 +2401,7 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/mdast-util-gfm-strikethrough/node_modules/mdast-util-to-string": {
+ "node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
"integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==",
@@ -2869,7 +2411,7 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/mdast-util-gfm-strikethrough/node_modules/zwitch": {
+ "node_modules/mdast-util-gfm-table/node_modules/zwitch": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
"integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==",
@@ -2879,13 +2421,12 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/mdast-util-gfm-table": {
+ "node_modules/mdast-util-gfm-task-list-item": {
"version": "0.1.6",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz",
- "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz",
+ "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==",
"dev": true,
"dependencies": {
- "markdown-table": "^2.0.0",
"mdast-util-to-markdown": "~0.6.0"
},
"funding": {
@@ -2893,7 +2434,7 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/mdast-util-gfm-table/node_modules/longest-streak": {
+ "node_modules/mdast-util-gfm-task-list-item/node_modules/longest-streak": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
"integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==",
@@ -2903,7 +2444,7 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-markdown": {
+ "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown": {
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz",
"integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==",
@@ -2921,7 +2462,7 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/mdast-util-gfm-table/node_modules/mdast-util-to-string": {
+ "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
"integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==",
@@ -2931,7 +2472,7 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/mdast-util-gfm-table/node_modules/zwitch": {
+ "node_modules/mdast-util-gfm-task-list-item/node_modules/zwitch": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
"integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==",
@@ -2941,20 +2482,7 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/mdast-util-gfm-task-list-item": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz",
- "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==",
- "dev": true,
- "dependencies": {
- "mdast-util-to-markdown": "~0.6.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-task-list-item/node_modules/longest-streak": {
+ "node_modules/mdast-util-gfm/node_modules/longest-streak": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
"integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==",
@@ -2964,7 +2492,7 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-markdown": {
+ "node_modules/mdast-util-gfm/node_modules/mdast-util-to-markdown": {
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz",
"integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==",
@@ -2982,7 +2510,7 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/mdast-util-gfm-task-list-item/node_modules/mdast-util-to-string": {
+ "node_modules/mdast-util-gfm/node_modules/mdast-util-to-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
"integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==",
@@ -2992,7 +2520,7 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/mdast-util-gfm-task-list-item/node_modules/zwitch": {
+ "node_modules/mdast-util-gfm/node_modules/zwitch": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
"integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==",
@@ -3002,112 +2530,353 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/mdast-util-gfm/node_modules/longest-streak": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
- "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==",
+ "node_modules/mdast-util-heading-style": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-3.0.0.tgz",
+ "integrity": "sha512-tsUfM9Kj9msjlemA/38Z3pvraQay880E3zP2NgIthMoGcpU9bcPX9oSM6QC/+eFXGGB4ba+VCB1dKAPHB7Veug==",
+ "dev": true,
+ "dependencies": {
+ "@types/mdast": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-heading-style/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/mdast-util-mdx": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz",
+ "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==",
+ "dev": true,
+ "dependencies": {
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-mdx-expression": "^2.0.0",
+ "mdast-util-mdx-jsx": "^3.0.0",
+ "mdast-util-mdxjs-esm": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-expression": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz",
+ "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-expression/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz",
+ "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "devlop": "^1.1.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "parse-entities": "^4.0.0",
+ "stringify-entities": "^4.0.0",
+ "unist-util-remove-position": "^5.0.0",
+ "unist-util-stringify-position": "^4.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/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/mdast-util-mdx-jsx/node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
"dev": true,
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/mdast-util-gfm/node_modules/mdast-util-to-markdown": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz",
- "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==",
+ "node_modules/mdast-util-mdx-jsx/node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/character-reference-invalid": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
+ "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/is-alphabetical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
+ "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/is-alphanumerical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
+ "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
+ "dev": true,
+ "dependencies": {
+ "is-alphabetical": "^2.0.0",
+ "is-decimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/is-decimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
+ "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/is-hexadecimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
+ "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz",
+ "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==",
"dev": true,
"dependencies": {
"@types/unist": "^2.0.0",
- "longest-streak": "^2.0.0",
- "mdast-util-to-string": "^2.0.0",
- "parse-entities": "^2.0.0",
- "repeat-string": "^1.0.0",
- "zwitch": "^1.0.0"
+ "character-entities": "^2.0.0",
+ "character-entities-legacy": "^3.0.0",
+ "character-reference-invalid": "^2.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "is-alphanumerical": "^2.0.0",
+ "is-decimal": "^2.0.0",
+ "is-hexadecimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities/node_modules/@types/unist": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
+ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==",
+ "dev": true
+ },
+ "node_modules/mdast-util-mdx-jsx/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/mdast-util-mdx-jsx/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/mdast-util-mdxjs-esm": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz",
+ "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdxjs-esm/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/mdast-util-phrasing": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
+ "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
+ "dev": true,
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "unist-util-is": "^6.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/mdast-util-gfm/node_modules/mdast-util-to-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
- "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==",
+ "node_modules/mdast-util-phrasing/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
"dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "dependencies": {
+ "@types/unist": "*"
}
},
- "node_modules/mdast-util-gfm/node_modules/zwitch": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
- "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
+ "node_modules/mdast-util-phrasing/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/mdast-util-heading-style": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-2.0.1.tgz",
- "integrity": "sha512-0L5rthU4xKDVbw+UQ7D8Y8xOEsX4JXZvemWoEAsL+WAaeSH+TvVVwFnTb3G/OrjyP4VYQULoNWU+PdZfkmNu4A==",
+ "node_modules/mdast-util-to-markdown": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz",
+ "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==",
"dev": true,
"dependencies": {
- "@types/mdast": "^3.0.0"
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "unist-util-visit": "^5.0.0",
+ "zwitch": "^2.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/mdast-util-mdx-expression": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz",
- "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==",
+ "node_modules/mdast-util-to-markdown/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
"dev": true,
"dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "@types/hast": "^2.0.0",
- "@types/mdast": "^3.0.0",
- "mdast-util-from-markdown": "^1.0.0",
- "mdast-util-to-markdown": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "@types/unist": "*"
}
},
- "node_modules/mdast-util-phrasing": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz",
- "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==",
+ "node_modules/mdast-util-to-markdown/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/mdast-util-to-markdown/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/mdast": "^3.0.0",
- "unist-util-is": "^5.0.0"
+ "@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/mdast-util-to-markdown": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz",
- "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==",
+ "node_modules/mdast-util-to-markdown/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/mdast": "^3.0.0",
- "@types/unist": "^2.0.0",
- "longest-streak": "^3.0.0",
- "mdast-util-phrasing": "^3.0.0",
- "mdast-util-to-string": "^3.0.0",
- "micromark-util-decode-string": "^1.0.0",
- "unist-util-visit": "^4.0.0",
- "zwitch": "^2.0.0"
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
},
"funding": {
"type": "opencollective",
@@ -3115,22 +2884,31 @@
}
},
"node_modules/mdast-util-to-string": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.1.tgz",
- "integrity": "sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
+ "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
"dev": true,
"dependencies": {
- "@types/mdast": "^3.0.0"
+ "@types/mdast": "^4.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/mdast-util-to-string/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
"node_modules/micromark": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz",
- "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz",
+ "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==",
"dev": true,
"funding": [
{
@@ -3146,26 +2924,26 @@
"@types/debug": "^4.0.0",
"debug": "^4.0.0",
"decode-named-character-reference": "^1.0.0",
- "micromark-core-commonmark": "^1.0.1",
- "micromark-factory-space": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-chunked": "^1.0.0",
- "micromark-util-combine-extensions": "^1.0.0",
- "micromark-util-decode-numeric-character-reference": "^1.0.0",
- "micromark-util-encode": "^1.0.0",
- "micromark-util-normalize-identifier": "^1.0.0",
- "micromark-util-resolve-all": "^1.0.0",
- "micromark-util-sanitize-uri": "^1.0.0",
- "micromark-util-subtokenize": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.1",
- "uvu": "^0.5.0"
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark-core-commonmark": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz",
- "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz",
+ "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==",
"dev": true,
"funding": [
{
@@ -3179,21 +2957,21 @@
],
"dependencies": {
"decode-named-character-reference": "^1.0.0",
- "micromark-factory-destination": "^1.0.0",
- "micromark-factory-label": "^1.0.0",
- "micromark-factory-space": "^1.0.0",
- "micromark-factory-title": "^1.0.0",
- "micromark-factory-whitespace": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-chunked": "^1.0.0",
- "micromark-util-classify-character": "^1.0.0",
- "micromark-util-html-tag-name": "^1.0.0",
- "micromark-util-normalize-identifier": "^1.0.0",
- "micromark-util-resolve-all": "^1.0.0",
- "micromark-util-subtokenize": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.1",
- "uvu": "^0.5.0"
+ "devlop": "^1.0.0",
+ "micromark-factory-destination": "^2.0.0",
+ "micromark-factory-label": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-factory-title": "^2.0.0",
+ "micromark-factory-whitespace": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-html-tag-name": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark-extension-footnote": {
@@ -3245,58 +3023,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz",
- "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-symbol": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
- "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-types": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
- "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
"node_modules/micromark-extension-gfm": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz",
@@ -3478,9 +3204,9 @@
}
},
"node_modules/micromark-factory-destination": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz",
- "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
+ "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
"dev": true,
"funding": [
{
@@ -3493,15 +3219,15 @@
}
],
"dependencies": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0"
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark-factory-label": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz",
- "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
+ "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
"dev": true,
"funding": [
{
@@ -3514,16 +3240,16 @@
}
],
"dependencies": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0",
- "uvu": "^0.5.0"
+ "devlop": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark-factory-space": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz",
- "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
+ "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
"dev": true,
"funding": [
{
@@ -3536,14 +3262,14 @@
}
],
"dependencies": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-types": "^1.0.0"
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark-factory-title": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz",
- "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
+ "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
"dev": true,
"funding": [
{
@@ -3556,17 +3282,16 @@
}
],
"dependencies": {
- "micromark-factory-space": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0",
- "uvu": "^0.5.0"
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark-factory-whitespace": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz",
- "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
+ "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
"dev": true,
"funding": [
{
@@ -3579,16 +3304,16 @@
}
],
"dependencies": {
- "micromark-factory-space": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0"
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark-util-character": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz",
- "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
+ "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
"dev": true,
"funding": [
{
@@ -3601,14 +3326,14 @@
}
],
"dependencies": {
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0"
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark-util-chunked": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz",
- "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
+ "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
"dev": true,
"funding": [
{
@@ -3621,13 +3346,13 @@
}
],
"dependencies": {
- "micromark-util-symbol": "^1.0.0"
+ "micromark-util-symbol": "^2.0.0"
}
},
"node_modules/micromark-util-classify-character": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz",
- "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
+ "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
"dev": true,
"funding": [
{
@@ -3640,15 +3365,15 @@
}
],
"dependencies": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0"
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark-util-combine-extensions": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz",
- "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
+ "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
"dev": true,
"funding": [
{
@@ -3661,14 +3386,14 @@
}
],
"dependencies": {
- "micromark-util-chunked": "^1.0.0",
- "micromark-util-types": "^1.0.0"
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark-util-decode-numeric-character-reference": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz",
- "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz",
+ "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==",
"dev": true,
"funding": [
{
@@ -3681,13 +3406,13 @@
}
],
"dependencies": {
- "micromark-util-symbol": "^1.0.0"
+ "micromark-util-symbol": "^2.0.0"
}
},
"node_modules/micromark-util-decode-string": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz",
- "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
+ "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
"dev": true,
"funding": [
{
@@ -3701,15 +3426,15 @@
],
"dependencies": {
"decode-named-character-reference": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-decode-numeric-character-reference": "^1.0.0",
- "micromark-util-symbol": "^1.0.0"
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
}
},
"node_modules/micromark-util-encode": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz",
- "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
+ "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
"dev": true,
"funding": [
{
@@ -3723,9 +3448,9 @@
]
},
"node_modules/micromark-util-html-tag-name": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz",
- "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
+ "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
"dev": true,
"funding": [
{
@@ -3739,9 +3464,9 @@
]
},
"node_modules/micromark-util-normalize-identifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz",
- "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
+ "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
"dev": true,
"funding": [
{
@@ -3754,13 +3479,13 @@
}
],
"dependencies": {
- "micromark-util-symbol": "^1.0.0"
+ "micromark-util-symbol": "^2.0.0"
}
},
"node_modules/micromark-util-resolve-all": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz",
- "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
+ "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
"dev": true,
"funding": [
{
@@ -3773,13 +3498,13 @@
}
],
"dependencies": {
- "micromark-util-types": "^1.0.0"
+ "micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark-util-sanitize-uri": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz",
- "integrity": "sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
+ "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
"dev": true,
"funding": [
{
@@ -3792,15 +3517,15 @@
}
],
"dependencies": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-encode": "^1.0.0",
- "micromark-util-symbol": "^1.0.0"
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
}
},
"node_modules/micromark-util-subtokenize": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz",
- "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz",
+ "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==",
"dev": true,
"funding": [
{
@@ -3813,16 +3538,16 @@
}
],
"dependencies": {
- "micromark-util-chunked": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0",
- "uvu": "^0.5.0"
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark-util-symbol": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz",
- "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
+ "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
"dev": true,
"funding": [
{
@@ -3836,9 +3561,9 @@
]
},
"node_modules/micromark-util-types": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz",
- "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
+ "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
"dev": true,
"funding": [
{
@@ -3899,15 +3624,6 @@
"mkdirp": "bin/cmd.js"
}
},
- "node_modules/mri": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
- "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -4211,6 +3927,16 @@
"node": ">=6"
}
},
+ "node_modules/quotation": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/quotation/-/quotation-2.0.3.tgz",
+ "integrity": "sha512-yEc24TEgCFLXx7D4JHJJkK4JFVtatO8fziwUxY4nB/Jbea9o9CVS3gt22mA0W7rPYAGW2fWzYDSOtD94PwOyqA==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/rc-config-loader": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz",
@@ -4535,14 +4261,14 @@
}
},
"node_modules/remark-lint": {
- "version": "9.1.2",
- "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.1.2.tgz",
- "integrity": "sha512-m9e/aPlh7tsvfJfj8tPxrQzD6oEdb9Foko+Ya/6OwUP9EoGMfehv1Qtv26W1DoH58Wn8rT8CD+KuprTWscMmIA==",
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-10.0.0.tgz",
+ "integrity": "sha512-E8yHHDOJ8b+qI0G49BRu24pe8t0fNNBWv8ENQJpCGNrVeTeyBIGEbaUe1yuF7OG8faA6PVpcN/pqWjzW9fcBWQ==",
"dev": true,
"dependencies": {
- "@types/mdast": "^3.0.0",
- "remark-message-control": "^7.0.0",
- "unified": "^10.1.0"
+ "@types/mdast": "^4.0.0",
+ "remark-message-control": "^8.0.0",
+ "unified": "^11.0.0"
},
"funding": {
"type": "opencollective",
@@ -4550,146 +4276,201 @@
}
},
"node_modules/remark-lint-fenced-code-flag": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.1.2.tgz",
- "integrity": "sha512-yh4m3dlPmRsqM/BFhpqHYfrmBvFQ+D5dZZKDDYP2rf3YEoXlEVt8T8lWQueTTSxcq6yXAqL/XQL/iqqUHlLcHw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-4.0.0.tgz",
+ "integrity": "sha512-Zs0wJd4nRvBo/9NWQVfWg5Ykapbo0Zzw/SyZc3f0h73S1gTZZcfeU+bA5oDivlBdcUgLBsyHRE0QaoaVvN3/Wg==",
"dev": true,
"dependencies": {
- "@types/mdast": "^3.0.0",
- "unified": "^10.0.0",
- "unified-lint-rule": "^2.0.0",
- "unist-util-generated": "^2.0.0",
- "unist-util-position": "^4.0.0",
- "unist-util-visit": "^4.0.0"
+ "@types/mdast": "^4.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "quotation": "^2.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit-parents": "^6.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-lint-heading-increment": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-3.1.2.tgz",
- "integrity": "sha512-+fMfZmFh6ie6MmbRCVW77Rha15zDmnHWKiA0Do08OTrfngPTv8ZKXYLmxhUpL+xV9ts9q+9Kz5rv0L4QD4sEwQ==",
+ "node_modules/remark-lint-fenced-code-flag/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
"dev": true,
"dependencies": {
- "@types/mdast": "^3.0.0",
- "unified": "^10.0.0",
- "unified-lint-rule": "^2.0.0",
- "unist-util-generated": "^2.0.0",
- "unist-util-visit": "^4.0.0"
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/remark-lint-fenced-code-flag/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-fenced-code-flag/node_modules/unified": {
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
+ "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-lint-heading-style": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.1.2.tgz",
- "integrity": "sha512-0RkcRPV/H2bPFgeInzBkK1cWUwtFTm83I+Db/Z5tDY02GzKOosHLvxtJyj/1391/opAH1LYbHtHWffir99IUgw==",
+ "node_modules/remark-lint-fenced-code-flag/node_modules/unified-lint-rule": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz",
+ "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==",
"dev": true,
"dependencies": {
- "@types/mdast": "^3.0.0",
- "mdast-util-heading-style": "^2.0.0",
- "unified": "^10.0.0",
- "unified-lint-rule": "^2.0.0",
- "unist-util-generated": "^2.0.0",
- "unist-util-visit": "^4.0.0"
+ "@types/unist": "^3.0.0",
+ "trough": "^2.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-lint-no-shell-dollars": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.1.2.tgz",
- "integrity": "sha512-np2MDEhXHviXhbQFjnC1QYv5/fxCV1cIHfGMoJpqiW7Zcu/UGCOo5TE3XswZH4ukHZJ65c3X2A6qfLDW+ur3CQ==",
+ "node_modules/remark-lint-fenced-code-flag/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/mdast": "^3.0.0",
- "unified": "^10.0.0",
- "unified-lint-rule": "^2.0.0",
- "unist-util-generated": "^2.0.0",
- "unist-util-visit": "^4.0.0"
+ "@types/unist": "^3.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-lint-ordered-list-marker-style": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.1.2.tgz",
- "integrity": "sha512-62iVE/YQsA0Azaqt8yAJWPplWLS47kDLjXeC2PlRIAzCqbNt9qH3HId8vZ15QTSrp8rHmJwrCMdcqV6AZUi7gQ==",
+ "node_modules/remark-lint-fenced-code-flag/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/mdast": "^3.0.0",
- "unified": "^10.0.0",
- "unified-lint-rule": "^2.0.0",
- "unist-util-generated": "^2.0.0",
- "unist-util-position": "^4.0.0",
- "unist-util-visit": "^4.0.0"
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-lint-ordered-list-marker-value": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-3.1.2.tgz",
- "integrity": "sha512-kG08nhsFk8rhoXK5EeDN/wN28CxefraDud/MaZnji8LEyxF3HAkzFuETr9laOn8Ey+n8h/C0mpqAwUf4thyJ5g==",
+ "node_modules/remark-lint-fenced-code-flag/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/mdast": "^3.0.0",
- "unified": "^10.0.0",
- "unified-lint-rule": "^2.0.0",
- "unist-util-generated": "^2.0.0",
- "unist-util-position": "^4.0.0",
- "unist-util-visit": "^4.0.0"
+ "@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/remark-lint-fenced-code-flag/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-heading-increment": {
"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==",
+ "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-4.0.0.tgz",
+ "integrity": "sha512-TARnsjXWzY/yLwxh/y4+KnDSXO3Koue8Crp55T8G9pjj3vw+XgTAG35zSpIIY9HmGiQ2a3R0SOj2pAxATpnckg==",
"dev": true,
"dependencies": {
- "escape-string-regexp": "^5.0.0",
- "unified-lint-rule": "^2.0.0",
- "unist-util-position": "^5.0.0",
- "unist-util-visit": "^5.0.0",
- "vfile-location": "^5.0.1"
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-mdx": "^3.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-visit-parents": "^6.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-lint-prohibited-strings/node_modules/@types/unist": {
+ "node_modules/remark-lint-heading-increment/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/remark-lint-heading-increment/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",
- "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "node_modules/remark-lint-heading-increment/node_modules/unified": {
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
+ "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
"dev": true,
- "engines": {
- "node": ">=12"
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "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==",
+ "node_modules/remark-lint-heading-increment/node_modules/unified-lint-rule": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz",
+ "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "trough": "^2.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-heading-increment/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"
@@ -4699,20 +4480,119 @@
"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==",
+ "node_modules/remark-lint-heading-increment/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-heading-increment/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-heading-increment/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-heading-style": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-4.0.0.tgz",
+ "integrity": "sha512-dQ6Jul5K0+aNUvrq4W7H0+osSoC9hsmwHZqBFq000+eMP/hWJqI8tuudw1rap8HHYuOsKLRbB5q+Fr7G+3Vw+Q==",
+ "dev": true,
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-heading-style": "^3.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit-parents": "^6.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-heading-style/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/remark-lint-heading-style/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-heading-style/node_modules/unified": {
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
+ "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-heading-style/node_modules/unified-lint-rule": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz",
+ "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==",
"dev": true,
"dependencies": {
- "@types/unist": "^3.0.0"
+ "@types/unist": "^3.0.0",
+ "trough": "^2.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-stringify-position": {
+ "node_modules/remark-lint-heading-style/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==",
@@ -4725,22 +4605,7 @@
"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": {
+ "node_modules/remark-lint-heading-style/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==",
@@ -4754,7 +4619,7 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-lint-prohibited-strings/node_modules/vfile": {
+ "node_modules/remark-lint-heading-style/node_modules/vfile": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz",
"integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==",
@@ -4769,253 +4634,195 @@
"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==",
+ "node_modules/remark-lint-heading-style/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",
- "vfile": "^6.0.0"
+ "unist-util-stringify-position": "^4.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==",
+ "node_modules/remark-lint-no-shell-dollars": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-4.0.0.tgz",
+ "integrity": "sha512-ye2h8FzjsgqqQV0HHN2g9N4FqI3eD9Gpgu7tU5ADIJyQ3mUJdwBoFn7IlGnpmumR1fb/l6u/AhRavIZxXYqG+Q==",
"dev": true,
"dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-stringify-position": "^4.0.0"
+ "@types/mdast": "^4.0.0",
+ "collapse-white-space": "^2.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-visit-parents": "^6.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",
- "integrity": "sha512-JFiyB4ZprJGGndCaFB8FssXd48m4Kh+CUqzNgu3lBLEiW8dEAGRlD9M2AzyyA+Q29WJP/FntDCbP22DeON91UA==",
+ "node_modules/remark-lint-no-shell-dollars/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
"dev": true,
"dependencies": {
- "@types/mdast": "^3.0.0",
- "unified": "^10.0.0",
- "unified-lint-rule": "^2.0.0",
- "unist-util-generated": "^2.0.0",
- "unist-util-position": "^4.0.0",
- "unist-util-visit": "^4.0.0"
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/remark-lint-no-shell-dollars/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-no-shell-dollars/node_modules/unified": {
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
+ "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-message-control": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.1.1.tgz",
- "integrity": "sha512-xKRWl1NTBOKed0oEtCd8BUfH5m4s8WXxFFSoo7uUwx6GW/qdCy4zov5LfPyw7emantDmhfWn5PdIZgcbVcWMDQ==",
+ "node_modules/remark-lint-no-shell-dollars/node_modules/unified-lint-rule": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz",
+ "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==",
"dev": true,
"dependencies": {
- "@types/mdast": "^3.0.0",
- "mdast-comment-marker": "^2.0.0",
- "unified": "^10.0.0",
- "unified-message-control": "^4.0.0",
- "vfile": "^5.0.0"
+ "@types/unist": "^3.0.0",
+ "trough": "^2.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-parse": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
- "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
+ "node_modules/remark-lint-no-shell-dollars/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/mdast": "^4.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unified": "^11.0.0"
+ "@types/unist": "^3.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-parse/node_modules/@types/mdast": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.0.tgz",
- "integrity": "sha512-YLeG8CujC9adtj/kuDzq1N4tCDYKoZ5l/bnjq8d74+t/3q/tHquJOJKUQXJrLCflOHpKjXgcI/a929gpmLOEng==",
+ "node_modules/remark-lint-no-shell-dollars/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": "*"
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-parse/node_modules/@types/unist": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz",
- "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==",
- "dev": true
- },
- "node_modules/remark-parse/node_modules/mdast-util-from-markdown": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz",
- "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==",
+ "node_modules/remark-lint-no-shell-dollars/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/mdast": "^4.0.0",
"@types/unist": "^3.0.0",
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "mdast-util-to-string": "^4.0.0",
- "micromark": "^4.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-decode-string": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unist-util-stringify-position": "^4.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-parse/node_modules/mdast-util-to-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
- "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+ "node_modules/remark-lint-no-shell-dollars/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/mdast": "^4.0.0"
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-parse/node_modules/micromark": {
+ "node_modules/remark-lint-ordered-list-marker-style": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz",
- "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==",
+ "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-4.0.0.tgz",
+ "integrity": "sha512-xZ7Xppy5fzACH4b9h1b4lTzVtNY2AlUkNTfl1Oe6cIKN8tk3juFxN0wL2RpktPtSZ7iRIabzFmg6l8WPhlASJA==",
"dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "@types/debug": "^4.0.0",
- "debug": "^4.0.0",
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-core-commonmark": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
+ "@types/mdast": "^4.0.0",
+ "mdast-util-phrasing": "^4.0.0",
"micromark-util-character": "^2.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-combine-extensions": "^2.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-encode": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-resolve-all": "^2.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "micromark-util-subtokenize": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit-parents": "^6.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-parse/node_modules/micromark-core-commonmark": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz",
- "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==",
+ "node_modules/remark-lint-ordered-list-marker-style/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
"dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-factory-destination": "^2.0.0",
- "micromark-factory-label": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-factory-title": "^2.0.0",
- "micromark-factory-whitespace": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-classify-character": "^2.0.0",
- "micromark-util-html-tag-name": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-resolve-all": "^2.0.0",
- "micromark-util-subtokenize": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "@types/unist": "*"
}
},
- "node_modules/remark-parse/node_modules/micromark-factory-destination": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
- "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
+ "node_modules/remark-lint-ordered-list-marker-style/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-parse/node_modules/micromark-factory-label": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
- "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
+ "node_modules/remark-lint-ordered-list-marker-style/node_modules/mdast-util-phrasing": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
+ "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
"dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "devlop": "^1.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/remark-parse/node_modules/micromark-factory-space": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
- "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
+ "@types/mdast": "^4.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-ordered-list-marker-style/node_modules/micromark-util-character": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
+ "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
"dev": true,
"funding": [
{
@@ -5028,14 +4835,14 @@
}
],
"dependencies": {
- "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
"micromark-util-types": "^2.0.0"
}
},
- "node_modules/remark-parse/node_modules/micromark-factory-title": {
+ "node_modules/remark-lint-ordered-list-marker-style/node_modules/micromark-util-symbol": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
- "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
+ "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
"dev": true,
"funding": [
{
@@ -5046,18 +4853,12 @@
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
- ],
- "dependencies": {
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
+ ]
},
- "node_modules/remark-parse/node_modules/micromark-factory-whitespace": {
+ "node_modules/remark-lint-ordered-list-marker-style/node_modules/micromark-util-types": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
- "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
+ "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
"dev": true,
"funding": [
{
@@ -5068,284 +4869,428 @@
"type": "OpenCollective",
"url": "https://opencollective.com/unified"
}
- ],
+ ]
+ },
+ "node_modules/remark-lint-ordered-list-marker-style/node_modules/unified": {
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
+ "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
+ "dev": true,
"dependencies": {
- "micromark-factory-space": "^2.0.0",
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-ordered-list-marker-style/node_modules/unified-lint-rule": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz",
+ "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "trough": "^2.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-ordered-list-marker-style/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-ordered-list-marker-style/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-ordered-list-marker-style/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-ordered-list-marker-style/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-ordered-list-marker-value": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-4.0.0.tgz",
+ "integrity": "sha512-7UjNU2Nv9LGEONTU9GPmTVoNoGKD5aL1X2xHzMbSJiTc50bfcazYqZawO+qj1pQ04WPhto1qHnl0HRB5wwSVwA==",
+ "dev": true,
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-phrasing": "^4.0.0",
"micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit-parents": "^6.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-parse/node_modules/micromark-util-character": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz",
- "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==",
+ "node_modules/remark-lint-ordered-list-marker-value/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
"dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "@types/unist": "*"
}
},
- "node_modules/remark-parse/node_modules/micromark-util-chunked": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
- "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
+ "node_modules/remark-lint-ordered-list-marker-value/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-ordered-list-marker-value/node_modules/unified": {
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
+ "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
"dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "micromark-util-symbol": "^2.0.0"
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-ordered-list-marker-value/node_modules/unified-lint-rule": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz",
+ "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "trough": "^2.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-lint-ordered-list-marker-value/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-ordered-list-marker-value/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-ordered-list-marker-value/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-ordered-list-marker-value/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-prohibited-strings": {
+ "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": "^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",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/remark-parse/node_modules/micromark-util-classify-character": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
- "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
+ "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,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "@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-parse/node_modules/micromark-util-combine-extensions": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
- "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
+ "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,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-parse/node_modules/micromark-util-decode-numeric-character-reference": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.0.tgz",
- "integrity": "sha512-pIgcsGxpHEtTG/rPJRz/HOLSqp5VTuIIjXlPI+6JSDlK2oljApusG6KzpS8AF0ENUMCHlC/IBb5B9xdFiVlm5Q==",
+ "node_modules/remark-lint-unordered-list-marker-style": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-4.0.0.tgz",
+ "integrity": "sha512-XlP4Wr4KJNovyWVv0H5axfUlF23iE9Kt2SxaVq4+ieum5YcMmKE6KsL+aqt3kiJb60SH1u6a0bxKFvdM/9riOA==",
"dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "micromark-util-symbol": "^2.0.0"
+ "@types/mdast": "^4.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "unified-lint-rule": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit-parents": "^6.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-parse/node_modules/micromark-util-decode-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
- "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
+ "node_modules/remark-lint-unordered-list-marker-style/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
"dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "decode-named-character-reference": "^1.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-symbol": "^2.0.0"
+ "@types/unist": "*"
}
},
- "node_modules/remark-parse/node_modules/micromark-util-encode": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
- "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
+ "node_modules/remark-lint-unordered-list-marker-style/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-parse/node_modules/micromark-util-html-tag-name": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
- "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
+ "node_modules/remark-lint-unordered-list-marker-style/node_modules/unified": {
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
+ "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
"dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
},
- "node_modules/remark-parse/node_modules/micromark-util-normalize-identifier": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
- "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
+ "node_modules/remark-lint-unordered-list-marker-style/node_modules/unified-lint-rule": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz",
+ "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==",
"dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "micromark-util-symbol": "^2.0.0"
+ "@types/unist": "^3.0.0",
+ "trough": "^2.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-parse/node_modules/micromark-util-resolve-all": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
- "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
+ "node_modules/remark-lint-unordered-list-marker-style/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,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "micromark-util-types": "^2.0.0"
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-parse/node_modules/micromark-util-sanitize-uri": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
- "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
+ "node_modules/remark-lint-unordered-list-marker-style/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,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-encode": "^2.0.0",
- "micromark-util-symbol": "^2.0.0"
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-parse/node_modules/micromark-util-subtokenize": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz",
- "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==",
+ "node_modules/remark-lint-unordered-list-marker-style/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,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "devlop": "^1.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "@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-parse/node_modules/micromark-util-symbol": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
- "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
+ "node_modules/remark-lint-unordered-list-marker-style/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,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
},
- "node_modules/remark-parse/node_modules/micromark-util-types": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
- "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
+ "node_modules/remark-lint/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
"dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
+ "dependencies": {
+ "@types/unist": "*"
+ }
},
- "node_modules/remark-parse/node_modules/unified": {
- "version": "11.0.3",
- "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz",
- "integrity": "sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==",
+ "node_modules/remark-lint/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/node_modules/unified": {
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz",
+ "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==",
"dev": true,
"dependencies": {
"@types/unist": "^3.0.0",
@@ -5361,7 +5306,7 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-parse/node_modules/unist-util-stringify-position": {
+ "node_modules/remark-lint/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==",
@@ -5374,7 +5319,7 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-parse/node_modules/vfile": {
+ "node_modules/remark-lint/node_modules/vfile": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz",
"integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==",
@@ -5389,7 +5334,7 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-parse/node_modules/vfile-message": {
+ "node_modules/remark-lint/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==",
@@ -5403,177 +5348,111 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-stringify": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
- "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
+ "node_modules/remark-message-control": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-8.0.0.tgz",
+ "integrity": "sha512-brpzOO+jdyE/mLqvqqvbogmhGxKygjpCUCG/PwSCU43+JZQ+RM+sSzkCWBcYvgF3KIAVNIoPsvXjBkzO7EdsYQ==",
"dev": true,
"dependencies": {
"@types/mdast": "^4.0.0",
- "mdast-util-to-markdown": "^2.0.0",
- "unified": "^11.0.0"
+ "mdast-comment-marker": "^3.0.0",
+ "unified-message-control": "^5.0.0",
+ "vfile": "^6.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-stringify/node_modules/@types/mdast": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.0.tgz",
- "integrity": "sha512-YLeG8CujC9adtj/kuDzq1N4tCDYKoZ5l/bnjq8d74+t/3q/tHquJOJKUQXJrLCflOHpKjXgcI/a929gpmLOEng==",
+ "node_modules/remark-message-control/node_modules/@types/mdast": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
+ "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==",
"dev": true,
"dependencies": {
"@types/unist": "*"
}
},
- "node_modules/remark-stringify/node_modules/@types/unist": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz",
- "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==",
+ "node_modules/remark-message-control/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-stringify/node_modules/mdast-util-phrasing": {
+ "node_modules/remark-message-control/node_modules/unist-util-stringify-position": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.0.0.tgz",
- "integrity": "sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==",
+ "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/mdast": "^4.0.0",
- "unist-util-is": "^6.0.0"
+ "@types/unist": "^3.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-stringify/node_modules/mdast-util-to-markdown": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz",
- "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==",
+ "node_modules/remark-message-control/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/mdast": "^4.0.0",
"@types/unist": "^3.0.0",
- "longest-streak": "^3.0.0",
- "mdast-util-phrasing": "^4.0.0",
- "mdast-util-to-string": "^4.0.0",
- "micromark-util-decode-string": "^2.0.0",
- "unist-util-visit": "^5.0.0",
- "zwitch": "^2.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-stringify/node_modules/mdast-util-to-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
- "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+ "node_modules/remark-message-control/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/mdast": "^4.0.0"
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-stringify/node_modules/micromark-util-character": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz",
- "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/remark-stringify/node_modules/micromark-util-decode-numeric-character-reference": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.0.tgz",
- "integrity": "sha512-pIgcsGxpHEtTG/rPJRz/HOLSqp5VTuIIjXlPI+6JSDlK2oljApusG6KzpS8AF0ENUMCHlC/IBb5B9xdFiVlm5Q==",
+ "node_modules/remark-parse": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
+ "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
"dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "micromark-util-symbol": "^2.0.0"
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-stringify/node_modules/micromark-util-decode-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
- "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
+ "node_modules/remark-parse/node_modules/@types/mdast": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.0.tgz",
+ "integrity": "sha512-YLeG8CujC9adtj/kuDzq1N4tCDYKoZ5l/bnjq8d74+t/3q/tHquJOJKUQXJrLCflOHpKjXgcI/a929gpmLOEng==",
"dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
"dependencies": {
- "decode-named-character-reference": "^1.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-symbol": "^2.0.0"
+ "@types/unist": "*"
}
},
- "node_modules/remark-stringify/node_modules/micromark-util-symbol": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
- "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/remark-stringify/node_modules/micromark-util-types": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
- "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
+ "node_modules/remark-parse/node_modules/@types/unist": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz",
+ "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==",
+ "dev": true
},
- "node_modules/remark-stringify/node_modules/unified": {
+ "node_modules/remark-parse/node_modules/unified": {
"version": "11.0.3",
"resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz",
"integrity": "sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==",
@@ -5592,10 +5471,10 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-stringify/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==",
+ "node_modules/remark-parse/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"
@@ -5605,42 +5484,91 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-stringify/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==",
+ "node_modules/remark-parse/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"
+ "@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-stringify/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==",
+ "node_modules/remark-parse/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-is": "^6.0.0",
- "unist-util-visit-parents": "^6.0.0"
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-stringify": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
+ "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
+ "dev": true,
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-stringify/node_modules/@types/mdast": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.0.tgz",
+ "integrity": "sha512-YLeG8CujC9adtj/kuDzq1N4tCDYKoZ5l/bnjq8d74+t/3q/tHquJOJKUQXJrLCflOHpKjXgcI/a929gpmLOEng==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/remark-stringify/node_modules/@types/unist": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz",
+ "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==",
+ "dev": true
+ },
+ "node_modules/remark-stringify/node_modules/unified": {
+ "version": "11.0.3",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz",
+ "integrity": "sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-stringify/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==",
+ "node_modules/remark-stringify/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",
- "unist-util-is": "^6.0.0"
+ "@types/unist": "^3.0.0"
},
"funding": {
"type": "opencollective",
@@ -5799,18 +5727,6 @@
"rimraf": "bin.js"
}
},
- "node_modules/sade": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
- "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
- "dev": true,
- "dependencies": {
- "mri": "^1.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -5890,6 +5806,16 @@
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/spdx-correct": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
@@ -5966,6 +5892,30 @@
"node": ">=8"
}
},
+ "node_modules/stringify-entities": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "dev": true,
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/stringify-entities/node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -6530,17 +6480,38 @@
}
},
"node_modules/unified-message-control": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-5.0.0.tgz",
+ "integrity": "sha512-B2cSAkpuMVVmPP90KCfKdBhm1e9KYJ+zK3x5BCa0N65zpq1Ybkc9C77+M5qwR8FWO7RF3LM5QRRPZtgjW6DUCw==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "devlop": "^1.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0",
+ "vfile-location": "^5.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unified-message-control/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/unified-message-control/node_modules/unist-util-stringify-position": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-4.0.0.tgz",
- "integrity": "sha512-1b92N+VkPHftOsvXNOtkJm4wHlr+UDmTBF2dUzepn40oy9NxanJ9xS1RwUBTjXJwqr2K0kMbEyv1Krdsho7+Iw==",
+ "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": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit": "^3.0.0",
- "vfile": "^5.0.0",
- "vfile-location": "^4.0.0",
- "vfile-message": "^3.0.0"
+ "@types/unist": "^3.0.0"
},
"funding": {
"type": "opencollective",
@@ -6548,14 +6519,14 @@
}
},
"node_modules/unified-message-control/node_modules/unist-util-visit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz",
- "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==",
+ "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": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^4.0.0"
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
},
"funding": {
"type": "opencollective",
@@ -6563,13 +6534,42 @@
}
},
"node_modules/unified-message-control/node_modules/unist-util-visit-parents": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz",
- "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==",
+ "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": "^2.0.0",
- "unist-util-is": "^5.0.0"
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unified-message-control/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/unified-message-control/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",
@@ -6605,16 +6605,6 @@
"integrity": "sha512-nFT3frbsvTa9rrc71FJApPqXF8oIhVHbX3IWgObQi1mF7WrW48Ys70daL7o4evZUtmUf6Qn6WK0LbHhyO0hpXw==",
"dev": true
},
- "node_modules/unist-util-generated": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz",
- "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"node_modules/unist-util-inspect": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-8.0.0.tgz",
@@ -6635,53 +6625,99 @@
"dev": true
},
"node_modules/unist-util-is": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
- "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
+ "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": "^2.0.0"
+ "@types/unist": "^3.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/unist-util-is/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/unist-util-position": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz",
- "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==",
+ "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": "^2.0.0"
+ "@types/unist": "^3.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/unist-util-stringify-position": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
- "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
+ "node_modules/unist-util-position/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/unist-util-remove-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
+ "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==",
"dev": true,
"dependencies": {
- "@types/unist": "^2.0.0"
+ "@types/unist": "^3.0.0",
+ "unist-util-visit": "^5.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/unist-util-visit": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
- "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
+ "node_modules/unist-util-remove-position/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/unist-util-remove-position/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": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^5.1.1"
+ "@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/unist-util-remove-position/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/unist-util-stringify-position": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
+ "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "^2.0.0"
},
"funding": {
"type": "opencollective",
@@ -6712,20 +6748,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/unist-util-visit/node_modules/unist-util-visit-parents": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
- "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -6741,24 +6763,6 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
- "node_modules/uvu": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz",
- "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==",
- "dev": true,
- "dependencies": {
- "dequal": "^2.0.0",
- "diff": "^5.0.0",
- "kleur": "^4.0.3",
- "sade": "^1.7.3"
- },
- "bin": {
- "uvu": "bin.js"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
@@ -6786,13 +6790,61 @@
}
},
"node_modules/vfile-location": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz",
- "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==",
+ "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": "^2.0.0",
- "vfile": "^5.0.0"
+ "@types/unist": "^3.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-location/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/vfile-location/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/vfile-location/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/vfile-location/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",
diff --git a/package.json b/package.json
index c5b33b5a2c04..4cac7d5fe95a 100644
--- a/package.json
+++ b/package.json
@@ -5,15 +5,15 @@
"devDependencies": {
"remark-cli": "^12.0.0",
"remark-frontmatter": "^5.0.0",
- "remark-lint": "^9.1.2",
- "remark-lint-fenced-code-flag": "^3.1.2",
- "remark-lint-heading-increment": "^3.1.2",
- "remark-lint-heading-style": "^3.1.2",
- "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": "^10.0.0",
+ "remark-lint-fenced-code-flag": "^4.0.0",
+ "remark-lint-heading-increment": "^4.0.0",
+ "remark-lint-heading-style": "^4.0.0",
+ "remark-lint-no-shell-dollars": "^4.0.0",
+ "remark-lint-ordered-list-marker-style": "^4.0.0",
+ "remark-lint-ordered-list-marker-value": "^4.0.0",
"remark-lint-prohibited-strings": "^4.0.0",
- "remark-lint-unordered-list-marker-style": "^3.1.2",
+ "remark-lint-unordered-list-marker-style": "^4.0.0",
"remark-stringify": "^11.0.0",
"textlint": "^14.0.4",
"textlint-filter-rule-comments": "^1.2.2",
diff --git a/plugins/configuration.rb b/plugins/configuration.rb
index 8d403b8c446d..dcf2158cee32 100644
--- a/plugins/configuration.rb
+++ b/plugins/configuration.rb
@@ -2,9 +2,9 @@ module Jekyll
class ConfigurationBlock < Liquid::Block
TYPE_LINKS = {
'action' => '/docs/scripts/',
- 'device_class' => '/docs/configuration/customizing-devices/#device-class',
+ 'device_class' => '/integrations/homeassistant/#device-class',
'template' => '/docs/configuration/templating/',
- 'icon' => '/docs/configuration/customizing-devices/#icon',
+ 'icon' => '/integrations/homeassistant/#icon',
'selector' => '/docs/blueprint/selectors/',
}
diff --git a/plugins/terminology_tooltip.rb b/plugins/terminology_tooltip.rb
index b70b5e33075b..391cda1cf37f 100644
--- a/plugins/terminology_tooltip.rb
+++ b/plugins/terminology_tooltip.rb
@@ -20,6 +20,7 @@ def initialize(tag_name, args, tokens)
end
def render(context)
+ @term.gsub!(/\"/, "")
entries = context.registers[:site].data["glossary"].select do |entry|
entry.key?("term") and (@term.casecmp(entry["term"]).zero? or (entry.key?("aliases") and entry["aliases"].any?{ |s| s.casecmp(@term)==0 }))
end
diff --git a/source/_dashboards/alarm-panel.markdown b/source/_dashboards/alarm-panel.markdown
index 3ef81b0f4065..6fc60fdb02aa 100644
--- a/source/_dashboards/alarm-panel.markdown
+++ b/source/_dashboards/alarm-panel.markdown
@@ -3,6 +3,11 @@ type: card
title: "Alarm panel card"
sidebar_label: Alarm panel
description: "The alarm panel card allows you to arm and disarm your alarm control panel integrations."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The alarm panel card allows you to arm and disarm your [alarm control panel](/integrations/#alarm) {% term integrations %}.
@@ -81,8 +86,3 @@ 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 df4a38b81d6f..be21b487ee8f 100644
--- a/source/_dashboards/area.markdown
+++ b/source/_dashboards/area.markdown
@@ -3,6 +3,11 @@ type: card
title: "Area card"
sidebar_label: Area
description: "The area card gives control of your entities in a specified area."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The area card lets you control and monitor an individual {% term area %}.
@@ -86,8 +91,3 @@ 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 e54540751b42..c7eed878e8cf 100644
--- a/source/_dashboards/button.markdown
+++ b/source/_dashboards/button.markdown
@@ -3,6 +3,15 @@ type: card
title: "Button card"
sidebar_label: Button
description: "The Button card allows you to add buttons to perform tasks."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /docs/scripts/
+ title: Scripts
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The button card allows you to add buttons to perform tasks.
@@ -136,10 +145,3 @@ tap_action:
Screenshot of the button card with script service.
-
-## Related topics
-
-- [Card actions](/dashboards/actions/)
-- [Scripts](/docs/scripts/)
-- [Themes](/integrations/frontend/)
-- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/calendar.markdown b/source/_dashboards/calendar.markdown
index 3705e87e1203..940a45c7fe69 100644
--- a/source/_dashboards/calendar.markdown
+++ b/source/_dashboards/calendar.markdown
@@ -3,6 +3,11 @@ type: card
title: "Calendar card"
sidebar_label: Calendar
description: "The calendar card displays your calendar entities in a month, day and list view"
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The calendar card displays your [calendar](/integrations/#calendar) {% term entities %} in a month, day, and list view (7 days).
@@ -52,8 +57,3 @@ 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 3cf505e9a5e4..ead8ea37a11b 100644
--- a/source/_dashboards/conditional.markdown
+++ b/source/_dashboards/conditional.markdown
@@ -3,6 +3,9 @@ type: card
title: Conditional card
sidebar_label: Conditional
description: The Conditional card displays another card based on conditions.
+related:
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The conditional card displays another card based on conditions.
@@ -25,7 +28,7 @@ type:
type: string
conditions:
required: true
- description: List of conditions to check. See [available conditions](/dashboards/conditional/#card-conditions).
+ description: List of conditions to check. See [available conditions](#conditions-options).
type: list
card:
required: true
@@ -79,24 +82,24 @@ card:
- binary_sensor.rookmelder
```
-## Card conditions
+## Conditions options
### State
+Tests if an entity has a specified state.
+
```yaml
-condition: "state"
+condition: state
entity: climate.thermostat
state: heat
```
```yaml
-condition: "state"
+condition: state
entity: climate.thermostat
state_not: "off"
```
-Tests if an entity has a specified state.
-
{% configuration %}
condition:
required: true
@@ -108,11 +111,11 @@ entity:
type: string
state:
required: false
- description: Entity state is equal to this value. Can contain an array of states.*
+ description: Entity state or ID to be equal to this value. Can contain an array of states.*
type: [list, string]
state_not:
required: false
- description: Entity state is unequal to this value. Can contain an array of states.*
+ description: Entity state or ID to not be equal to this value. Can contain an array of states.*
type: [list, string]
{% endconfiguration %}
@@ -123,7 +126,7 @@ state_not:
Tests if an entity state matches the thresholds.
```yaml
-condition: "numeric_state"
+condition: numeric_state
entity: sensor.outside_temperature
above: 10
below: 20
@@ -140,15 +143,15 @@ entity:
type: string
above:
required: false
- description: Entity state is above this value.*
+ description: Entity state or ID to be above this value.*
type: string
below:
required: false
- description: Entity state is below to this value.*
+ description: Entity state or ID to be below this value.*
type: string
{% endconfiguration %}
-*at least one is required (`above` or `below`)
+*at least one is required (`above` or `below`), both are also possible for values between.
### Screen
@@ -175,7 +178,7 @@ media_query:
Specify the visibility of the card per user.
```yaml
-condition: "user"
+condition: user
users:
- 581fca7fdc014b8b894519cc531f9a04
```
@@ -191,6 +194,54 @@ users:
type: list
{% endconfiguration %}
-## Related topics
+### And
+
+Specify that both conditions must be met.
+
+```yaml
+condition: and
+conditions:
+ - condition: numeric_state
+ above: 0
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration %}
+condition:
+ required: true
+ description: "`and`"
+ type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).
+ type: list
+{% endconfiguration %}
+
+### Or
+
+Specify that at least one of the conditions must be met.
+
+```yaml
+condition: or
+conditions:
+ - condition: numeric_state
+ above: 0
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration %}
+condition:
+ required: true
+ description: "`or`"
+ type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).
+ type: list
+{% endconfiguration %}
+
-- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/energy.markdown b/source/_dashboards/energy.markdown
index f09f2a4fa3bd..d0101d4d697d 100644
--- a/source/_dashboards/energy.markdown
+++ b/source/_dashboards/energy.markdown
@@ -3,6 +3,11 @@ type: card
title: "Energy cards"
sidebar_label: Energy cards
description: "An overview of the energy cards that are available."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
This is a list of all the cards used in the energy dashboard. You can also place them anywhere you want in your dashboard.
@@ -229,8 +234,3 @@ The following example limits the number of shown devices to 5:
type: energy-devices-detail-graph
max_devices: 5
```
-
-## Related topics
-
-- [Themes](/integrations/frontend/)
-- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/entities.markdown b/source/_dashboards/entities.markdown
index 9710311a5915..98cc7056db55 100644
--- a/source/_dashboards/entities.markdown
+++ b/source/_dashboards/entities.markdown
@@ -3,6 +3,13 @@ type: card
title: "Entities card"
sidebar_label: Entities
description: "The entities card is the most common type of card. It groups items together into lists."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /dashboards/header-footer/
+ title: Card header and footer
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The entities card is the most common type of card. It groups items together into lists. It can be used to display an entity's state or attribute, but also contain buttons, web links, etc.
@@ -456,9 +463,3 @@ entities:
text: Are you sure you want to restart?
service: script.libreelec_power_cycle
```
-
-## Related topics
-
-- [Card actions](/dashboards/actions/)
-- [Card header and footer](/dashboards/header-footer/)
-- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/entity-filter.markdown b/source/_dashboards/entity-filter.markdown
index 201e7067261d..64b575458292 100644
--- a/source/_dashboards/entity-filter.markdown
+++ b/source/_dashboards/entity-filter.markdown
@@ -29,9 +29,13 @@ entities:
required: true
description: A list of entity IDs or `entity` objects, see below.
type: list
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).*
+ type: list
state_filter:
- required: true
- description: List of strings representing states or `filter` objects, see below.
+ required: false
+ description: (legacy) List of strings representing states or filters to check. See [available legacy filters](#legacy-state-filters).*
type: list
card:
required: false
@@ -45,6 +49,8 @@ show_empty:
default: true
{% endconfiguration %}
+*one is required (`conditions` or `state_filter`)
+
### Options for entities
If you define entities as objects instead of strings (by adding `entity:` before entity ID), you can add more customization and configurations:
@@ -64,8 +70,9 @@ name:
type: string
icon:
required: false
- description: Overwrites icon or entity picture.
+ description: Overwrites icon or entity picture. You can use any icon from [Material Design Icons](https://pictogrammers.com/library/mdi/). Prefix the icon name with `mdi:`, ie `mdi:home`.
type: string
+ default: Entity domain icon
secondary_info:
required: false
description: "Show additional info. Values: `entity-id`, `last-changed`."
@@ -74,32 +81,225 @@ format:
required: false
description: "How the state should be formatted. Currently only used for timestamp sensors. Valid values are: `relative`, `total`, `date`, `time` and `datetime`."
type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).*
+ type: list
state_filter:
required: false
- description: List of strings representing states or `filter` objects, see below.
+ description: (legacy) List of strings representing states or filters to check. See [available legacy filters](#legacy-state-filters).*
type: list
{% endconfiguration %}
-### Options for state filter
+*only one filter will be applied: `conditions` or `state_filter` if `conditions` is not present
-If you define `state_filter` as objects instead of strings (by adding `value:` before your state value), you can add more customization to your filter:
+## Conditions options
-{% configuration %}
-value:
+You can specify multiple `conditions`, in which case the entity will be displayed if it matches any condition.
+
+### State
+
+Tests if an entity has a specified state.
+
+```yaml
+type: entity-filter
+entities:
+ - climate.thermostat_living_room
+ - climate.thermostat_bed_room
+conditions:
+ - condition: state
+ state: heat
+```
+
+```yaml
+type: entity-filter
+entities:
+ - climate.thermostat_living_room
+ - climate.thermostat_bed_room
+conditions:
+ - condition: state
+ state_not: "off"
+```
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.gas_station_1
+ - sensor.gas_station_2
+ - sensor.gas_station_3
+conditions:
+ - condition: state
+ state: sensor.gas_station_lowest_price
+```
+
+{% configuration condition_state %}
+condition:
required: true
- description: String representing the state.
+ description: "`state`"
type: string
-operator:
+state:
required: false
- description: Operator to use in the comparison. Can be `==`, `<=`, `<`, `>=`, `>`, `!=`, `in`, `not in`, or `regex`.
+ description: Entity state or ID to be equal to this value. Can contain an array of states.*
+ type: [list, string]
+state_not:
+ required: false
+ description: Entity state or ID to not be equal to this value. Can contain an array of states.*
+ type: [list, string]
+{% endconfiguration %}
+
+*one is required (`state` or `state_not`)
+
+### Numeric state
+
+Tests if an entity state matches the thresholds.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: numeric_state
+ above: 10
+ below: 20
+```
+
+{% configuration condition_numeric_state %}
+condition:
+ required: true
+ description: "`numeric_state`"
type: string
-attribute:
+above:
required: false
- description: Attribute of the entity to use instead of the state.
+ description: Entity state or ID to be above this value.*
+ type: string
+below:
+ required: false
+ description: Entity state or ID to be below this value.*
+ type: string
+{% endconfiguration %}
+
+*at least one is required (`above` or `below`), both are also possible for values between.
+
+### Screen
+
+Specify the visibility of the entity per screen size. Some screen size presets are available in the UI but you can use any CSS media query you want in YAML.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: screen
+ media_query: "(min-width: 1280px)"
+```
+
+{% configuration condition_screen %}
+condition:
+ required: true
+ description: "`screen`"
+ type: string
+media_query:
+ required: true
+ description: Media query to check which screen size are allowed to display the entity.
+ type: string
+{% endconfiguration %}
+
+### User
+
+Specify the visibility of the entity per user.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration condition_user %}
+condition:
+ required: true
+ description: "`user`"
+ type: string
+users:
+ required: true
+ description: User ID that can see the entity (unique hex value found on the Users configuration page).
+ type: list
+{% endconfiguration %}
+
+### And
+
+Specify that both conditions must be met.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: and
+ conditions:
+ - condition: numeric_state
+ above: 0
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration condition_and %}
+condition:
+ required: true
+ description: "`and`"
+ type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).
+ type: list
+{% endconfiguration %}
+
+### Or
+
+Specify that at least one of the conditions must be met.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: or
+ conditions:
+ - condition: numeric_state
+ above: 0
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration condition_or %}
+condition:
+ required: true
+ description: "`or`"
type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).
+ type: list
{% endconfiguration %}
-## Examples
+## Legacy state filters
+
+### String filter
Show only active switches or lights in the house.
@@ -134,7 +334,32 @@ card:
Entity filter combined with glance card.
-You can also specify multiple `state_filter` conditions, in which case the entity will be displayed if it matches any condition. This example will display everyone who is at home or at work.
+You can also specify multiple `state_filter` conditions, in which case the entity will be displayed if it matches any condition.
+
+If you define `state_filter` as objects instead of strings, you can add more customization to your filter, as described below.
+
+### Operator filter
+
+Tests if an entity state correspond to the applied `operator`.
+
+{% configuration condition_operator %}
+value:
+ required: true
+ description: String representing the state.
+ type: string
+operator:
+ required: true
+ description: Operator to use in the comparison. Can be `==`, `<=`, `<`, `>=`, `>`, `!=`, `in`, `not in`, or `regex`.
+ type: string
+attribute:
+ required: false
+ description: Attribute of the entity to use instead of the state.
+ type: string
+{% endconfiguration %}
+
+#### Examples
+
+Displays everyone who is at home or at work.
```yaml
type: entity-filter
@@ -146,7 +371,7 @@ state_filter:
- operator: "=="
value: home
- operator: "=="
- value: work
+ value: work
card:
type: glance
title: Who's at work or home
@@ -173,19 +398,19 @@ entities:
Use a regex filter against entity attributes. This regex filter below looks for expressions that are 1 digit in length and where the number is between 0-7 (so show holidays today or in the next 7 days) and displays those holidays as entities in the Entity Filter card.
```yaml
- - type: entity-filter
- card:
- title: "Upcoming Holidays In Next 7 Days"
- show_header_toggle: false
- state_filter:
- - operator: regex
- value: "^([0-7]{1})$"
- attribute: eta
- entities:
- - entity: sensor.upcoming_ical_holidays_0
- - entity: sensor.upcoming_ical_holidays_1
- - entity: sensor.upcoming_ical_holidays_2
- - entity: sensor.upcoming_ical_holidays_3
- - entity: sensor.upcoming_ical_holidays_4
- show_empty: false
+type: entity-filter
+card:
+ title: "Upcoming Holidays In Next 7 Days"
+ show_header_toggle: false
+state_filter:
+ - operator: regex
+ value: "^([0-7]{1})$"
+ attribute: eta
+entities:
+ - entity: sensor.upcoming_ical_holidays_0
+ - entity: sensor.upcoming_ical_holidays_1
+ - entity: sensor.upcoming_ical_holidays_2
+ - entity: sensor.upcoming_ical_holidays_3
+ - entity: sensor.upcoming_ical_holidays_4
+show_empty: false
```
diff --git a/source/_dashboards/entity.markdown b/source/_dashboards/entity.markdown
index 4fabc9180938..12e77a61dacb 100644
--- a/source/_dashboards/entity.markdown
+++ b/source/_dashboards/entity.markdown
@@ -3,6 +3,13 @@ type: card
title: "Entity card"
sidebar_label: Entity
description: "The entity card gives you a quick overview of your entity's state"
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/header-footer/
+ title: Card header and footer
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The entity card gives you a quick overview of your entity's state.
@@ -78,9 +85,3 @@ footer:
attribute: battery_level
unit: "%"
```
-
-## Related topics
-
-- [Card header and footer](/dashboards/header-footer/)
-- [Themes](/integrations/frontend/)
-- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/gauge.markdown b/source/_dashboards/gauge.markdown
index 6bacac009d5c..8ede3f1de0a6 100644
--- a/source/_dashboards/gauge.markdown
+++ b/source/_dashboards/gauge.markdown
@@ -3,6 +3,11 @@ type: card
title: "Gauge card"
sidebar_label: Gauge
description: "The gauge card is a basic card that allows visually seeing sensor data."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The gauge card is a basic card that allows visually seeing sensor data.
@@ -181,9 +186,3 @@ segments:
- from: 65
color: var(--error-color)
```
-
-
-## Related topics
-
-- [Themes](/integrations/frontend/)
-- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/glance.markdown b/source/_dashboards/glance.markdown
index 10c5b911e7c6..bdf2f0aa8c0d 100644
--- a/source/_dashboards/glance.markdown
+++ b/source/_dashboards/glance.markdown
@@ -3,6 +3,13 @@ type: card
title: "Glance card"
sidebar_label: Glance
description: "The glance card is useful to group multiple sensors in a compact overview."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The glance card is useful to group multiple sensors in a compact overview. Keep in mind that this can be used together with [entity-filter](/dashboards/entity-filter/) cards to create dynamic cards.
@@ -157,9 +164,3 @@ entities:
tap_action:
action: toggle
```
-
-## Related topics
-
-- [Card actions](/dashboards/actions/)
-- [Themes](/integrations/frontend/)
-- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/grid.markdown b/source/_dashboards/grid.markdown
index b5a6229730bc..706f93d0a13b 100644
--- a/source/_dashboards/grid.markdown
+++ b/source/_dashboards/grid.markdown
@@ -3,6 +3,11 @@ type: card
title: "Grid card"
sidebar_label: Grid
description: "The grid card allows you to show multiple cards in a grid."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The grid card allows you to show multiple cards in a grid. It will first fill the columns, automatically adding new rows as needed.
@@ -80,8 +85,3 @@ cards:
entity: light.bed_light
image: /local/bed_2.png
```
-
-## Related topics
-
-- [Themes](/integrations/frontend/)
-- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/history-graph.markdown b/source/_dashboards/history-graph.markdown
index df079a0d80b2..1ab062ad1386 100644
--- a/source/_dashboards/history-graph.markdown
+++ b/source/_dashboards/history-graph.markdown
@@ -3,6 +3,11 @@ type: card
title: "History graph card"
sidebar_label: History graph
description: "The history graph card allows you to display a graph for each of the entities listed."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The history graph card allows you to display a graph for each of up to eight entities.
@@ -107,8 +112,3 @@ entities:
- entity: sensor.attic_temperature
name: "Attic"
```
-
-## Related topics
-
-- [Themes](/integrations/frontend/)
-- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/horizontal-stack.markdown b/source/_dashboards/horizontal-stack.markdown
index eddc32f69d24..ed211f7782db 100644
--- a/source/_dashboards/horizontal-stack.markdown
+++ b/source/_dashboards/horizontal-stack.markdown
@@ -3,6 +3,9 @@ type: card
title: "Horizontal stack card"
sidebar_label: Horizontal stack
description: "The horizontal stack card allows you to stack together multiple cards, so they always sit next to each other in the space of one column."
+related:
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The horizontal stack card allows you to stack together multiple cards, so they always sit next to each other in the space of one column.
@@ -46,7 +49,3 @@ cards:
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 93b721febf93..759f74b357e1 100644
--- a/source/_dashboards/humidifier.markdown
+++ b/source/_dashboards/humidifier.markdown
@@ -3,6 +3,11 @@ type: card
title: "Humidifier card"
sidebar_label: Humidifier
description: "The humidifier card gives control of your humidifier entity, allowing you to change the target humidity and mode of the entity."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The humidifier card lets you control and monitor humidifiers, dehumidifiers, and hygrostat devices.
@@ -57,7 +62,3 @@ 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 d8a544e80b67..cec7c97b2e5d 100644
--- a/source/_dashboards/iframe.markdown
+++ b/source/_dashboards/iframe.markdown
@@ -3,10 +3,17 @@ type: card
title: "Webpage card"
sidebar_label: Webpage
description: "The webpage card allows you to embed your favorite webpage right into Home Assistant."
+related:
+ - docs: /dashboards/dashboards/#webpage-dashboard
+ title: Webpage dashboard
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The webpage card allows you to embed your favorite webpage right into Home Assistant. You can also embed files stored in your `/www` folder and reference them using `/local/`.
+The webpage card is used on the [Webpage dashboard](/dashboards/dashboards/#webpage-dashboard).
+
Windy weather radar as webpage.
@@ -16,6 +23,7 @@ The webpage card allows you to embed your favorite webpage right into Home Assis
All options for this card can be configured via the user interface.
+Note that not every webpage can be embedded due to security restrictions that some sites have in place. These restrictions are enforced by your browser and prevent embedding them into a Home Assistant dashboard.
You can't embed sites using HTTP if you are using HTTPS for your Home Assistant.
@@ -56,7 +64,3 @@ 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 7023f9def8d6..006bb3ccc827 100644
--- a/source/_dashboards/light.markdown
+++ b/source/_dashboards/light.markdown
@@ -3,6 +3,13 @@ type: card
title: "Light card"
sidebar_label: Light
description: "The light card allows you to change the brightness of the light."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The light card allows you to change the brightness of the light.
@@ -80,9 +87,3 @@ name: My Office
Screenshot of the Light card names.
-
-## Related topics
-
-- [Card actions](/dashboards/actions/)
-- [Themes](/integrations/frontend/)
-- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/logbook.markdown b/source/_dashboards/logbook.markdown
index 2ae88343fac7..8f86938ebd3a 100644
--- a/source/_dashboards/logbook.markdown
+++ b/source/_dashboards/logbook.markdown
@@ -3,6 +3,11 @@ type: card
title: "Logbook card"
sidebar_label: Logbook
description: "The logbook card displays entries from the logbook for specific entities."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The logbook card displays entries from the logbook for specific entities.
@@ -65,8 +70,3 @@ 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 9370e83431f9..dbb024b29799 100644
--- a/source/_dashboards/map.markdown
+++ b/source/_dashboards/map.markdown
@@ -3,9 +3,16 @@ type: card
title: "Map card"
sidebar_label: Map
description: "The map card that allows you to display entities on a map"
+related:
+ - docs: /dashboards/dashboards/#map-dashboard
+ title: Map dashboard
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
-The map card that allows you to display entities on a map
+The map card that allows you to display entities on a map. This card is used on the [Map dashboard](/dashboards/dashboards/#map-dashboard), which is one of the default dashboards.
@@ -134,8 +141,3 @@ 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 bcac319e7c95..d6145a082b24 100644
--- a/source/_dashboards/markdown.markdown
+++ b/source/_dashboards/markdown.markdown
@@ -3,6 +3,11 @@ type: card
title: "Markdown card"
sidebar_label: Markdown
description: "The Markdown card is used to render Markdown"
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The Markdown card is used to render [Markdown](https://commonmark.org/help/).
@@ -140,8 +145,3 @@ 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/masonry.markdown b/source/_dashboards/masonry.markdown
index 53e8d7c065da..6bbf31ccef2f 100644
--- a/source/_dashboards/masonry.markdown
+++ b/source/_dashboards/masonry.markdown
@@ -3,6 +3,11 @@ type: view
title: Masonry view
sidebar_label: Masonry (default)
description: "The default panel layout uses a masonry algorithm."
+related:
+ - docs: /dashboards/panel/
+ title: Panel view
+ - docs: /dashboards/sidebar/
+ title: Sidebar view
---
The masonry view is the default view type.
@@ -27,8 +32,3 @@ type:
description: "`masonry`"
type: string
{% endconfiguration %}
-
-## Related topics
-
-- [Panel view](/dashboards/panel/)
-- [Sidebar view](/dashboards/sidebar/)
\ No newline at end of file
diff --git a/source/_dashboards/media-control.markdown b/source/_dashboards/media-control.markdown
index 0d4958f7e8a1..cc620cf0cc74 100644
--- a/source/_dashboards/media-control.markdown
+++ b/source/_dashboards/media-control.markdown
@@ -3,6 +3,11 @@ type: card
title: "Media control card"
sidebar_label: Media control
description: "The media control card is used to display media player entities on an interface with easy to use controls."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The media control card is used to display [media player](/integrations/#media-player) entities on an interface with easy to use controls.
@@ -46,8 +51,3 @@ 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/panel.markdown b/source/_dashboards/panel.markdown
index c4a2869e2a9a..5b98a4490169 100644
--- a/source/_dashboards/panel.markdown
+++ b/source/_dashboards/panel.markdown
@@ -3,6 +3,11 @@ type: view
title: Panel view
sidebar_label: Panel
description: "The panel view shows a single card in the full width of the screen."
+related:
+ - docs: /dashboards/masonry/
+ title: Masonry view
+ - docs: /dashboards/sidebar/
+ title: Sidebar view
---
The panel view must have exactly one card. This card is rendered full-width.
@@ -22,8 +27,3 @@ type:
description: "`panel`"
type: string
{% endconfiguration %}
-
-## Related topics
-
-- [Masonry view](/dashboards/masonry/)
-- [Sidebar view](/dashboards/sidebar/)
\ No newline at end of file
diff --git a/source/_dashboards/picture-elements.markdown b/source/_dashboards/picture-elements.markdown
index aa6433d9f6d8..cdfacbf3b588 100644
--- a/source/_dashboards/picture-elements.markdown
+++ b/source/_dashboards/picture-elements.markdown
@@ -3,6 +3,13 @@ type: card
title: "Picture elements card"
sidebar_label: Picture elements
description: "The picture elements card is one of the most versatile types of cards. The cards allow you to position icons or text and even services! On an image based on coordinates."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The picture elements card is one of the most versatile types of cards.
@@ -573,9 +580,3 @@ 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 928fa7912f1e..f17191e174b5 100644
--- a/source/_dashboards/picture-entity.markdown
+++ b/source/_dashboards/picture-entity.markdown
@@ -3,6 +3,13 @@ type: card
title: Picture entity card
sidebar_label: Picture entity
description: The picture entity card displays an entity in the form of an image. Instead of images from URL, it can also show the picture of camera entities.
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The picture entity card displays an entity in the form of an image. Instead of images from URL, it can also show the picture of `camera` entities.
@@ -137,10 +144,5 @@ 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/)).
+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](/integrations/homeassistant/#allowlist_external_dirs)).
-## 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 de065a649412..5f591567008a 100644
--- a/source/_dashboards/picture-glance.markdown
+++ b/source/_dashboards/picture-glance.markdown
@@ -3,6 +3,13 @@ type: card
title: "Picture glance card"
sidebar_label: Picture glance
description: "The picture glance card shows an image and corresponding entity states as an icon. The entities on the right side allow toggle actions, others show the more information dialog."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The picture glance card shows an image and lets you place small icons of entity states on top of that card to control those entities from there. In the image below: the entities on the right allow toggle actions, the others show the more information dialog.
@@ -267,9 +274,3 @@ 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 1ee6176e1917..bc9827e14f9d 100644
--- a/source/_dashboards/picture.markdown
+++ b/source/_dashboards/picture.markdown
@@ -3,6 +3,13 @@ type: 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."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
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,9 +81,3 @@ 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 439f04260dfd..a989dc0ee500 100644
--- a/source/_dashboards/plant-status.markdown
+++ b/source/_dashboards/plant-status.markdown
@@ -3,6 +3,11 @@ type: card
title: "Plant status card"
sidebar_label: Plant status
description: "The plant status card is for all the lovely botanists out there."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The plant status card is for all the lovely botanists out there.
@@ -48,8 +53,3 @@ 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 46b77fdf735d..5385e47645b1 100644
--- a/source/_dashboards/sections.markdown
+++ b/source/_dashboards/sections.markdown
@@ -3,6 +3,20 @@ type: view
title: Sections (experimental)
sidebar_label: Sections (experimental)
description: "Lets you organize your cards in sections on a grid."
+description: "The panel view shows a single card in the full width of the screen."
+related:
+ - docs: /dashboards/masonry/
+ title: Masonry view
+ - docs: /dashboards/sidebar/
+ title: Sidebar view
+ - docs: /dashboards/panel/
+ title: Panel view
+ - docs: /blog/2024/03/04/dashboard-chapter-1/
+ title: Dashboard chapter 1 blog post
+ - docs: /dashboards/cards/#adding-cards-to-your-dashboard
+ title: Adding cards to a view
+ - docs: /dashboards/views/#adding-a-view-to-a-dashboard
+ title: Adding a new view
---
The sections view lets you organize your cards in sections on a grid.
@@ -21,15 +35,16 @@ You can group cards without using horizontal or vertical stack cards.
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.
+3. Select the number of columns you want to see in the new view. Select **Save**.
+4. To add a card, select the **Add card** button.
- Follow the [steps on adding cards](/dashboards/cards/#adding-cards-to-your-dashboard).
![Add Section button](/images/dashboards/sections_view_add-card-or-section.png)
-4. To add a section, select the **Create section** button.
-5. To edit the section title, select the
button.
+5. To add a section, select the **Create section** button.
+6. To edit the section title, select the
button.
- If you leave the section title empty, this line will be hidden.
-6. To delete a section, select the
button.
+7. To delete a section, select the
button.
## Rearranging sections and cards
@@ -68,12 +83,3 @@ type:
description: "`sections`"
type: string
{% endconfiguration %}
-
-## Related topics
-
-- [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 c4196828d7e8..ae181701ce75 100644
--- a/source/_dashboards/sensor.markdown
+++ b/source/_dashboards/sensor.markdown
@@ -3,6 +3,11 @@ type: card
title: "Sensor card"
sidebar_label: Sensor
description: "The sensor card gives you a quick overview of your sensors state with an optional graph to visualize change over time."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The sensor card gives you a quick overview of your sensors state with an optional graph to visualize change over time.
@@ -83,8 +88,3 @@ 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 882fed36a8a8..fd4061f68380 100644
--- a/source/_dashboards/shopping-list.markdown
+++ b/source/_dashboards/shopping-list.markdown
@@ -1,10 +1,16 @@
---
-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."
+description: "The panel view shows a single card in the full width of the screen."
+related:
+ - docs: /integrations/todo/
+ title: To-do list integration
+ - docs: /integrations/local_todo/
+ title: Local to-do integration
---
+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.
@@ -45,8 +51,3 @@ Title example:
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/sidebar.markdown b/source/_dashboards/sidebar.markdown
index 3c55ccccd4a7..47815a9e52d6 100644
--- a/source/_dashboards/sidebar.markdown
+++ b/source/_dashboards/sidebar.markdown
@@ -3,6 +3,11 @@ type: view
title: Sidebar view
sidebar_label: Sidebar
description: "The sidebar view has 2 columns, a wide one and a smaller one on the right."
+related:
+ - docs: /dashboards/masonry/
+ title: Masonry view
+ - docs: /dashboards/panel/
+ title: Panel view
---
The sidebar view has 2 columns, a wide one and a smaller one on the right.
@@ -53,9 +58,4 @@ cards:
- media_player.lounge_room
view_layout:
position: sidebar
-```
-
-## Related topics
-
-- [Panel view](/dashboards/panel/)
-- [Masonry view](/dashboards/masonry/)
\ No newline at end of file
+```
\ No newline at end of file
diff --git a/source/_dashboards/statistic.markdown b/source/_dashboards/statistic.markdown
index e39895bae59c..e7d03df5ebf2 100644
--- a/source/_dashboards/statistic.markdown
+++ b/source/_dashboards/statistic.markdown
@@ -3,6 +3,11 @@ type: card
title: "Statistic card"
sidebar_label: Statistic
description: "The statistic card allows you to display a statistical value for an entity."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The statistic card allows you to display a statistical value for an entity.
@@ -172,8 +177,3 @@ period:
seconds: -10
stat_type: change
```
-
-## 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 940059e3a207..52a69b301be9 100644
--- a/source/_dashboards/statistics-graph.markdown
+++ b/source/_dashboards/statistics-graph.markdown
@@ -3,6 +3,11 @@ type: card
title: "Statistics graph card"
sidebar_label: Statistics graph
description: "The statistics graph card allows you to display a graph with statistics data for each of the entities listed."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The statistics graph card allows you to display a graph of statistics data for each of the entities listed.
@@ -96,8 +101,3 @@ 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 5ca865065d83..240a89bbc80e 100644
--- a/source/_dashboards/thermostat.markdown
+++ b/source/_dashboards/thermostat.markdown
@@ -3,6 +3,11 @@ type: card
title: "Thermostat card"
sidebar_label: Thermostat
description: "The thermostat card gives control of your climate entity, allowing you to change the temperature and mode of the entity."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The thermostat card gives control of your [climate](/integrations/#climate) {% term entity %}, allowing you to change the temperature and mode of the {% term entity %}.
@@ -55,8 +60,3 @@ 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 514cfc144967..7dba42385ef7 100644
--- a/source/_dashboards/tile.markdown
+++ b/source/_dashboards/tile.markdown
@@ -3,6 +3,13 @@ type: card
title: "Tile card"
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."
+related:
+ - docs: /dashboards/actions/
+ title: Card actions
+ - docs: /dashboards/features
+ title: Card features
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
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 %}.
@@ -33,7 +40,7 @@ icon:
type: string
color:
required: false
- description: Set the color when the entity is active. By default, the color is based on `state`, `domain`, and `device_class` of your entity. It accepts [color token](/dashboards/tile/#available-color-tokens) or hex color code.
+ description: Set the color when the entity is active. By default, the color is based on `state`, `domain`, and `device_class` of your entity. It accepts [color token](/dashboards/tile/#available-colors) or hex color code.
type: string
default: state
show_entity_picture:
@@ -130,8 +137,3 @@ features:
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 000000000000..846d6cfd7f28
--- /dev/null
+++ b/source/_dashboards/todo-list.markdown
@@ -0,0 +1,74 @@
+---
+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."
+related:
+ - docs: /dashboards/dashboards/
+ title: Dashboards
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
+ - docs: /integrations/todo
+ title: To-do list integration documentation
+ - docs: /integrations/#to-do-list
+ title: List of to-do list integrations
+ - docs: /integrations/local_todo/
+ title: Local to-do integration
+---
+
+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.
+
+
+## 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
+```
diff --git a/source/_dashboards/vertical-stack.markdown b/source/_dashboards/vertical-stack.markdown
index 08768af6955f..56212aec5358 100644
--- a/source/_dashboards/vertical-stack.markdown
+++ b/source/_dashboards/vertical-stack.markdown
@@ -3,6 +3,9 @@ type: card
title: "Vertical stack card"
sidebar_label: Vertical stack
description: "The vertical stack card allows you to group multiple cards so they always sit in the same column."
+related:
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The vertical stack card allows you to group multiple cards so they always sit in the same column.
@@ -72,6 +75,3 @@ cards:
Create a grid layout using vertical and horizontal stack.
-## Related topics
-
-- [Dashboard cards](/dashboards/cards/)
\ No newline at end of file
diff --git a/source/_dashboards/weather-forecast.markdown b/source/_dashboards/weather-forecast.markdown
index 55c8fadd5307..2ef074996505 100644
--- a/source/_dashboards/weather-forecast.markdown
+++ b/source/_dashboards/weather-forecast.markdown
@@ -3,6 +3,11 @@ type: card
title: "Weather forecast card"
sidebar_label: Weather forecast
description: "The weather forecast card displays the weather. Very useful to include on interfaces that people display on the wall."
+related:
+ - docs: /integrations/frontend/
+ title: Themes
+ - docs: /dashboards/cards/
+ title: Dashboard cards
---
The weather forecast card displays the weather. This card is particularly useful on wall-mounted displays.
@@ -153,8 +158,3 @@ 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/_data/glossary.yml b/source/_data/glossary.yml
index 9dae8f1e1bfa..4b0ed4611a53 100644
--- a/source/_data/glossary.yml
+++ b/source/_data/glossary.yml
@@ -3,20 +3,30 @@
# Format is a list of terms, each term is a dictionary with the following keys:
# - term: The term to define (required)
# - definition: The definition of the term (required)
-# - excerpt: Short excerpt of the definition, overrides definition for tooltips (optional)
+# - excerpt: Short excerpt of the definition, overrides definition for tooltips
+# (optional)
# - link: A URL to link to for more information (optional)
# - aliases: A list of aliases for the term (optional)
#
- term: Action
definition: |-
- Actions are used in several places in Home Assistant. As part of a script or automation, actions define what is going to happen once a trigger is activated. In scripts, an action is called *sequence*.
- Actions use service calls and/or scenes to interact with entities and cause these entities to do something. Actions can also include conditions and a delay. An action can call multiple services at the same time. For example, if your presence is detected in a room, an action may call one service to turn on a light and call another service to start playing music after a delay.
- Actions are also used on the dashboard, for example as tap or hold action on a UI element. When triggered, the action calls a service.
+ Actions are used in several places in Home Assistant. As part of a script or
+ automation, actions define what is going to happen once a trigger is
+ activated. In scripts, an action is called *sequence*. Actions use service
+ calls and/or scenes to interact with entities and cause these entities to do
+ something. Actions can also include conditions and a delay. An action can
+ call multiple services at the same time. For example, if your presence is
+ detected in a room, an action may call one service to turn on a light and
+ call another service to start playing music after a delay. Actions are also
+ used on the dashboard, for example as tap or hold action on a UI element.
+ When triggered, the action calls a service.
aliases:
- actions
link: /docs/automation/action/
excerpt: >
- Actions are used in several places in Home Assistant. As part of a script or automation, actions define what is going to happen once a trigger is activated. In scripts, an action is called *sequence*.
+ Actions are used in several places in Home Assistant. As part of a script or
+ automation, actions define what is going to happen once a trigger is
+ activated. In scripts, an action is called *sequence*.
- term: Add-on
definition: >-
Add-ons are additional standalone third-party software packages that can be
@@ -28,22 +38,29 @@
installed on Home Assistant OS.
- term: Area
definition: >-
- An area in Home Assistant is a logical grouping of devices and entities that are meant to match areas (or rooms) in the physical world: your home. For example, the `living room` area groups devices and entities in your living room. Areas allow you to target service calls at an entire group of devices. For example, turning off all the lights in the living room.
- Locations within your home such as living room, dance floor, etc.
- Areas can also be used for automatically
- generated cards, such as the [Area card](/dashboards/area/).
+ An area in Home Assistant is a logical grouping of devices and entities that
+ are meant to match areas (or rooms) in the physical world: your home. For
+ example, the `living room` area groups devices and entities in your living
+ room. Areas allow you to target service calls at an entire group of devices.
+ For example, turning off all the lights in the living room. Locations within
+ your home such as living room, dance floor, etc. Areas can be assigned to
+ floors. Areas can also be used for automatically generated cards, such as
+ the [Area card](/dashboards/area/).
excerpt: >-
- An area in Home Assistant is a logical grouping of devices and entities that are meant to match areas (or rooms) in the physical world: your home. For example, the `living room` area groups devices and entities in your living room.
+ An area in Home Assistant is a logical grouping of devices and entities that
+ are meant to match areas (or rooms) in the physical world: your home. For
+ example, the `living room` area groups devices and entities in your living
+ room.
aliases:
- areas
- term: Automation
definition: >-
- Automations connect one or more triggers to one or more actions in a
- 'when trigger then do action' fashion with additional optional conditions.
- For example, an automation might connect the trigger 'sunset' to the action
+ Automations connect one or more triggers to one or more actions in a 'when
+ trigger then do action' fashion with additional optional conditions. For
+ example, an automation might connect the trigger 'sunset' to the action
'turn the lights on' but only if the condition 'someone is home' is met.
- Pre-made automations for common use-cases are available via
- [the blueprints feature](/docs/automation/using_blueprints/).
+ Pre-made automations for common use-cases are available via [the blueprints
+ feature](/docs/automation/using_blueprints/).
excerpt: >-
Automations in Home Assistant allow you to automatically respond to things
that happen in and around your home.
@@ -52,14 +69,14 @@
- automations
- term: Backup
definition: >-
- Home Assistant has built-in functionality to create files containing a copy of
- your configuration. This can be used to restore your Home Assistant as well
- as migrate to a new system. The backup feature is available on some installation
- types.
+ Home Assistant has built-in functionality to create files containing a copy
+ of your configuration. This can be used to restore your Home Assistant as
+ well as migrate to a new system. The backup feature is available on some
+ installation types.
link: /integrations/backup/
excerpt: >-
- Home Assistant has built-in functionality to create files containing a copy of
- your configurations. This is available on certain installation types.
+ Home Assistant has built-in functionality to create files containing a copy
+ of your configurations. This is available on certain installation types.
aliases:
- backups
- term: Binary sensor
@@ -69,49 +86,85 @@
link: /integrations/binary_sensor
- term: Blueprint
definition: >-
- A blueprint is a script or automation configuration with certain parts marked as configurable. This allows users to create multiple scripts or automations based on the same blueprint, with each having its own configuration-specific settings. Blueprints are shared by the community on the [blueprints exchange](https://community.home-assistant.io/c/blueprints-exchange/53) in the forum.
+ A blueprint is a script or automation configuration with certain parts
+ marked as configurable. This allows users to create multiple scripts or
+ automations based on the same blueprint, with each having its own
+ configuration-specific settings. Blueprints are shared by the community on
+ the [blueprints
+ exchange](https://community.home-assistant.io/c/blueprints-exchange/53) in
+ the forum.
link: /docs/blueprint/
excerpt: >-
- A blueprint is a script or automation configuration with certain parts marked as configurable. This allows users to create multiple scripts or automations based on the same blueprint, with each having its own configuration-specific settings.
+ A blueprint is a script or automation configuration with certain parts
+ marked as configurable. This allows users to create multiple scripts or
+ automations based on the same blueprint, with each having its own
+ configuration-specific settings.
aliases:
- blueprints
+- term: Category
+ definition: >-
+ A category is an organization tool that allows grouping items in a table.
+ Like labels, categories allow grouping irrespective of the items' physical
+ location. For example, on the automations page, you can create the
+ categories “Notifications” or “NFC tags” to view your automations grouped or
+ filtered. Categories are unique for each table. The automations page can
+ have different categories than the scene, scripts, or helpers settings page.
+ aliases:
+ - categories
- term: Commissioning
definition: >-
- In the context of Matter devices, *commissioning* is the process of adding a device to a Matter controller. It is the equivalent of pairing a device in Zigbee or Z-Wave. Commissioning is done by scanning a QR code or entering a code manually. The code is printed on the device or its packaging. The code contains information about the device, such as its type, manufacturer, and serial number. The controller uses this information to identify the device and to download the required information to control the device. For example, the controller downloads the device's capabilities, such as the supported commands and the available attributes. The controller also downloads the device's configuration, such as the device's name and location.
+ In the context of Matter devices, *commissioning* is the process of adding a
+ device to a Matter controller. It is the equivalent of pairing a device in
+ Zigbee or Z-Wave. Commissioning is done by scanning a QR code or entering a
+ code manually. The code is printed on the device or its packaging. The code
+ contains information about the device, such as its type, manufacturer, and
+ serial number. The controller uses this information to identify the device
+ and to download the required information to control the device. For example,
+ the controller downloads the device's capabilities, such as the supported
+ commands and the available attributes. The controller also downloads the
+ device's configuration, such as the device's name and location.
link: /integrations/matter/
aliases:
- commission
excerpt: >
- In the context of Matter devices, *commissioning* is the process of adding a device to a Matter controller. It is the equivalent of pairing a device in Zigbee or Z-Wave.
+ In the context of Matter devices, *commissioning* is the process of adding a
+ device to a Matter controller. It is the equivalent of pairing a device in
+ Zigbee or Z-Wave.
- term: Component
definition: >-
Better known as: Integrations. Integrations used to be known as components.
- term: Condition
definition: >-
- Conditions are an optional part of an automation that will prevent an
- action from firing if they are not met.
+ Conditions are an optional part of an automation that will prevent an action
+ from firing if they are not met.
link: /docs/scripts/conditions/
aliases:
- conditions
- term: Cover
definition: >-
- Covers are devices such as blinds, garage doors, etc that can be opened
- and closed and optionally set to a specific position.
+ Covers are devices such as blinds, garage doors, etc that can be opened and
+ closed and optionally set to a specific position.
link: /integrations/cover
- term: Customize
definition: >-
- Customization allows you to overwrite the default parameters of your
- devices in the configuration.
+ Customization allows you to overwrite the default parameters of your devices
+ in the configuration.
- term: Device
definition: |-
- A device is a model representing a physical or logical unit that contains entities.
- **Example for a device as a physical unit**
- A smart plug named 'Coffee machine' which provides 2 entities: a `switch` entity to turn power on or off ('Coffee machine power switch') and a `sensor` entity for power monitoring ('Coffee machine power sensor').
- **Example for a device as a logical unit**
- An ecobee thermostat with 4 room sensors. This thermostat is seen as 5 devices in Home Assistant: 1 device for the thermostat with 4 sensors, and 1 device for each room sensor. Each device can be in a different area and may have more than one input or output within that area.
- Devices have properties such as ID, manufacturer, name, model, hardware version, firmware version, connections, etc.
+ A device is a model representing a physical or logical unit that contains
+ entities. **Example for a device as a physical unit** A smart plug named
+ 'Coffee machine' which provides 2 entities: a `switch` entity to turn power
+ on or off ('Coffee machine power switch') and a `sensor` entity for power
+ monitoring ('Coffee machine power sensor'). **Example for a device as a
+ logical unit** An ecobee thermostat with 4 room sensors. This thermostat is
+ seen as 5 devices in Home Assistant: 1 device for the thermostat with 4
+ sensors, and 1 device for each room sensor. Each device can be in a
+ different area and may have more than one input or output within that area.
+ Devices have properties such as ID, manufacturer, name, model, hardware
+ version, firmware version, connections, etc.
excerpt: >
- A device is a model representing a physical or logical unit that contains entities.
+ A device is a model representing a physical or logical unit that contains
+ entities.
aliases:
- devices
- term: Device tracker
@@ -124,35 +177,43 @@
they are discovered.
- term: Domain
definition: >-
- Each integration in Home Assistant has a unique identifier:
- a domain. All of the entities and services available in Home Assistant
- are provided by integrations and thus belong to such a domain. The first
- part of the entity or service, before the `.` shows the domain they belong
- to. For example `light.kitchen` is an entity in the `light` domain from
- the [light integration](/integrations/light), while `hue.activate_scene`
- is the `activate_scene` service for the `hue` domain which belongs to
- the [Hue integration](/integrations/hue).
+ Each integration in Home Assistant has a unique identifier: a domain. All of
+ the entities and services available in Home Assistant are provided by
+ integrations and thus belong to such a domain. The first part of the entity
+ or service, before the `.` shows the domain they belong to. For example
+ `light.kitchen` is an entity in the `light` domain from the [light
+ integration](/integrations/light), while `hue.activate_scene` is the
+ `activate_scene` service for the `hue` domain which belongs to the [Hue
+ integration](/integrations/hue).
excerpt: >
- Each integration in Home Assistant has a unique identifier: The domain.
- It is often shown as the first part (before the dot) of entity IDs.
+ Each integration in Home Assistant has a unique identifier: The domain. It
+ is often shown as the first part (before the dot) of entity IDs.
aliases:
- domains
- term: Entity
definition: |-
- An entity represents a sensor, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a device or a service. Entities have states.
- **Example for entities as part of a device**
- A combined temperature and humidity sensor device provides two sensor entities. One for temperature (e.g. `sensor.temperature` with state `21.0` and unit `°C`) and one for humidity
- (e.g. `sensor.humidity` with state `65.4` and unit `%`).
- **Example for entities as part of a service**
- A weather service that provides 3 entities: wind speed, air pressure, and ozon level.
- **Example of an entity used for control**
- A fan that is turned on when the temperature exceeds 30 °C.
- There are standardized types of entities for common integrations such as light, switch, camera, sensor, fan, or vacuum.
- Some entities are not part of a device or service. Examples of standalone entities are automation, script, scene entities, and helper entities (e.g. input helpers).
- Most properties of entities are related to the state. Entities have optional attributes such as friendly name, unit of measurement, and an icon or picture that can be displayed in the frontend.
+ An entity represents a sensor, actor, or function in Home Assistant.
+ Entities are used to monitor physical properties or to control other
+ entities. An entity is usually part of a device or a service. Entities have
+ states. **Example for entities as part of a device** A combined temperature
+ and humidity sensor device provides two sensor entities. One for temperature
+ (e.g. `sensor.temperature` with state `21.0` and unit `°C`) and one for
+ humidity (e.g. `sensor.humidity` with state `65.4` and unit `%`). **Example
+ for entities as part of a service** A weather service that provides 3
+ entities: wind speed, air pressure, and ozon level. **Example of an entity
+ used for control** A fan that is turned on when the temperature exceeds
+ 30 °C. There are standardized types of entities for common integrations
+ such as light, switch, camera, sensor, fan, or vacuum. Some entities are not
+ part of a device or service. Examples of standalone entities are automation,
+ script, scene entities, and helper entities (e.g. input helpers). Most
+ properties of entities are related to the state. Entities have optional
+ attributes such as friendly name, unit of measurement, and an icon or
+ picture that can be displayed in the frontend.
link: /docs/configuration/state_object/
excerpt: >
- An entity represents a sensor, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a device or a service.
+ An entity represents a sensor, actor, or function in Home Assistant.
+ Entities are used to monitor physical properties or to control other
+ entities. An entity is usually part of a device or a service.
aliases:
- entities
- term: Event
@@ -161,10 +222,28 @@
link: /docs/configuration/events/
aliases:
- events
+- term: Floor
+ definition: >-
+ A floor in Home Assistant is a logical grouping of areas that are meant to
+ match the physical floors in your home. Devices & entities are not assigned
+ to floors but to areas. A floor has properties such as: Floor ID, name,
+ aliases (for use in assistants), an icon, and a floor level. Some of these
+ properties are optional. The level number can be negative to reflect floors
+ below the basement. Floors can be used in automations and scripts as a
+ target for actions. For example, to turn off all the lights on the
+ downstairs floor when you go to bed.
+ excerpt: >-
+ A floor in Home Assistant is a logical grouping of areas that are meant to
+ match the physical floors in your home. Devices & entities are not assigned
+ to floors but to areas. Floors can be used in automations and scripts as a
+ target for actions. For example, to turn off all the lights on the
+ downstairs floor when you go to bed.
+ aliases:
+ - floors
- term: Frontend
definition: >-
- The frontend is a necessary component for the UI, it is also where you
- can define your themes.
+ The frontend is a necessary component for the UI, it is also where you can
+ define your themes.
link: /integrations/frontend/
- term: Group
definition: >-
@@ -174,29 +253,38 @@
- groups
- term: HASS
definition: >-
- HASS or [hass](/docs/tools/hass/) is often used as an abbreviation for
- Home Assistant. It is also the command-line tool.
+ HASS or [hass](/docs/tools/hass/) is often used as an abbreviation for Home
+ Assistant. It is also the command-line tool.
- term: HassOS
definition: >-
Another name for Home Assistant Operating System
link: /hassio/installation/
+- term: Home Assistant Container
+ definition: >-
+ Home Assistant Container is a standalone container-based installation of
+ Home Assistant Core. Any [OCI](https://opencontainers.org/) compatible
+ runtime can be used, but the documentation focus is on Docker.
+ link: /installation/#advanced-installation-methods
- term: Home Assistant Core
definition: >-
- Home Assistant Core is a Python program. It can be run on various operating
- systems and is the basis for Home Assistant. When people are talking about
- Home Assistant Core they usually refer to a standalone installation method
- that can be installed using a Virtual Environment or Docker. Home Assistant
- Core does not use the Home Assistant Supervisor.
+ Home Assistant Core is the Python program at the heart of Home Assistant. It
+ is part of all of the four installation types and can be run on various
+ operating systems. It can be installed standalone (without Home Assistant
+ Supervisor), using a Virtual Environment (typically referred to as Home
+ Assistant Core installation method) or as a container using Docker
+ (typically referred to as Home Assistant Container installation method).
link: /installation/#advanced-installation-methods
excerpt: >
- Home Assistant Core is the hart of Home Assistant itself. It is a Python
- program that powers every installation type, but can be installed standalone.
+ Home Assistant Core is the heart of Home Assistant itself. It is a Python
+ program that powers every installation type, but can be installed
+ standalone.
- term: Home Assistant Supervised
definition: >-
- Home Assistant Supervised is a full UI managed home automation ecosystem that
- runs Home Assistant, the Home Assistant Supervisor and add-ons. It comes
- pre-installed on Home Assistant OS, but can be installed on any Linux system.
- It leverages Docker, which is managed by the Home Assistant Supervisor.
+ Home Assistant Supervised is a full UI managed home automation ecosystem
+ that runs the Home Assistant Core program, the Home Assistant Supervisor and
+ add-ons. It comes pre-installed on Home Assistant OS, but can be installed
+ standalone on Debian Linux systems. It leverages Docker, which is managed by
+ the Home Assistant Supervisor.
excerpt: >
Home Assistant Supervised is the full Home Assistant ecosystem, without the
Home Assistant Operating System.
@@ -205,39 +293,50 @@
definition: >-
The Home Assistant Supervisor is a program that manages a Home Assistant
installation, taking care of installing and updating Home Assistant,
- add-ons, itself and, if used, updating the Home Assistant Operating System.
+ add-ons, itself, and, if used, updating the Home Assistant Operating System.
link: /installation/#advanced-installation-methods
- term: Home Assistant Operating System
definition: >-
Home Assistant OS, the Home Assistant Operating System, is an embedded,
minimalistic, operating system designed to run the Home Assistant ecosystem
- on single board computers (like the Raspberry Pi) or Virtual Machines.
- The Home Assistant Supervisor can keep it up to date, removing the need for
- you to manage an operating system. Home Assistant Operating System is the recommended installation method for most users.
+ on single board computers (like the Raspberry Pi) or Virtual Machines. It
+ includes Home Assistant Core, the Home Assistant Supervisor, and supports
+ add-ons. Home Assistant Supervisor keeps it up to date, removing the need
+ for you to manage an operating system. Home Assistant Operating System is
+ the recommended installation method for most users.
excerpt: >
Home Assistant OS, the Home Assistant Operating System, is an embedded,
- minimalistic, operating system designed to run the Home Assistant ecosystem. It is the recommended installation method for most users.
+ minimalistic, operating system designed to run the Home Assistant ecosystem.
+ It is the recommended installation method for most users.
link: /installation/#advanced-installation-methods
- term: Host
definition: >-
- A device that can communicate with other devices on a network. During setup and configuration,
- an input requesting a **Host** typically refers to a device's network address so that
- Home Assistant can attempt to connect to it. This may be in the form of a hostname, URL,
- IP address or some other type of network identifier. If you do not know the hostname or IP address of a device, you can find it in your router's webinterface. For example, if your device is connected wirelessly, somewhere there is a page listing all the devices that are connected to your network. It depends on your router, where exactly this page is. It could be under **Network** > **Wireless**.
+ A device that can communicate with other devices on a network. During setup
+ and configuration, an input requesting a **Host** typically refers to a
+ device's network address so that Home Assistant can attempt to connect to
+ it. This may be in the form of a hostname, URL, IP address or some other
+ type of network identifier. If you do not know the hostname or IP address of
+ a device, you can find it in your router's webinterface. For example, if
+ your device is connected wirelessly, somewhere there is a page listing all
+ the devices that are connected to your network. It depends on your router,
+ where exactly this page is. It could be under **Network** > **Wireless**.
excerpt: >-
- A device that participates in your network. If asked for the host, enter either the device's IP address or host name. If you don't know those, check the list of hosts in your router.
+ A device that participates in your network. If asked for the host, enter
+ either the device's IP address or host name. If you don't know those, check
+ the list of hosts in your router.
link: https://en.wikipedia.org/wiki/Host_(network)
aliases:
- hosts
- term: Integration
definition: >-
Integrations connect and integrate Home Assistant with devices, services,
- and more. They contain all the logic to handle
- vendor- and device-specific implementations, such as authentication or
- specific protocols. The integration brings such device-specific elements into Home Assistant in a standardized
- way. For example, the [Hue](/integrations/hue) integration integrates
- the Philips Hue bridge and its connected bulbs into Home Assistant, making
- them available as Home Assistant light entities you can control.
+ and more. They contain all the logic to handle vendor- and device-specific
+ implementations, such as authentication or specific protocols. The
+ integration brings such device-specific elements into Home Assistant in a
+ standardized way. For example, the [Hue](/integrations/hue) integration
+ integrates the Philips Hue bridge and its connected bulbs into Home
+ Assistant, making them available as Home Assistant light entities you can
+ control.
excerpt: >
Integrations connect and integrate Home Assistant with your devices,
services, and more.
@@ -246,17 +345,40 @@
- integrations
- term: Intent
definition: >-
- Intent is a term used with voice assistants. The intent is what Home Assistant thinks you want it to do when it extracts a command from your voice or text utterance. Currently, the following intents are supported out of the box: HassTurnOn, HassTurnOff, HassGetState, and HassLightSet.
- These intents allow you to turn things on or off, inquire about a state, or change the brightness or color of a light.
+ Intent is a term used with voice assistants. The intent is what Home
+ Assistant thinks you want it to do when it extracts a command from your
+ voice or text utterance. Currently, the following intents are supported out
+ of the box: HassTurnOn, HassTurnOff, HassGetState, and HassLightSet. These
+ intents allow you to turn things on or off, inquire about a state, or change
+ the brightness or color of a light.
excerpt: >
- Intent is a term used with voice assistants. The intent is what Home Assistant thinks you want it to do when it extracts a command from your voice or text utterance.
+ Intent is a term used with voice assistants. The intent is what Home
+ Assistant thinks you want it to do when it extracts a command from your
+ voice or text utterance.
link: https://developers.home-assistant.io/docs/intent_builtin
aliases:
- Intents
+- term: Label
+ definition: >-
+ Labels in Home Assistant allow grouping elements irrespective of their
+ physical location or type. Labels can be assigned to areas, devices,
+ entities, automations, scenes, scripts, and helpers. Labels can be used in
+ automations and scripts as a target for actions and services. Labels can
+ also be used to filter data. For example, you can filter the list of devices
+ to show only devices with the label `heavy energy usage` or turn these
+ devices off when there is not a lot of solar energy available.
+ excerpt: >-
+ Labels in Home Assistant allow grouping elements irrespective of their
+ physical location or type. Labels can be assigned to areas, devices,
+ entities, automations, scenes, scripts, and helpers. Labels can be used in
+ automations and scripts as a target for actions and services. Labels can
+ also be used to filter data.
+ aliases:
+ - labels
- term: Lovelace
definition: >-
- Lovelace is the original code name of the UI that is now known as
- [Home Assistant dashboards](/dashboards).
+ Lovelace is the original code name of the UI that is now known as [Home
+ Assistant dashboards](/dashboards).
- term: Light
definition: >-
A light has a brightness you can control, and optionally color temperature
@@ -264,9 +386,17 @@
link: /integrations/light
- term: Matter
definition: >-
- Matter is an open-source standard that defines how to control smart home devices on a Wi-Fi or Thread network. The aim of the standard is to improve security and to make devices interoperable across vendors, replacing proprietary protocols for smart home ecosystems. Unlike other standards, Matter allows joining the same device to multiple controllers. For example, you can add a light to Google Home, Apple Home, and Home Assistant at the same time. A bridge device can be used to connect devices running on other smart home technologies such as Zigbee or Z-Wave.
+ Matter is an open-source standard that defines how to control smart home
+ devices on a Wi-Fi or Thread network. The aim of the standard is to improve
+ security and to make devices interoperable across vendors, replacing
+ proprietary protocols for smart home ecosystems. Unlike other standards,
+ Matter allows joining the same device to multiple controllers. For example,
+ you can add a light to Google Home, Apple Home, and Home Assistant at the
+ same time. A bridge device can be used to connect devices running on other
+ smart home technologies such as Zigbee or Z-Wave.
excerpt: >
- Matter is an open-source standard that defines how to control smart home devices on a Wi-Fi or Thread network.
+ Matter is an open-source standard that defines how to control smart home
+ devices on a Wi-Fi or Thread network.
link: /integrations/matter
- term: Notification
definition: >-
@@ -285,8 +415,8 @@
Platforms are building blocks provided by some integrations to be used by
other integrations. For example, the [Light](/integrations/light)
integration provides the `light platform` that is utilized by all
- integrations providing `light` entities such
- as e.g. [Hue](/integrations/hue).
+ integrations providing `light` entities such as e.g.
+ [Hue](/integrations/hue).
excerpt: >
Platforms are building blocks provided by some integrations to be used by
other integrations.
@@ -296,78 +426,97 @@
- term: Reload
definition: >-
Applies the changes made to the Home Assistant configuration files. Changes
- are normally automatically updated. However, changes made outside of the front
- end will not be reflected in Home Assistant and require a reload.
- To perform a manual reload, go to **Settings** > **System** >
- **Restart Home Assistant** (top right) > **Quick reload**. If you do not see the **Quick reload** option in the menu, you need to enable **Advanced mode** in your user settings. More granular
- reload options are available in *YAML configuration reloading* section
- in **Developer tools** > **YAML**.
+ are normally automatically updated. However, changes made outside of the
+ front end will not be reflected in Home Assistant and require a reload. To
+ perform a manual reload, go to **Settings** > **System** > **Restart Home
+ Assistant** (top right) > **Quick reload**. If you do not see the **Quick
+ reload** option in the menu, you need to enable **Advanced mode** in your
+ user settings. More granular reload options are available in *YAML
+ configuration reloading* section in **Developer tools** > **YAML**.
excerpt: >
- Applies the changes made to Home Assistant configuration files. Changes are normally
- automatically updated. However, changes made outside of the front
+ Applies the changes made to Home Assistant configuration files. Changes are
+ normally automatically updated. However, changes made outside of the front
end will not be reflected in Home Assistant and require a reload.
- term: Scene
definition: >-
- Scenes capture the states you want certain entities to be. For example,
- a scene can specify that light A should be turned on and light B should
- be bright red.
+ Scenes capture the states you want certain entities to be. For example, a
+ scene can specify that light A should be turned on and light B should be
+ bright red.
link: /integrations/scene/
aliases:
- scenes
- term: Script
definition: >
- Scripts are components that allow users to specify a sequence of actions
- to be executed by Home Assistant when turned on.
+ Scripts are components that allow users to specify a sequence of actions to
+ be executed by Home Assistant when turned on.
link: /docs/scripts/
aliases:
- scripts
- term: Sensor
definition: >-
- Sensors return information about a thing, for instance the level of water
- in a tank.
+ Sensors return information about a thing, for instance the level of water in
+ a tank.
link: /integrations/sensor/
aliases:
- sensors
- term: Selector
definition: >-
- Selectors are components for the user interface. Some selectors can,
- for example, show a toggle button to turn something on or off, while another
+ Selectors are components for the user interface. Some selectors can, for
+ example, show a toggle button to turn something on or off, while another
select can filter a list of devices to show only devices that have
motion-sensing capabilities.
excerpt: >
- Selectors are components for the user interface. Like toggle, dropdown,
- and more.
+ Selectors are components for the user interface. Like toggle, dropdown, and
+ more.
link: /docs/blueprint/selectors/
aliases:
- selectors
- term: Service
definition: |-
- The term service has 2 meanings in Home Assistant:
- **The information service**
- For example, the municipal waste management service that provides entities for organic, paper, and packaging waste. In terms of functionality, the information service is like a device. It is called *service* to avoid confusion, as it does not come with a piece of hardware.
- **The software function that interacts with targets to make something happen**
- A service carries out one specific task, for example: turning on the light in the living room or sending a notification to a mobile phone.
- A service has targets and data. Service targets are: areas, devices, and entities. Service data carries the information required to define the desired state change in the target. For example, the target, together with brightness 150 and RGB color `[255,0,0]`, or the message “Your coffee is ready”.
- Services can be used in, for example, automation, scripts, dashboards, or voice commands to control your home.
- Home Assistant provides a series of predefined services, such as `homeassistant.turn_on`, `homeassistant.toggle`, or `homeassistant.reload`.
+ The term service has 2 meanings in Home Assistant: **The information
+ service** For example, the municipal waste management service that provides
+ entities for organic, paper, and packaging waste. In terms of functionality,
+ the information service is like a device. It is called *service* to avoid
+ confusion, as it does not come with a piece of hardware. **The software
+ function that interacts with targets to make something happen** A service
+ carries out one specific task, for example: turning on the light in the
+ living room or sending a notification to a mobile phone. A service has
+ targets and data. Service targets are: areas, devices, and entities. Service
+ data carries the information required to define the desired state change in
+ the target. For example, the target, together with brightness 150 and RGB
+ color `[255,0,0]`, or the message “Your coffee is ready”. Services can be
+ used in, for example, automation, scripts, dashboards, or voice commands to
+ control your home. Home Assistant provides a series of predefined services,
+ such as `homeassistant.turn_on`, `homeassistant.toggle`, or
+ `homeassistant.reload`.
excerpt: >
- A service carries out one specific task, for example: turn on the light in the
- living room. A service has targets and data and can be called by actions, a
- dashboard, or via voice command.
+ A service carries out one specific task, for example: turn on the light in
+ the living room. A service has targets and data and can be called by
+ actions, a dashboard, or via voice command.
link: /docs/scripts/service-calls/
aliases:
- services
- term: State
definition: |-
- The state holds the information of interest of an entity. For example, if a light is on or off, the current temperature, or the amount of energy used. The data type of state is `string` (a textual value). Entities store 2 timestamps related to the state: `last_updated` and `last_changed`. Each entity has exactly one state and the state only holds one value at a time. However, entities can store attributes related to that state. For example, the state of a light is _on_, and the related state attributes could be its current brightness and color values.
- State changes can be used as the source of triggers. The current state can be used in conditions.
-
+ The state holds the information of interest of an entity. For example, if a
+ light is on or off, the current temperature, or the amount of energy used.
+ The data type of state is `string` (a textual value). Entities store 2
+ timestamps related to the state: `last_updated` and `last_changed`. Each
+ entity has exactly one state and the state only holds one value at a time.
+ However, entities can store attributes related to that state. For example,
+ the state of a light is _on_, and the related state attributes could be its
+ current brightness and color values. State changes can be used as the source
+ of triggers. The current state can be used in conditions.
+
link: /docs/configuration/state_object/
aliases:
- states
excerpt: >
- The state holds the information of interest of an entity, for example, if a light is on or off. Each entity has exactly one state and the state only holds one value at a time. However, entities can store attributes related to that state such as brightness, color, or a unit of measurement.
+ The state holds the information of interest of an entity, for example, if a
+ light is on or off. Each entity has exactly one state and the state only
+ holds one value at a time. However, entities can store attributes related to
+ that state such as brightness, color, or a unit of measurement.
- term: Switch
definition: >-
Switches are things that have two states you can select between, such as
@@ -384,20 +533,37 @@
- term: Thread
definition: >-
- Thread is a low-power mesh networking standard that is specifically designed for smart home applications. It is a protocol that defines how devices communicate. *Mesh* topology means that the devices can communicate with each other directly, without going through a central controller first. Thread uses the same radio frequency (RF) technology as Zigbee, but provides IP connectivity similar to Wi-Fi. Unlike Zigbee, Thread does not specify how to control devices. How Thread-enabled devices are controlled is specified in a higher level protocol such as HomeKit or Matter.
+ Thread is a low-power mesh networking standard that is specifically designed
+ for smart home applications. It is a protocol that defines how devices
+ communicate. *Mesh* topology means that the devices can communicate with
+ each other directly, without going through a central controller first.
+ Thread uses the same radio frequency (RF) technology as Zigbee, but provides
+ IP connectivity similar to Wi-Fi. Unlike Zigbee, Thread does not specify how
+ to control devices. How Thread-enabled devices are controlled is specified
+ in a higher level protocol such as HomeKit or Matter.
link: /integrations/thread/
excerpt: >
- Thread is a low-power mesh networking standard that is specifically designed for smart home applications. It is a protocol that defines how devices communicate.
+ Thread is a low-power mesh networking standard that is specifically designed
+ for smart home applications. It is a protocol that defines how devices
+ communicate.
- term: Thread border router
definition: >-
- A Thread border router forwards data packets between your local network and the Thread network. This enables smart home devices within a Thread network to communicate with IPv6-capable devices in your local network. A Thread border router is connected to your network either via Wi-Fi or Ethernet and uses its radio frequency (RF) radio to communicate with the Thread mesh network. In case of Matter, the data that is forwarded is encrypted. Examples of Thread border routers are the Nest Hub (2nd gen), the HomePod mini, and the Home Assistant SkyConnect together with the OpenThread Border Router add-on.
+ A Thread border router forwards data packets between your local network and
+ the Thread network. This enables smart home devices within a Thread network
+ to communicate with IPv6-capable devices in your local network. A Thread
+ border router is connected to your network either via Wi-Fi or Ethernet and
+ uses its radio frequency (RF) radio to communicate with the Thread mesh
+ network. In case of Matter, the data that is forwarded is encrypted.
+ Examples of Thread border routers are the Nest Hub (2nd gen), the HomePod
+ mini, and the Home Assistant SkyConnect together with the OpenThread Border
+ Router add-on.
link: /integrations/thread/#about-thread-border-routers
aliases:
- Thread border routers
- term: Trigger
definition: >-
- A trigger is a set of values or conditions of a platform that are defined
- to cause an automation to run.
+ A trigger is a set of values or conditions of a platform that are defined to
+ cause an automation to run.
link: /docs/automation/trigger/
aliases:
- triggers
@@ -407,21 +573,21 @@
TTS (text-to-speech) allows Home Assistant to talk to you.
link: /integrations/tts/
-
- term: Valve
definition: >-
- Valves are devices to control the flow of liquids and gases. All valves in Home Assistant can be opened
- and closed. Some valves can also be set to a specific position.
+ Valves are devices to control the flow of liquids and gases. All valves in
+ Home Assistant can be opened and closed. Some valves can also be set to a
+ specific position.
link: /integrations/valve
- term: Variables
definition: >-
- Variables are used to store values in memory that can be processed
- for example, in a script.
+ Variables are used to store values in memory that can be processed for
+ example, in a script.
link: /docs/scripts/#variables
- term: Zone
definition: >-
Zones are areas that can be used for presence detection.
link: /integrations/zone/
aliases:
- - zones
\ No newline at end of file
+ - zones
diff --git a/source/_docs/authentication.markdown b/source/_docs/authentication.markdown
index 6f6b6b63eaa0..de84130966b5 100644
--- a/source/_docs/authentication.markdown
+++ b/source/_docs/authentication.markdown
@@ -23,12 +23,12 @@ For the moment, other user accounts will have the same access as the owner accou
-If you want to manage users and you're an owner but you do not see "Users" in your main configuration menu, make sure that "Advanced Mode" is enabled for your user in your profile.
+If you want to manage users and you're an owner but you do not see "Users" in your main configuration menu, make sure that **Advanced Mode** is enabled for your user in your profile.
### Your account profile
-Once you're logged in, you can see the details of your account at the _Profile_ page by clicking on the circular at the very bottom of the sidebar.
+Once you're logged in, you can see the details of your account on the {% my profile title="**User profile**" %} page by selecting on the circular at the very bottom of the sidebar.
@@ -38,6 +38,7 @@ You can:
- Enable or disable [multi-factor authentication](/docs/authentication/multi-factor-auth/).
- Delete _Refresh Tokens_. These are created when you log in from a device. Delete them if you want to force the device to log out.
- Create [Long Lived Access Tokens](https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token) so scripts can securely interact with Home Assistant.
+- Define language and other locale settings.
- Log out of Home Assistant.
diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown
index ae76aad53d6a..9f7dc28a1f19 100644
--- a/source/_docs/automation/trigger.markdown
+++ b/source/_docs/automation/trigger.markdown
@@ -1,6 +1,9 @@
---
title: "Automation Trigger"
description: "All the different ways how automations can be triggered."
+related:
+ - docs: /voice_control/custom_sentences/#adding-a-custom-sentence-to-trigger-an-automation
+ title: Adding a custom sentence to trigger an automation
---
Triggers are what starts the processing of an {% term automation %} rule. When _any_ of the automation's triggers becomes true (trigger _fires_), Home Assistant will validate the [conditions](/docs/automation/condition/), if any, and call the [action](/docs/automation/action/).
@@ -294,8 +297,8 @@ Listing above and below together means the numeric_state has to be between the t
In the example above, the trigger would fire a single time if a numeric_state goes into the 17.1-24.9 range (above 17 and below 25). It will only fire again, once it has left the defined range and enters it again.
-Number helpers (`input_number` entities), `number` and `sensor` entities that
-contain a numeric value, can be used in the `above` and `below` thresholds,
+Number helpers (`input_number` entities), `number`, `sensor`, and `zone` entities
+that contain a numeric value, can be used in the `above` and `below` thresholds,
making the trigger more dynamic, like:
```yaml
diff --git a/source/_docs/blueprint.markdown b/source/_docs/blueprint.markdown
index c0e17ab71264..eb07e05191cc 100644
--- a/source/_docs/blueprint.markdown
+++ b/source/_docs/blueprint.markdown
@@ -1,6 +1,17 @@
---
title: "About blueprints"
description: "Introduction to blueprints."
+related:
+ - docs: /docs/blueprint/schema/
+ title: About the blueprint schema
+ - docs: /docs/blueprint/selectors/
+ title: About the blueprint selectors
+ - docs: /docs/automation/using_blueprints/
+ title: Using blueprints in automations
+ - docs: /docs/blueprint/tutorial/
+ title: "Tutorial: Create an automation blueprint"
+ - title: "Blueprint community forum"
+ url: /get-blueprints
---
This section gives a high-level introduction to blueprints. To view a description of the YAML-schema used to create a valid blueprint, refer to the section [About the blueprint schema](/docs/blueprint/schema/).
@@ -13,12 +24,4 @@ Imagine you want to control lights based on motion. A blueprint provides the gen
Blueprints are shared by the community in the [blueprint community forum][blueprint-forums].
-### Related information
-
-- [About the blueprint schema](/docs/blueprint/schema/)
-- [About the blueprint selectors](/docs/blueprint/selectors/)
-- [Using blueprints in automations](/docs/automation/using_blueprints/)
-- [Tutorial: Create an automation blueprint](/docs/blueprint/tutorial/)
-- [Blueprint community forum][blueprint-forums]
-
-[blueprint-forums]: /get-blueprints
\ No newline at end of file
+[blueprint-forums]: /get-blueprints
diff --git a/source/_docs/blueprint/schema.markdown b/source/_docs/blueprint/schema.markdown
index 3ff7baf3e278..c615423da5b8 100644
--- a/source/_docs/blueprint/schema.markdown
+++ b/source/_docs/blueprint/schema.markdown
@@ -1,6 +1,17 @@
---
title: "About the blueprint schema"
description: "Introduction to the blueprint schema."
+related:
+ - docs: /docs/blueprint/
+ title: About blueprints
+ - docs: /docs/blueprint/selectors/
+ title: Blueprint selectors
+ - docs: /docs/automation/using_blueprints/
+ title: Using blueprints in automations
+ - docs: /docs/blueprint/tutorial/
+ title: "Tutorial: Create an automation blueprint"
+ - title: "Blueprint community forum"
+ url: /get-blueprints
---
## The blueprint schema
@@ -202,12 +213,4 @@ action:
target: !input light_target
```
-### Related information
-- [About blueprints](/docs/blueprint/)
-- [Blueprint selectors](/docs/blueprint/selectors/)
-- [Using blueprints in automations](/docs/automation/using_blueprints/)
-- [Tutorial: Create an automation blueprint »](/docs/blueprint/tutorial/)
-- [Blueprint community forum][blueprint-forums]
-
[blueprint-built-in]: https://github.com/home-assistant/core/tree/dev/homeassistant/components/automation/blueprints
-[blueprint-forums]: /get-blueprints
diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown
index 4a9c030b790c..fb7419dc58e0 100644
--- a/source/_docs/blueprint/selectors.markdown
+++ b/source/_docs/blueprint/selectors.markdown
@@ -18,7 +18,6 @@ The following selectors are currently available:
- [Action selector](#action-selector)
- [Add-on selector](#add-on-selector)
- [Area selector](#area-selector)
- - [Example area selectors](#example-area-selectors)
- [Attribute selector](#attribute-selector)
- [Assist pipeline selector](#assist-pipeline-selector)
- [Backup location selector](#backup-location-selector)
@@ -32,23 +31,21 @@ The following selectors are currently available:
- [Date selector](#date-selector)
- [Date \& time selector](#date--time-selector)
- [Device selector](#device-selector)
- - [Example device selector](#example-device-selector)
- [Duration selector](#duration-selector)
- [Entity selector](#entity-selector)
- - [Example entity selector](#example-entity-selector)
+- [Floor selector](#floor-selector)
- [Icon selector](#icon-selector)
+- [Label selector](#label-selector)
- [Language selector](#language-selector)
- [Location selector](#location-selector)
- [Media selector](#media-selector)
- [Number selector](#number-selector)
- - [Example number selectors](#example-number-selectors)
- [Object selector](#object-selector)
- [QR code selector](#qr-code-selector)
- [RGB color selector](#rgb-color-selector)
- [Select selector](#select-selector)
- [State selector](#state-selector)
- [Target selector](#target-selector)
- - [Example target selectors](#example-target-selectors)
- [Template selector](#template-selector)
- [Text selector](#text-selector)
- [Theme selector](#theme-selector)
@@ -211,7 +208,7 @@ living_room
- kitchen
```
-### Example area selectors
+### Example area selectors
An example area selector only shows areas that provide one or more lights or
switches provided by the [ZHA](/integrations/zha) integration.
@@ -274,7 +271,7 @@ assist_pipeline:
## Backup location selector
This can only be used on an installation with a Supervisor (Operating System or
-Supervised). For installations of type Home Assistant Core or Container, an error
+Supervised). For installations of type {% term "Home Assistant Core" %} or {% term "Home Assistant Container" %}, an error
will be displayed.
The backup location selector shows a list of places a backup could go, depending
@@ -581,7 +578,7 @@ faadde5365842003e8ca55267fe9d1f4
- 3da77cb054352848b9544d40e19de562
```
-### Example device selector
+### Example device selector
An example entity selector that, will only show devices that are:
@@ -717,7 +714,7 @@ light.living_room
- light.kitchen
```
-### Example entity selector
+### Example entity selector
An example entity selector that, will only show entities that are:
@@ -737,6 +734,141 @@ entity:
device_class: motion
```
+## Floor selector
+
+The floor selector shows a floor finder that can pick
+floors based on the selector configuration. The value of the input will be the
+floor ID. If `multiple` is set to `true`, the value is a list of floor IDs.
+
+A floor selector can filter the list of floors based on the properties of the
+devices and entities assigned to the areas on those floors.
+For example, the floor list could be limited to floors with entities
+provided by the [ZHA](/integrations/zha) integration, based on the areas they are in.
+
+In its most basic form, this selector doesn't require any options.
+It will show all floors.
+
+![Screenshot of a floor selector](/images/blueprints/selector-floor.png)
+
+```yaml
+floor:
+```
+
+{% configuration floor %}
+device:
+ description: >
+ When device options are provided, the list of floors is filtered by floors
+ that have at least one device matching the given conditions. Can be
+ either an object or a list of objects.
+ type: list
+ required: false
+ keys:
+ integration:
+ description: >
+ Can be set to an integration domain. Limits the list of floors that
+ have devices by this integration domain. For example,
+ [`zha`](/integrations/zha).
+ type: string
+ required: false
+ manufacturer:
+ description: >
+ When set, the list only includes floors that have devices by the set
+ manufacturer name.
+ type: string
+ required: false
+ model:
+ description: >
+ When set, the list only includes floors that have devices which have
+ the set model.
+ type: string
+ required: false
+entity:
+ description: >
+ When entity options are provided, the list only includes floors
+ that at least have one entity that matches the given conditions. Can be
+ either an object or a list of objects.
+ type: list
+ required: false
+ keys:
+ integration:
+ description: >
+ Can be set to an integration domain. Limits the list of floors that
+ have entities by the set integration domain. For example,
+ [`zha`](/integrations/zha).
+ type: string
+ required: false
+ domain:
+ description: >
+ When set, the list only includes floors that have entities of certain domains,
+ for example, [`light`](/integrations/light) or
+ [`binary_sensor`](/integrations/binary_sensor). Can be either a string
+ with a single domain, or a list of string domains to limit the selection to.
+ type: [string, list]
+ required: false
+ device_class:
+ description: >
+ When set, the list only includes floors that have entities with a certain
+ device class, for example, `motion` or `window`. Can be either a string
+ with a single device_class, or a list of string device_class to limit
+ the selection.
+ type: [device_class, list]
+ required: false
+ supported_features:
+ description: >
+ When set, the list only includes floors that have entities with a certain
+ supported feature, for example, `light.LightEntityFeature.TRANSITION`
+ or `climate.ClimateEntityFeature.TARGET_TEMPERATURE`. Should be a list
+ of features.
+ type: list
+ required: false
+multiple:
+ description: >
+ Allows selecting multiple floors. If set to `true`, the resulting value of
+ this selector will be a list instead of a single string value.
+ type: boolean
+ default: false
+ required: false
+{% endconfiguration %}
+
+The output of this selector is the floor ID, or (in case `multiple` is set to
+`true`) a list of floor IDs.
+
+```yaml
+# Example floor selector output result, when multiple is set to false
+first_floor
+
+# Example floor selector output result, when multiple is set to true
+- first_floor
+- second_floor
+```
+
+### Example floor selectors
+
+An example floor selector only shows floors that have one or more lights or
+switches provided by the [ZHA](/integrations/zha) integration.
+
+```yaml
+floor:
+ entity:
+ integration: zha
+ domain:
+ - light
+ - switch
+```
+
+Another example using the floor selector, which only shows floors that
+have one or more remote controls provided by the [deCONZ](/integrations/deconz)
+integration. Multiple floors can be selected.
+
+```yaml
+floor:
+ multiple: true
+ device:
+ - integration: deconz
+ manufacturer: IKEA of Sweden
+ model: TRADFRI remote control
+```
+
## Icon selector
The icon selector shows an icon picker that allows the user to select an icon.
@@ -755,6 +887,43 @@ placeholder:
The output of this selector is a string containing the selected icon,
for example: `mdi:bell`.
+## Label selector
+
+The label selector shows a label finder that can pick labels. The value of the
+input is the label ID. If `multiple` is set to `true`, the value is a list
+of label IDs.
+
+![Screenshot of the label selector](/images/blueprints/selector-label.png)
+
+In its most basic form, this selector doesn't require any options.
+It will show all labels.
+
+```yaml
+label:
+```
+
+{% configuration text %}
+multiple:
+ description: >
+ Allows selecting multiple labels. If set to `true`, the resulting value of
+ this selector will be a list instead of a single string value.
+ type: boolean
+ default: false
+ required: false
+{% endconfiguration %}
+
+The output of this selector is the label ID, or (in case `multiple` is set to
+`true`) a list of label IDs.
+
+```yaml
+# Example label selector output result, when multiple is set to false
+energy_saving
+
+# Example label selector output result, when multiple is set to true
+- energy_saving
+- christmas_decorations
+```
+
## Language selector
The language selector allows a user to pick a language from a list of languages.
@@ -910,7 +1079,7 @@ mode:
The output of this selector is a number, for example: `42`
-### Example number selectors
+### Example number selectors
An example number selector that allows a user a percentage, directly in a
regular number input box.
@@ -1209,7 +1378,7 @@ action:
-### Example target selectors
+### Example target selectors
An example target selector that only shows targets that at least provide one
or more lights, provided by the [ZHA](/integrations/zha) integration.
diff --git a/source/_docs/blueprint/tutorial.markdown b/source/_docs/blueprint/tutorial.markdown
index 5dd5c86ba584..98908e5f51ec 100644
--- a/source/_docs/blueprint/tutorial.markdown
+++ b/source/_docs/blueprint/tutorial.markdown
@@ -1,6 +1,22 @@
---
title: "Creating an automation blueprint"
description: "Tutorial on creating an automation blueprint."
+related:
+ - docs: /docs/configuration/
+ title: "Editing the configuration file"
+ - docs: /docs/configuration/yaml/
+ - docs: /docs/automation/yaml/
+ title: "YAML used in automations"
+ - docs: /docs/scripts/
+ title: Scripts
+ - docs: /docs/blueprint/selectors/
+ title: Blueprint selectors
+ - docs: /docs/blueprint/schema/
+ title: Blueprint schema
+ - docs: /docs/blueprint/
+ title: About blueprints
+ - docs: /docs/automation/using_blueprints/
+ title: Using automation blueprints
---
@@ -273,17 +289,3 @@ For this tutorial, we're going to share it on GitHub Gists. This is a good optio
### Share on the Blueprint Exchange
If you follow the [Rules and format for posting](/get-blueprints), you can share your blueprint on the Home Assistant Blueprint Exchange forum. This option is accessible to the general Home Assistant community but recommended only for your original blueprints. Please don't post this tutorial to the Blueprint Exchange, but instead, remember this as an option for releasing your real blueprints.
-
-## Related topics
-
-**Prerequisites**
-- [Editing the configuration file](/docs/configuration/)
-- [YAML](/docs/configuration/yaml/), and specifically, [YAML used in automations](/docs/automation/yaml/)
-- [Scripts](/docs/scripts/)
-
-**Blueprints**
-
-- [Blueprint selectors](/docs/blueprint/selectors/)
-- [Blueprint schema](/docs/blueprint/schema/)
-- [About blueprints](/docs/blueprint/)
-- [Using automation blueprints](/docs/automation/using_blueprints/)
diff --git a/source/_docs/configuration.markdown b/source/_docs/configuration.markdown
index b02e1a6e379c..ade0f779d0a9 100644
--- a/source/_docs/configuration.markdown
+++ b/source/_docs/configuration.markdown
@@ -1,45 +1,90 @@
---
title: "Configuration.yaml"
description: "Configuring Home Assistant via text files."
+related:
+ - docs: /docs/configuration/yaml/
+ title: YAML syntax
+ - docs: /docs/configuration/secrets
+ title: Storing credentials in `secrets.yaml` file
+ - docs: /common-tasks/os/#backups
+ title: Creating and restoring backups
+ - docs: /integrations/backup/docs/tools/dev-tools/#reloading-the-yaml-configuration
+ title: Creating backups for Home Assistant Container and Core
+ - docs: /docs/tools/dev-tools/#reloading-the-yaml-configuration
+ title: Reloading the YAML configuration from developer tools
+ - docs: /common-tasks/os/#configuring-access-to-files
+ title: Configuring file access on the Operating System
+ - docs: /common-tasks/supervised/#configuring-access-to-files
+ title: Configuring file access on Supervised
+ - docs: docs/configuration/troubleshooting/
+ title: Troubleshooting the configuration
---
-While you can configure most of Home Assistant directly from the user interface under {% my config %}, some parts need you to edit `configuration.yaml`. This file contains {% term integrations %} to be loaded along with their configurations. Throughout the documentation you will find snippets that you can add to your configuration file to enable specific functionality.
+While you can configure most of Home Assistant from the user interface, for some integrations, you need to edit the `configuration.yaml` file. This file contains {% term integrations %} to be loaded along with their configurations. Throughout the documentation, you will find snippets that you can add to your configuration file to enable specific functionality.
-If you run into trouble while configuring Home Assistant, refer to the [configuration troubleshooting page](/docs/configuration/troubleshooting/) and the [`configuration.yaml` examples](/examples/#example-configurationyaml).
+
+
+Example of a configuration.yaml file, accessed using the File editor add-on on a Home Assistant Operating System installation.
+
## Editing `configuration.yaml`
-The easiest option to edit `configuration.yaml` is to use the {% my supervisor_addon title="Studio Code Server add-on" addon="a0d7b954_vscode" %}. This add-on runs VS Code, which offers live syntax checking and auto-fill of various Home Assistant entities. See [here](/common-tasks/supervised/#installing-and-using-the-visual-studio-code-vsc-add-on) for details. If unavailable on your system, use {% my supervisor_addon title="File Editor add-on" addon="core_configurator" %} instead. Again, details can be found [here](/common-tasks/supervised/#installing-and-using-the-file-editor-add-on).
+How you edit your `configuration.yaml` file depends on your editor preferences and the [installation method](/installation/#advanced-installation-methods) you used to set up Home Assistant.
-If you prefer to use a file editor on your computer, use the {% my supervisor_addon title="Samba add-on" addon="core_samba" %} to access the files as a network share. More details can be found [here](/common-tasks/supervised/#installing-and-using-the-samba-add-on).
+### To set up access to the files and prepare an editor
-The path to your configuration directory can be found in the Home Assistant {% term frontend %} by going to {% my system_health title="Settings > System > Repairs > System information from the top right menu" %}
+Before you can edit a file, you need to know how to access files in Home Assistant and setup an editor.
+File access depends on your [installation method](/installation/#advanced-installation-methods). If you use {% term "Home Assistant Operating System" %} or {% term "Home Assistant Supervised" %}, you can use editor add-ons, for example, but not if you use {% term "Home Assistant Core" %} or {% term "Home Assistant Container" %}.
-![Show system menu option](/images/screenshots/System_information_menu.png)
+1. To set up file access, follow the steps for your [installation method](/installation/#advanced-installation-methods):
-Right under the version you are running, you will find what path Home Assistant has loaded the configuration from.
-![Screenshot showing the top of the system information panel](/images/screenshots/System_information.png)
+ - [Configuring file access on the Operating System](/common-tasks/os/#configuring-access-to-files)
+ - If you are unsure which option to choose, install the [file editor add-on](/common-tasks/os/#installing-and-using-the-file-editor-add-on).
+ - Alternatively, use the [VS Code add-on](/common-tasks/os/#installing-and-using-the-visual-studio-code-vsc-add-on). This editor offers live syntax checking and auto-fill of various Home Assistant entities. But it looks more complex than the file editor.
+ - If you prefer to use a file editor on your computer, use the [Samba add-on](/common-tasks/os/#installing-and-using-the-samba-add-on).
+ - [Configuring file access on Supervised](/common-tasks/supervised/#configuring-access-to-files)
+ - [File editor add-on](/common-tasks/supervised/#installing-and-using-the-file-editor-add-on).
+ - [VS Code add-on](/common-tasks/supervised/#installing-and-using-the-visual-studio-code-vsc-add-on).
+ - [Samba add-on](/common-tasks/supervised/#installing-and-using-the-samba-add-on).
-_If you use Home Assistant Container, you can find `configuration.yaml` in the config folder that you mounted in your container._
+2. To look up the to your configuration directory, go to {% my system_health title="**Settings** > **System** > **Repairs**" %}.
+ - Select the three dots menu and select **System information**.
-_If you use Home Assistant Operating System, you can find `configuration.yaml` in the `/config` folder of the installation._
+ ![Show system information option](/images/screenshots/System_information_menu.png)
-_If you use Home Assistant Core, you can find `configuration.yaml` in the config folder passed to the `hass` command (default is `~/.homeassistant`)._
+3. Find out the location of the **Configuration directory**.
-## Reloading changes
+ ![Screenshot showing the top of the system information panel](/images/screenshots/System_information.png)
+ - Unless you changed the file structure, the default is as follows: -
+ - {% term "Home Assistant Operating System" %}: the `configuration.yaml` is in the `/config` folder of the installation.
+ - {% term "Home Assistant Container" %}: the `configuration.yaml` is in the config folder that you mounted in your container.
+ - {% term "Home Assistant Core" %}: the `configuration.yaml` is in the config folder passed to the `hass` command (default is `~/.homeassistant`).
-Most integrations in Home Assistant that do not interact with {% term devices %} or {% term services %} can reload changes made to their configuration in `configuration.yaml`. To do this, go to {% my server_controls title="Developer Tools > YAML" %} and scroll down to the YAML configuration reloading section (alternatively, hit "c" anywhere in the UI and search for it).
+## Validating the configuration
-If you can't see your integration listed there, you will need to restart Home Assistant for changes to take effect.
+After changing configuration or automation files, you can check if the configuration is valid. A configuration check is also applied automatically when you reload the configuration or when you restart Home Assistant.
-
+The method for running a configuration check depends on your [installation type](/installation/#advanced-installation-methods). Check the common tasks for your installation type:
- To test any changes to your configuration files from the command line, check out the common tasks for [operating system](/common-tasks/os/#configuration-check), [supervised](/common-tasks/supervised/#configuration-check), [container](/common-tasks/container/#configuration-check), [core](/common-tasks/core/#configuration-check) for how to do that. Configuration changes can also be tested using the UI by navigating to {% my server_controls title="Developer Tools > YAML" %} and clicking "Check Configuration". For the button to be visible, you must enable "Advanced Mode" on your {% my profile title="User Profile" %}.
+- [Configuration check on Operating System](/common-tasks/os/#configuration-check)
+- [Configuration check on Supervised](/common-tasks/supervised/#configuration-check)
+- [Configuration check on Container](/common-tasks/container/#configuration-check)
+- [Configuration check on Core](/common-tasks/core/#configuration-check)
-
+## Reloading the configuration to apply changes
-## Migrating to a new system
+For configuration changes to become effective, the configuration must be reloaded. Most integrations in Home Assistant (that do not interact with {% term devices %} or {% term services %}) can reload changes made to their configuration in `configuration.yaml` without needing to restart Home Assistant.
-The preferred way of migrating to a new system is by {% my supervisor_backups title="making a backup" %}. Once you have created the backup on the old system, you can download it to the system that is running the Home Assistant frontend. When setting up the new system, you may use the backup. Alternatively, you can upload it to your new system using the _Upload backup_ menu option of the _Backups_ menu. Then, a restore of the uploaded backup on the new system concludes the migration.
+1. Under **Settings**, select the three dots menu (top right), select **Restart Home Assistant** > **Quick reload**.
-If you run the container or core installation methods, you will need to manually make a backup of your configuration folder. Be aware that some of the files you need start with `.`, which is hidden by default from both `ls` (in SSH), in Windows Explorer, and macOS Finder. You'll need to ensure that you're viewing all files before you copy them.
+ ![Settings, three dot menu, restart Home Assistant](/images/docs/configuration/settings_restart_ha.png)
+
+2. If you find that your changes were not applied, you need to restart.
+ - Select **Restart Home Assistant**.
+ - Note: This interrupts automations and scripts.
+
+ ![Reload and restart buttons](/images/docs/configuration/reload_restart.png)
+
+## Troubleshooting the configuration
+
+If you run into trouble while configuring Home Assistant, refer to the [configuration troubleshooting page](/docs/configuration/troubleshooting/) and the [`configuration.yaml` examples](/examples/#example-configurationyaml).
\ No newline at end of file
diff --git a/source/_docs/configuration/basic.markdown b/source/_docs/configuration/basic.markdown
index 5fc503984b87..afac72742f32 100644
--- a/source/_docs/configuration/basic.markdown
+++ b/source/_docs/configuration/basic.markdown
@@ -1,117 +1,32 @@
---
title: "Setup basic information"
description: "Setting up the basic info of Home Assistant."
+related:
+ - docs: /integrations/homeassistant/
+ - docs: /docs/configuration/
---
-As part of the default onboarding process, Home Assistant can detect your location from IP address geolocation. Home Assistant will automatically select a unit system and time zone based on this location. You may adjust this during onboarding, or afterwards at {% my general title="Settings > System > General" %}, network related configuration is found under {% my network title="Settings > System > Network" %}.
+As part of the default onboarding process, Home Assistant can detect your location from IP address geolocation. Home Assistant will automatically select a unit system and time zone based on this location. If you didn't adjust this directly during onboarding, you can do it later.
-If you prefer YAML, you can add the following information to your `configuration.yaml`:
+
+
+ Screenshot showing the General settings page.
+
-```yaml
-homeassistant:
- name: Home
- latitude: 32.87336
- longitude: 117.22743
- elevation: 430
- unit_system: metric
- currency: USD
- country: US
- time_zone: "America/Los_Angeles"
- external_url: "https://www.example.com"
- internal_url: "http://homeassistant.local:8123"
- allowlist_external_dirs:
- - "/usr/var/dumping-ground"
- - "/tmp"
- allowlist_external_urls:
- - "http://images.com/image1.png"
- media_dirs:
- media: "/media"
- recordings: "/mnt/recordings"
-```
+The general settings described here are managed by the [Home Assistant Core integration](/integrations/homeassistant/). If you are interested in the services offered by this integration, check out the integration documentation.
-
+## Editing the general settings
- You will not be able to edit anything in {% my general title="Settings > System > General" %} in the UI if you are using YAML configuration for any of the following: name, latitude, longitude, elevation, unit_system, temperature_unit, time_zone, external_url, internal_url, country, currency. Additionally, some options are only visible after "Advanced Mode" is enabled on your {% my profile title="User Profile" %}.
+To change the general settings that were defined during onboarding, follow these steps:
-
+1. Go to {% my general title="**Settings** > **System** > **General**" %} and make your changes.
+2. To change network-related configuration, such as the network name, go to {% my network title="**Settings** > **System** > **Network**" %}.
+3. If some of the settings are not visible, you may need to enable **Advanced mode**.
+ - In the bottom left, select your user name to go to your {% my profile title="**User profile**" %}, and enable **Advanced mode**.
+4. **Troubleshooting**: If any of the settings are grayed out and can't be edited, this is because they are defined in the [`configuration.yaml` file](/docs/configuration/).
+ - If you prefer editing the settings in the UI, you have to delete these entries from the [`configuration.yaml` file](/docs/configuration/).
+ - For more information about the general settings in YAML, refer to the [Home Assistant Core integration documentation](/integrations/homeassistant/).
-{% configuration %}
-name:
- description: Name of the location where Home Assistant is running.
- required: false
- type: string
-latitude:
- description: Latitude of your location required to calculate the time the sun rises and sets.
- required: false
- type: float
-longitude:
- description: Longitude of your location required to calculate the time the sun rises and sets.
- required: false
- type: float
-elevation:
- description: Altitude above sea level in meters. Impacts sunrise data.
- required: false
- type: integer
-unit_system:
- description: "`metric` for Metric, `us_customary` for US Customary. This also sets temperature_unit, Celsius for Metric and Fahrenheit for US Customary"
- required: false
- type: string
-temperature_unit:
- description: "Override temperature unit set by unit_system. `C` for Celsius, `F` for Fahrenheit."
- required: false
- type: string
-time_zone:
- description: "Pick your time zone from the column **TZ** of [Wikipedia's list of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)"
- required: false
- type: string
-currency:
- description: "Pick your currency code from the column **Code** of [Wikipedia's list of ISO 4217 active codes](https://en.wikipedia.org/wiki/ISO_4217#Active_codes)"
- required: false
- type: string
- default: "EUR"
-external_url:
- description: "The URL that Home Assistant is available on from the internet. For example: `https://example.duckdns.org:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported."
- required: false
- type: string
-internal_url:
- description: "The URL that Home Assistant is available on from your local network. For example: `http://homeassistant.local:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported."
- required: false
- type: string
-customize:
- description: "[Customize](/docs/configuration/customizing-devices/) entities."
- required: false
- type: string
-customize_domain:
- description: "[Customize](/docs/configuration/customizing-devices/) all entities in a domain."
- required: false
- type: string
-customize_glob:
- description: "[Customize](/docs/configuration/customizing-devices/) entities matching a pattern."
- required: false
- type: string
-allowlist_external_dirs:
- description: List of folders that can be used as sources for sending files.
- required: false
- type: list
-allowlist_external_urls:
- description: List of external URLs that can be fetched. URLs can match specific resources (e.g., `http://10.10.10.12/images/image1.jpg`) or a relative path that allows access to resources within it (e.g., `http://10.10.10.12/images` would allow access to anything under that path)
- required: false
- type: list
-media_dirs:
- description: A mapping of local media sources and their paths on disk.
- required: false
- type: map
-language:
- description: "Default language used by Home Assistant. This may, for example, influence the language used by voice assistants. The language should be specified as an RFC 5646 language tag, and must be a language which Home Assistant is translated to."
- required: false
- type: string
- default: "en"
-country:
- description: "Country in which Home Assistant is running. This may, for example, influence radio settings to comply with local regulations. The country should be specified as an ISO 3166.1 alpha-2 code. Pick your country from the column **Code** of [Wikipedia's list of ISO 31661 alpha-2 officially assigned code codes](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements)"
- required: false
- type: string
-{% endconfiguration %}
+ ![Setting fields are grayed out because the configuration settings stored in configuration.yaml file](/images/docs/configuration/general-settings-stored-in-config-yaml.png)
-## Reload core service
-
-Home Assistant offers a service to reload the core configuration while Home Assistant is running called {% my developer_call_service service="homeassistant.reload_core_config" %}. This allows you to change any of the above sections and see it being applied without having to restart Home Assistant. To call this service, go to the "{% my developer_services %}" tab under {% my developer_services title="Developer Tools" %}, select the {% my developer_call_service service="homeassistant.reload_core_config" %} service and click the "CALL SERVICE" button. Alternatively, you can press the "Location & Customizations" button under {% my server_controls title="Developer Tools > YAML" %}.
+5. To apply the changes, follow the steps on [reloading the configuration](/docs/configuration/#reloading-configuration-changes).
diff --git a/source/_docs/configuration/customizing-devices.markdown b/source/_docs/configuration/customizing-devices.markdown
index e289cdc10e8a..6a2d8e64db82 100644
--- a/source/_docs/configuration/customizing-devices.markdown
+++ b/source/_docs/configuration/customizing-devices.markdown
@@ -1,129 +1,33 @@
---
title: "Customizing entities"
description: "Simple customization for entities."
+related:
+ - docs: /integrations/homeassistant/
+ - docs: /docs/configuration/
+ title: Home Assistant Core integration documentation
---
-## Changing the entity ID
+## Changing entity name and entity ID
-You can use the UI to change the entity ID and friendly name of supported entities. To do this:
+After adding a new device, the entity may not have a name and the automatically assigned entity ID might look very technical. If you like, you can use your own naming concept for devices.
-1. Select the {% term entity %}, either from the frontend or by selecting the info button next to the entity in the Developer Tools "States" tab.
-2. Select the cog icon in the right corner of the entity's dialog
-![Entity dialog box.](/images/docs/configuration/customizing-entity-dialog.png)
-3. Enter the new name or the new entity ID (remember not to change the domain of the entity - the part before the `.`)
-![Settings for entity.](/images/docs/configuration/customizing-entity.png)
-4. Select *Update*
+To change the entity ID and friendly name of supported entities, follow these steps:
-If your entity is not supported, or you cannot customize what you need via this method, please see below for more options.
+1. Go to {% my entities title="**Settings** > **Devices & services** > **Entities**" %} and select the entity from the list.
+2. In the top right corner, select the cog icon.
-## Customizing entities
+ ![Entity dialog box with cog icon.](/images/docs/configuration/customizing-entity-dialog.png)
-By default, all of your devices will be visible and have a default icon determined by their domain. You can customize the look and feel of your front page by altering some of these parameters. This can be done by overriding attributes of specific entities.
+3. Enter the new name or the new entity ID.
+ - For example, the entity ID here could be `light.bedroom_ligthstrip`.
+ - Do not change the domain of the entity - the part before the `.`.
-### Possible values
+ ![Settings for entity.](/images/docs/configuration/customizing-entity.png)
-{% configuration customize %}
-friendly_name:
- description: Name of the entity as displayed in the UI.
- required: false
- type: string
-entity_picture:
- description: URL to use as picture for entity.
- required: false
- type: string
-icon:
- description: "Any icon from [Material Design Icons](https://pictogrammers.com/library/mdi/). Prefix name with `mdi:`, ie `mdi:home`. Note: Newer icons may not yet be available in the current Home Assistant release."
- required: false
- type: string
-assumed_state:
- description: For switches with an assumed state two buttons are shown (turn off, turn on) instead of a switch. By setting `assumed_state` to `false` you will get the default switch icon.
- required: false
- type: boolean
- default: true
-device_class:
- description: Sets the class of the device, changing the device state and icon that is displayed on the UI (see below). It does not set the `unit_of_measurement`.
- required: false
- type: device_class
- default: None
-unit_of_measurement:
- description: Defines the units of measurement, if any. This will also influence the graphical presentation in the history visualization as continuous value. Sensors with missing `unit_of_measurement` are showing as discrete values.
- required: false
- type: string
- default: None
-initial_state:
- description: Sets the initial state for automations, `on` or `off`.
- required: false
- type: boolean
- default: None
-{% endconfiguration %}
+4. Select **Update**.
+5. If you have used this entity in automations and scripts, you need to rename the entity ID there, too.
+ - Go to {% my automations title="**Settings** > **Automations & Scenes**" %} open the respective tab and find your automation or script.
-### Device class
+ ![Edit entity ID in automation.](/images/docs/configuration/edit_entity-id_in_automation.png)
-Device class is currently supported by the following platforms:
-
-- [Binary sensor](/integrations/binary_sensor/)
-- [Button](/integrations/button/)
-- [Cover](/integrations/cover/)
-- [Humidifier](/integrations/humidifier/)
-- [Media player](/integrations/media_player/)
-- [Number](/integrations/number/)
-- [Sensor](/integrations/sensor/)
-- [Switch](/integrations/switch/)
-
-### Manual customization
-
-
-
-If you implement `customize`, `customize_domain`, or `customize_glob` you must make sure it is done inside of `homeassistant:` or it will fail.
-
-
-
-```yaml
-homeassistant:
- name: Home
- unit_system: metric
- # etc
-
- customize:
- # Add an entry for each entity that you want to overwrite.
- thermostat.family_room:
- entity_picture: https://example.com/images/nest.jpg
- friendly_name: Nest
- switch.wemo_switch_1:
- friendly_name: Toaster
- entity_picture: /local/toaster.jpg
- switch.wemo_switch_2:
- friendly_name: Kitchen kettle
- icon: mdi:kettle
- switch.rfxtrx_switch:
- assumed_state: false
- media_player.my_media_player:
- source_list:
- - Channel/input from my available sources
- # Customize all entities in a domain
- customize_domain:
- light:
- icon: mdi:home
- automation:
- initial_state: "on"
- # Customize entities matching a pattern
- customize_glob:
- "light.kitchen_*":
- icon: mdi:description
- "scene.month_*_colors":
- icon: mdi:other
-```
-
-### Reloading customize
-
-Home Assistant offers a service to reload the core configuration while Home Assistant is running. This allows you to change your customize section and see your changes being applied without having to restart Home Assistant.
-
-To reload customizations, navigate to Developer Tools > YAML and then press the "Reload Location & Customizations" button. If you don't see this, enable Advanced Mode on your user profile page first.
-
-You can also use the [Quick bar](/docs/tools/quick-bar/#command-palette), and choose "Reload Location & Customizations".
-
-Alternatively, you can reload via service call. Navigate to Developer Tools > Services tab, select `homeassistant.reload_core_config` from the dropdown and press the "Call Service" button.
-
-
-New customize information will be applied the next time the state of the entity gets updated.
-
+If your entity is not supported, or you cannot customize what you need via this method, you need to edit the settings in your [`configuration.yaml` file](/docs/configuration/). For a detailed description of the entity configuration variables and device class information, refer to the [Home Assistant Core integration documentation](/integrations/homeassistant/).
diff --git a/source/_docs/configuration/secrets.markdown b/source/_docs/configuration/secrets.markdown
index df67cfd84302..559f1ff4dc20 100644
--- a/source/_docs/configuration/secrets.markdown
+++ b/source/_docs/configuration/secrets.markdown
@@ -1,6 +1,11 @@
---
title: "Storing secrets"
description: "Storing secrets outside of your configuration.yaml."
+related:
+ - docs: /docs/configuration/
+ title: configuration.yaml file
+ - docs: /docs/configuration/splitting_configuration/
+ title: Splitting the configuration
---
The `configuration.yaml` file is a plain-text file, thus it is readable by anyone who has access to the file. The file contains passwords and API tokens which need to be redacted if you want to share your configuration. By using `!secret` you can remove any private information from your configuration files. This separation can also help you to keep easier track of your passwords and API keys, as they are all stored at one place and no longer spread across the `configuration.yaml` file or even multiple YAML files if you [split up your configuration](/docs/configuration/splitting_configuration/).
@@ -42,7 +47,7 @@ When you start splitting your configuration into multiple files, you might end u
- A `secrets.yaml` located in the same folder as the YAML file referencing the secret,
- next, parent folders will be searched for a `secrets.yaml` file with the secret, stopping at the folder with the main `configuration.yaml`.
-To see where secrets are being loaded from, you can either add an option to your `secrets.yaml` file or use the `check_config` script. The latter is only available for Home Assistant Core installations given it's available through [`hass`](/docs/tools/hass/).
+To see where secrets are being loaded from, you can either add an option to your `secrets.yaml` file or use the `check_config` script. The latter is only available for {% term "Home Assistant Core" %} installations given it's available through [`hass`](/docs/tools/hass/).
*Option 1*: Print where secrets are retrieved from to the Home Assistant log by adding the following to `secrets.yaml`:
diff --git a/source/_docs/configuration/splitting_configuration.markdown b/source/_docs/configuration/splitting_configuration.markdown
index 59cf7fec3c0d..c4f459b03dd6 100644
--- a/source/_docs/configuration/splitting_configuration.markdown
+++ b/source/_docs/configuration/splitting_configuration.markdown
@@ -1,6 +1,13 @@
---
title: "Splitting up the configuration"
description: "Splitting the configuration.yaml into several files."
+related:
+ - docs: /docs/configuration/
+ title: configuration.yaml file
+ - docs: /examples/#example-configurationyaml
+ title: Example configuration files by the community
+ - docs: /docs/configuration/packages
+ title: Using packages to organize configuration files
---
So you've been using Home Assistant for a while now and your `configuration.yaml` file brings people to tears because it has become so large. Or, you simply want to start off with the distributed approach. Here's how to split the `configuration.yaml` into more manageable (read: human-readable) pieces.
@@ -536,8 +543,3 @@ automation ui: !include automations.yaml
```
[discord]: https://discord.gg/c5DvZ4e
-
-## Related topics
-
-- [Example configuration files by the community](/examples/#example-configurationyaml)
-- [Using packages to organize configuration files](/docs/configuration/packages)
\ No newline at end of file
diff --git a/source/_docs/configuration/state_object.markdown b/source/_docs/configuration/state_object.markdown
index 346d98224aad..4736c0da719d 100644
--- a/source/_docs/configuration/state_object.markdown
+++ b/source/_docs/configuration/state_object.markdown
@@ -16,8 +16,9 @@ All states will always have an entity id, a state and a timestamp when last upda
| `state.domain` | Domain of the entity. Example: `light`. |
| `state.object_id` | Object ID of entity. Example: `kitchen`. |
| `state.name` | Name of the entity. Based on `friendly_name` attribute with fall back to object ID. Example: `Kitchen Ceiling`. |
-| `state.last_updated` | Time the state was written to the state machine in UTC time. Note that writing the exact same state including attributes will not result in this field being updated. Example: `2017-10-28 08:13:36.715874+00:00`. |
-| `state.last_changed` | Time the state changed in the state machine in UTC time. This is not updated when there are only updated attributes. Example: `2017-10-28 08:13:36.715874+00:00`. |
+| `state.last_changed` | Time the state changed in the state machine in UTC time. This is not updated if only state attributes change. Example: `2017-10-28 08:13:36.715874+00:00`. |
+| `state.last_reported`| Time the state was written to the state machine in UTC time. This timestamp is updated regardless of any change to the state or a state attribute. Example: `2017-10-28 08:13:36.715874+00:00`. |
+| `state.last_updated` | Time the state or state attributes changed in the state machine in UTC time. This is not updated if neither state nor state attributes changed. Example: `2017-10-28 08:13:36.715874+00:00`. |
| `state.attributes` | A dictionary with extra attributes related to the current state. |
| `state.context` | A dictionary with extra attributes related to the context of the state. |
diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown
index 21e11ffcdee2..ec6c535fe9cf 100644
--- a/source/_docs/configuration/templating.markdown
+++ b/source/_docs/configuration/templating.markdown
@@ -458,6 +458,51 @@ The same thing can also be expressed as a test:
{% endraw %}
+### Floors
+
+- `floors()` returns the full list of floor IDs.
+- `floor_id(lookup_value)` returns the floor ID for a given device ID, entity ID, area ID, or area name. Can also be used as a filter.
+- `floor_name(lookup_value)` returns the floor name for a given device ID, entity ID, area ID, or floor ID. Can also be used as a filter.
+- `floor_areas(floor_name_or_id)` returns the list of area IDs tied to a given floor ID or name. Can also be used as a filter.
+
+#### Floors examples
+
+{% raw %}
+
+```text
+{{ floors() }} # ['floor_id']
+```
+
+```text
+{{ floor_id('First floor') }} # 'first_floor'
+```
+
+```text
+{{ floor_id('my_device_id') }} # 'second_floor'
+```
+
+```text
+{{ floor_id('sensor.sony') }} # 'first_floor'
+```
+
+```text
+{{ floor_name('first_floor') }} # 'First floor'
+```
+
+```text
+{{ floor_name('my_device_id') }} # 'Second floor'
+```
+
+```text
+{{ floor_name('sensor.sony') }} # 'First floor'
+```
+
+```text
+{{ floor_areas('first_floor') }} # ['living_room', 'kitchen']
+```
+
+{% endraw %}
+
### Areas
- `areas()` returns the full list of area IDs
@@ -508,10 +553,12 @@ The same thing can also be expressed as a test:
{% endraw %}
-### Integrations
+### Entities for an integration
- `integration_entities(integration)` returns a list of entities that are associated with a given integration, such as `hue` or `zwave_js`.
-- `integration_entities(title)` if you have multiple instances set-up for an integration, you can also use the title you've set for the integration in case you only want to target a specific device bridge.
+- `integration_entities(config_entry_title)` if you have multiple entries set-up for an integration, you can also use the title you've set for the integration in case you only want to target a specific entry.
+
+If there is more than one entry with the same title, the entities for all the matching entries will be returned, even if the entries are for different integrations. It's not possible to search for entities of an untitled integration.
#### Integrations examples
@@ -527,6 +574,78 @@ The same thing can also be expressed as a test:
{% endraw %}
+### Labels
+
+- `labels()` returns the full list of label IDs, or those for a given area ID, device ID, or entity ID.
+- `label_id(lookup_value)` returns the label ID for a given label name.
+- `label_name(lookup_value)` returns the label name for a given label ID.
+- `label_areas(label_name_or_id)` returns the list of area IDs tied to a given label ID or name.
+- `label_devices(label_name_or_id)` returns the list of device IDs tied to a given label ID or name.
+- `label_entities(label_name_or_id)` returns the list of entity IDs tied to a given label ID or name.
+
+Each of the label template functions can also be used as a filter.
+
+#### Labels examples
+
+{% raw %}
+
+```text
+{{ labels() }} # ['christmas_decorations', 'energy_saver', 'security']
+```
+
+```text
+{{ labels("living_room") }} # ['christmas_decorations', 'energy_saver']
+```
+
+```text
+{{ labels("my_device_id") }} # ['security']
+```
+
+```text
+{{ labels("light.christmas_tree") }} # ['christmas_decorations']
+```
+
+```text
+{{ label_id('Energy saver') }} # 'energy_saver'
+```
+
+```text
+{{ label_name('energy_saver') }} # 'Energy saver'
+```
+
+```text
+{{ label_areas('security') }} # ['driveway', 'garden', 'porch']
+```
+
+```text
+{{ label_devices('energy_saver') }} # ['deadbeefdeadbeefdeadbeefdeadbeef']
+```
+
+```text
+{{ label_entities('security') }} # ['camera.driveway', 'binary_sensor.motion_garden', 'camera.porch']
+```
+
+{% endraw %}
+
+### Issues
+
+- `issues()` returns all open issues as a mapping of (domain, issue_id) tuples to the issue object.
+- `issue(domain, issue_id)` returns a specific issue for the provided domain and issue_id.
+
+#### Issues examples
+
+{% raw %}
+
+```text
+{{ issues() }} # { ("homeassistant", "deprecated_yaml_ping"): {...}, ("cloud", "legacy_subscription"): {...} }
+```
+
+```text
+{{ issue('homeassistant', 'python_version') }} # {"breaks_in_ha_version": "2024.4", "domain": "homeassistant", "issue_id": "python_version", "is_persistent": False, ...}
+```
+
+{% endraw %}
+
### Immediate if (iif)
A common case is to conditionally return a value based on another value.
diff --git a/source/_docs/configuration/yaml.markdown b/source/_docs/configuration/yaml.markdown
index 6cd475272897..bbc31bf9c0cc 100644
--- a/source/_docs/configuration/yaml.markdown
+++ b/source/_docs/configuration/yaml.markdown
@@ -1,13 +1,30 @@
---
-title: "YAML"
-description: "Details about YAML to configure Home Assistant."
+title: "YAML syntax"
+description: "Details about the YAML syntax used to configure Home Assistant."
+related:
+ - docs: /docs/configuration/
+ title: configuration.yaml file
+ - docs: /docs/configuration/secrets/
+ title: Storing private data in separate file
+ - docs: /docs/automation/yaml/
+ title: Automation.yaml
+ - docs: /docs/configuration/troubleshooting/
+ title: Troubleshooting the configuration files
+ - docs: /docs/configuration/#validating-the-configuration
+ title: Validating the configuration
+ - url: https://developers.home-assistant.io/docs/documenting/yaml-style-guide/
+ title: YAML Style Guide for Home Assistant developers
---
-Home Assistant uses the [YAML](https://yaml.org/) syntax for configuration. YAML might take a while to get used to but is powerful in allowing you to express complex configurations.
+Home Assistant uses the [YAML](https://yaml.org/) syntax for configuration. While most integrations can be configured through the UI, some integrations require you to edit your [`configuration.yaml`](/docs/configuration/) file to specify its settings.
-While more and more integrations are configured through the UI, for some, you will add code in your [`configuration.yaml`](/docs/configuration/) file to specify its settings.
+## YAML Style Guide
-The following example entry assumes that you would like to set up the [notify integration](/integrations/notify) with the [pushbullet platform](/integrations/pushbullet).
+This page gives a high-level introduction to the YAML syntax used in Home Assistant. For a more detailed description and more examples, refer to the [YAML Style Guide for Home Assistant developers](https://developers.home-assistant.io/docs/documenting/yaml-style-guide/).
+
+## A first example
+
+The following YAML example entry assumes that you would like to set up the [notify integration](/integrations/notify) with the [pushbullet platform](/integrations/pushbullet).
```yaml
notify:
@@ -21,22 +38,20 @@ notify:
The basics of YAML syntax are block collections and mappings containing key-value pairs. Each item in a collection starts with a `-` while mappings have the format `key: value`. This is somewhat similar to a Hash table or more specifically a dictionary in Python. These can be nested as well. **Beware that if you specify duplicate keys, the last value for a key is used**.
+## Indentation in YAML
+
In YAML, indentation is important for specifying relationships. Indented lines are nested inside lines that are one level higher. In the above example, `platform: pushbullet` is a property of (nested inside) the `notify` integration.
Getting the right indentation can be tricky if you're not using an editor with a fixed-width font. Tabs are not allowed to be used for indentation. The convention is to use 2 spaces for each level of indentation.
-To check if your YAML syntax is correct before loading it into Home Assistant, you can use the third-party service [YAML Validator](https://codebeautify.org/yaml-validator/) (not maintained by the Home Assistant community).
-
-
-
-Pay attention to not storing private data (passwords, API keys, etc.) directly in your `configuration.yaml` file. Private data can be stored in either a [separate file](/docs/configuration/secrets/) or in [environmental variables](/docs/configuration/yaml/#using-environment-variables), which circumvents this security problem.
+## Comments
-
+Strings of text following a `#` are comments. They are ignored by the system. Comments explain in plain language what a particular code block is supposed to do. For future-you or someone else looking at the file.
-Strings of text following a `#` are comments and are ignored by the system.
+### Example with comment and nesting
The next example shows an [input_select](/integrations/input_select) integration that uses a block collection for the values of options.
-The other properties (like `name:`) are specified using mappings. Note that the second line just has `threat:` with no value on the same line. Here threat is the name of the input_select and the values for it are everything nested below it.
+The other properties (like `name:`) are specified using mappings. Note that the second line just has `threat:` with no value on the same line. Here, `threat` is the name of the input_select. The values for it are everything nested below it.
```yaml
input_select:
@@ -51,6 +66,8 @@ input_select:
initial: 0
```
+### Example of nested mapping
+
The following example shows nesting a collection of mappings in a mapping. In Home Assistant, this would create two sensors that each use the MQTT platform but have different values for their `state_topic` (one of the properties used for MQTT sensors).
```yaml
@@ -65,8 +82,8 @@ sensor:
### Environment variables
-On Home Assistant Core installations, you can include values from your system's environment variables with `!env_var`.
-Note that this will only work for Home Assistant Core installations, in a scenario where it is possible to specify these.
+On {% term "Home Assistant Core" %} installations, you can include values from your system's environment variables with `!env_var`.
+Note that this will only work for {% term "Home Assistant Core" %} installations, in a scenario where it is possible to specify these.
Regular Home Assistant users are recommended to use `!include` statements instead.
```yaml
@@ -120,3 +137,9 @@ Not quoting the value may generate an error such as:
```txt
not a valid value for dictionary value @ data
```
+
+## Validating YAML syntax
+
+With all these indents and rules, it is easy to make a mistake. The best way to check if your YAML syntax is correct (validate) depends on the editor you use. We can't list them all here.
+
+- If you edit the files directly in Home Assistant, refer to the section: [Validating the configuration](/docs/configuration/#validating-the-configuration)
diff --git a/source/_docs/energy/gas.markdown b/source/_docs/energy/gas.markdown
index ae0f109e8345..ec9b6ebbf106 100644
--- a/source/_docs/energy/gas.markdown
+++ b/source/_docs/energy/gas.markdown
@@ -31,4 +31,4 @@ We have worked with creator [Marcel Zuidwijk](https://www.zuidwijk.com) to devel
#### Read the Gas Meter using a magnetometer
-[Diaphragm gas meters](https://en.wikipedia.org/wiki/Gas_meter#Diaphragm/bellows_meters) are the most common type of gas meter, and their movement can frequently be observed with a magnetometer. The [QMC5883L](https://esphome.io/components/sensor/qmc5883l.html) is a common and inexpensive option that ESPHome supports. Many posts on the forums of users having luck with this method, such as [this one](https://community.home-assistant.io/t/water-gas-meter-monitoring-via-magnetometer-sine-wave-to-pulse-issue/245904).
+[Diaphragm/bellows gas meters](https://en.wikipedia.org/wiki/Gas_meter#Diaphragm/bellows_meters) are the most common type of gas meter, seen in almost all residential installations, and their movement can frequently be observed with a magnetometer. The [QMC5883L](https://esphome.io/components/sensor/qmc5883l.html) is a common and inexpensive option that ESPHome supports. A project that makes it easy to use this magnetometer and calibrate it is [this water-gas-meter project on GitHub](https://github.com/tronikos/esphome-magnetometer-water-gas-meter).
diff --git a/source/_docs/energy/water.markdown b/source/_docs/energy/water.markdown
index 699530796bae..a37d5ab79144 100644
--- a/source/_docs/energy/water.markdown
+++ b/source/_docs/energy/water.markdown
@@ -44,6 +44,10 @@ If your water meter lacks a rotary disk, magnetic disk, or coil. There are alter
- [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/
+If you have a Culligan Water Softener, you may be able to interface with the inbuilt `DEBUG PORT` and receive water usage stats including `Gallons` (gal), `Gallons Per Minute` (gal/min), and `Gallons to Recharge` (gal):
+
+- [cullAssistant](https://github.com/LelandSindt/cullAssistant) (ESPHome)
+
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)
@@ -60,6 +64,7 @@ Maybe you like to build one yourself?
- [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.
+- [Read water meter with magnetometer](https://github.com/tronikos/esphome-magnetometer-water-gas-meter) using [QMC5883L](https://esphome.io/components/sensor/qmc5883l.html), a common and inexpensive magnetometer. This should be compatible with all the water meters the Flume water sensor is compatible with, which is [compatible](https://help.flumewater.com/en/articles/1618594-is-the-flume-device-compatible-with-all-water-meters) with about 95% of water meters in the United States.
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/frontend/browsers.markdown b/source/_docs/frontend/browsers.markdown
deleted file mode 100644
index 18afa58b9606..000000000000
--- a/source/_docs/frontend/browsers.markdown
+++ /dev/null
@@ -1,93 +0,0 @@
----
-title: "Browsers"
-description: "Browser compatibility list"
----
-
-Home Assistant requires a web browser to show the frontend and supports all major modern browsers. We don't test the web interface against all available browsers but this page tracks different browsers on various operating systems and should help you to pick a browser which works. The "Release" column contains the release number which was tested. This doesn't mean that older or newer releases will not work.
-
-If a browser is listed as working but you are still having problems, it is possible that some add-on or extension may be the problem. Some add-ons or extension are known to cause issue with the frontend, but it's not possible to test them all.
-
-If you are having issues with the frontend displaying correctly, you should disable all your add-ons or extensions and enable them one at a time. At last but not least, consider restarting your browser.
-
-We would appreciate if you help to keep this page up-to-date and add feedback.
-
-## Microsoft Windows
-
-| Browser | Release | State | Comments |
-| :------------------------ |:---------------|:-----------|:-------------------------|
-| Internet Explorer ([IE]) | 11 | Not supported | Does not support promises. |
-| Microsoft [Edge] | deli. Win 10 | works | Streaming updates not working. |
-| [Chrome] | 61.0.3163.100 | works | |
-| [Firefox] | 62.0.3 | works | |
-| [Iridium] | 48.2 | works | |
-| [Opera] | 42.0.2393.351 | works | |
-
-## macOS
-
-| Browser | Release | State | Comments |
-| :-------------------- |:---------------|:-----------|:-------------------------|
-| [Safari] | | works | Not working with Safari Technology Preview 112 beta |
-
-## Linux
-
-| Browser | Release | State | Comments |
-| :-------------------- |:---------------|:-----------|:-------------------------|
-| [Firefox] | 62.0 | works | |
-| [Midori] | 0.5.11 | works | |
-| [Chromium] | 69.0.3497.81 | works | |
-| [Conkeror] | 1.0.2 | works | |
-| [Tor Browser] | 7.0.8 | works | |
-| [Konqueror] | | unknown | |
-| [Uzbl] | 0.9.0 | works | |
-| [Opera] | 42.0.2393.351 | works | |
-| [Lynx] | 2.12 | fails | loads empty page |
-| [elinks] | | fails | page with manifest and import |
-| [w3m] | 0.5.3 | fails | display the icon shown while loading HA |
-| [Epiphany] | 3.18.5 | works | |
-| [surf] | 0.7 | works | |
-| [Chrome] | 71.0.3578.98 | works | |
-| [Waterfox] | 56.2.6 | fails | |
-
-## Android
-
-| Browser | Release | State | Comments |
-| :-------------------- |:---------------|:-----------|:-------------------------|
-| [Chrome] | 50.0.2661.89 | works | Can also be added to desktop |
-| [Firefox] | 46.0.1 | works | Can also be added to desktop |
-| [Opera] | 42.0.2246.112628 | works | Can also be added to desktop |
-
-## iOS
-
-| Browser | Release | State | Comments |
-| :-------------------- |:---------------|:-----------|:-------------------------|
-| [Safari] | | works | Can also be added to desktop. Not working in iOS 14 beta 5. |
-| [Chrome] | | works | Not working in iOS 14 beta 5. |
-
-There are reports that devices running with iOS prior to iOS 10, especially old iPads, are having trouble. Devices running iOS 14 beta 5, you will not be able to interact with Home Assistant controls.
-
-## webOS
-
-| Browser | Release | State | Comments |
-| :-------------------- |:---------------|:-----------|:-------------------------|
-| [LG webOS TV Built-in]| webOS 04.80.03 | works | including magic remote |
-
-[Chrome]: https://www.google.com/chrome/
-[Chromium]: https://www.chromium.org/
-[Conkeror]: http://conkeror.org/
-[Edge]: https://www.microsoft.com/en-us/edge
-[elinks]: http://elinks.or.cz/
-[Epiphany]: https://wiki.gnome.org/Apps/Web
-[Firefox]: https://www.mozilla.org/en-US/firefox/
-[IE]: https://support.microsoft.com/en-us/help/17621/internet-explorer-downloads
-[Iridium]: https://iridiumbrowser.de/
-[Konqueror]: https://konqueror.org/
-[Lynx]: https://lynx.browser.org/
-[Midori]: https://astian.org/en/midori-browser/
-[Opera]: https://www.opera.com/
-[Safari]: https://www.apple.com/safari/
-[surf]: https://surf.suckless.org/
-[Tor Browser]: https://www.torproject.org/
-[Uzbl]: https://www.uzbl.org/
-[w3m]: https://w3m.sourceforge.net/
-[Waterfox]: https://www.waterfox.net
-[LG webOS TV Built-In]: https://www.lg.com/uk/support/help-library/details-on-enjoying-internet-browsing-on-your-lg-webos-tv-CT00008334-1435838149474
diff --git a/source/_docs/locked_out.md b/source/_docs/locked_out.md
index c1ab8a227675..d8935e29b31c 100644
--- a/source/_docs/locked_out.md
+++ b/source/_docs/locked_out.md
@@ -1,6 +1,13 @@
---
title: "I'm locked out!"
description: "Options for regaining access"
+related:
+ - docs: /common-tasks/os/#listing-all-users-from-the-command-line
+ title: Listing all user names via command line
+ - url: https://yellow.home-assistant.io/guides/factory-reset/
+ title: Reset the Yellow
+ - url: https://green.home-assistant.io/guides/reset/
+ title: Reset the Green
---
The sections below deal with recovering from a situation where you are not able to sign in,
@@ -9,7 +16,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 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.
+If you are using the {% term "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,9 +138,3 @@ 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/organizing.markdown b/source/_docs/organizing.markdown
new file mode 100644
index 000000000000..5091baaac10a
--- /dev/null
+++ b/source/_docs/organizing.markdown
@@ -0,0 +1,55 @@
+---
+title: "Grouping your assets"
+description: "Grouping your assets makes it easier to find them and allows you to target groups in automations."
+related:
+ - docs: /docs/organizing/areas/
+ title: Areas
+ - docs: /docs/organizing/floors/
+ title: Floors
+ - docs: /docs/organizing/labels/
+ title: Labels
+ - docs: /docs/organizing/categories/
+ title: Categories
+---
+
+Once you have more devices, you may want to target entire groups of devices in automations. It also becomes more challenging to find items in lists. There are a few tools to group your assets: [Areas](#areas), [floors](#floors), [labels](#labels), and [categories](#categories).
+
+| Taxonomy | Automation target | Entity can have multiple |
+| -------- | ----------------- | ------------------------ |
+| Area | ✅ | ❌ |
+| Floor | ✅ | ❌ |
+| Label | ✅ | ✅ |
+| Category | ❌ | ❌ |
+
+## Area
+
+- Groups {% term devices %} and {% term entities %}.
+- Can be assigned to one floor.
+- Reflects a physical area (or room) in your home.
+- Can be used in automations: Allows targeting an entire group of devices with a service call. For example, turning off all the lights in the living room.
+
+- Areas can also be used to automatically generate cards, such as the [Area card](/dashboards/area/).
+
+## Floor
+
+- Groups areas.
+- {% term Devices %} and {% term entities %} cannot be assigned to floors, but to areas only.
+- Can have multiple areas.
+- Can be used in automations and scripts as a target for actions. For example, to turn off all the lights on the downstairs floor when you go to bed.
+
+
![Screenshots showing areas settings page, which now also shows the areas grouped by floor.](/images/organizing/floors.png)
+
+## Labels
+
+- Can be assigned to areas, devices, entities, automations, scenes, scripts, and helpers.
+- Can be used in automations and scripts as a target for actions and services.
+- Labels can also be used to filter data in tables. For example, you can filter the list of devices to show only devices with the label `heavy energy usage` or turn these devices off when there is not a lot of solar energy available.
+
+
![Screenshots showing the new labels assigned to automations.](/images/organizing/labels.png)
+
+## Category
+
+- Groups items in a table.
+- Categories are unique for each table. The automations page can have different categories than the scene, scripts, or helpers settings page.
+
+
![Screenshots the new categories. Automations are grouped into their categories, making it easier to get an overview or to filter them.](/images/organizing/categories.png)
diff --git a/source/_docs/organizing/areas.markdown b/source/_docs/organizing/areas.markdown
new file mode 100644
index 000000000000..9b132256f525
--- /dev/null
+++ b/source/_docs/organizing/areas.markdown
@@ -0,0 +1,46 @@
+---
+title: "Areas"
+description: "Group your devices and entities in areas and group areas in floors."
+related:
+ - docs: /docs/organizing/areas/
+ title: Areas
+ - docs: /docs/organizing/
+ - docs: /docs/organizing/labels/
+ title: Labels
+ - docs: /docs/organizing/categories/
+ title: Categories
+ - docs: /docs/configuration/templating/#areas
+ title: Using areas in template
+---
+
+An area in Home Assistant is a logical grouping of {% term devices %} and {% term entities %} that are meant to match areas (or rooms) in the physical world of your home. For example, the "Living room" area groups devices and entities in your living room. Areas allow you to target an entire group of devices with a service call. For example, turning off all the lights in the living room.
+Areas can be assigned to floors. Areas can also be used to automatically generate cards, such as the [Area card](/dashboards/area/).
+
+## Creating an area
+
+Follow these steps to create a new area from the **Areas** view.
+
+1. Go to {% my areas title="**Settings** > **Areas, labels & zones**" %} and select **Create area**.
+2. In the dialog, enter the area details:
+ - Give the area a **Name** (required).
+ - Add an icon (We use [Material icons](https://pictogrammers.com/library/mdi/)).
+ - Assign the area to a floor.
+ - If you have not created floors yet, you can [create a new one](/docs/organizing/floors/#creating-a-floor).
+ - The number can be negative. For example for underground floors.
+ - This number can later be used for sorting.
+ - Add an image representing that area.
+ - Add an **Alias**.
+ - Aliases are alternative names used in [voice assistants](/voice_control/aliases/) to refer to an area, entity, or floor.
+
+ ![Create area dialog](/images/organizing/create_area_01.png)
+3. Select **Add**.
+
+ **Result**: A new area is created.
+
+## Assigning areas to floors and add labels
+
+If an area has not yet been assigned to a floor, it is shown in the **Unassigned areas** section. Follow these steps to assign an area to a floor.
+
+1. Go to {% my areas title="**Settings** > **Areas, labels & zones**" %} and select **Create area**.
+2. On the area card, select the pencil icon.
+3. In the dialog, select the floor and add labels, if you like.
diff --git a/source/_docs/organizing/categories.markdown b/source/_docs/organizing/categories.markdown
new file mode 100644
index 000000000000..261332fbc02c
--- /dev/null
+++ b/source/_docs/organizing/categories.markdown
@@ -0,0 +1,56 @@
+---
+title: "Categories"
+description: "Use categories to group and filter your table items"
+related:
+ - docs: /docs/organizing/areas/
+ title: Areas
+ - docs: /docs/organizing/floors/
+ title: Floors
+ - docs: /docs/organizing/labels/
+ title: Labels
+---
+
+Categories let you group and filter items in a table. Like labels, categories allow grouping irrespective of the items physical location. For example, on the automations page, you can create the categories “Notifications” or “NFC tags” to view your automations grouped or filtered. These categories group automations on the automation page, but have no effect anywhere else. Categories are unique for each table. The automations page can have different categories than the scene, scripts, or helpers settings page.
+
+## Creating a category
+
+Follow these steps to create a new category.
+
+1. Go to {% my automations title="**Settings** > **Automations & Scenes**" %} and open the respective tab.
+2. In the top left, select the **Filters** button.
+
+ ![Select the filter button](/images/organizing/filters_01.png)
+3. Select **Category**, then **Add category**.
+4. Enter a name, select an icon and select **Add**.
+
+ **Result**: A new category is created.
+
+## Assigning a category
+
+1. Go to {% my automations title="**Settings** > **Automations & Scenes**" %} and open the respective tab.
+2. To assign a category to a single item:
+ - Find the item in the list and select the three dots menu.
+ - Select **Assign category** and select the category from the list.
+ - If the category is not in the list, select **Add new category** and make a new one.
+3. To assign a category to multiple items:
+ - Select the
![Multiselect icon](/images/organizing/multiselect_icon.png)
button.
+ - From the list, select all the items to which you want to apply a category.
+ - In the top right corner, select **Move to category**.
+ - Then, select the category from the list.
+4. Once categories are applied, the table items are grouped by those categories.
+ - The example shows 2 categories: Coffee and housekeeping.
+
+ ![Group table items by category](/images/organizing/category_02.png)
+
+## Editing or deleting a category
+
+To rename or delete a category, follow these steps:
+
+1. Go to {% my automations title="**Settings** > **Automations & Scenes**" %} and open the respective tab.
+2. In the top left, select the **Filters** button.
+
+ ![Select the filter button](/images/organizing/filters_01.png)
+3. In the list, find the category you want to edit and select the three dot menu next to it.
+4. Select **Edit category** or **Delete category**.
+
+ ![Screenshot showing the edit and delete buttons for categories](/images/organizing/edit-delete-category.png)
diff --git a/source/_docs/organizing/filtering.markdown b/source/_docs/organizing/filtering.markdown
new file mode 100644
index 000000000000..97aea10bfbfe
--- /dev/null
+++ b/source/_docs/organizing/filtering.markdown
@@ -0,0 +1,56 @@
+---
+title: "Filtering your assets"
+description: "Filter for items in tables."
+related:
+ - docs: /docs/organizing/floors/
+ title: Floors
+ - docs: /docs/organizing/labels/
+ title: Labels
+ - docs: /docs/organizing/areas/
+ title: Areas
+ - docs: /docs/organizing/categories/
+ title: Categories
+ - docs: /docs/organizing/
+ title: Grouping your assets
+ - docs: /common-tasks/general/
+ title: Enabling or disabling entities and automations
+---
+
+When working with tables, you can select multiple elements to apply an action on multiple items at once. If you have [grouped](/docs/organizing/) your assets by assigning them to floors, areas, labels, or directories you can also filter your data accordingly.
+
+## Selecting multiple items in a table
+
+1. In your table, select the
![Multiselect icon](/images/organizing/multiselect_icon.png)
button.
+
+ ![Screenshots point out the enable selection mode button in the toolbar of the tables in Home Assistant](/images/blog/2024-04/enable-selection-mode.png)
+
+2. In the list, select the items of interest.
+
+ ![Selecting multiple elements in a list](/images/organizing/multiselect_01.png)
+
+3. You can now apply changes to all selected elements, such as [applying labels](/docs/organzing/labels/) or [enabling or disabling entities and automations](/common-tasks/general/).
+
+## Filtering items in a table
+
+You can filter a table so that only items matching certain criteria are shown.
+
+1. In the top left corner above the table, select the **Filters** button.
+
+ ![Select the filter button](/images/organizing/filters_01.png)
+
+2. In the filters panel, select your filter criteria.
+ - You can filter for [floors](/docs/organizing/floors/), [areas](/docs/organizing/areas/), [labels](/docs/organizing/labels/), and [categories](/docs/organizing/categories/) if you have previously defined them.
+
+ ![Screenshots showing the filter panel that tables can have, allowing you to easily find what you are looking for](/images/organizing/filter-panel.png)
+
+## Grouping and sorting items in a table
+
+You can group items in a table according to certain criteria. The number of shown items stays the same. No items will be hidden.
+
+1. In the top right above the table, select the **Group by** button.
+2. The items will be grouped according to the criteria you chose.
+ - In the example, the items are grouped by manufacturer.
+
+ ![Select the Group by button](/images/organizing/table_group_01.png)
+
+3. To sort the items, select the **Sort by** button.
diff --git a/source/_docs/organizing/floors.markdown b/source/_docs/organizing/floors.markdown
new file mode 100644
index 000000000000..d4db0cb84cf8
--- /dev/null
+++ b/source/_docs/organizing/floors.markdown
@@ -0,0 +1,39 @@
+---
+title: "Floors"
+description: "Group your areas per floor"
+related:
+ - docs: /docs/organizing/areas/
+ title: Areas
+ - docs: /docs/organizing/
+ - docs: /docs/organizing/labels/
+ title: Labels
+ - docs: /docs/configuration/templating/#floors
+ title: Using floors in templates
+ - docs: /voice_control/aliases/
+ title: Using floor alias for voice assistants
+---
+
+A floor in Home Assistant is a logical grouping of areas meant to match your home's physical floors. Devices and entities
+cannot be assigned to floors directly but to areas. Floors can be used in automations and scripts as a target for actions. For example, to turn off all the lights on the downstairs floor when you go to bed.
+
+## Creating a floor
+
+Follow these steps to create a new floor.
+
+1. Go to {% my areas title="**Settings** > **Areas, labels & zones**" %} and select **Create floor**.
+2. In the dialog, enter the floor details:
+ - Give the floor a **Name** (required).
+ - Add a floor **Level**.
+ - The number can be negative. For example for underground floors.
+ - This number can later be used for sorting.
+ - Add an icon (We use [Material icons](https://pictogrammers.com/library/mdi/)).
+ - Add an **Alias**.
+ - Aliases are alternative names used in [voice assistants](/voice_control/aliases/) to refer to an entity, area, or floor.
+
+ ![Create floor dialog](/images/organizing/create_floor_01.png)
+3. Select **Add**.
+
+ **Result**: A new floor is created.
+
+ ![Create floor dialog](/images/organizing/create_floor_02.png)
+4. You can now [assign areas to that floor](/docs/organizing/areas/#assigning-areas-to-floors-and-add-labels).
diff --git a/source/_docs/organizing/labels.markdown b/source/_docs/organizing/labels.markdown
new file mode 100644
index 000000000000..0e95e8dc515b
--- /dev/null
+++ b/source/_docs/organizing/labels.markdown
@@ -0,0 +1,73 @@
+---
+title: "Labels"
+description: "Label your areas, devices, entities, automations, scripts, and helpers. Then, filter by label or run an automation on all entities with that label."
+related:
+ - docs: /docs/organizing/areas/
+ title: Areas
+ - docs: /docs/organizing/floors/
+ title: Floors
+ - docs: /docs/organizing/categories/
+ title: Categories
+ - docs: /docs/configuration/templating/#labels
+ title: Using labels in templates
+---
+
+Labels in Home Assistant allow grouping elements irrespective of their physical location or type. Labels can be assigned to areas, devices, entities, automations, scenes, scripts, and helpers. Labels can be used in automations and scripts as a target for actions and services. Labels can also be used to filter data. For example, you can filter the list of devices to show only devices with the label `heavy energy usage` or turn these devices off when there is not a lot of solar energy available.
+
+## Creating a label
+
+Follow these steps to create a new label from the **Labels** view.
+
+1. Go to {% my labels title="**Settings** > **Areas, labels & zones**" %} and on top, select the **Labels** tab.
+2. Select the **Create label** button.
+3. In the dialog, enter the label details:
+ - Give the label a **Name** (required).
+ - Add an icon (We use [Material icons](https://pictogrammers.com/library/mdi/)).
+ - Add a **Color**.
+
+ ![Create label dialog](/images/organizing/create_label_01.png)
+4. Select **Create**.
+
+ **Result**: A new label is created.
+
+## Applying labels
+
+Follow these steps to apply a label
+
+1. To apply a label to an area:
+ - Go to {% my areas title="**Settings** > **Areas, labels & zones**" %}.
+ - On the area card, select the pencil icon.
+ - Select one or more labels or select **Add new label** to create a new one.
+2. To apply a label to a device, entity, or helper:
+ - Go to **{% my integrations title="Settings > Devices & Services" %}** and open the respective tab.
+ - Select the
![Multiselect icon](/images/organizing/multiselect_icon.png)
button.
+ - From the list, select all the list entries to which you want to apply a label.
+ - In the top right corner, select **Add label**. Then, select the labels from the list.
+
+ ![Apply label](/images/organizing/labels_add_05.png)
+3. To apply a label to an automation, scene, or script:
+ - Go to {% my automations title="**Settings** > **Automations & Scenes**" %} and open the respective tab.
+ - Select the
![Multiselect icon](/images/organizing/multiselect_icon.png)
button.
+ - From the list, select all the list entries to which you want to apply a label.
+ - In the top right corner, select the three dots menu, then select **Add label**. Then, select the labels from the list.
+
+## Deleting a label
+
+Follow these steps to delete a label. It will be removed from all the list entries it was applied to.
+If you used this label in automations or script as targets, you need to adjust those.
+
+1. Go to {% my labels title="**Settings** > **Areas, labels & zones**" %} and on top, select the **Labels** tab.
+2. In the list of labels, find the label you want to delete and select the three dots menu.
+3. Select **Delete**.
+4. If you used this label in automations or script as targets, you need to adjust those.
+
+## Removing labels
+
+1. Go to the data table that contains the element from which you want to remove the label:
+ - Go to **{% my integrations title="Settings > Devices & Services" %}** and open the respective tab.
+ - Or, go to {% my automations title="**Settings** > **Automations & Scenes**" %} and open the respective tab.
+2. Select the
![Multiselect icon](/images/organizing/multiselect_icon.png)
button.
+ - From the list, select all the items from which you want to remove a label.
+ - In the top right corner, select the three dots menu, then select **Add label**.
+ - Then, deselect the checkbox for the label you want to remove.
+
diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown
index 71529b270f58..2860510c95a3 100644
--- a/source/_docs/scripts/conditions.markdown
+++ b/source/_docs/scripts/conditions.markdown
@@ -218,8 +218,8 @@ condition:
below: 25
```
-Number helpers (`input_number` entities), `number` and `sensor` entities that
-contain a numeric value, can be used in the `above` and `below`
+Number helpers (`input_number` entities), `number`, `sensor`, and `zone` entities
+that contain a numeric value, can be used in the `above` and `below`
options to make the condition more dynamic.
```yaml
diff --git a/source/_docs/scripts/service-calls.markdown b/source/_docs/scripts/service-calls.markdown
index d94130181ee9..ccd734c536cf 100644
--- a/source/_docs/scripts/service-calls.markdown
+++ b/source/_docs/scripts/service-calls.markdown
@@ -80,7 +80,7 @@ entity_id: switch.ac
### Using the Services Developer Tool
You can use the Services Developer Tool to test data to pass in a service call.
-For example, you may test turning on or off a 'group' (See [groups] for more info)
+For example, you may test turning on or off a 'group' (See [groups](/integrations/group/) for more info)
To turn a group on or off, pass the following info:
diff --git a/source/_docs/tools/check_config.markdown b/source/_docs/tools/check_config.markdown
index 245922939132..4a805d672cd0 100644
--- a/source/_docs/tools/check_config.markdown
+++ b/source/_docs/tools/check_config.markdown
@@ -1,9 +1,12 @@
---
title: "check_config"
description: "Script to perform a check of the current configuration"
+related:
+ - docs: /docs/configuration/#validating-the-configuration
+ title: Validating the configuration
---
-Test any changes to your `configuration.yaml` file before launching Home Assistant. This {% term script %} allows you to test changes without the need to restart Home Assistant.
+Test any changes to your `configuration.yaml` file before launching Home Assistant. This script allows you to test changes without the need to restart Home Assistant.
```bash
hass --script check_config
diff --git a/source/_docs/tools/dev-tools.markdown b/source/_docs/tools/dev-tools.markdown
index 627fac764f47..f33111825d3e 100644
--- a/source/_docs/tools/dev-tools.markdown
+++ b/source/_docs/tools/dev-tools.markdown
@@ -10,8 +10,8 @@ The dashboard contains a section called **Developer tools**.
Screenshot of Home Assistant's developer tools.
-| Section |Description |
-| ---------- |---------------------------------------------------------------------|
+| Section | Description |
+| ---------- | ------------------------------------------------------------------- |
| YAML | Lets you validate the configuration and trigger a reload or restart |
| States | Sets the representation of an entity |
| Services | Calls services from integrations |
@@ -24,7 +24,27 @@ Screenshot of Home Assistant's developer tools.
The Developer Tools is meant for **all** (not just for the developers) to quickly try out things - like calling services, updating states, raising events, and publishing messages in MQTT). It is also a necessary tool for those who write custom automations and scripts by hand. The following describes each of the sections in detail.
-## States
+## YAML tab
+
+The YAML tab provides buttons to trigger a check of configuration files and to reload the configuration. Reloading is needed to apply changes that you've made to the configuration.
+
+It is almost the same as the option under **Settings** > three dot menu (top right) > **Restart Home Assistant** > **Quick reload**. The only difference is that **Quick reload** reloads all the configuration, whereas this YAML tab allows you to only reload one specific configuration at a time.
+
+### Reloading the YAML configuration
+
+For configuration changes to become effective, the configuration must be reloaded. Most integrations in Home Assistant (that do not interact with {% term devices %} or {% term services %}) can reload changes made to their configuration in `configuration.yaml` without needing to restart Home Assistant.
+
+1. Go to {% my server_controls title="**Developer Tools** > **YAML**" %} and scroll down to the YAML configuration reloading section (alternatively, hit ["c"](/docs/tools/quick-bar/) anywhere in the UI and search for "reload").
+ - You are presented with a list of integrations, such as **Automations** or **Conversation**.
+
+ ![Reload configuration changes](/images/docs/configuration/reloading_config.png)
+
+2. Depending on what you find in the list, you can proceed with either reloading or you need to restart Home Assistant:
+ - If the integration is listed, select it to reload the settings.
+ - For example, if you've changed the [General settings](/docs/configuration/basic/), you can select **Location & customizations** to apply those changes.
+ - If the integration is not listed, you need to **Restart** Home Assistant for changes to take effect.
+
+## States tab
This section shows all the available entities, their corresponding state and the attribute values. The state and the attribute information is what Home Assistant sees at run time. To update the entity with a new state, or a new attribute value, click on the entity, scroll to the top, and modify the values, and click on “SET STATE” button.
@@ -35,7 +55,7 @@ For example, changing the `light.bedroom` state from `off` to `on` does not turn
The table containing all entities can be filtered for each column. The used search is a wildcard search meaning that if you input "office" in the entity column filter, every entity whose ID matches "\*office\*" will be shown. You can also add your own wildcards in the search input (e.g., "office\*light").
The attribute filter supports separate filters for attribute names and values, separated by a colon ":". So the filter "location:3" will result in the table showing all entities that have an attribute name that contains "location" and whose attribute value contains "3".
-## Services
+## Services tab
This section is used to call Services that are available in the ServiceRegistry.
@@ -48,6 +68,7 @@ A Service may also require additional input to be passed. It is commonly referre
When an entity is selected from the Entity dropdown, it automatically populates service data with the corresponding `entity_id`. The service data YAML can then be modified to pass additional \[optional\] parameters. The following is an illustration on how to call a `light.turn_on` service.
To turn on a light bulb, use the following steps:
+
1. Select `light.turn_on` from the Service dropdown
2. Select the entity (typically the light bulb) from the Entity dropdown (if no entity_id is selected, it turns on ALL lights)
3. If an entity is selected, the service data is populated with basic YAML that will be passed to the service. Additional data can also be passed by updating the YAML as below.
@@ -58,7 +79,7 @@ brightness: 255
rgb_color: [255, 0, 0]
```
-## Template editor
+## Template editor tab
The template editor provides a way to quickly test templates prior to placing them into automations and scripts. A code editor is on the left side and your real-time output is displayed in the preview on the right side.
@@ -66,7 +87,7 @@ By default, this will contain sample code that illustrates how templates can be
For more information about Jinja2, visit [Jinja2 documentation](https://jinja.palletsprojects.com/en/latest/templates/), and also read templating document [here](/docs/configuration/templating).
-## Events
+## Events tab
In the Events section, you can either fire an event on the event bus or subscribe to an event type in order to view the event data JSON.
@@ -118,7 +139,7 @@ Event 0 fired 9:53 AM:
}
```
-## Statistics
+## Statistics tab
The **Statistics** tab shows a list of long-term statistic entities. If the long term statistics is not working for an entity, a **Fix Issue** link is shown. Select it to view a description of the issue. There might also be an option to fix the issue.
@@ -130,15 +151,16 @@ icon. Use date & time to search for the incorrect data point and adjust the valu
![Screenshot showing adjusting the long-term statistic history value](/images/blog/2022-04/adjust-statistics.png)
-## Assist
+## Assist tab
The **Assist** tab lets you see how Home Assistant's Assist processes a sentence.
If no matching intent is found, then Assist is unable to interpret the sentence. If a matching intent was found, information is provided on the action that will be performed on which entities. The example below shows how the following sentence was parsed: *what lights are on in the office*.
+
- Assist found a matching intent: *HassGetState*.
- It found entities matching the domain: *lights*.
- The lights have the state *on*.
-- The lights are in the area *office*.
+- The lights are in the area *office*.
- The targets are the narrowed-down entities in scope.
![Example use of assist developer tools](/images/docs/developer-tools/Assist.png)
diff --git a/source/_docs/troubleshooting_general.markdown b/source/_docs/troubleshooting_general.markdown
index e50d69b8245f..9180465edbd0 100644
--- a/source/_docs/troubleshooting_general.markdown
+++ b/source/_docs/troubleshooting_general.markdown
@@ -1,6 +1,13 @@
---
title: "General troubleshooting"
description: "General troubleshooting information"
+related:
+ - docs: /docs/configuration/#editing-configurationyaml
+ title: Editing your configuration
+ - docs: /integrations/recovery_mode/
+ title: Recovery mode integration
+ - docs: /docs/locked_out/
+ title: Resetting your password
---
This page provides some information about more generic troubleshooting topics.
@@ -23,7 +30,7 @@ Recovery mode loads a minimum set of integrations to allow troubleshooting the c
You need to identify the issue in the configuration files and fix it there. The issue could be caused by something as simple as an invalid YAML file.
-- If you are running Home Assistant Operating System, you can install an add-on such as VS code to edit the configuration file if needed.
+- If you are running {% term "Home Assistant Operating System" %}, you can install an add-on such as VS code to edit the configuration file if needed.
- If you are still logged in, you can [edit your configuration](/docs/configuration/#editing-configurationyaml).
- In the Home Assistant user interface, open the add-on you usually use and edit the configuration file.
- Restart Home Assistant.
@@ -35,9 +42,3 @@ If your Home Assistant is acting up and you cannot identify a root cause, you ca
Safe mode loads Home Assistant Core, but no custom integrations, no custom cards, and no custom themes. If the issue does not persist in Safe mode, the issue is not with Home Assistant Core. Before reporting an issue, check if the issue persists in Safe mode.
To enable Safe mode, go to **Settings** > **System** > **Restart Home Assistant** (top right) > **Restart Home Assistant in safe mode**.
-
-## Related topics
-
-- [Editing your configuration](/docs/configuration/#editing-configurationyaml)
-- [Recovery mode integration](/integrations/recovery_mode/)
-- [Resetting your password](/docs/locked_out/)
\ No newline at end of file
diff --git a/source/_docs/z-wave/controllers.markdown b/source/_docs/z-wave/controllers.markdown
index 6f38d7184bae..b5f007108087 100644
--- a/source/_docs/z-wave/controllers.markdown
+++ b/source/_docs/z-wave/controllers.markdown
@@ -66,12 +66,7 @@ The alternative to a stick is a hub that supports Z-Wave. Home Assistant support
### 800 Series Controllers
-Z-Wave JS and Z-Wave JS UI do not support the following features available on most 800 series controllers.
-
-Unsupported:
-
- - Long Range
- - NVM Backup/Restore
+Z-Wave JS does not support Z-Wave Long Range yet.
### Aeotec Z-Stick
@@ -89,8 +84,8 @@ On Raspberry Pi 3 and 4, you need to disable the on-board Bluetooth since the bo
For both processes below you will need to insert your SD card into your PC and open the configuration file with your favorite text editor.
-- If you are using Home Assistant Operating System, once you mounted the disk, you will see the `config.txt` directly in the root directory.
-- If you are using Home Assistant Supervised, the config file is stored in the boot folder: `/boot/config.txt`.
+- If you are using {% term "Home Assistant Operating System" %}, once you mounted the disk, you will see the `config.txt` directly in the root directory.
+- If you are using {% term "Home Assistant Supervised" %}, the config file is stored in the boot folder: `/boot/config.txt`.
#### Raspberry Pi 5 procedure
diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html
index ab4d2de18439..5e7aa5c9a9f2 100644
--- a/source/_includes/asides/docs_navigation.html
+++ b/source/_includes/asides/docs_navigation.html
@@ -24,9 +24,17 @@
Topics
- {% active_link /docs/configuration/ Configuration.yaml %}
+ {% active_link /docs/frontend/ Frontend %}
- - {% active_link /docs/configuration/yaml/ YAML %}
+ - {% active_link /docs/organizing/ Organizing %}
+ - {% active_link /docs/frontend/icons/ Icons%}
+
+
+
+ Configuration
+
+ - {% active_link /docs/configuration/ Configuration.yaml %}
+ - {% active_link /docs/configuration/yaml/ YAML syntax%}
-
{% active_link /docs/configuration/basic/ Basic information %}
@@ -121,16 +129,6 @@ Topics
- {% active_link /docs/blueprint/selectors/ Selectors %}
-
- {% active_link /docs/frontend/ Frontend %}
-
- -
- {% active_link /docs/frontend/browsers/ Browser compatibility list %}
-
- - {% active_link /dashboards Dashboards %}
- - {% active_link /docs/frontend/icons/ Icons%}
-
-
{% active_link /docs/backend/ Backend %}
@@ -189,4 +187,4 @@ Topics
-
+
\ No newline at end of file
diff --git a/source/_includes/asides/organizing_navigation.html b/source/_includes/asides/organizing_navigation.html
new file mode 100644
index 000000000000..1b6b2225de3b
--- /dev/null
+++ b/source/_includes/asides/organizing_navigation.html
@@ -0,0 +1,21 @@
+
+
+
+
Organizing
+
+
diff --git a/source/_includes/common-tasks/backups.md b/source/_includes/common-tasks/backups.md
index d5d2c4b121ae..b8e89b4352bd 100644
--- a/source/_includes/common-tasks/backups.md
+++ b/source/_includes/common-tasks/backups.md
@@ -1,6 +1,8 @@
## Backups
-Backup of your Home Assistant and add-on data and configuration. They are stored in a compressed archive file (.tar). Backups are made from the backups panel under {% my supervisor_backups title="**Settings** > **System** > **Backups**" %}. There is also a service available that allows you to trigger the creation of a backup from an automation. By default, backups are stored locally in the `/backup` directory.
+Backup of your Home Assistant, add-on data, and configuration. Backups are used to [restore](#restoring-a-backup) a system or parts of it if a rollback is needed or to migrate your Home Assistant to new hardware. It is good practice to create a backup before updating.
+
+Backups are made from the backups panel under {% my supervisor_backups title="**Settings** > **System** > **Backups**" %}. There is also a [service](/integrations/hassio/#service-hassiobackup_full) available that allows you to trigger the creation of a backup from an automation. Backups are stored in a compressed archive file (.tar) and by default, stored locally in the `/backup` directory.
A full backup includes the following directories:
@@ -26,7 +28,9 @@ A partial backup consists of any number of the above default directories and ins
1. Go to {% my supervisor_backups title="**Settings** > **System** > **Backups**" %} in the UI.
2. Select the **Create backup** button in the lower right.
3. Provide a name for the backup.
-4. Choose full or partial.
+4. Choose **Full backup** or **Partial backup**.
+ - If you choose **Partial backup**, make sure to select Home Assistant and all the folders and add-ons you want to backup or migrate.
+ - Note that the number of add-ons increases the size of the backup as well as the time it takes to restore from that backup.
5. Optionally, enable password protection.
6. Select **Create** to begin the backup.
@@ -55,7 +59,7 @@ There are multiple ways to store the backup on another device:
- [Add a network storage location](/common-tasks/{{page.installation}}/#network-storage) for backups.
- [Change the default location](/common-tasks/{{page.installation}}/#change-default-backup-location) for backups.
-- **Option 4**: Or even better, create an automation to handle that.
+- **Option 4**: Or even better, create an automation to handle that, using one of the [backup services](/integrations/hassio/#service-hassiobackup_full).
- **Option 5**: Make use of a third-party add-on:
- [Google Drive Backup](https://github.com/sabeechen/hassio-google-drive-backup)
- [Dropbox Sync](https://github.com/danielwelch/hassio-dropbox-sync)
diff --git a/source/_includes/common-tasks/commandline.md b/source/_includes/common-tasks/commandline.md
index 455bb86d9da4..8505c66f962a 100644
--- a/source/_includes/common-tasks/commandline.md
+++ b/source/_includes/common-tasks/commandline.md
@@ -1,10 +1,5 @@
## Home Assistant via the command line
-
-
-Home Assistant upgrade process from the SSH command line
-
-
On the SSH command line, you can use the `ha` command to retrieve logs, check the details of connected hardware, and more.
### Home Assistant
@@ -103,11 +98,11 @@ Use "ha [command] --help" for more information about a command.
### Console access
-You can also access the Home Assistant Operating System via a directly connected keyboard and monitor, the console.
+You can also access the {% term "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.
+In {% term "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.
@@ -117,7 +112,7 @@ Note, if you have a Home Assistant Yellow, there is a red hardware button to wip
#### 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.
+In {% term "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.
diff --git a/source/_includes/common-tasks/configuration_check.md b/source/_includes/common-tasks/configuration_check.md
index cc68d4075187..4d0fbaa64bf1 100644
--- a/source/_includes/common-tasks/configuration_check.md
+++ b/source/_includes/common-tasks/configuration_check.md
@@ -2,12 +2,28 @@
{% if page.installation == "os" or page.installation == "supervised" %}
+After changing configuration or automation files, check if the configuration is valid before restarting Home Assistant Core.
+
+## To run a configuration check from the UI
+
+1. Go to {% my profile title="your user profile" %} and enable **Advanced Mode**.
+2. 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.
+ - It checks for valid YAML and valid config structures.
+3. If you need to do a more comprehensive configuration check, [run the check from the CLI](#to-run-a-configuration-check-from-the-cli).
+
+## To run a configuration check from the CLI
+
+Use the following command to check if the configuration is valid. The command line configuration check validates the YAML files and checks for valid config structures, as well as some other elements.
+
```bash
ha core check
```
{% elsif page.installation == "container" %}
+After changing configuration files, check if the configuration is valid before restarting Home Assistant Core.
+
_If your container name is something other than `homeassistant`, change that part in the examples below._
Run the full check:
@@ -42,19 +58,21 @@ docker exec homeassistant python -m homeassistant --script check_config --help
{% elsif page.installation == "core" %}
-1. Switch to the user that is running Home Assistant
+After changing configuration files, check if the configuration is valid before restarting Home Assistant Core.
+
+1. Switch to the user that is running Home Assistant.
```bash
sudo -u homeassistant -H -s
```
-2. Activate the virtual environment that Home Assistant is running in
+2. Activate the virtual environment that Home Assistant is running in.
```bash
source /srv/homeassistant/bin/activate
```
-3. Run the configuration check
+3. Run the configuration check.
Run the full check:
@@ -86,6 +104,6 @@ docker exec homeassistant python -m homeassistant --script check_config --help
hass --script check_config --help
```
-4. When that is complete restart the service for it to use the new files.
+4. When that is complete, restart the service for it to use the new files.
{% endif %}
diff --git a/source/_includes/common-tasks/data_disk.md b/source/_includes/common-tasks/data_disk.md
index 92712bf5143b..ece2e5c7dce0 100644
--- a/source/_includes/common-tasks/data_disk.md
+++ b/source/_includes/common-tasks/data_disk.md
@@ -1,6 +1,6 @@
## Using external data disk
-Home Assistant Operating System supports storing most data on an external storage medium, such as an USB attached SSD or HDD. This data disk contains not only user data but also most of the Home Assistant software as well (Core, Supervisor, etc.). This means a fast data disk will make the system overall much faster.
+{% term "Home Assistant Operating System" %} supports storing most data on an external storage medium, such as an USB attached SSD or HDD. This data disk contains not only user data but also most of the Home Assistant software as well (Core, Supervisor, etc.). This means a fast data disk will make the system overall much faster.
![Graphics showing the architecture of the data disk feature](/images/haos/usb-data-disk.png)
@@ -20,7 +20,7 @@ The data disk feature can be used on an existing installation without losing dat
- If you have been using a data disk previously with Home Assistant Operating System, you need to use your host computer to delete all partitions *before* using it as a data disk again.
+ If you have been using a data disk previously with {% term "Home Assistant Operating System" %}, you need to use your host computer to delete all partitions *before* using it as a data disk again.
diff --git a/source/_includes/common-tasks/enable_entities.md b/source/_includes/common-tasks/enable_entities.md
index 25981da8629c..4b05c795dd79 100644
--- a/source/_includes/common-tasks/enable_entities.md
+++ b/source/_includes/common-tasks/enable_entities.md
@@ -1,12 +1,17 @@
-## Enabling entities
+## Enabling or disabling elements
Some entities are disabled by default. To enable them, follow these steps:
-1. Go to **{% my integrations title="Settings > Devices & Services" %}** and select the integration of interest.
-2. Select **entities**.
-3. From the list of entities, select the entity you want to enable.
- ![Select entity from list](/images/screenshots/enable_entities_01.png)
-4. In the pop-up, select the cogwheel.
-5. Toggle the **Enabled** button.
- ![Enable entities](/images/screenshots/enable_entities_03.png)
-6. To save the changes, select **Update**.
+1. In Home Assistant, open the table of interest.
+ - To enable or disable entities, go to {% my entities title="**Settings** > **Devices & Services** > **Entities**" %}.
+ - To enable or disable automations, go to {% my automations title="**Settings** > **Automations & Scenes**" %}.
+2. [Enable multiselect](/docs/organizing/filtering) and select all the entities you want to enable or disable.
+3. In the top right corner, select the three dots menu, then select **Enable** or **Disable**.
+
+ ![Screenshot showing how to enable or disable multiple automations](/images/organizing/enable_disable.png)
+
+## Related topics
+
+- [Enable multiselect](/docs/organizing/filtering)
+- [Grouping your assets](/docs/organizing/)
+- [Filtering your assets](/docs/organizing/filtering)
diff --git a/source/_includes/common-tasks/enable_i2c.md b/source/_includes/common-tasks/enable_i2c.md
index 27877fd75f6d..8e89d4b89cd7 100644
--- a/source/_includes/common-tasks/enable_i2c.md
+++ b/source/_includes/common-tasks/enable_i2c.md
@@ -1,6 +1,6 @@
## Enable I2C
-Home Assistant using the Home Assistant Operating System which is a managed environment, which means you can't use existing methods to enable the I2C bus on a Raspberry Pi. In order to use I2C devices you will have to
+Home Assistant using the {% term "Home Assistant Operating System" %} which is a managed environment, which means you can't use existing methods to enable the I2C bus on a Raspberry Pi. In order to use I2C devices you will have to
- Enable I2C for the Home Assistant Operating System
- Setup I2C devices e.g. sensors
@@ -10,7 +10,7 @@ Home Assistant using the Home Assistant Operating System which is a managed envi
You will need:
- SD card reader
-- SD card with Home Assistant Operating System flashed on it
+- SD card with {% term "Home Assistant Operating System" %} flashed on it
Shutdown/turn-off your Home Assistant installation and unplug the SD card.
Plug the SD card into an SD card reader and find a drive/file system named
@@ -43,7 +43,7 @@ and make sure the first partition is available.
### Enable I2C via Home Assistant Operating System Terminal
-Alternatively, by attaching a keyboard and screen to your device, you can access the physical terminal to the Home Assistant Operating System.
+Alternatively, by attaching a keyboard and screen to your device, you can access the physical terminal to the {% term "Home Assistant Operating System" %}.
You can enable I2C via this terminal:
diff --git a/source/_includes/common-tasks/file_access.md b/source/_includes/common-tasks/file_access.md
index d84f669c218b..f5d13a7c62f7 100644
--- a/source/_includes/common-tasks/file_access.md
+++ b/source/_includes/common-tasks/file_access.md
@@ -4,7 +4,7 @@ Your Home Assistant Operating server includes two repositories by default: The o
One of the first things to take care of after installing Home Assistant OS is to provide yourself access to files. There are several add-ons commonly used for this, and most users employ a mix of various add-ons. Default directories on the host are mapped to the add-ons so that they can be accessed by the services any particular add-on might provide. On the host system these directories exist on the `/data` partition at `/mnt/data/supervisor/`.
-Using any of the add-ons listed below,the following directories are made available for access:
+Using any of the add-ons listed below, the following directories are made available for access:
- `addons`
- `backup`
@@ -47,15 +47,32 @@ The Terminal & SSH add-on also provides a web terminal which allows you to acces
### Installing and using the Visual Studio Code (VSC) add-on
-The Visual Studio Code add-on provides access through a feature packed web-based version of the Visual Studio Code editor and currently only supports AMD64 and aarch64/ARM64 machines. This add-on can be installed in the add-on store from the Community add-on repository. The add-on also provides access to the Home Assistant Command Line Interface (CLI) using VSC's built in terminal, which allows for checking logs, stopping and starting Home Assistant and add-ons, creating/restoring backups, and more. (See [Home Assistant via Command Line](https://www.home-assistant.io/hassio/commandline/) for further info).
+The **Studio Code Server** add-on provides access through a feature-packed web-based version of the Visual Studio Code editor. It currently only supports AMD64 and aarch64/ARM64 machines. The add-on also provides access to the Home Assistant Command Line Interface (CLI) using VSC's built-in terminal, which allows for checking logs, stopping, and starting Home Assistant and add-ons, creating/restoring backups, and more. (See [Home Assistant via Command Line](/hassio/commandline/) for further info).
-There is no configuration required for editing files within your `/config` directory. In order to enable access to other directories, it is necessary to edit the add-on's configuration from its configuration tab. See the add-on documentation for details.
+
+
+Example of a configuration.yaml file, accessed using the Studio Code Server add-on on a Home Assistant Operating System installation.
+
+
+To install and use the **Studio Code Server** in Home Assistant, follow these steps:
+
+1. To install the add-on, go to {% my supervisor_addon title="**Settings** > **Add-ons** > **Studio Code Server**" addon="a0d7b954_vscode" %} and install the add-on.
+2. Once you have the add-on installed, if you want, select the **Show in sidebar** option. Then, select **Start**.
+3. For information on configuration settings, open the **Documentation** tab.
+4. To start browsing, on the **Info** tab, select **Open Web UI**.
---
### Installing and using the File Editor add-on
-The File Editor add-on is a web-based file system browser and text editor. It is a more basic and light weight alternative to Visual Studio Code. YAML files are automatically checked for syntax errors while editing. To install and use the File Editor in Home Assistant, follow these steps:
+The **File Editor** add-on is a web-based file system browser and text editor. It is a more basic and light weight alternative to Visual Studio Code. YAML files are automatically checked for syntax errors while editing.
+
+
+
+Example of a configuration.yaml file, accessed using the File editor add-on on a Home Assistant Operating System installation.
+
+
+To install and use the File Editor in Home Assistant, follow these steps:
1. To install the add-on, go to {% my supervisor_addon title="**Settings** > **Add-ons** > **File editor**" addon="core_configurator" %}.
- Once you have the add-on installed, you can edit files within your `/config` directory.
diff --git a/source/_includes/common-tasks/flashing_m1s_otg.md b/source/_includes/common-tasks/flashing_m1s_otg.md
index 132a4bb26674..abefeba173b5 100644
--- a/source/_includes/common-tasks/flashing_m1s_otg.md
+++ b/source/_includes/common-tasks/flashing_m1s_otg.md
@@ -2,7 +2,7 @@
Home Assistant can be flashed to an ODROID-M1S by connecting the device directly to your computer via the USB-OTG connection on the front of the board.
Unlike other ODROID boards, the M1S does not have a socket for an optional eMMC module. It also does not have a separate flash chip that holds a dedicated bootloader.
-Instead, the M1S has a build-in 64GB eMMC soldered directly on the board that holds a bootloader by default. This guide will show you how to install the Home Assistant Operating System to the built-in eMMC.
+Instead, the M1S has a build-in 64GB eMMC soldered directly on the board that holds a bootloader by default. This guide will show you how to install the {% term "Home Assistant Operating System" %} to the built-in eMMC.
**Warning: Installing Home Assistant OS replaces the firmware and SPL on the eMMC with the mainline version provided by the Home Assistant OS. As a result, it is not possible to use the SD card with the EMMC2UMS image anymore, because the mainline SPL is not compatible with U-Boot in the EMMC2UMS image at this time (February 2024). This does not pose any problem for standard use, just makes it more complicated in case you want to return to the Hardkernel-provided OS (see [HK Recovery](#hk-recovery)).**
diff --git a/source/_includes/common-tasks/network_storage.md b/source/_includes/common-tasks/network_storage.md
index 00cf377105ed..540e8baa891c 100644
--- a/source/_includes/common-tasks/network_storage.md
+++ b/source/_includes/common-tasks/network_storage.md
@@ -13,7 +13,7 @@ To list all your currently connected network storages, go to **{% my storage tit
- You need to make sure you run a supported Home Assistant Supervised installation with the latest version of the [os-agent](https://github.com/home-assistant/os-agent). Make sure that your supervisor uses [slave bind propagation](https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation) for the data volume.
+ You need to make sure you run a supported {% term "Home Assistant Supervised" %} installation with the latest version of the [os-agent](https://github.com/home-assistant/os-agent). Make sure that your supervisor uses [slave bind propagation](https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation) for the data volume.
diff --git a/source/_includes/common-tasks/update.md b/source/_includes/common-tasks/update.md
index e4f924d70083..00498602479b 100644
--- a/source/_includes/common-tasks/update.md
+++ b/source/_includes/common-tasks/update.md
@@ -1,11 +1,9 @@
-## Update
+Best practice for updating Home Assistant Core:
-Best practice for updating a Home Assistant installation:
-
-1. Backup your installation{% if page.installation == "os" or page.installation == "supervised" %}, using the backup functionality Home Assistant offers{% endif %}.
+1. Backup your installation{% if page.installation == "os" or page.installation == "supervised" %}, using the [backup functionality](/common-tasks/os/#backups) Home Assistant offers{% endif %}.
2. Check the release notes for backward-incompatible changes on [Home Assistant release notes](/blog/categories/core/). Be sure to check all release notes between the version you are running and the one you are upgrading to. Use the search function in your browser (`CTRL + f` / `CMD + f`) and search for **Backward-incompatible changes**.
{% if page.installation == "os" or page.installation == "supervised" %}
-3. Select "Create backup before updating" in case you encounter an issue that requires a rollback.
+3. Select **Create backup before updating** in case you encounter an issue that requires a rollback.
4. Update Home Assistant.
5. Review persistent notifications and log to see if there are any issues with your configuration that need to be addressed.
{% endif %}
@@ -19,9 +17,9 @@ To update Home Assistant Core when you run Home Assistant {{ page.installation_n
- title: Using the UI
content: |
- 1. Open your Home Assistant UI
- 2. Navigate to the Settings panel
- 3. On the top you will be presented with an update notification
+ 1. Open your Home Assistant UI.
+ 2. Navigate to the **Settings** panel.
+ 3. On the top you will be presented with an update notification.
_If you do not see that notification you can click the overflow menu in the top right and select "Check for updates"._
diff --git a/source/_includes/installation/container.md b/source/_includes/installation/container.md
index 8d73f43d35fe..6dbf16734afd 100644
--- a/source/_includes/installation/container.md
+++ b/source/_includes/installation/container.md
@@ -1,7 +1,7 @@
## Install Home Assistant Container
{% if page.installation_type != 'alternative' %}
-These below instructions are for an installation of Home Assistant Container running in your own container environment, which you manage yourself. Any [OCI](https://opencontainers.org/) compatible runtime can be used, however this guide will focus on installing it with Docker.
+These below instructions are for an installation of {% term "Home Assistant Container" %} running in your own container environment, which you manage yourself. Any [OCI](https://opencontainers.org/) compatible runtime can be used, however this guide will focus on installing it with Docker.
Prerequisites
diff --git a/source/_includes/installation/core.md b/source/_includes/installation/core.md
index 045241c23f80..7e06ce3b64c8 100644
--- a/source/_includes/installation/core.md
+++ b/source/_includes/installation/core.md
@@ -3,9 +3,9 @@
{% if page.installation_type == 'windows' %}
### Install WSL
-To install Home Assistant Core on Windows, you will need to use the Windows Subsystem for Linux (WSL). Follow the [WSL installation instructions](https://docs.microsoft.com/windows/wsl/install-win10) and install Ubuntu from the Windows Store.
+To install {% term "Home Assistant Core" %} on Windows, you will need to use the Windows Subsystem for Linux (WSL). Follow the [WSL installation instructions](https://docs.microsoft.com/windows/wsl/install-win10) and install Ubuntu from the Windows Store.
-As an alternative, Home Assistant OS can be installed in a Linux guest VM. Running Home Assistant Core directly on Windows is not supported.
+As an alternative, Home Assistant OS can be installed in a Linux guest VM. Running {% term "Home Assistant Core" %} directly on Windows is not supported.
{% endif %}
diff --git a/source/_includes/installation/operating_system.md b/source/_includes/installation/operating_system.md
index 73f64578b7eb..53503a6e9c02 100644
--- a/source/_includes/installation/operating_system.md
+++ b/source/_includes/installation/operating_system.md
@@ -46,7 +46,7 @@ Variants without pre-installed Home Assistant:
Prerequisites
-This guide assumes that you have a dedicated {{ site.installation.types[page.installation_type].board }} PC to exclusively run the Home Assistant Operating System.
+This guide assumes that you have a dedicated {{ site.installation.types[page.installation_type].board }} PC to exclusively run the {% term "Home Assistant Operating System" %}.
- This is typically an Intel or AMD-based system.
- The system must be 64-bit capable and be able to boot using UEFI.
@@ -55,7 +55,7 @@ This guide assumes that you have a dedicated {{ site.installation.types[page.ins
Summary
1. First, you will need to configure your {{ site.installation.types[page.installation_type].board }} PC to use UEFI boot mode.
-2. Then, write the Home Assistant Operating System disk image to your boot medium.
+2. Then, write the {% term "Home Assistant Operating System" %} disk image to your boot medium.
@@ -88,7 +88,7 @@ Typically, an internal medium like S-ATA hard disk, S-ATA SSD, M.2 SSD, or a non
To write the HAOS image to the boot medium on your x86-64 hardware, there are 2 different methods:
- **Method 1 (recommended)**: Boot Ubuntu from a USB flash drive and install the Home Assistant Operating System from there. It also works on laptops and PCs with internal hard disks.
+ **Method 1 (recommended)**: Boot Ubuntu from a USB flash drive and install the {% term "Home Assistant Operating System" %} from there. It also works on laptops and PCs with internal hard disks.
**Method 2**: With this method, you write the Home Assistant Operating disk image directly onto a boot medium from your regular computer. The steps are a bit more complex. If you have non-removable internal mediums (for example because you are using a laptop) or do not have the necessary adapter (for example an USB to S-ATA adapter) use method 1 instead.
@@ -97,13 +97,13 @@ To write the HAOS image to the boot medium on your x86-64 hardware, there are 2
#### Required material
- Computer
-- The target x86-64 hardware, on which you want to install the Home Assistant Operating System (HAOS)
+- The target x86-64 hardware, on which you want to install the {% term "Home Assistant Operating System" %} (HAOS)
- USB flash drive (USB thumb drive is sufficient, it should be at least 4 GB in size)
- Internet connection
#### To install HAOS via Ubuntu from a USB flash drive
-1. **Notice**: This procedure will write the Home Assistant Operating System onto your device.
+1. **Notice**: This procedure will write the {% term "Home Assistant Operating System" %} onto your device.
- This means you will lose all the data as well as the previously installed operating system.
- Back up your data before carrying out this procedure.
2. Create a *live operating system* on a USB flash drive:
@@ -145,7 +145,7 @@ Use this method only if Method 1 does not work for you.
#### Required material
- Computer
-- The target x86-64 hardware, on which you want to install the Home Assistant Operating System (HAOS)
+- The target x86-64 hardware, on which you want to install the {% term "Home Assistant Operating System" %} (HAOS)
- Boot medium
- Internet connection
@@ -157,16 +157,16 @@ Use this method only if Method 1 does not work for you.
{% endif %}
-1. **Notice**: This procedure will write the Home Assistant Operating System onto your device.
+1. **Notice**: This procedure will write the {% term "Home Assistant Operating System" %} onto your device.
- This means you will lose all the data as well as the previously installed operating system.
- Back up your data before continuing with the next step.
2. Attach the Home Assistant boot medium ({{site.installation.types[page.installation_type].installation_media}}) to your computer.
{% if page.installation_type == 'odroid' %}
If you are using ODROID-M1, note that booting from NVMe is not supported. If you want to boot from eMMC, [update the firmware](https://github.com/home-assistant/operating-system/blob/dev/Documentation/boards/hardkernel/odroid-m1.md) before installing the image.
- If you are using a [Home Assistant Blue](/blue) or ODROID-N2+, you can [attach your device directly](/common-tasks/os/#flashing-an-odroid-n2).
+ If you are using a [Home Assistant Blue](/blue) or ODROID-N2+, you can [attach your device directly](/installation/odroid#flashing-an-odroid-n2).
- If you are using an ODROID-M1S, you need to follow this guide to [boot your device into UMS mode](/common-tasks/os/#flashing-an-odroid-m1s).
+ If you are using an ODROID-M1S, you need to follow this guide to [boot your device into UMS mode](/installation/odroid#flashing-an-odroid-m1s).
{% endif %}
3. Download and start
Balena Etcher. You may need to run it with administrator privileges on Windows.
4. Download the image to your computer.
@@ -184,9 +184,9 @@ Use this method only if Method 1 does not work for you.
```
{% if variant.key == "odroid-n2" %}
- [Guide: Flashing ODROID-N2 using OTG-USB](/hassio/flashing_n2_otg/)
+ [Guide: Flashing ODROID-N2 using OTG-USB](/installation/odroid#flashing-an-odroid-n2)
{% elsif variant.key == "odroid-m1s" %}
- [Guide: Flashing ODROID-M1S using OTG-USB](/hassio/flashing_m1s_otg/)
+ [Guide: Flashing ODROID-M1S using OTG-USB](/installation/odroid#flashing-an-odroid-m1s)
{% elsif variant.key == "rpi4" or variant.key == "rpi3" %}
*(64-bit is recommended)*
{% endif %}
@@ -472,6 +472,13 @@ With the Home Assistant Operating System installed and accessible, you can conti
{% include getting-started/next_step.html step="Onboarding" link="/getting-started/onboarding/" %}
+{% if page.installation_type == 'odroid' %}
+
+{% include common-tasks/flashing_n2_otg.md %}
+{% include common-tasks/flashing_m1s_otg.md %}
+
+{% endif %}
+
[generic-x86-64]: {{release_url}}/{{site.data.version_data.hassos['ova']}}/haos_generic-x86-64-{{site.data.version_data.hassos['generic-x86-64']}}.img.xz
[vmdk]: {{release_url}}/{{site.data.version_data.hassos['ova']}}/haos_ova-{{site.data.version_data.hassos['ova']}}.vmdk.zip
[vhdx]: {{release_url}}/{{site.data.version_data.hassos['ova']}}/haos_ova-{{site.data.version_data.hassos['ova']}}.vhdx.zip
diff --git a/source/_includes/installation/supervised.md b/source/_includes/installation/supervised.md
index decb6cde8697..c3806b199c7b 100644
--- a/source/_includes/installation/supervised.md
+++ b/source/_includes/installation/supervised.md
@@ -14,6 +14,6 @@ Unless you really need this installation type, you should install Home Assistant
supported). So, make sure you understand the requirements from step 1 above.
3. Then head over to
home-assistant/supervised-installer to set it up.
-Once the Home Assistant Supervised installation is running and Home Assistant is accessible you can continue with onboarding.
+Once the {% term "Home Assistant Supervised" %} installation is running and Home Assistant is accessible you can continue with onboarding.
{% include getting-started/next_step.html step="Onboarding" link="/getting-started/onboarding/" %}
diff --git a/source/_includes/related.html b/source/_includes/related.html
new file mode 100644
index 000000000000..ec7bf0e18a30
--- /dev/null
+++ b/source/_includes/related.html
@@ -0,0 +1,44 @@
+{% assign related_topics = "" | split: ',' %}
+{% assign related_links = "" | split: ',' %}
+{%- for entry in page.related -%}
+{%- if entry.url -%}
+{% assign related_links = related_links | push: entry %}
+{% else %}
+{% assign related_topics = related_topics | push: entry %}
+{% endif %}
+{%- endfor -%}
+{% if related_topics and related_topics.size != 0 %}
+
+{% endif %}
+{% if related_links and related_links.size != 0 %}
+
+{% endif %}
\ No newline at end of file
diff --git a/source/_includes/site/sidebar.html b/source/_includes/site/sidebar.html
index 21ca613da48a..410c1daad25c 100644
--- a/source/_includes/site/sidebar.html
+++ b/source/_includes/site/sidebar.html
@@ -9,6 +9,8 @@
{% include asides/common_tasks_navigation.html %}
{% elsif root == 'dashboards' %}
{% include asides/dashboards_navigation.html %}
+ {% elsif root == 'docs' and url_parts[2] == "organizing" %}
+ {% include asides/organizing_navigation.html %}
{% elsif root == 'developers' or root == 'help' %}
{% include asides/help_navigation.html %}
{% elsif root == 'getting-started' %}
diff --git a/source/_integrations/advantage_air.markdown b/source/_integrations/advantage_air.markdown
index 57681532b3a4..32c056c2bb2c 100644
--- a/source/_integrations/advantage_air.markdown
+++ b/source/_integrations/advantage_air.markdown
@@ -42,14 +42,12 @@ The wall-mounted Android tablet running the [MyPlace](https://play.google.com/st
### Climate
-The integration will create a climate entity for each air conditioning system found and for each zone that is temperature-controlled. The main climate entity will change its supported features and modes based on the [MyComfort](https://www.advantageair.com.au/wp-content/uploads/2019/10/MyComfort.pdf) temperature mode currently set.
+The integration will create a climate entity for each air conditioning system found and for each zone that is temperature-controlled. The main climate entity will have a preset for each [MyComfort](https://www.advantageair.com.au/wp-content/uploads/2019/10/MyComfort.pdf) temperature mode it supports.
- MyZone (default) - Use the MyZone select platform to pick which zone will be used for temperature control. Setting this to "Inactive" will use the return air vent temperature. e-zone systems do not support any MyComfort temperature modes, so will always be in the MyZone preset with MyZone set as "Inactive".
- MyTemp - Use the main climate entity to change between cool, heat, and off. Use the zone climate entities to set the desired temperature in each zone.
- MyAuto - Uses the average temperature of all zones for temperature control. When set to the Heat/Cool mode, you can adjust the heating and cooling target temperatures separately, and the MyAir system will automatically switch between heating and cooling as required.
-If you change MyComfort mode, you will need to restart Home Assistant or reload the integration.
-
### Cover
The integration will create a cover entity for each air conditioning zone that is not temperature controlled, allowing you to adjust the opening level manually from 0% to 100% in 5% increments.
diff --git a/source/_integrations/air_quality.markdown b/source/_integrations/air_quality.markdown
index 370e6f6c187e..0fc8d32f0a3f 100644
--- a/source/_integrations/air_quality.markdown
+++ b/source/_integrations/air_quality.markdown
@@ -1,5 +1,5 @@
---
-title: Air Quality
+title: Air quality
description: Instructions on how to add air quality sensors with Home Assistant
ha_release: 0.85
ha_domain: air_quality
@@ -10,7 +10,7 @@ ha_codeowners:
ha_integration_type: entity
---
-The `air_quality` base platform allows other integrations to process information about air quality and pollution details. It is used by integrations that provide an `air_quality` sensor - you can find those under the `health` [integrations](/integrations/#health).
+The **Air quality** {% term integration %} allows other integrations to process information about air quality and pollution details. It is used by integrations that provide an `air_quality` sensor - you can find those under the `health` [integrations](/integrations/#health).
The platforms cover the following levels (if they are available):
diff --git a/source/_integrations/airzone_cloud.markdown b/source/_integrations/airzone_cloud.markdown
index f0ea4164fb5e..502cc5870e2a 100644
--- a/source/_integrations/airzone_cloud.markdown
+++ b/source/_integrations/airzone_cloud.markdown
@@ -4,8 +4,9 @@ description: Instructions on how to integrate Airzone Cloud within Home Assistan
ha_release: 2023.6
ha_category:
- Binary sensor
+ - Climate
- Sensor
-ha_iot_class: Cloud Polling
+ha_iot_class: Cloud Push
ha_config_flow: true
ha_domain: airzone_cloud
ha_platforms:
@@ -57,6 +58,7 @@ For each Airzone zone (thermostat), the following *binary sensors* are created:
| Condition | Description |
| :------------------ | :------------------------------------------------------ |
+| air_quality_active | Indicates that the air quality control is running. |
| problems | Indicates that the current zone has errors or warnings. |
## Climate
@@ -79,10 +81,14 @@ For each Airzone Aidoo (HVAC Wi-Fi controller), the following *sensors* are crea
For each Airzone zone (thermostat), the following *sensors* are created:
-| Condition | Description |
-| :------------------ | :-------------------------------------------------- |
-| humidity | Measures the relative humidity in the current zone. |
-| temperature | Measures the temperature in the current zone. |
+| Condition | Description |
+| :------------------ | :-------------------------------------------------------- |
+| air_quality_index | Indicates the Air Quality Index in the current zone. |
+| humidity | Measures the relative humidity in the current zone. |
+| pm1 | Concentration of particles with a diameter of less than 1 µm. |
+| pm2_5 | Concentration of particles with a diameter of less than 2.5 µm. |
+| pm10 | Concentration of particles with a diameter of less than 10 µm. |
+| temperature | Measures the temperature in the current zone. |
For each Airzone WebServer (HVAC Wi-Fi controller), the following *sensors* are created:
diff --git a/source/_integrations/alexa.smart_home.markdown b/source/_integrations/alexa.smart_home.markdown
index e9bf2312a676..39bd72964a9e 100644
--- a/source/_integrations/alexa.smart_home.markdown
+++ b/source/_integrations/alexa.smart_home.markdown
@@ -105,7 +105,7 @@ Steps to Integrate an Amazon Alexa Smart Home Skill with Home Assistant:
## Requirements
-- The Alexa Smart Home API requires your Home Assistant instance to be accessible from the internet via HTTPS on port 443 using an SSL/TLS certificate. A self-signed certificate will work, but a certificate signed by [an Amazon approved certificate authority](https://ccadb-public.secure.force.com/mozilla/IncludedCACertificateReport) is recommended. Read more on [our blog](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) about how to set up encryption for Home Assistant. When running Home Assistant, using the [Duck DNS](/addons/duckdns/) add-on is the easiest method.
+- The Alexa Smart Home API requires your Home Assistant instance to be accessible from the internet via HTTPS on port 443 using an SSL/TLS certificate. A self-signed certificate will not work, but a public trusted certificate or a certificate signed by [an Amazon approved certificate authority](https://ccadb-public.secure.force.com/mozilla/IncludedCACertificateReport) should work. Read more on [our blog](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) about how to set up encryption for Home Assistant. When running Home Assistant, using the [Duck DNS](/addons/duckdns/) add-on is the easiest method.
- An Amazon Developer Account. Sign up [here](https://developer.amazon.com).
- An [Amazon Web Services (AWS)](https://aws.amazon.com/free/) account is required to host the Lambda function for your Alexa Smart Home Skill. [AWS Lambda](https://aws.amazon.com/lambda/pricing/) is free to use for up to 1-million requests and 1GB outbound data transfer per month.
@@ -240,9 +240,9 @@ Alexa needs to link your Amazon account to your Home Assistant account. Therefor
- `Authorization URI`: `https://[YOUR HOME ASSISTANT URL]/auth/authorize`
- `Access Token URI`: `https://[YOUR HOME ASSISTANT URL]/auth/token`
- It is also possible to use a different port by appending `:1443` or a similar port number, make sure your firewall is forwarding the correct port:
- - `Authorization URI`: `https://[YOUR HOME ASSISTANT URL]:1443/auth/authorize`
- - `Access Token URI`: `https://[YOUR HOME ASSISTANT URL]:1433/auth/token`
+ Although it is possible to assign a different port, Alexa requires you use port 443, so make sure your firewall/proxy is forwarding via port 443.
+
+ Read [more from the Alexa developer documentation](https://developer.amazon.com/en-US/docs/alexa/account-linking/requirements-account-linking.html) about requirements for account linking.
Note: you must use a valid/trusted SSL certificate for account linking to work. Self signed certificates will not work, but you can use a free Let's Encrypt certificate.
diff --git a/source/_integrations/aosmith.markdown b/source/_integrations/aosmith.markdown
index ebbb212fe288..1ca9c57b7015 100644
--- a/source/_integrations/aosmith.markdown
+++ b/source/_integrations/aosmith.markdown
@@ -33,6 +33,11 @@ Before using this integration, your water heater must be connected to a Wi-Fi ne
- HPS10-66H45DV
- HPS10-80H45DV
- HPSX-50-DHPT
+- HPSX-50-DHPT 2
+- HPSX-66-DHPT
+- HPSX-66-DHPT 2
+- HPSX-80-DHPT
+- HPSX-80-DHPT 2
- HPTS-50
- HPTS-66
- HPTS-80
diff --git a/source/_integrations/apcupsd.markdown b/source/_integrations/apcupsd.markdown
index 722ff93b33aa..409a7ec2a6d9 100644
--- a/source/_integrations/apcupsd.markdown
+++ b/source/_integrations/apcupsd.markdown
@@ -13,6 +13,7 @@ ha_codeowners:
- '@yuxincs'
ha_platforms:
- binary_sensor
+ - diagnostics
- sensor
ha_integration_type: integration
ha_quality_scale: silver
diff --git a/source/_integrations/application_credentials.markdown b/source/_integrations/application_credentials.markdown
index 83aff2d5e50c..0e50f4cbf0e1 100644
--- a/source/_integrations/application_credentials.markdown
+++ b/source/_integrations/application_credentials.markdown
@@ -1,5 +1,5 @@
---
-title: Application Credentials
+title: Application credentials
description: Allows users to link accounts with integrations that support OAuth2
ha_release: 2022.6
ha_domain: application_credentials
@@ -10,7 +10,7 @@ ha_codeowners:
ha_integration_type: system
---
-The Application Credentials integration is used by integrations that use OAuth2 to link your account to Home Assistant. The most common and preferred approach is using account linking with Home Assistant Cloud, however not all cloud providers support that and integrations can use Application Credentials instead. Additionally, users may use Application Credentials if preferred instead of Home Assistant Cloud Account Linking.
+The **Application credentials** {% term integration %} is used by integrations that use OAuth2 to link your account to Home Assistant. The most common and preferred approach is using account linking with Home Assistant Cloud, however not all cloud providers support that and integrations can use Application Credentials instead. Additionally, users may use Application Credentials if preferred instead of Home Assistant Cloud Account Linking.
## Automatic setup
diff --git a/source/_integrations/backup.markdown b/source/_integrations/backup.markdown
index 95e302d99391..2bef3e153d8a 100644
--- a/source/_integrations/backup.markdown
+++ b/source/_integrations/backup.markdown
@@ -10,40 +10,30 @@ ha_codeowners:
- '@home-assistant/core'
ha_iot_class: Calculated
ha_integration_type: system
+related:
+ - docs: /installation/#advanced-installation-methods
+ title: Home Assistant installation methods
+ - docs: /getting-started/onboarding/
+ title: Recover from backup during onboarding
+ - docs: /docs/configuration/
+ title: Configuration file
+ - docs: /common-tasks/os/#restoring-a-backup
+ title: Home Assistant Operating System- Restoring a backup
---
-The Backup integration allow you to create and download backups for your Home Assistant Core and Home Assistant Container installations. This backup file can be used if you migrate to Home Assistant Operating System.
+The **Backup** {% term integration %} is used for {% term "Home Assistant Core" %} and {% term "Home Assistant Container" %} installations to create and download backups. This backup file can be used if you migrate to {% term "Home Assistant Operating System" %}.
-
-
-If you use Home Assistant Operating System or Home Assistant Supervised, [back up functionality is already built-in](/common-tasks/os/#backups).
-
-
-
-
-## Manual configuration
-
-The backup integration is by default enabled. If you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your configuration the following example shows you how to enable this integration manually:
-
-```yaml
-# Example configuration.yaml entry
-backup:
-```
-
-You need to restart Home Assistant after you add this configuration.
-When it has started up again you will find a new "Backup" entry in the main menu (**{% my backup title="Settings > System > Backups" %}**).
-
-The backup files are stored in a new "backups" subdirectory in the root of your configuration directory.
+Note: If you use {% term "Home Assistant Operating System" %} or {% term "Home Assistant Supervised" %} installation, this page is not for you. Instead, refer to the documentation on using the [built-in back up](/common-tasks/os/#backups).
## Services
-The backup integration exposes a service that can be used to automate the backup
+The **Backup** integration exposes a service that can be used to automate the backup
process.
### Service {% my developer_call_service service="backup.create" %}
The {% my developer_call_service service="backup.create" %} service can be used
-to create a backup for your Home Assistant instance.
+to create a backup for your Home Assistant instance.
The service has no additional options or parameters.
@@ -55,7 +45,6 @@ service: backup.create
### Example: Backing up every night at 3:00 AM
-
This is a YAML example for an automation that initiate a backup every night
at 3 AM:
@@ -72,15 +61,21 @@ automation:
## Restoring a backup
-
+Backups created via the **Backup** integration are in a subdirectory `backups`, located in your [configuration directory](/docs/configuration/#editing-configurationyaml).
+The {% term "Home Assistant Container" %} installation typically mounts this directory via `docker-compose.yml` or `docker run` to a directory of your choice.
-If you use Home Assistant Operating System or Home Assistant Supervised, [the restore functionality is already built-in](/common-tasks/os/#restoring-a-backup).
+The steps on recovering from a backup depend on the installation type and use case. Follow one of these steps:
-
+1. If you use {% term "Home Assistant Operating System" %} or {% term "Home Assistant Supervised" %}:
+ - Follow the steps described in [Restoring a backup](/common-tasks/os/#restoring-a-backup).
+2. If you use a {% term "Home Assistant Core" %} or {% term "Home Assistant Container" %} installation:
+ - A Home Assistant backup is just a tar file of the [configuration directory](/docs/configuration/#editing-configurationyaml), plus some metadata.
+ - To manually restore a backup, use the following command:
-Backups created via the **Backup** integration are located in your `/config/backups` directory. The Home Assistant Container installation will typically mount this directory via `docker-compose.yml` or `docker run` to a directory of your choice.
-For Container and Core installations, there is currently no built-in way to restore a backup. However, a Home Assistant backup is just a tar file of the `/config` directory, plus some metadata. To manually restore a backup, you can use the following:
+ ```shell
+ tar -xOf
"./homeassistant.tar.gz" | tar --strip-components=1 -zxf - -C
+ ```
+
+3. If you migrate from a {% term "Home Assistant Core" %} or {% term "Home Assistant Container" %} installation to {% term "Home Assistant Operating System" %}:
+ - You can use these backup files during [onboarding](/getting-started/onboarding/) to recover your installation from backup.
-```shell
-tar -xOf "./homeassistant.tar.gz" | tar --strip-components=1 -zxf - -C
-```
diff --git a/source/_integrations/bring.markdown b/source/_integrations/bring.markdown
index 91e64bb628d9..062b6804f430 100644
--- a/source/_integrations/bring.markdown
+++ b/source/_integrations/bring.markdown
@@ -13,9 +13,18 @@ ha_domain: bring
ha_integration_type: service
ha_platforms:
- todo
+related:
+ - docs: /integrations/todo
+ title: To-do list integration documentation
+ - docs: /integrations/#to-do-list
+ title: List of to-do list integrations
+ - docs: /dashboards/todo-list/
+ title: To-do list card
+ - url: https://www.getbring.com/
+ title: Bring!
---
-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/).
diff --git a/source/_integrations/button.mqtt.markdown b/source/_integrations/button.mqtt.markdown
index 3d67931de4db..e3393dc32296 100644
--- a/source/_integrations/button.mqtt.markdown
+++ b/source/_integrations/button.mqtt.markdown
@@ -62,7 +62,7 @@ command_template:
type: template
command_topic:
description: The MQTT topic to publish commands to trigger the button.
- required: false
+ required: true
type: string
device:
description: "Information about the device this button is a part of to tie it into the [device registry](https://developers.home-assistant.io/docs/en/device_registry_index.html). Only works when [`unique_id`](#unique_id) is set. At least one of identifiers or connections must be present to identify the device."
diff --git a/source/_integrations/caldav.markdown b/source/_integrations/caldav.markdown
index e1e0c2f7ec98..3031fee40ae0 100644
--- a/source/_integrations/caldav.markdown
+++ b/source/_integrations/caldav.markdown
@@ -12,9 +12,18 @@ ha_platforms:
- todo
ha_integration_type: integration
ha_config_flow: true
+related:
+ - docs: /integrations/todo
+ title: To-do list integration documentation
+ - docs: /integrations/#to-do-list
+ title: List of to-do list integrations
+ - docs: /dashboards/todo-list/
+ title: To-do list card
+ - docs: /integrations/calendar
+ title: Calendar
---
-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.
diff --git a/source/_integrations/camera.markdown b/source/_integrations/camera.markdown
index 89d840ce5d93..d7e0c7bb9a0d 100644
--- a/source/_integrations/camera.markdown
+++ b/source/_integrations/camera.markdown
@@ -39,27 +39,27 @@ Available services: `enable_motion_detection`, `disable_motion_detection`, `play
Enable the motion detection in a camera.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | yes | Name(s) of entities to enable motion detection, e.g., `camera.living_room_camera`. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------------------------------------------------- |
+| `entity_id` | yes | Name(s) of entities to enable motion detection, e.g., `camera.living_room_camera`. |
#### Service `disable_motion_detection`
Disable the motion detection in a camera.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | yes | Name(s) of entities to disable motion detection, e.g., `camera.living_room_camera`. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------------------------------------------------------------------------------- |
+| `entity_id` | yes | Name(s) of entities to disable motion detection, e.g., `camera.living_room_camera`. |
#### Service `play_stream`
Play a live stream from a camera to selected media player(s). Requires [`stream`](/integrations/stream) integration to be set up.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | no | Name of entity to fetch stream from, e.g., `camera.living_room_camera`. |
-| `media_player` | no | Name of media player to play stream on, e.g., `media_player.living_room_tv`. |
-| `format` | yes | Stream format supported by `stream` integration and selected `media_player`. Default: `hls` |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------- |
+| `entity_id` | no | Name of entity to fetch stream from, e.g., `camera.living_room_camera`. |
+| `media_player` | no | Name of media player to play stream on, e.g., `media_player.living_room_tv`. |
+| `format` | yes | Stream format supported by `stream` integration and selected `media_player`. Default: `hls` |
For example, the following action in an automation would send an `hls` live stream to your chromecast.
@@ -78,14 +78,14 @@ Make a `.mp4` recording from a camera stream. Requires `stream` integration to b
Both `duration` and `lookback` options are suggestions, but should be consistent per camera. The actual length of the recording may vary. It is suggested that you tweak these settings to fit your needs.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.living_room_camera`. |
-| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/{{ entity_id.name }}.mp4`{% endraw %}. |
-| `duration` | yes | Target recording length (in seconds). Default: 30 |
-| `lookback` | yes | Target lookback period (in seconds) to include in addition to duration. Only available if there is currently an active HLS stream. Default: 0 |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
+| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.living_room_camera`. |
+| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/{{ entity_id.name }}.mp4`{% endraw %}. |
+| `duration` | yes | Target recording length (in seconds). Default: 30 |
+| `lookback` | yes | Target lookback period (in seconds) to include in addition to duration. Only available if there is currently an active HLS stream. Default: 0 |
-The path part of `filename` must be an entry in the `allowlist_external_dirs` in your [`homeassistant:`](/docs/configuration/basic/) section of your `configuration.yaml` file.
+The path part of `filename` must be an entry in the `allowlist_external_dirs` in your [`homeassistant:`](/integrations/homeassistant/#allowlist_external_dirs) section of your `configuration.yaml` file.
For example, the following action in an automation would take a recording from "yourcamera" and save it to /tmp with a timestamped filename.
@@ -106,12 +106,12 @@ action:
Take a snapshot from a camera.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.living_room_camera`. |
-| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/snapshot_{{ entity_id.name }}`{% endraw %}. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
+| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.living_room_camera`. |
+| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/snapshot_{{ entity_id.name }}`{% endraw %}. |
-The path part of `filename` must be an entry in the `allowlist_external_dirs` in your [`homeassistant:`](/docs/configuration/basic/) section of your `configuration.yaml` file.
+The path part of `filename` must be an entry in the `allowlist_external_dirs` in your [`homeassistant:`](/integrations/homeassistant/) section of your `configuration.yaml` file.
For example, the following action in an automation would take a snapshot from "yourcamera" and save it to /tmp with a timestamped filename.
@@ -132,17 +132,17 @@ action:
Turn off camera. Not all camera models support this service, please consult individual camera page.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | yes | Name(s) of entities to turn off, e.g., `camera.living_room_camera`. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------- |
+| `entity_id` | yes | Name(s) of entities to turn off, e.g., `camera.living_room_camera`. |
#### Service `turn_on`
Turn on camera. Not all camera models support this service, please consult individual camera page.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | yes | Name(s) of entities to turn on, e.g., `camera.living_room_camera`. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------ |
+| `entity_id` | yes | Name(s) of entities to turn on, e.g., `camera.living_room_camera`. |
### Test if it works
diff --git a/source/_integrations/cast.markdown b/source/_integrations/cast.markdown
index 6fe08fdac805..2a880e2b4abf 100644
--- a/source/_integrations/cast.markdown
+++ b/source/_integrations/cast.markdown
@@ -48,7 +48,7 @@ cast_downstairs_on_kitchen:
-Home Assistant Cast requires your Home Assistant installation to be accessible via `https://`. If you're using Home Assistant Cloud, you don't need to do anything. Otherwise you must make sure that you have configured the `external_url` in your [configuration](/docs/configuration/basic).
+Home Assistant Cast requires your Home Assistant installation to be accessible via `https://`. If you're using Home Assistant Cloud, you don't need to do anything. Otherwise you must make sure that you have configured the `external_url` in your [configuration](/integrations/homeassistant/#configuration-variables).
@@ -58,7 +58,7 @@ Home Assistant Cast requires your Home Assistant installation to be accessible v
Chromecasts generally ignore DNS servers from DHCP and will instead use Google's DNS servers, 8.8.8.8 and 8.8.4.4. This means media URLs must either be specifying the IP-address of the server directly, e.g. `http://192.168.1.1:8123/movie.mp4`, or be publicly resolvable, e.g. `http://homeassistant.internal.mydomain.com:8123/movie.mp4` where `homeassistant.internal.mydomain.com` resolves to `192.168.1.1`. A hostname which can't be publicly resolved, e.g. `http://homeassistant.local:8123/movie.mp4` will fail to play.
-This is important when casting TTS or local media sources; the cast integration will cast such media from the `external_url` if [configured](/docs/configuration/basic), otherwise from the Home Assistant Cloud if configured, otherwise from the [`internal_url`](/docs/configuration/basic). Note that the Home Assistant Cloud will not be used if an `external_url` is configured.
+This is important when casting TTS or local media sources; the cast integration will cast such media from the `external_url` if [configured](/integrations/homeassistant/#editing-the-general-settings-in-yaml), otherwise from the Home Assistant Cloud if configured, otherwise from the [`internal_url`](/integrations/homeassistant/#editing-the-general-settings-in-yaml). Note that the Home Assistant Cloud will not be used if an `external_url` is configured.
@@ -138,10 +138,10 @@ This app doesn't retrieve its own metadata, so if you want the cast interface or
Note: Media ID is NOT the 8 digit alphanumeric in the URL, it can be found by right-clicking the playing video. E.g., [this episode](https://www.bbc.co.uk/iplayer/episode/b09w7fd9/bitz-bob-series-1-1-castle-makeover) shows:
-| | |
-| --- | --- |
+| | |
+| -------- | ------------------------------- |
| 2908kbps | dash (mf_cloudfront_dash_https) |
-| b09w70r2 | 960x540 |
+| b09w70r2 | 960x540 |
With b09w70r2 being the `media_id`
@@ -343,10 +343,10 @@ To cast media directly from a configured Plex server, set the fields [as documen
Note: Media ID is NOT the 8 digit alphanumeric in the URL, it can be found by right-clicking the playing audio clip. E.g., [this episode](https://www.bbc.co.uk/sounds/play/p009ycqy) shows:
-| | |
-| --- | --- |
-| 128bps | dash (mf_cloudfront_nonbidi_dash_https) |
-| p009ycqz | |
+| | |
+| -------- | --------------------------------------- |
+| 128bps | dash (mf_cloudfront_nonbidi_dash_https) |
+| p009ycqz | |
With p009ycqz being the `media_id`
diff --git a/source/_integrations/climate.mqtt.markdown b/source/_integrations/climate.mqtt.markdown
index 6cfb2dd3b58d..89151e889342 100644
--- a/source/_integrations/climate.mqtt.markdown
+++ b/source/_integrations/climate.mqtt.markdown
@@ -188,7 +188,7 @@ json_attributes_topic:
max_humidity:
description: The minimum target humidity percentage that can be set.
required: false
- type: integer
+ type: float
default: 99
max_temp:
description: Maximum set point available. The default value depends on the temperature unit, and will be 35°C or 95°F.
@@ -197,7 +197,7 @@ max_temp:
min_humidity:
description: The maximum target humidity percentage that can be set.
required: false
- type: integer
+ type: float
default: 30
min_temp:
description: Minimum set point available. The default value depends on the temperature unit, and will be 7°C or 44.6°F.
diff --git a/source/_integrations/color_extractor.markdown b/source/_integrations/color_extractor.markdown
index 4a338de3faf1..211fa90d800b 100644
--- a/source/_integrations/color_extractor.markdown
+++ b/source/_integrations/color_extractor.markdown
@@ -22,15 +22,15 @@ Because `color_extractor.turn_on` will then call `light.turn_on`, you can pass a
Passing the key `color_extract_url` to the {% term service %} call will download the linked image and extract the predominant color from it. Passing the key `color_extract_path` to the service call will process the image file from local storage instead. `color_extract_url` and `color_extract_path` are exclusive and cannot be used together.
-|Key | Example | Description |
-|---------------------|---------------------------------------|-------------------------------------------------------------------------------|
-|`color_extract_url` | `https://example.com/images/logo.png` | The full URL (including schema, `http://`, `https://`) of the image to process|
-|`color_extract_path` | `/tmp/album.png` | The full path to the image file on local storage we'll process |
-|`entity_id` | `light.shelf_leds` | The RGB capable light we'll set the color of |
+| Key | Example | Description |
+| -------------------- | ------------------------------------- | ------------------------------------------------------------------------------ |
+| `color_extract_url` | `https://example.com/images/logo.png` | The full URL (including schema, `http://`, `https://`) of the image to process |
+| `color_extract_path` | `/tmp/album.png` | The full path to the image file on local storage we'll process |
+| `entity_id` | `light.shelf_leds` | The RGB capable light we'll set the color of |
- Please ensure any [external URLs](/docs/configuration/basic/#allowlist_external_urls) or [external files](/docs/configuration/basic/#allowlist_external_dirs) are authorized for use. You will receive error messages if this {% term integration %} is not allowed access to these external resources.
+ Please ensure any [external URLs](/integrations/homeassistant/#allowlist_external_urls) or [external files](/docs/integrations/homeassistant/#allowlist_external_dirs) are authorized for use. You will receive error messages if this {% term integration %} is not allowed access to these external resources.
diff --git a/source/_integrations/comelit.markdown b/source/_integrations/comelit.markdown
index fac72dc7ed6e..26ecc7201be9 100644
--- a/source/_integrations/comelit.markdown
+++ b/source/_integrations/comelit.markdown
@@ -30,7 +30,7 @@ The Comelit SimpleHome integration allows you to control your [Comelit home auto
There is support for the following platform types within Home Assistant:
-- **Comelit Serial Bridge** - allows local control for light, cover, irrigation, climate and "other" devices; creates power sensors.
+- **Comelit Serial Bridge** - allows local control for light, cover, irrigation, climate, humidifier/dehumidifier and "other" devices; creates power sensors.
- **Comelit VEDO System** - allows local control of the alarm system.
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/command_line.markdown b/source/_integrations/command_line.markdown
index 4deb3a59c4b1..0fa8215ef892 100644
--- a/source/_integrations/command_line.markdown
+++ b/source/_integrations/command_line.markdown
@@ -1,6 +1,6 @@
---
-title: Command Line
-description: Instructions on how to integrate the Command Line utility within Home Assistant.
+title: Command line
+description: Instructions on how to integrate the command line utility within Home Assistant.
ha_category:
- Binary sensor
- Cover
@@ -21,7 +21,7 @@ ha_codeowners:
- '@gjohansson-ST'
---
-The `command_line` offers functionality that issues specific commands to get data or to control a device.
+The **Command line** {% term integration %} offers functionality that issues specific commands to get data or to control a device.
@@ -43,7 +43,7 @@ command_line:
command:
description: The action to take to get the value.
required: true
- type: string
+ type: template
command_timeout:
description: Defines number of seconds for command timeout.
required: false
@@ -168,7 +168,7 @@ command_line:
command:
description: The action to take to get the value.
required: true
- type: string
+ type: template
command_timeout:
description: Defines number of seconds for command timeout
required: false
diff --git a/source/_integrations/control4.markdown b/source/_integrations/control4.markdown
index a90dca89a9b2..89d82cf9a333 100644
--- a/source/_integrations/control4.markdown
+++ b/source/_integrations/control4.markdown
@@ -4,6 +4,7 @@ description: Instructions on adding a Control4 system to Home Assistant.
ha_release: '0.114'
ha_category:
- Light
+ - Media Player
ha_iot_class: Local Polling
ha_config_flow: true
ha_codeowners:
@@ -12,10 +13,11 @@ ha_domain: control4
ha_ssdp: true
ha_platforms:
- light
+ - media_player
ha_integration_type: integration
---
-The **Control4** {% term integration %} allows you to control and monitor lights from your local Control4 system. Your Control4 controller must be running OS 3.0+.
+The **Control4** {% term integration %} allows you to control and monitor lights and Room Media from your local Control4 system. Your Control4 controller must be running OS 3.0+.
## Prerequisites
diff --git a/source/_integrations/default_config.markdown b/source/_integrations/default_config.markdown
index 61be61b50be6..c579916b7d70 100644
--- a/source/_integrations/default_config.markdown
+++ b/source/_integrations/default_config.markdown
@@ -25,7 +25,6 @@ This {% term integration %} is a meta-component and configures a default set of
- [Home Assistant Cloud](/integrations/cloud/) (`cloud`)
- [Image upload](/integrations/image_upload/) (`image_upload`)
- [Logbook](/integrations/logbook/) (`logbook`)
-- [Map](/integrations/map/) (`map`)
- [Media source](/integrations/media_source/) (`media_source`)
- [Mobile app support](/integrations/mobile_app/) (`mobile_app`)
- [My Home Assistant](/integrations/my/) (`my`)
diff --git a/source/_integrations/denonavr.markdown b/source/_integrations/denonavr.markdown
index 832015de2ad0..8c7c893d980b 100644
--- a/source/_integrations/denonavr.markdown
+++ b/source/_integrations/denonavr.markdown
@@ -112,6 +112,8 @@ Known supported devices:
If your model is not on the list then give it a test, if everything works correctly then add it to the list by clicking on the **Edit** link at the bottom of this page.
+If you are using VLANs, Home Assistant needs access to the following ports on the AVR: 23, 8080, and 60006 (all TCP).
+
If you have something else using the IP controller for your Denon AVR 3808CI, such as your URC controller, it will not work! There is either a bug or security issue with some models where only one device could be controlling the IP functionality.
diff --git a/source/_integrations/device_automation.markdown b/source/_integrations/device_automation.markdown
index 1036db1e3907..cab524a1b2d5 100644
--- a/source/_integrations/device_automation.markdown
+++ b/source/_integrations/device_automation.markdown
@@ -1,6 +1,6 @@
---
-title: Device Automation
-description: Information about the Device Automation plugin.
+title: Device automation
+description: Information about the device automation plugin.
ha_category:
- Automation
ha_release: 0.7
@@ -11,7 +11,7 @@ ha_domain: device_automation
ha_integration_type: system
---
-Device Automations is a plugin for the automation integration to allow other integrations to provide device specific triggers, conditions and actions.
+**Device automation** is a plugin for the automation integration to allow other integrations to provide device specific triggers, conditions and actions.
There is no device automation specific configuration. Instead, it is configured as part of the normal automations.
diff --git a/source/_integrations/dialogflow.markdown b/source/_integrations/dialogflow.markdown
index b7f9570249ad..87dd2c606065 100644
--- a/source/_integrations/dialogflow.markdown
+++ b/source/_integrations/dialogflow.markdown
@@ -12,7 +12,7 @@ ha_integration_type: integration
The **Dialogflow** {% term integration %} is designed to be used with the [webhook](https://cloud.google.com/dialogflow/es/docs/fulfillment-webhook) integration of [Dialogflow](https://cloud.google.com/dialogflow/docs/). After each phrase a user says, Dialogflow sends an action and parameters to the webhook.
-To be able to receive messages from Dialogflow, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/docs/configuration/basic). Dialogflow will return fallback answers if your server does not answer or takes too long (more than 5 seconds).
+To be able to receive messages from Dialogflow, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/integrations/homeassistant/#editing-the-general-settings-in-yaml). Dialogflow will return fallback answers if your server does not answer or takes too long (more than 5 seconds).
Dialogflow could be [integrated](https://cloud.google.com/dialogflow/es/docs/integrations) with many popular messaging, virtual assistant and IoT platforms.
diff --git a/source/_integrations/discord.markdown b/source/_integrations/discord.markdown
index 71a5e39f72e6..5c7d7cdbc408 100644
--- a/source/_integrations/discord.markdown
+++ b/source/_integrations/discord.markdown
@@ -69,26 +69,26 @@ When adding the Discord integration you will be asked for an API Key. Enter the
The following attributes can be placed inside the `data` key of the service call for extended functionality:
-| Attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `images` | yes | The file(s) to attach to message.
-| `urls` | yes | The file(s) to download from a remote URL and attach to message.
-| `verify_ssl` | yes | A boolean to determine if SSL certs should be verified when calling the remote URLs in the `url` attribute. Defaults to `True`.
-| `embed` | yes | Array of [Discord embeds](https://discordpy.readthedocs.io/en/latest/api.html#embed). *NOTE*: if using `embed`, `message` is still required.
+| Attribute | Optional | Description |
+| ------------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
+| `images` | yes | The file(s) to attach to message. |
+| `urls` | yes | The file(s) to download from a remote URL and attach to message. |
+| `verify_ssl` | yes | A boolean to determine if SSL certs should be verified when calling the remote URLs in the `url` attribute. Defaults to `True`. |
+| `embed` | yes | Array of [Discord embeds](https://discordpy.readthedocs.io/en/latest/api.html#embed). *NOTE*: if using `embed`, `message` is still required. |
To include messages with embedding, use these attributes underneath the `embed` key:
-| Attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `title` | yes | Title of the embed.
-| `description` | yes | Description of the embed.
-| `color` | yes | Color code of the embed. This value is an *int*.
-| `url` | yes | URL of the embed.
-| `author` | yes | Sets the footer for the embed content.
-| `footer` | yes | Sets the footer for the embed content.
-| `thumbnail` | yes | Sets the thumbnail for the embed content.
-| `image` | yes | Sets the image for the embed content.
-| `fields` | yes | Adds a field to the embed object. `name` and `value` are *required*, `inline` is *true* by default.
+| Attribute | Optional | Description |
+| ------------- | -------- | ---------------------------------------------------------------------------------------------------- |
+| `title` | yes | Title of the embed. |
+| `description` | yes | Description of the embed. |
+| `color` | yes | Color code of the embed. This value is an *int*. |
+| `url` | yes | URL of the embed. |
+| `author` | yes | Sets the footer for the embed content. |
+| `footer` | yes | Sets the footer for the embed content. |
+| `thumbnail` | yes | Sets the thumbnail for the embed content. |
+| `image` | yes | Sets the image for the embed content. |
+| `fields` | yes | Adds a field to the embed object. `name` and `value` are *required*, `inline` is *true* by default. |
### Example service call
@@ -117,7 +117,7 @@ To include messages with embedding, use these attributes underneath the `embed`
- "https://example.com/video.mp4"
```
-Note that `verify_ssl` defaults to `True`, and that any remote hosts will need to be in your [`allowlist_external_urls`](/docs/configuration/basic/#allowlist_external_urls) list. Discord limits attachment size to 8MB, so anything exceeding this will be skipped and noted in the error log.
+Note that `verify_ssl` defaults to `True`, and that any remote hosts will need to be in your [`allowlist_external_urls`](/integrations/homeassistant/#allowlist_external_urls) list. Discord limits attachment size to 8MB, so anything exceeding this will be skipped and noted in the error log.
### Example embed service call
diff --git a/source/_integrations/downloader.markdown b/source/_integrations/downloader.markdown
index 34f25bbd2911..1155ea8a033f 100644
--- a/source/_integrations/downloader.markdown
+++ b/source/_integrations/downloader.markdown
@@ -6,25 +6,17 @@ ha_category:
ha_release: pre 0.7
ha_quality_scale: internal
ha_domain: downloader
+ha_codeowners:
+ - '@erwindouna'
ha_integration_type: integration
+ha_config_flow: true
---
-The `downloader` integration provides a service to download files. It will raise an error and not continue to set itself up when the download directory does not exist. The directory needs to be writable for the user that is running Home Assistant.
+The **Downloader** {% term integration %} provides a service to download files. It will raise an error and not continue to set itself up when the download directory does not exist. The directory needs to be writable for the user that is running Home Assistant.
-To enable it, add the following lines to your `configuration.yaml` file:
+{% include integrations/config_flow.md %}
-```yaml
-# Example configuration.yaml entry
-downloader:
- download_dir: downloads
-```
-
-{% configuration %}
-download_dir:
- description: "If the path is not absolute, it's assumed to be relative to the Home Assistant configuration directory (eg. `.homeassistant/downloads`)."
- required: true
- type: string
-{% endconfiguration %}
+If the path is not absolute, it’s assumed to be relative to the Home Assistant configuration directory (for example, .homeassistant/downloads).
### Use the service
diff --git a/source/_integrations/dsmr_reader.markdown b/source/_integrations/dsmr_reader.markdown
index f355a282af1a..ce1253c1946e 100644
--- a/source/_integrations/dsmr_reader.markdown
+++ b/source/_integrations/dsmr_reader.markdown
@@ -9,7 +9,7 @@ ha_config_flow: true
ha_mqtt: true
ha_release: 0.103
ha_codeowners:
- - '@depl0y'
+ - '@sorted-bits'
- '@glodenox'
ha_domain: dsmr_reader
ha_platforms:
diff --git a/source/_integrations/dte_energy_bridge.markdown b/source/_integrations/dte_energy_bridge.markdown
index c6a74c171dfb..f8b4ab1e4d77 100644
--- a/source/_integrations/dte_energy_bridge.markdown
+++ b/source/_integrations/dte_energy_bridge.markdown
@@ -1,5 +1,5 @@
---
-title: DTE Energy Bridge (2020 and older hardware only)
+title: DTE Energy Bridge
description: Setup early-model DTE Energy Bridge with Home Assistant.
ha_category:
- Energy
diff --git a/source/_integrations/ecobee.markdown b/source/_integrations/ecobee.markdown
index 081a0fe89a93..0bb796622abf 100644
--- a/source/_integrations/ecobee.markdown
+++ b/source/_integrations/ecobee.markdown
@@ -33,6 +33,10 @@ The **ecobee** {% term integration %} lets you control and view sensor data from
You will need to obtain an API key from ecobee's [developer site](https://www.ecobee.com/developers/) to use this integration. To get the key, your thermostat must be registered on ecobee's website (which you likely would have already done while installing your thermostat). Once you have done that, perform the following steps.
+
+As of March 28th, 2024, ecobee is no longer accepting new developer subscriptions, and there is no ETA for when they will be allowed again. Existing developers are not affected.
+
+
1. Click on the **Become a developer** link on the [developer site](https://www.ecobee.com/home/developer/loginDeveloper.jsp).
2. Log in with your ecobee credentials. (Make sure multifactor authentication is disabled to meet the developer login form's limits. If you've already enabled MFA, the web portal doesn't support disabling it. The iOS and Android apps do under Account > Account Security. You can re-enable MFA after becoming a developer.)
3. Accept the SDK agreement.
diff --git a/source/_integrations/ecovacs.markdown b/source/_integrations/ecovacs.markdown
index 547b03ca821d..b54caba1fa5b 100644
--- a/source/_integrations/ecovacs.markdown
+++ b/source/_integrations/ecovacs.markdown
@@ -18,6 +18,7 @@ ha_platforms:
- binary_sensor
- button
- diagnostics
+ - event
- image
- number
- select
@@ -48,6 +49,8 @@ Additionally, **depending on your model**, the integration provides the followin
- **Button**:
- `Reset lifespan`: For each supported component, a button entity to reset the lifespan will be created. All disabled by default.
- `Relocate`: Button entity to trigger manual relocation.
+- **Event**:
+ - `Last job`: Provides the stop reason as event_type
- **Image**:
- `Map`: The floorplan/map as an image in SVG format.
- **Number**:
@@ -72,8 +75,13 @@ Additionally, **depending on your model**, the integration provides the followin
- `Time`: The total cleaning time
- **Switch**:
- `Advanced mode`: Enable advanced mode. Disabled by default.
+ - `Border switch`: Enable border switch. Disabled by default.
- `Carpet auto fan speed boost`: Enable maximum fan speed if a carpet is detected. Disabled by default.
+ - `Child lock`: Enable child lock. Disabled by default.
+ - `Move up warning`: Enable device move up warning. Disabled by default.
+ - `Cross map border warning`: Enable warning for crossing the map border. Disabled by default.
- `Continuous cleaning`: Enable continuous cleaning, which means the bot resumes the cleaning job if he needs to charge in between. Disabled by default.
+ - `Safe protect`: Enable "Safe protect" feature. Disabled by default.
- `True detect`: Enable "True detect" feature. Disabled by default.
## Vacuum
diff --git a/source/_integrations/elmax.markdown b/source/_integrations/elmax.markdown
index be38b91e26b2..6b8ca3fb2e81 100644
--- a/source/_integrations/elmax.markdown
+++ b/source/_integrations/elmax.markdown
@@ -15,6 +15,7 @@ ha_platforms:
- cover
- switch
ha_integration_type: integration
+ha_zeroconf: true
---
The Elmax integration enables Home Assistant integration with
diff --git a/source/_integrations/emulated_roku.markdown b/source/_integrations/emulated_roku.markdown
index 4cc1ca53a370..b7df1de04c48 100644
--- a/source/_integrations/emulated_roku.markdown
+++ b/source/_integrations/emulated_roku.markdown
@@ -124,6 +124,12 @@ The following is an example implementation of an automation:
entity_id: media_player.amplifier
```
+### Video tutorial
+
+This comprehensive video tutorial explains how events work in Home Assistant and how you can set up Emulated Roku to control a media player using a physical remote control.
+
+
+
## Troubleshooting
If you change your advertised IP or ports, you will have to re-add the emulated Roku in your app.
diff --git a/source/_integrations/enphase_envoy.markdown b/source/_integrations/enphase_envoy.markdown
index 68744b878461..d6283e047cf2 100644
--- a/source/_integrations/enphase_envoy.markdown
+++ b/source/_integrations/enphase_envoy.markdown
@@ -61,6 +61,13 @@ For Enphase Ensemble systems with the Enpower/IQ System Controller and Encharge/
- A switch allowing you to take your system on-grid and off-grid. Note that the Enpower has a slight delay built-in between receiving these commands and actually switching the system on or off grid.
- A switch allowing you to enable or disable charging the Encharge/IQ Batteries from the power grid.
- Support for changing the battery storage mode between full backup, self-consumption, and savings mode and setting the reserve battery level for outages.
+- If a storage
CT is installed:
+ - Sensors for battery storage energy charged and discharged and current active power discharge/charge
+ - Disabled sensors for:
+ - Phase battery storage energy charged and discharged and current power discharge/charge
+ - Voltage net consumption
CT (aggregate and phase)
+ - Metering status for storage
CT (aggregate and phase)
+ - Meter status flags active storage
CT (aggregate and phase)
## Envoy authentication requirements
@@ -95,14 +102,16 @@ This integration provides several values suitable for the energy dashboard:
- For `Solar production`, use the `Envoy Lifetime energy production` entity.
- For `Grid consumption`, use the `Envoy Lifetime net energy consumption` entity.[^3]
- For `Return to grid`, use the `Envoy Lifetime net energy production` entity.[^3]
+- For `Energy going into the battery`, use the the `Envoy Lifetime battery energy charged` entity.[^5]
+- For `Energy coming out off the battery`, use the the `Envoy Lifetime battery energy discharged` entity.[^5]
-[^3]: Only applies when using Envoy S Metered / IQ Gateway Metered with installed and configured current transformers (
CT).
+[^3]: Only applies when using Envoy S Metered / IQ Gateway Metered with installed and configured
CT.
-There are no readily available battery energy sensors for use with the `Home Battery storage`. You can consider using the Encharge `real_power_mw` entity as an input to Riemann integrators for charge (negative) or discharge (positive) values. As the [polling interval](#polling-interval) is 1 minute, these may be off though.
+[^5]: Only applies when using Envoy S Metered / IQ Gateway Metered / IQ Combiner with installed and configured storage / battery
CT.
## Debug logs and diagnostics
-This integration provides debug log and diagnostics report as described in the [Home Assistant troubleshooting pages](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics).
+This integration provides debug logs and diagnostics reports as described in the [Home Assistant troubleshooting pages](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics).
### Debug log
diff --git a/source/_integrations/esphome.markdown b/source/_integrations/esphome.markdown
index 84f5e1a1b263..ab82976605be 100644
--- a/source/_integrations/esphome.markdown
+++ b/source/_integrations/esphome.markdown
@@ -23,6 +23,7 @@ ha_platforms:
- camera
- climate
- cover
+ - date
- diagnostics
- fan
- light
@@ -33,6 +34,7 @@ ha_platforms:
- sensor
- switch
- text
+ - time
- update
ha_integration_type: device
ha_dhcp: true
diff --git a/source/_integrations/event.markdown b/source/_integrations/event.markdown
index 1053cda4ce30..7522304a5956 100644
--- a/source/_integrations/event.markdown
+++ b/source/_integrations/event.markdown
@@ -83,3 +83,9 @@ The following device classes are supported by event entities:
- **button**: For remote control buttons.
- **doorbell**: Specifically for buttons that are used as a doorbell.
- **motion**: For motion events detected by a motion sensor.
+
+### Video tutorial
+
+This comprehensive video tutorial explains how events work in Home Assistant and how you can set up Emulated Roku to control a media player using a physical remote control.
+
+
diff --git a/source/_integrations/ezviz.markdown b/source/_integrations/ezviz.markdown
index 0d7143d64dc7..8fc658bd9155 100644
--- a/source/_integrations/ezviz.markdown
+++ b/source/_integrations/ezviz.markdown
@@ -25,6 +25,9 @@ ha_platforms:
- switch
- update
ha_integration_type: integration
+related:
+ - docs: /dashboards/picture-glance/#creating-a-card-to-control-the-camera
+ title: Controlling the camera from the dashboard
---
The `ezviz` sensor platform uses the ezvizlife.com API to interact with the devices.
@@ -74,61 +77,61 @@ You can also change the camera options should you need to access a high or low r
If your EZVIZ camera supports warning sounds, you can use this service to set the intensity.
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
-| `level` | Set the sound level to 0 for Soft, 1 for Intensive or 2 to disable |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------------------------------------------------- |
+| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
+| `level` | Set the sound level to 0 for Soft, 1 for Intensive or 2 to disable |
### Service `ezviz.ptz`
If your EZVIZ camera supports
PTZ, you will be able to pan or tilt your camera.
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
-| `direction` | Direction of the movement. Allowed values: `up`, `down`, `left`, `right` |
-| `speed` | (Optional) Speed to in which to move the camera. Allowed values: int from 1 to 9. Default: 5 |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------------------------------------------------- |
+| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
+| `direction` | Direction of the movement. Allowed values: `up`, `down`, `left`, `right` |
+| `speed` | (Optional) Speed to in which to move the camera. Allowed values: int from 1 to 9. Default: 5 |
### Service `ezviz.set_alarm_detection_sensibility`
If your EZVIZ camera supports motion detection, you will be able to set the sensitivity level using this service.
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
-| `level` | Sensibility level (1-6) for type 0 (Normal camera) or (1-100) for type 3 (PIR sensor camera). |
-| `type_value` | Type of detection. Options : 0 - Camera or 3 - PIR Sensor Camera. |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------------------------------------------------- |
+| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
+| `level` | Sensibility level (1-6) for type 0 (Normal camera) or (1-100) for type 3 (PIR sensor camera). |
+| `type_value` | Type of detection. Options : 0 - Camera or 3 - PIR Sensor Camera. |
### Service `ezviz.sound_alarm`
If your EZVIZ camera has a built-in siren, you can use this service to make a noise.
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
-| `enable` | Sound the alarm by setting this to 1 or stop the siren by setting this to 0. |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------------------------------------------------- |
+| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
+| `enable` | Sound the alarm by setting this to 1 or stop the siren by setting this to 0. |
### Service `ezviz.wake_device`
If you have "sleep" mode enabled on your camera, you can use this service to wake it. Especially useful for battery cameras.
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------------------------------------------------- |
+| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
To enable/disable motion detection, use the Home Assistant built in services.
### Service `camera.enable_motion_detection`
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------------------------------------------------- |
+| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
### Service `camera.disable_motion_detection`
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------------------------------------------------- |
+| `entity_id` | String or list of strings that point at `entity_id`s of cameras. Use `entity_id: all` to target all. |
### Alarm control panel entity
@@ -166,7 +169,3 @@ The image entity represents the last detected event from a camera and visually r
## Troubleshooting
- `authentication failed`: The authentication requires an EZVIZ account with two-step verification disabled. Google, Facebook, TikTok, or other Oauth-based accounts will not work.
-
-## Related topics
-
-- [Controlling the camera from the dashboard](/dashboards/picture-glance/#creating-a-card-to-control-the-camera)
diff --git a/source/_integrations/fastdotcom.markdown b/source/_integrations/fastdotcom.markdown
index 5ade5761a6e0..dd46f63bdaaa 100644
--- a/source/_integrations/fastdotcom.markdown
+++ b/source/_integrations/fastdotcom.markdown
@@ -12,6 +12,7 @@ ha_codeowners:
- '@erwindouna'
ha_domain: fastdotcom
ha_platforms:
+ - diagnostics
- sensor
ha_integration_type: integration
---
diff --git a/source/_integrations/file.markdown b/source/_integrations/file.markdown
index f5b2833dffc3..88fb0caf33c8 100644
--- a/source/_integrations/file.markdown
+++ b/source/_integrations/file.markdown
@@ -56,7 +56,7 @@ To use notifications, please see the [getting started with automation page](/get
## Sensor
-The `file` sensor platform reads the entries from a plain-text file and shows the found value. Only the last line of the file is used. This is similar to do `$ tail -n 1 sensor.txt` on the command-line. Note that file paths must be added to [allowlist_external_dirs](/docs/configuration/basic/).
+The `file` sensor platform reads the entries from a plain-text file and shows the found value. Only the last line of the file is used. This is similar to do `$ tail -n 1 sensor.txt` on the command-line. Note that file paths must be added to [allowlist_external_dirs](/integrations/homeassistant/#allowlist_external_dirs).
To enable the `file` sensor, add the following lines to your `configuration.yaml`:
diff --git a/source/_integrations/file_upload.markdown b/source/_integrations/file_upload.markdown
index 25489b543d8a..3f609934d8e5 100644
--- a/source/_integrations/file_upload.markdown
+++ b/source/_integrations/file_upload.markdown
@@ -1,5 +1,5 @@
---
-title: File Upload
+title: File upload
description: File upload integration supports various frontend features within Home Assistant
ha_release: 2022.9
ha_quality_scale: internal
@@ -10,6 +10,6 @@ ha_codeowners:
ha_category: []
---
-The file upload integration allows various features in the frontend to upload files.
+The **File upload** {% term integration %} allows various features in the frontend to upload files.
{% include integrations/building_block_integration.md %}
diff --git a/source/_integrations/filesize.markdown b/source/_integrations/filesize.markdown
index 0b51840c1061..3d34b5044c77 100644
--- a/source/_integrations/filesize.markdown
+++ b/source/_integrations/filesize.markdown
@@ -1,5 +1,5 @@
---
-title: File Size
+title: File size
description: Integration for monitoring the size of a file.
ha_category:
- Sensor
@@ -15,11 +15,13 @@ ha_config_flow: true
ha_integration_type: integration
---
-The `filesize` sensor is for displaying the size in MB of a file.
+The **File size** {% term integration %} is for displaying the size in MB of a file.
-File paths must also be added to [allowlist_external_dirs](/docs/configuration/basic/) in your `configuration.yaml`.
+File paths must also be added to [allowlist_external_dirs](/integrations/homeassistant/#allowlist_external_dirs) in your `configuration.yaml`.
+
+File paths should be absolute paths. For example: `/config/home-assistant_v2.db` to monitor the size of the default database.
diff --git a/source/_integrations/filter.markdown b/source/_integrations/filter.markdown
index 92a67a0362f4..70e9650adef7 100644
--- a/source/_integrations/filter.markdown
+++ b/source/_integrations/filter.markdown
@@ -117,7 +117,7 @@ filters:
-When configuring a `window_size` that is not a time and with a value larger than the default of `1`, the database must examine nearly every stored state for that entity during Home Assistant startup. If you have modified the [Recorder `purge_keep_days`](/integrations/recorder/#purge_keep_days) value or have many states stored in the database for the filtered entity, this can cause your Home Assistant instance can to respond poorly during startup.
+When configuring a `window_size` that is not a time and with a value larger than the default of `1`, the database must examine nearly every stored state for that entity during Home Assistant startup. If you have modified the [Recorder `purge_keep_days`](/integrations/recorder/#purge_keep_days) value or have many states stored in the database for the filtered entity, this can cause your Home Assistant instance to respond poorly during startup.
diff --git a/source/_integrations/folder.markdown b/source/_integrations/folder.markdown
index bd435c5dc3ba..b9a1763969e9 100644
--- a/source/_integrations/folder.markdown
+++ b/source/_integrations/folder.markdown
@@ -12,7 +12,7 @@ ha_platforms:
ha_integration_type: integration
---
-Sensor for monitoring the contents of a folder. Note that folder paths must be added to [allowlist_external_dirs](/docs/configuration/basic/). Optionally a [wildcard filter](https://docs.python.org/3.6/library/fnmatch.html) can be applied to the files considered within the folder. The state of the sensor is the size in MB of files within the folder that meet the filter criteria.
+Sensor for monitoring the contents of a folder. Note that folder paths must be added to [allowlist_external_dirs](/integrations/homeassistant/#allowlist_external_dirs). Optionally a [wildcard filter](https://docs.python.org/3.6/library/fnmatch.html) can be applied to the files considered within the folder. The state of the sensor is the size in MB of files within the folder that meet the filter criteria.
The sensor exposes the number of filtered files in the folder, total size in bytes of those files and a comma separated list of the file paths as attributes.
## Configuration
diff --git a/source/_integrations/folder_watcher.markdown b/source/_integrations/folder_watcher.markdown
index e5b9b01aa0fe..4d3718b47a66 100644
--- a/source/_integrations/folder_watcher.markdown
+++ b/source/_integrations/folder_watcher.markdown
@@ -1,5 +1,5 @@
---
-title: Folder Watcher
+title: Folder watcher
description: Integration for monitoring changes within the filesystem.
ha_category:
- System monitor
@@ -10,7 +10,7 @@ ha_domain: folder_watcher
ha_integration_type: integration
---
-This integration adds [Watchdog](https://pythonhosted.org/watchdog/) file system monitoring, publishing events on the Home Assistant bus on the creation/deletion/modification of files within configured folders. The monitored `event_type` are:
+The **Folder watcher** {% term integration %} adds [Watchdog](https://pythonhosted.org/watchdog/) file system monitoring, publishing events on the Home Assistant bus on the creation/deletion/modification of files within configured folders. The monitored `event_type` are:
- `closed`
- `created`
@@ -18,11 +18,11 @@ This integration adds [Watchdog](https://pythonhosted.org/watchdog/) file system
- `modified`
- `moved`
-Configured folders must be added to [allowlist_external_dirs](/docs/configuration/basic/). Note that by default folder monitoring is recursive, meaning that the contents of sub-folders are also monitored.
+Configured folders must be added to [allowlist_external_dirs](/integrations/homeassistant/#allowlist_external_dirs). Note that by default folder monitoring is recursive, meaning that the contents of sub-folders are also monitored.
## Configuration
-To enable the Folder Watcher integration in your installation, add the following to your `configuration.yaml` file:
+To enable the **Folder watcher** {% term integration %} in your installation, add the following to your `configuration.yaml` file:
```yaml
folder_watcher:
diff --git a/source/_integrations/freebox.markdown b/source/_integrations/freebox.markdown
index a6e53b60d852..12263bcceca1 100644
--- a/source/_integrations/freebox.markdown
+++ b/source/_integrations/freebox.markdown
@@ -45,6 +45,12 @@ You can find out your Freebox host and port by opening this address
+
+The `host` (ex: xxxxxxxx.fbxos.fr) and `port` given by refers to your Freebox public IP address and may not work if your Home Assistant server is located inside your local LAN. For local API access, you can alternatively use `host` = *mafreebox.freebox.fr* and `port` = *443*.
+
+
+
### Initial setup
diff --git a/source/_integrations/frontend.markdown b/source/_integrations/frontend.markdown
index c7db8fb08cc5..cdb056af35b4 100644
--- a/source/_integrations/frontend.markdown
+++ b/source/_integrations/frontend.markdown
@@ -94,7 +94,7 @@ Note that the variables will be used in the listed order, so if multiple match y
frontend:
themes:
my_theme:
- state-cover-garage_door-open-color: "#ff0000"
+ state-cover-garage-open-color: "#ff0000"
state-media_player-inactive-color: "#795548"
```
diff --git a/source/_integrations/fyta.markdown b/source/_integrations/fyta.markdown
new file mode 100644
index 000000000000..74eaa15c24ae
--- /dev/null
+++ b/source/_integrations/fyta.markdown
@@ -0,0 +1,41 @@
+---
+title: FYTA
+description: Instructions on how to integrate FYTA sensors within Home Assistant.
+ha_category:
+ - Sensor
+ha_release: 2024.4
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@dontinelli'
+ha_domain: fyta
+ha_platforms:
+ - sensor
+ha_integration_type: hub
+---
+
+The **FYTA** {% term integration %} uses the open API of [FYTA](https://www.fyta.de) to obtain the data from your plant sensors and integrate these into Home Assistant.
+
+For the authentication on the FYTA server, you need your login-credentials (email and password).
+
+The integration provides a device for all plants with a [FYTA Beam](https://fyta.de/collections/all/products/single-beam) sensor. In order to be able to access your plant data over the API, you need a [FYTA hub](https://fyta.de/collections/all/products/single-hub) that uploads the data from the Beam sensor to the FYTA server. Alternatively, the mobile app can serve as gateaway to upload the data from the Beam to the server. No direct connection to the FYTA Beam is supported.
+
+{% include integrations/config_flow.md %}
+
+## Sensors
+
+The following sensors are currently available per plant:
+
+| name | Unit | Description |
+|-----------------------|--------|:-------------------------------------------|
+| scientific_name | | Scientific name of the plant |
+| plant_status | | FYTA-Status (number 1 to 5) |
+| temperature_status | | FYTA-Status (number 1 to 5) |
+| light_status | | FYTA-Status (number 1 to 5) |
+| moisture_status | | FYTA-Status (number 1 to 5) |
+| salinity_status | | FYTA-Status (number 1 to 5) |
+| temperature | °C | Temperature measured by sensor |
+| light | μmol/h | Light measured by sensor (hourly photosynthetically active radiation PAR)|
+| moisture | % | Moisture measured by sensor |
+| salinity | mS/cm | Salinity measured by sensor (measured as conductivity)|
+| battery_level | % | Battery level of the sensor |
diff --git a/source/_integrations/generic_hygrostat.markdown b/source/_integrations/generic_hygrostat.markdown
index 6746fbd064a1..3eab325e82eb 100644
--- a/source/_integrations/generic_hygrostat.markdown
+++ b/source/_integrations/generic_hygrostat.markdown
@@ -46,16 +46,16 @@ min_humidity:
description: Set minimum set point available.
required: false
default: 0
- type: integer
+ type: float
max_humidity:
description: Set maximum set point available.
required: false
default: 100
- type: integer
+ type: float
target_humidity:
description: Set initial target humidity. This value will be used as a fallback when the previous setpoint is not available.
required: false
- type: integer
+ type: float
device_class:
description: Whether the switch specified in the *humidifier* option to be treated as a humidifier or a dehumidifier device. Must be either "humidifier" or "dehumidifier"
required: false
diff --git a/source/_integrations/google_tasks.markdown b/source/_integrations/google_tasks.markdown
index 30eee6edad2f..02ccff1f7616 100644
--- a/source/_integrations/google_tasks.markdown
+++ b/source/_integrations/google_tasks.markdown
@@ -12,6 +12,17 @@ ha_codeowners:
ha_integration_type: integration
ha_platforms:
- todo
+related:
+ - docs: /integrations/todo
+ title: To-do list integration documentation
+ - docs: /integrations/#to-do-list
+ title: List of to-do list integrations
+ - docs: /dashboards/todo-list/
+ title: To-do list card
+ - url: https://support.google.com/tasks/answer/7675772
+ title: Google Tasks
+ - url: https://console.cloud.google.com/apis/library/tasks.googleapis.com
+ title: Google Developers Console
---
The **Google Tasks** integration allows you to connect your [Google Tasks](https://support.google.com/tasks/answer/7675772) to Home Assistant. The integration adds a [to-do list entity](/integrations/todo) for
@@ -19,7 +30,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.
diff --git a/source/_integrations/heos.markdown b/source/_integrations/heos.markdown
index cb12ee09b6a6..8fba4803b746 100644
--- a/source/_integrations/heos.markdown
+++ b/source/_integrations/heos.markdown
@@ -144,6 +144,7 @@ For removing a HEOS player from a group you can use the `media_player.unjoin` se
## Notes
- Receivers with multiple zones are represented as a single media player. They will be turned on when playback is started, but cannot be turned off by the integration at this time.
+- [Denon AVR](/integrations/denonar/) and HEOS media players can be combined into a [Universal Media Player](/integrations/universal/#denon-avr--heos)
## Troubleshooing
diff --git a/source/_integrations/history.markdown b/source/_integrations/history.markdown
index a18c10f14b1f..87603d666a4f 100644
--- a/source/_integrations/history.markdown
+++ b/source/_integrations/history.markdown
@@ -9,6 +9,11 @@ ha_codeowners:
- '@home-assistant/core'
ha_domain: history
ha_integration_type: system
+related:
+ - docs: /integrations/recorder/
+ title: Recorder integration
+ - url: https://data.home-assistant.io
+ title: Home Assistant Data Science Portal
---
The **History** integration tracks everything that is going on within Home
@@ -49,8 +54,3 @@ If you select a time frame that exceeds 10 days, the data is taken from the long
The history information is also available through the
[RESTful API](/developers/rest_api/#get-apihistory).
-
-## Related topics
-
-- [Recorder integration](/integrations/recorder/)
-- [Home Assistant Data Science Portal](https://data.home-assistant.io)
diff --git a/source/_integrations/history_stats.markdown b/source/_integrations/history_stats.markdown
index 3b018340db8a..5cabd7d3e59e 100644
--- a/source/_integrations/history_stats.markdown
+++ b/source/_integrations/history_stats.markdown
@@ -1,5 +1,5 @@
---
-title: History Stats
+title: History stats
description: Instructions about how to integrate historical statistics into Home Assistant.
ha_category:
- Sensor
@@ -13,7 +13,7 @@ ha_platforms:
ha_integration_type: integration
---
-The `history_stats` sensor platform provides quick statistics about another integration or platforms, using data from the [`history`](/integrations/history/) integration.
+The **History stats** {% term integration %} provides quick statistics about another integration or platforms, using data from the [`history`](/integrations/history/) integration.
It can track how long the integration has been in a specific state, in a custom time period.
diff --git a/source/_integrations/homeassistant.markdown b/source/_integrations/homeassistant.markdown
index 503b57909434..23ac3458982c 100644
--- a/source/_integrations/homeassistant.markdown
+++ b/source/_integrations/homeassistant.markdown
@@ -11,9 +11,234 @@ ha_domain: homeassistant
ha_platforms:
- scene
ha_integration_type: system
+related:
+ - docs: /docs/configuration/basic/
+ title: Basic information
+ - docs: /docs/configuration/
+ - docs: /docs/configuration/customizing-devices/
---
-The Home Assistant integration provides generic implementations like the generic `homeassistant.turn_on`.
+The **Home Assistant Core** {% term integration %} provides generic implementations like the generic `homeassistant.turn_on`.
+
+## Editing the general settings in YAML
+
+The Home Assistant Core integration is also responsible for the general settings. These settings are defined during onboarding, but you can change them later under {% my general title="**Settings** > **System** > **General**" %}. For the detailed steps, refer to [Basic settings](/docs/configuration/basic/).
+
+If you prefer editing in YAML, you can define your general settings in the [`configuration.yaml` file](/docs/configuration/).
+Note that for some of the settings, these can't be edited from the UI if they were defined in YAML. They will be grayed out or inaccessible.
+
+
+
+ Screenshot showing coordinates cannot be edited because they are defined in configuration.yaml file.
+
+
+To get started with the general settings in YAML, follow these steps:
+
+1. Copy the following information to your [`configuration.yaml` file](/docs/configuration/).
+
+ ```yaml
+ homeassistant:
+ name: Home
+ latitude: 32.87336
+ longitude: 117.22743
+ elevation: 430
+ unit_system: metric
+ currency: USD
+ country: US
+ time_zone: "America/Los_Angeles"
+ external_url: "https://www.example.com"
+ internal_url: "http://homeassistant.local:8123"
+ allowlist_external_dirs:
+ - "/usr/var/dumping-ground"
+ - "/tmp"
+ allowlist_external_urls:
+ - "http://images.com/image1.png"
+ media_dirs:
+ media: "/media"
+ recordings: "/mnt/recordings"
+ ```
+
+2. Edit each entry to fit your home.
+
+{% configuration %}
+name:
+ description: Name of the location where Home Assistant is running.
+ required: false
+ type: string
+latitude:
+ description: Latitude of your location required to calculate the time the sun rises and sets.
+ required: false
+ type: float
+longitude:
+ description: Longitude of your location required to calculate the time the sun rises and sets.
+ required: false
+ type: float
+elevation:
+ description: Altitude above sea level in meters. Impacts sunrise data.
+ required: false
+ type: integer
+unit_system:
+ description: "`metric` for Metric, `us_customary` for US Customary. This also sets temperature_unit, Celsius for Metric and Fahrenheit for US Customary"
+ required: false
+ type: string
+temperature_unit:
+ description: "Override temperature unit set by unit_system. `C` for Celsius, `F` for Fahrenheit."
+ required: false
+ type: string
+time_zone:
+ description: "Pick your time zone from the column **TZ** of [Wikipedia's list of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)"
+ required: false
+ type: string
+currency:
+ description: "Pick your currency code from the column **Code** of [Wikipedia's list of ISO 4217 active codes](https://en.wikipedia.org/wiki/ISO_4217#Active_codes)"
+ required: false
+ type: string
+ default: "EUR"
+external_url:
+ description: "The URL that Home Assistant is available on from the internet. For example: `https://example.duckdns.org:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported."
+ required: false
+ type: string
+internal_url:
+ description: "The URL that Home Assistant is available on from your local network. For example: `http://homeassistant.local:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported."
+ required: false
+ type: string
+customize:
+ description: "[Customize](#editing-the-entity-settings-in-yaml) entities."
+ required: false
+ type: string
+customize_domain:
+ description: "[Customize](#editing-the-entity-settings-in-yaml) all entities in a domain."
+ required: false
+ type: string
+customize_glob:
+ description: "[Customize](#editing-the-entity-settings-in-yaml) entities matching a pattern."
+ required: false
+ type: string
+allowlist_external_dirs:
+ description: List of folders that can be used as sources for sending files.
+ required: false
+ type: list
+allowlist_external_urls:
+ description: List of external URLs that can be fetched. URLs can match specific resources (e.g., `http://10.10.10.12/images/image1.jpg`) or a relative path that allows access to resources within it (e.g., `http://10.10.10.12/images` would allow access to anything under that path)
+ required: false
+ type: list
+media_dirs:
+ description: A mapping of local media sources and their paths on disk.
+ required: false
+ type: map
+language:
+ description: "Default language used by Home Assistant. This may, for example, influence the language used by voice assistants. The language should be specified as an RFC 5646 language tag, and must be a language which Home Assistant is translated to."
+ required: false
+ type: string
+ default: "en"
+country:
+ description: "Country in which Home Assistant is running. This may, for example, influence radio settings to comply with local regulations. The country should be specified as an ISO 3166.1 alpha-2 code. Pick your country from the column **Code** of [Wikipedia's list of ISO 31661 alpha-2 officially assigned code codes](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements)"
+ required: false
+ type: string
+{% endconfiguration %}
+
+## Editing the entity settings in YAML
+
+The Home Assistant Core integration is also responsible for the entity settings.
+By default, all of your devices will be visible and have a default icon determined by their domain. You can customize the look and feel of your front page by altering some of these parameters. This can be done by overriding attributes of specific entities.
+
+Most of these settings can be changed from the UI. For the detailed steps, refer to [Customizing entites](/docs/configuration/customizing-devices/).
+
+If you prefer editing in YAML, you can define your general settings in the [`configuration.yaml` file](/docs/configuration/).
+
+### Possible values
+
+{% configuration customize %}
+friendly_name:
+ description: Name of the entity as displayed in the UI.
+ required: false
+ type: string
+entity_picture:
+ description: URL to use as picture for entity.
+ required: false
+ type: string
+icon:
+ description: "Any icon from [Material Design Icons](https://pictogrammers.com/library/mdi/). Prefix name with `mdi:`, ie `mdi:home`. Note: Newer icons may not yet be available in the current Home Assistant release."
+ required: false
+ type: string
+assumed_state:
+ description: For switches with an assumed state two buttons are shown (turn off, turn on) instead of a switch. By setting `assumed_state` to `false` you will get the default switch icon.
+ required: false
+ type: boolean
+ default: true
+device_class:
+ description: Sets the class of the device, changing the device state and icon that is displayed on the UI (see below). It does not set the `unit_of_measurement`.
+ required: false
+ type: device_class
+ default: None
+unit_of_measurement:
+ description: Defines the units of measurement, if any. This will also influence the graphical presentation in the history visualization as continuous value. Sensors with missing `unit_of_measurement` are showing as discrete values.
+ required: false
+ type: string
+ default: None
+initial_state:
+ description: Sets the initial state for automations, `on` or `off`.
+ required: false
+ type: boolean
+ default: None
+{% endconfiguration %}
+
+### Device class
+
+Device class is currently supported by the following platforms:
+
+- [Binary sensor](/integrations/binary_sensor/)
+- [Button](/integrations/button/)
+- [Cover](/integrations/cover/)
+- [Humidifier](/integrations/humidifier/)
+- [Media player](/integrations/media_player/)
+- [Number](/integrations/number/)
+- [Sensor](/integrations/sensor/)
+- [Switch](/integrations/switch/)
+
+### Manual customization
+
+
+
+If you implement `customize`, `customize_domain`, or `customize_glob` you must make sure it is done inside of `homeassistant:` or it will fail.
+
+
+
+```yaml
+homeassistant:
+ name: Home
+ unit_system: metric
+ # etc
+
+ customize:
+ # Add an entry for each entity that you want to overwrite.
+ thermostat.family_room:
+ entity_picture: https://example.com/images/nest.jpg
+ friendly_name: Nest
+ switch.wemo_switch_1:
+ friendly_name: Toaster
+ entity_picture: /local/toaster.jpg
+ switch.wemo_switch_2:
+ friendly_name: Kitchen kettle
+ icon: mdi:kettle
+ switch.rfxtrx_switch:
+ assumed_state: false
+ media_player.my_media_player:
+ source_list:
+ - Channel/input from my available sources
+ # Customize all entities in a domain
+ customize_domain:
+ light:
+ icon: mdi:home
+ automation:
+ initial_state: "on"
+ # Customize entities matching a pattern
+ customize_glob:
+ "light.kitchen_*":
+ icon: mdi:description
+ "scene.month_*_colors":
+ icon: mdi:other
+```
## Services
@@ -43,12 +268,12 @@ will take effect the next time an importing template is rendered.
Reloads an integration config entry.
-| Service data attribute | Description |
-|---------------------------|-------------------------------------------------------------|
-| `entity_id` | List of entity ids used to reference a config entry. |
-| `area_id` | List of area ids used to reference a config entry. |
-| `device_id` | List of device ids used to reference a config entry. |
-| `entry_id` | A single config entry id used to reference a config entry. |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------------- |
+| `entity_id` | List of entity ids used to reference a config entry. |
+| `area_id` | List of area ids used to reference a config entry. |
+| `device_id` | List of device ids used to reference a config entry. |
+| `entry_id` | A single config entry id used to reference a config entry. |
### Service `homeassistant.reload_core_config`
@@ -68,11 +293,11 @@ Stops the Home Assistant instance. Home Assistant must be restarted from the Hos
Update the location of the Home Assistant default zone (usually "Home").
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `latitude` | no | Latitude of your location. |
-| `longitude` | no | Longitude of your location. |
-| `elevation` | yes | Elevation of your location. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | --------------------------- |
+| `latitude` | no | Latitude of your location. |
+| `longitude` | no | Longitude of your location. |
+| `elevation` | yes | Elevation of your location. |
#### Example
@@ -92,9 +317,9 @@ Generic service to toggle devices on/off. Same usage as the
service compared the others, is that is can be used to mix different domains,
for example, a light and a switch can be toggled in a single service call.
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | yes | The entity_id of the device to toggle on/off. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | --------------------------------------------- |
+| `entity_id` | yes | The entity_id of the device to toggle on/off. |
#### Example
@@ -114,9 +339,9 @@ Generic service to toggle devices on. Same usage as the
service compared the others, is that is can be used to mix different domains,
for example, a light and a switch can be turned on in a single service call.
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | yes | The entity_id of the device to turn on. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | --------------------------------------- |
+| `entity_id` | yes | The entity_id of the device to turn on. |
#### Example
@@ -136,9 +361,9 @@ Generic service to toggle devices off. Same usage as the
service compared the others, is that is can be used to mix different domains,
for example, a light and a switch can be turned off in a single service call.
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | yes | The entity_id of the device to turn off. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------- |
+| `entity_id` | yes | The entity_id of the device to turn off. |
#### Example
@@ -155,9 +380,9 @@ action:
Force one or more entities to update its data rather than wait for the next scheduled update.
-| Service data attribute | Optional | Description |
-|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | no | One or multiple entity_ids to update. It can be a list. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------- |
+| `entity_id` | no | One or multiple entity_ids to update. It can be a list. |
#### Example
diff --git a/source/_integrations/homematic.markdown b/source/_integrations/homematic.markdown
index bcc2948f65c7..10d27e1bb93e 100644
--- a/source/_integrations/homematic.markdown
+++ b/source/_integrations/homematic.markdown
@@ -15,7 +15,6 @@ ha_iot_class: Local Push
ha_release: 0.23
ha_codeowners:
- '@pvizeli'
- - '@danielperna84'
ha_domain: homematic
ha_platforms:
- binary_sensor
diff --git a/source/_integrations/homewizard.markdown b/source/_integrations/homewizard.markdown
index 952d7f1785ce..9bda71324123 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.
@@ -90,10 +90,10 @@ You can also control the green status light brightness with **Status light brigh
## Identify
The identify button can be pressed to let the status light blink for a few seconds.
-This feature is currently only available for the P1 meter and the Energy Socket.
+_This feature not available for the kWh Meter._
## Cloud communication
-The HomeWizard Energy devices are designed to work with the HomeWizard Energy app and require communication with the HomeWizard cloud to make them function with the app. The "Cloud connection" configuration toggle can be used to turn off all communication with the HomeWizard cloud, making the device fully local. The device cannot communicate with the app, and the device won't receive any future firmware updates. This feature is currently not available for the Water meter.
+The HomeWizard Energy devices are designed to work with the HomeWizard Energy app and require communication with the HomeWizard cloud to make them function with the app. The "Cloud connection" configuration toggle can be used to turn off all communication with the HomeWizard cloud, making the device fully local. The device cannot communicate with the app, and the device won't receive any future firmware updates.
Cloud communication is restored when the switch is turned on again. Cloud communications are also restored after a factory reset, or when the device is put in pairing mode.
diff --git a/source/_integrations/homeworks.markdown b/source/_integrations/homeworks.markdown
index 5ca1291f0027..962854f71017 100644
--- a/source/_integrations/homeworks.markdown
+++ b/source/_integrations/homeworks.markdown
@@ -2,14 +2,19 @@
title: Lutron Homeworks
description: How to use Lutron Homeworks Series 4 & 8 with Home Assistant.
ha_category:
+ - Binary sensor
+ - Button
- Hub
- Light
ha_release: 0.85
ha_iot_class: Local Push
ha_domain: homeworks
ha_platforms:
+ - binary_sensor
+ - button
- light
ha_integration_type: integration
+ha_config_flow: true
---
[Lutron](https://www.lutron.com/) is an American lighting control company. The Lutron Homeworks Series 4 & 8 systems are relatively old (~2003), and use RS-232 connections to communicate with home automation systems. The `homeworks` integration in Home Assistant is responsible for communicating with the main controller for these systems. Communication is through an ethernet to serial converter (NPort, for example).
@@ -18,67 +23,8 @@ Only a subset of the Homeworks system is supported - lights and keypads.
Lutron has created many systems over the years, each with their own unique interfacing protocol. There are three Homeworks systems - QS, Series 4 & 8, and original. This platform is only for Series 4 & 8. There is another integration [lutron](/integrations/lutron/) which handles Lutron RadioRA 2 systems.
-Homeworks keypad buttons are momentary switches. The button is pressed and released, meaning that there is no "state". Buttons generate `homeworks_button_press` and `homeworks_button_release` events. These events contain the "id", "name", and "button" of the button that was pressed. "id" is derived from "name", and "button" is the number of the button on the keypad (starting at 1).
+Homeworks keypad buttons are momentary switches. The button is pressed and released, meaning that there is no "state". Buttons generate `homeworks_button_press` and `homeworks_button_release` events. These events contain the "id", "name", and "button" of the button that was pressed. "id" is derived from "name", and "button" is the number of the button on the keypad (starting at 1). It's also possible to add binary sensor entities which indicate if a keypad LED is lit and button entities which can be used to trigger the actions bound to a keypad button.
-## Configuration
+{% include integrations/config_flow.md %}
-The protocol for automatically extracting device information from the controller isn't documented, so the `homeworks` integration must be configured manually. To use Lutron Homeworks devices in your installation, add the following to your `configuration.yaml` file:
-
-``` yaml
-# Example configuration.yaml entry
-homeworks:
- host: IP_ADDRESS
- port: 4001
- dimmers:
- - addr: "[02:08:01:01]"
- name: "Foyer Sconces"
- - addr: "[02:08:01:02]"
- name: "Foyer Downlights"
- rate: 2
-
- keypads:
- - addr: "[02:08:02:01]"
- name: "Foyer Keypad"
-```
-
-{% configuration %}
-host:
- description: The IP address of the ethernet to serial adapter. It is assumed that the adapter has been preconfigured.
- required: true
- type: string
-port:
- description: The port of the ethernet to serial adapter.
- required: true
- type: integer
-dimmers:
- description: List of dimmers.
- required: false
- type: list
- keys:
- addr:
- description: The unique address of the dimmer on the controller. The quotes, brackets, and number formatting must be of the form `"[##:##:##:##]"`.
- required: true
- type: string
- name:
- description: The name of the sensor will be the title of the button +`"_"` + the name of the keypad/
- required: true
- type: string
- rate:
- description: The amount of time (in seconds) for the light to transition to a new brightness level.
- required: false
- type: float
- default: 1
-keypads:
- description: List of keypads.
- required: false
- type: list
- keys:
- addr:
- description: The unique address of the keypad on the controller. The quotes, brackets, and number formatting must be of the form `"[##:##:##:##]"`.
- required: true
- type: string
- name:
- description: The name of the keypad.
- required: true
- type: string
-{% endconfiguration %}
+The protocol for automatically extracting device information from the controller isn't documented. Lights and keypads need to be added manually. This is done by configuring the integration after it has been added.
diff --git a/source/_integrations/http.markdown b/source/_integrations/http.markdown
index dcaff9ba8996..9c634d6ea02a 100644
--- a/source/_integrations/http.markdown
+++ b/source/_integrations/http.markdown
@@ -131,7 +131,7 @@ The `http` platforms are not real platforms within the meaning of the terminolog
To use those kind of [sensors](#sensor) or [binary sensors](#binary-sensor) in your installation no configuration in Home Assistant is needed. All configuration is done on the devices themselves. This means that you must be able to edit the target URL or endpoint and the payload. The entity will be created after the first message has arrived.
-Create a [Long-Lived Access Tokens](https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token) in the Home Assistant UI at the bottom of your profile if you want to use HTTP sensors.
+If you want to use HTTP sensors, create a [Long-Lived Access Tokens](https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token) in the Home Assistant UI in the **Security** section of your {% my profile title="**User profile**" %} page.
All [requests](https://developers.home-assistant.io/docs/api/rest#post-apistatesentity_id) need to be sent to the endpoint of the device and must be **POST**.
diff --git a/source/_integrations/humidifier.mqtt.markdown b/source/_integrations/humidifier.mqtt.markdown
index 2bb3bdb46245..4f5a4e5a8a76 100644
--- a/source/_integrations/humidifier.mqtt.markdown
+++ b/source/_integrations/humidifier.mqtt.markdown
@@ -174,12 +174,12 @@ json_attributes_topic:
max_humidity:
description: The minimum target humidity percentage that can be set.
required: false
- type: integer
+ type: float
default: 100
min_humidity:
description: The maximum target humidity percentage that can be set.
required: false
- type: integer
+ type: float
default: 0
name:
description: The name of the humidifier. Can be set to `null` if only the device name is relevant.
diff --git a/source/_integrations/husqvarna_automower.markdown b/source/_integrations/husqvarna_automower.markdown
index 5f4ee71af2a6..281c87a375eb 100644
--- a/source/_integrations/husqvarna_automower.markdown
+++ b/source/_integrations/husqvarna_automower.markdown
@@ -2,7 +2,10 @@
title: Husqvarna Automower
description: Instructions on how to integrate Husqvarna Automower lawn mowers into Home Assistant.
ha_category:
+ - Binary sensor
+ - Device tracker
- Lawn Mower
+ - Select
- Sensor
- Switch
ha_release: 2024.3
@@ -11,7 +14,11 @@ ha_config_flow: true
ha_codeowners:
- '@Thomas55555'
ha_platforms:
+ - binary_sensor
+ - device_tracker
+ - diagnostics
- lawn_mower
+ - select
- sensor
- switch
ha_integration_type: integration
@@ -75,12 +82,26 @@ The My Home Assistant redirect feature needs to be setup to redirect to your Hom
{% include integrations/config_flow.md %}
-
## Entities
Once you have enabled the Husqvarna Automower integration, you should see the following entities:
-### Lawn Mower
+### Binary sensor
+
+The integration will create the following binary sensors:
+
+- Battery charging
+ *The mower is currently charging. It reports this state if it autonomously returned to the dock due to low battery and if it leaves the dock for mowing after being fully charged.*
+- Leaving dock
+ *The mower is currently leaving the charging station and heading out to a starting point.*
+- Returning to dock
+ *The mower is on its way home to the charging station.*
+
+### Device tracker (if available)
+
+The integration will create a device tracker entity to show the position of the mower.
+
+### Lawn mower
The integration will create a lawn mower entity to control the mower. This entity can:
@@ -88,6 +109,10 @@ The integration will create a lawn mower entity to control the mower. This entit
- Pause mowing
- Park until next schedule
+### Select (if available)
+
+The integration will create a select entity for selecting the headlight mode of the mower.
+
### Sensor
The integration will create the following sensors:
diff --git a/source/_integrations/hyperion.markdown b/source/_integrations/hyperion.markdown
index 7b984db68619..69523f81b61a 100644
--- a/source/_integrations/hyperion.markdown
+++ b/source/_integrations/hyperion.markdown
@@ -14,6 +14,7 @@ ha_ssdp: true
ha_platforms:
- camera
- light
+ - sensor
- switch
ha_integration_type: integration
---
@@ -71,6 +72,10 @@ Please note that only the currently live Hyperion priority can be streamed, and
streamable sources will actually stream content (e.g., USB Capture Devices will work, but
static colors will not).
+## Sensors
+
+A sensor (Visible Priority) provides the effect currently displayed by the Hyperion server for the selected instance. Attributes of this sensor provide more details on the nature of the effect. For a detailed description, refer to the [Hyperion API](https://docs.hyperion-project.org/en/json/ServerInfo.html#priorities).
+
## Advanced entities
The Hyperion integration comes with a series of disabled-by-default entities for
diff --git a/source/_integrations/ifttt.markdown b/source/_integrations/ifttt.markdown
index 41cceed9735f..d73d606003d8 100644
--- a/source/_integrations/ifttt.markdown
+++ b/source/_integrations/ifttt.markdown
@@ -12,11 +12,11 @@ ha_platforms:
ha_integration_type: integration
---
-[IFTTT](https://ifttt.com) is a web service that allows users to create chains of simple conditional statements, so-called "Applets". With the IFTTT integration, you can trigger applets through the **"Webhooks"** service (which was previously the **"Maker"** channel).
+[IFTTT](https://ifttt.com) is a web service that allows users to create chains of simple conditional statements, so-called "Applets". With the IFTTT integration, you can trigger applets through the **"Webhooks"** service (which was previously the **"Maker"** channel). This requires the [Pro plan](https://ifttt.com/plans) or higher.
## Prerequisites
-To be able to receive events from IFTTT, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/docs/configuration/basic), or use your Nabu Casa account's webhook URL from the IFTTT integration.
+To be able to receive events from IFTTT, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/integrations/homeassistant/#allowlist_external_urls), or use your Nabu Casa account's webhook URL from the IFTTT integration.
{% include integrations/config_flow.md %}
@@ -111,11 +111,11 @@ When your screen looks like this, click the 'call service' button.
By default, the trigger is sent to all the API keys from `configuration.yaml`. If you
want to send the trigger to a specific key use the `target` field:
-Field | Value
------ | -----
-domain | `ifttt`
-service | `trigger`
-Service Data | `{"event": "EventName", "value1": "Hello World", "target": "YOUR_KEY_NAME1"}`
+| Field | Value |
+| ------------ | ----------------------------------------------------------------------------- |
+| domain | `ifttt` |
+| service | `trigger` |
+| Service Data | `{"event": "EventName", "value1": "Hello World", "target": "YOUR_KEY_NAME1"}` |
The `target` field can contain a single key name or a list of key names.
diff --git a/source/_integrations/image_upload.markdown b/source/_integrations/image_upload.markdown
index f45e0a852629..7bb4d2124672 100644
--- a/source/_integrations/image_upload.markdown
+++ b/source/_integrations/image_upload.markdown
@@ -1,5 +1,5 @@
---
-title: Image Upload
+title: Image upload
description: The image upload integration handle image assets in Home Assistant.
ha_category:
- Other
@@ -11,7 +11,7 @@ ha_quality_scale: internal
ha_integration_type: system
---
-The Image Upload integration allows Home Assistant to handle image assets in
+The **Image upload** {% term integration %} allows Home Assistant to handle image assets in
Home Assistant, for example, the profile photos of your systems account.
## Configuration
diff --git a/source/_integrations/input_boolean.markdown b/source/_integrations/input_boolean.markdown
index afd4e7064a50..3ea219ddc1af 100644
--- a/source/_integrations/input_boolean.markdown
+++ b/source/_integrations/input_boolean.markdown
@@ -1,6 +1,6 @@
---
-title: Input Boolean
-description: Instructions on how to use the Input Boolean helper with Home Assistant.
+title: Input boolean
+description: Instructions on how to use the input boolean helper with Home Assistant.
ha_category:
- Automation
- Helper
@@ -12,7 +12,7 @@ ha_domain: input_boolean
ha_integration_type: helper
---
-The Input Boolean helper integration allows you to define boolean values that
+The **Input boolean** helper integration allows you to define boolean values that
can be controlled via the user interface and can be used within conditions of
an {% term automation %}. This can for example be used to disable or enable certain
automations by using them in their {% term conditions %}.
@@ -67,12 +67,12 @@ This integration provides the following {% term services %} to modify the state
`input_boolean` and a service to reload the configuration without restarting
Home Assistant itself.
-| Service | Data | Description |
-| ------- | ---- | ----------- |
-| `turn_on` | `entity_id(s)`
`area_id(s)` | Set the value of specific `input_boolean` entities to `on`
-| `turn_off` | `entity_id(s)`
`area_id(s)` | Set the value of specific `input_boolean` entities to `off`
-| `toggle` | `entity_id(s)`
`area_id(s)` | Toggle the value of specific `input_boolean` entities
-| `reload` | | Reload `input_boolean` configuration |
+| Service | Data | Description |
+| ---------- | ------------------------------ | ----------------------------------------------------------- |
+| `turn_on` | `entity_id(s)`
`area_id(s)` | Set the value of specific `input_boolean` entities to `on` |
+| `turn_off` | `entity_id(s)`
`area_id(s)` | Set the value of specific `input_boolean` entities to `off` |
+| `toggle` | `entity_id(s)`
`area_id(s)` | Toggle the value of specific `input_boolean` entities |
+| `reload` | | Reload `input_boolean` configuration |
### Restore state
diff --git a/source/_integrations/input_button.markdown b/source/_integrations/input_button.markdown
index 2e130827e4a0..36ccde149016 100644
--- a/source/_integrations/input_button.markdown
+++ b/source/_integrations/input_button.markdown
@@ -1,6 +1,6 @@
---
-title: Input Button
-description: Instructions on how to use the Input Button helper with Home Assistant.
+title: Input button
+description: Instructions on how to use the input button helper with Home Assistant.
ha_category:
- Automation
- Helper
@@ -12,7 +12,7 @@ ha_domain: input_button
ha_integration_type: helper
---
-The Input Button helper integration allows you to define buttons that
+The **Input button** helper integration allows you to define buttons that
can be pressed via the user interface, and can be used to trigger things,
like an automation.
diff --git a/source/_integrations/input_number.markdown b/source/_integrations/input_number.markdown
index 2b34c9d0a24f..cc9252568f53 100644
--- a/source/_integrations/input_number.markdown
+++ b/source/_integrations/input_number.markdown
@@ -1,6 +1,6 @@
---
-title: Input Number
-description: Instructions on how to integrate the Input Number integration into Home Assistant.
+title: Input number
+description: Instructions on how to integrate the input number integration into Home Assistant.
ha_category:
- Automation
- Helper
@@ -12,7 +12,7 @@ ha_domain: input_number
ha_integration_type: helper
---
-The `input_number` integration allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. The frontend can display a slider, or a numeric input box. Changes to the slider or numeric input box generate state events. These state events can be utilized as `automation` triggers as well.
+The **Input number** {% term integration %} allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. The frontend can display a slider, or a numeric input box. Changes to the slider or numeric input box generate state events. These state events can be utilized as `automation` triggers as well.
The preferred way to configure an input number is via the user interface at **{% my helpers title="Settings > Devices & Services > Helpers" %}**. Click the add button and then choose the **{% my config_flow_start domain="input_number" title="Number" %}** option.
@@ -87,12 +87,12 @@ input_number:
This integration provides the following services to modify the state of the `input_number` and a service to reload the
configuration without restarting Home Assistant itself.
-| Service | Data | Description |
-| ------- | ---- | ----------- |
-| `decrement` | `entity_id(s)`
`area_id(s)` | Decrement the value of specific `input_number` entities by `step`
-| `increment` | `entity_id(s)`
`area_id(s)` | Increment the value of specific `input_number` entities by `step`
-| `reload` | | Reload `input_number` configuration |
-| `set_value` | `value`
`entity_id(s)`
`area_id(s)` | Set the value of specific `input_number` entities
+| Service | Data | Description |
+| ----------- | ----------------------------------------- | ----------------------------------------------------------------- |
+| `decrement` | `entity_id(s)`
`area_id(s)` | Decrement the value of specific `input_number` entities by `step` |
+| `increment` | `entity_id(s)`
`area_id(s)` | Increment the value of specific `input_number` entities by `step` |
+| `reload` | | Reload `input_number` configuration |
+| `set_value` | `value`
`entity_id(s)`
`area_id(s)` | Set the value of specific `input_number` entities |
### Restore state
diff --git a/source/_integrations/input_select.markdown b/source/_integrations/input_select.markdown
index c7303e07e227..72900456e387 100644
--- a/source/_integrations/input_select.markdown
+++ b/source/_integrations/input_select.markdown
@@ -1,6 +1,6 @@
---
-title: Input Select
-description: Instructions on how to integrate the Input Select integration into Home Assistant.
+title: Input select
+description: Instructions on how to integrate the input select integration into Home Assistant.
ha_category:
- Automation
- Helper
@@ -12,7 +12,7 @@ ha_domain: input_select
ha_integration_type: helper
---
-The `input_select` integration allows the user to define a list of values that can be selected via the frontend and can be used within conditions of an automation. When a user selects a new item, a state transition event is generated. This state event can be used in an `automation` trigger.
+The **Input select** {% term integration %} allows the user to define a list of values that can be selected via the frontend and can be used within conditions of an automation. When a user selects a new item, a state transition event is generated. This state event can be used in an `automation` trigger.
The preferred way to configure an input select is via the user interface at **{% my helpers title="Settings > Devices & Services > Helpers" %}**. Click the add button and then choose the **{% my config_flow_start domain="input_select" title="Dropdown" %}** option.
@@ -77,29 +77,29 @@ If you set a valid value for `initial` this integration will start with the stat
This integration provides three services to modify the state of the `input_select`.
-| Service | Data | Description |
-| ------- | ---- | ----------- |
-| `select_option` | `option` | This can be used to select a specific option.
-| `set_options` | `options`
`entity_id(s)` | Set the options for specific `input_select` entities.
-| `select_first` | | Select the first option.
-| `select_last` | | Select the last option.
-| `reload` | | Reload `input_select` configuration |
+| Service | Data | Description |
+| --------------- | --------------------------- | ----------------------------------------------------- |
+| `select_option` | `option` | This can be used to select a specific option. |
+| `set_options` | `options`
`entity_id(s)` | Set the options for specific `input_select` entities. |
+| `select_first` | | Select the first option. |
+| `select_last` | | Select the last option. |
+| `reload` | | Reload `input_select` configuration |
#### Service `input_select.select_next`
Select the next option.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `cycle` | yes | Whether to cycle to the first value after the last. Default: `true`
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------- |
+| `cycle` | yes | Whether to cycle to the first value after the last. Default: `true` |
#### Service `input_select.select_previous`
Select the previous option.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `cycle` | yes | Whether to cycle to the last value before the first. Default: `true`
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | -------------------------------------------------------------------- |
+| `cycle` | yes | Whether to cycle to the last value before the first. Default: `true` |
### Scenes
diff --git a/source/_integrations/input_text.markdown b/source/_integrations/input_text.markdown
index ad7fde933508..8a57b8309877 100644
--- a/source/_integrations/input_text.markdown
+++ b/source/_integrations/input_text.markdown
@@ -1,6 +1,6 @@
---
-title: Input Text
-description: Instructions on how to integrate the Input Text integration into Home Assistant.
+title: Input text
+description: Instructions on how to integrate the Input text integration into Home Assistant.
ha_category:
- Automation
- Helper
@@ -12,7 +12,7 @@ ha_domain: input_text
ha_integration_type: helper
---
-The `input_text` integration allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. Changes to the value stored in the text box generate state events. These state events can be utilized as `automation` triggers as well. It can also be configured in password mode (obscured text).
+The **Input text** {% term integration %} allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. Changes to the value stored in the text box generate state events. These state events can be utilized as `automation` triggers as well. It can also be configured in password mode (obscured text).
The preferred way to configure an input text is via the user interface at **{% my helpers title="Settings > Devices & Services > Helpers" %}**. Click the add button and then choose the **{% my config_flow_start domain="input_text" title="Text" %}** option.
@@ -83,10 +83,10 @@ input_text:
This integration provides a service to modify the state of the `input_text` and a service to reload the `input_text` configuration without restarting Home Assistant itself.
-| Service | Data | Description |
-| ------- | ---- | ----------- |
-| `set_value` | `value`
`entity_id(s)` | Set the value for specific `input_text` entities.
-| `reload` | | Reload `input_text` configuration |
+| Service | Data | Description |
+| ----------- | ------------------------- | ------------------------------------------------- |
+| `set_value` | `value`
`entity_id(s)` | Set the value for specific `input_text` entities. |
+| `reload` | | Reload `input_text` configuration |
### Restore state
diff --git a/source/_integrations/ipma.markdown b/source/_integrations/ipma.markdown
index 85351853890a..378c143b06e4 100644
--- a/source/_integrations/ipma.markdown
+++ b/source/_integrations/ipma.markdown
@@ -10,6 +10,7 @@ ha_codeowners:
- '@dgomes'
ha_domain: ipma
ha_platforms:
+ - diagnostics
- sensor
- weather
ha_integration_type: integration
diff --git a/source/_integrations/juicenet.markdown b/source/_integrations/juicenet.markdown
new file mode 100644
index 000000000000..e4add243f456
--- /dev/null
+++ b/source/_integrations/juicenet.markdown
@@ -0,0 +1,49 @@
+---
+title: JuiceNet
+description: Instructions on how to setup WiFi-equipped JuiceNet/JuiceBox charging stations with Home Assistant.
+ha_category:
+ - Car
+ - Energy
+ - Number
+ - Sensor
+ - Switch
+ha_iot_class: Cloud Polling
+ha_release: 0.47
+ha_codeowners:
+ - '@jesserockz'
+ha_domain: juicenet
+ha_config_flow: true
+ha_platforms:
+ - number
+ - sensor
+ - switch
+ha_integration_type: integration
+---
+
+The `juicenet` platform pulls data from a [JuiceNet](https://evcharging.enelx.com/products/juicebox) charging station equipped with a Wi-Fi connection. It will access and make available all of the devices attached to your account. It also exposes a switch allowing you to charge your car now instead of waiting for the pre-set schedule.
+
+{% include integrations/config_flow.md %}
+
+## Sensor
+
+The `juicenet` sensor platform allows you to get data from your [JuiceNet](https://evcharging.enelx.com/products/juicebox) charger.
+
+### Added sensors
+
+These sensors will be added for each JuiceNet device in your account:
+
+- Status
+- Temperature (inside the device)
+- Voltage
+- Amps
+- Watts
+- Charge time of session
+- Energy added this session
+
+## Switch
+
+The `juicenet` switch platform allows you to override the charging schedule for your JuiceNet device.
+
+## Number
+
+The `juicenet` number platform allows you to control the charging amperage limit.
diff --git a/source/_integrations/jvc_projector.markdown b/source/_integrations/jvc_projector.markdown
index 2d1b72df5913..47f4948cb4e6 100644
--- a/source/_integrations/jvc_projector.markdown
+++ b/source/_integrations/jvc_projector.markdown
@@ -13,6 +13,7 @@ ha_domain: jvc_projector
ha_platforms:
- binary_sensor
- remote
+ - sensor
ha_integration_type: device
---
@@ -61,5 +62,25 @@ The JVC Projector remote platform will create a [Remote](/integrations/remote/)
### Binary sensor
-The status reported is:
-- **Power on** is **True** when the projector is either in status **on** or **warming**.
+The following sensor types are supported:
+
+- Power on is True when projector is in status "on", "warming"
+
+### Sensor
+
+Introduces two sensors to detect Power Status and HDMI Input.
+
+Detailed Power Status values:
+
+- `standby`
+- `on`
+- `warming`
+- `cooling`
+- `error`
+
+Please note that if the projector is off, it will not respond to remote polling and will show as *unavailable*.
+
+Detailed HDMI Input values:
+
+- `hdmi1`
+- `hdmi2`
diff --git a/source/_integrations/kitchen_sink.markdown b/source/_integrations/kitchen_sink.markdown
index ef190583c5bc..9e0c80ccfe3a 100644
--- a/source/_integrations/kitchen_sink.markdown
+++ b/source/_integrations/kitchen_sink.markdown
@@ -12,6 +12,7 @@ ha_iot_class: Calculated
ha_platforms:
- button
- image
+ - lawn_mower
- lock
- sensor
- switch
diff --git a/source/_integrations/konnected.markdown b/source/_integrations/konnected.markdown
index 717107ad37d9..36df0a6f4ed8 100644
--- a/source/_integrations/konnected.markdown
+++ b/source/_integrations/konnected.markdown
@@ -111,7 +111,7 @@ Once all zones are configured you'll be presented with the configuration for add
**Blink panel LED on when sending state change:** The desired LED behavior for the panel.
-**Override default Home Assistant API host panel URL:** The Konnected Alarm Panel post sensor states back to the Home Assistant API. If this value is unchecked the panel will default postbacks using the URL [configured](/docs/configuration/basic) in Home Assistant. By default, the integration will use the internal URL. However, if you check this field and set the **Override API host URL** to your _local_ IP address and port (e.g., `http://192.168.1.101:8123`), it will be used instead of the internal URL.
+**Override default Home Assistant API host panel URL:** The Konnected Alarm Panel post sensor states back to the Home Assistant API. If this value is unchecked the panel will default postbacks using the URL [configured](/integrations/homeassistant/#allowlist_external_urls) in Home Assistant. By default, the integration will use the internal URL. However, if you check this field and set the **Override API host URL** to your _local_ IP address and port (e.g., `http://192.168.1.101:8123`), it will be used instead of the internal URL.
**Override API host URL (optional):** The host info to use if you checked **Override default Home Assistant API host panel URL** in the step above. This is ignored if **Override default Home Assistant API host panel URL** is unchecked.
diff --git a/source/_integrations/lamarzocco.markdown b/source/_integrations/lamarzocco.markdown
index d762df7a9ff8..4dfa142916f8 100644
--- a/source/_integrations/lamarzocco.markdown
+++ b/source/_integrations/lamarzocco.markdown
@@ -18,15 +18,18 @@ ha_platforms:
- sensor
- switch
- update
+ha_bluetooth: true
ha_codeowners:
- '@zweckj'
ha_integration_type: device
---
-This integration interacts with [La Marzocco coffee machines](https://lamarzocco.com/it/en/) through calls to the LaMarzocco cloud API and (optionally) local API calls, which include a WebSocket connection for (near) real-time updates.
+This integration interacts with [La Marzocco coffee machines](https://lamarzocco.com/it/en/) through calls to the LaMarzocco cloud API. Optionally, local API calls, which include a WebSocket connection for (near) real-time updates and a Bluetooth connection, can be utilized for local connections.
To be able to configure your machine in Home Assistant, your machine needs to be added to your account using the official La Marzocco app first. Currently, only login with username & password is supported. If you are currently using a social login, you need to create a new LaMarzocco account and transfer your machine to it to be able to use this integration.
+If your machine is in Bluetooth range to your Home Assistant host and the [Bluetooth](/integrations/bluetooth) integration is fully loaded, the machine will be discovered automatically.
+
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/lawn_mower.mqtt.markdown b/source/_integrations/lawn_mower.mqtt.markdown
index 3260c3ba0234..d8c58a267422 100644
--- a/source/_integrations/lawn_mower.mqtt.markdown
+++ b/source/_integrations/lawn_mower.mqtt.markdown
@@ -177,7 +177,7 @@ qos:
type: integer
default: 0
start_mowing_template:
- description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `dock_command_topic`. The `value` parameter in the template will be set to `dock`.
+ description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `start_mowing_command_topic`. The `value` parameter in the template will be set to `start_mowing`.
required: false
type: template
start_mowing_command_topic:
@@ -210,7 +210,7 @@ The example below shows how to use a single command topic with a command templat
```yaml
# Example configuration.yaml entry
mqtt:
- - alarm_control_panel:
+ - lawn_mower:
name: "Lawn Mower Plus"
activity_state_topic: "lawn_mower_plus/state"
activity_value_template: "{{ value_json.activity }}"
diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown
index 9bc7cbbde59b..31ee29164a18 100644
--- a/source/_integrations/light.mqtt.markdown
+++ b/source/_integrations/light.mqtt.markdown
@@ -40,7 +40,7 @@ When a state topic is not available, the light will work in optimistic mode. In
Optimistic mode can be forced, even if the `state_topic` is available. Try to enable it, if experiencing incorrect light operation.
Home Assistant internally assumes that a light's state corresponds to a defined `color_mode`.
-The state of MQTT lights with default schema and support for both color and color temperature will set the `color_mode` according to the last received valid color or color temperature. Optionally, a `color_mode_state_topic` can be configured for explicit control of the `color_mode`
+The state of MQTT lights with default schema and support for both color and color temperature will set the `color_mode` according to the last received valid color or color temperature. Optionally, a `color_mode_state_topic` can be configured for explicit control of the `color_mode`.
```yaml
# Example configuration.yaml entry
@@ -563,7 +563,7 @@ availability_topic:
required: false
type: string
brightness:
- description: Flag that defines if the light supports brightness.
+ description: Flag that defines if light supports brightness when the `rgb`, `rgbw`, or `rgbww` color mode is supported.
required: false
type: boolean
default: false
@@ -572,11 +572,6 @@ brightness_scale:
required: false
type: integer
default: 255
-color_mode:
- description: Flag that defines if the light supports color modes.
- required: false
- type: boolean
- default: false
command_topic:
description: The MQTT topic to publish commands to change the light’s state.
required: true
@@ -715,7 +710,7 @@ state_topic:
required: false
type: string
supported_color_modes:
- description: A list of color modes supported by the list. This is required if `color_mode` is `True`. Possible color modes are `onoff`, `brightness`, `color_temp`, `hs`, `xy`, `rgb`, `rgbw`, `rgbww`, `white`. Note that if `onoff` **or** `brightness` are used, that must be the _only_ value in the list.
+ description: A list of color modes supported by the list. Possible color modes are `onoff`, `brightness`, `color_temp`, `hs`, `xy`, `rgb`, `rgbw`, `rgbww`, `white`. Note that if `onoff` **or** `brightness` are used, that must be the _only_ value in the list.
required: false
type: list
unique_id:
@@ -758,7 +753,6 @@ mqtt:
state_topic: "home/rgb1"
command_topic: "home/rgb1/set"
brightness: true
- color_mode: true
supported_color_modes: ["rgb"]
```
@@ -775,7 +769,6 @@ mqtt:
state_topic: "home/rgb1"
command_topic: "home/rgb1/set"
brightness: true
- color_mode: true
supported_color_modes: ["brightness"]
```
@@ -793,7 +786,6 @@ mqtt:
command_topic: "home/light/set"
brightness: true
brightness_scale: 4095
- color_mode: true
supported_color_modes: ["brightness"]
```
@@ -817,7 +809,6 @@ mqtt:
name: mqtt_json_hs_light
state_topic: "home/light"
command_topic: "home/light/set"
- color_mode: true
supported_color_modes: ["hs"]
```
@@ -847,7 +838,6 @@ mqtt:
state_topic: "home/rgbw1"
command_topic: "home/rgbw1/set"
brightness: true
- color_mode: true
supported_color_modes: ["rgbw"]
```
diff --git a/source/_integrations/local_calendar.markdown b/source/_integrations/local_calendar.markdown
index d0ad2e59ed05..e2cd8c251da0 100644
--- a/source/_integrations/local_calendar.markdown
+++ b/source/_integrations/local_calendar.markdown
@@ -1,6 +1,6 @@
---
-title: Local Calendar
-description: Instructions on how to use Local Calendars in Home Assistant.
+title: Local calendar
+description: Instructions on how to use local calendars in Home Assistant.
ha_category:
- Calendar
ha_iot_class: Local Polling
@@ -15,7 +15,7 @@ ha_codeowners:
ha_integration_type: integration
---
-The local calendar integration allows you to create a calendar of events in Home Assistant for powering automations.
+The **Local calendar** {% term integration %} allows you to create a calendar of events in Home Assistant for powering automations.
A calendar entity has a state and attributes that represent the next upcoming event (only). A calendar trigger is a much more flexible way to power automations with fewer limitations than using the entity state.
diff --git a/source/_integrations/local_file.markdown b/source/_integrations/local_file.markdown
index a1594b19d2d6..ca49a1ded323 100644
--- a/source/_integrations/local_file.markdown
+++ b/source/_integrations/local_file.markdown
@@ -1,6 +1,6 @@
---
-title: Local File
-description: Instructions how to use Local File as a Camera within Home Assistant.
+title: Local file
+description: Instructions how to use local file as a camera within Home Assistant.
ha_category:
- Camera
ha_iot_class: Local Polling
@@ -11,7 +11,7 @@ ha_platforms:
ha_integration_type: integration
---
-The `local_file` camera platform allows you to integrate an image file from disk into Home Assistant as a camera. If the image is updated on the file system the image displayed in Home Assistant will also be updated. The service `local_file.update_file_path` can be used to update the image using an automation.
+The **Local file** camera {% term integration %} allows you to integrate an image file from disk into Home Assistant as a camera. If the image is updated on the file system the image displayed in Home Assistant will also be updated. The service `local_file.update_file_path` can be used to update the image using an automation.
The `local_file` camera can for example be used with various camera platforms that save a temporary images locally. It can also be used to display a graph that you render periodically and will then be displayed in Home Assistant.
@@ -41,7 +41,7 @@ name:
Use this service to change the file displayed by the camera.
-| Service data attribute | Description |
-| -----------------------| ----------- |
-| `entity_id` | String of the `entity_id` of the camera to update. |
-| `file_path` | The full path to the new image file to be displayed. |
+| Service data attribute | Description |
+| ---------------------- | ---------------------------------------------------- |
+| `entity_id` | String of the `entity_id` of the camera to update. |
+| `file_path` | The full path to the new image file to be displayed. |
diff --git a/source/_integrations/local_todo.markdown b/source/_integrations/local_todo.markdown
index 19aadb9bb15f..f7602092bcbc 100644
--- a/source/_integrations/local_todo.markdown
+++ b/source/_integrations/local_todo.markdown
@@ -12,9 +12,14 @@ ha_codeowners:
ha_integration_type: integration
ha_platforms:
- todo
+related:
+ - docs: /integrations/todo/
+ title: To-do list integration documentation
+ - docs: /dashboards/todo-list/
+ title: To-do list card
---
-The **Local to-do list** integration allows you to create to-do lists in Home Assistant.
+The **Local to-do list** {% term integration %} allows you to create to-do lists in Home Assistant.
To-do lists are shown on the **To-do list** dashboard for tracking items and whether
or not they have been completed.
@@ -22,8 +27,3 @@ See the [**To-do list** integration](/integrations/todo) for additional details
about to-do list entities.
{% include integrations/config_flow.md %}
-
-## Related topics
-
-- [**To-do list** integration](/integrations/todo)
-- [Shopping list card](/dashboards/shopping-list/)
\ No newline at end of file
diff --git a/source/_integrations/lutron_caseta.markdown b/source/_integrations/lutron_caseta.markdown
index 6c64992f5499..ca13682b775c 100644
--- a/source/_integrations/lutron_caseta.markdown
+++ b/source/_integrations/lutron_caseta.markdown
@@ -113,7 +113,7 @@ Use a DHCP reservation on your router to reserve the address or in the PRO model
-To get Lutron Caseta roller, honeycomb shades, lights, scene and switch working with Home Assistant. First follow the instructions for the general Lutron Caseta integration above.
+To get Lutron Caseta roller, honeycomb shades, wood blinds, lights, scene and switch working with Home Assistant, first follow the instructions for the general Lutron Caseta integration above.
## Cover
@@ -123,6 +123,8 @@ For more information on working with shades in Home Assistant, see the [Covers i
Available services: `cover.open_cover`, `cover.close_cover`, `cover.stop_cover` and `cover.set_cover_position`. Cover `position` ranges from `0` for fully closed to `100` for fully open.
+Available services for tilt-only wood blinds: `cover.open_cover_tilt`, `cover.close_cover_tilt`, `cover.stop_cover_tilt`, `cover.toggle_tilt`. Cover `position` is `0` or `100` for fully closed and `50` for fully open.
+
## Light
After setup, dimmable lights including wall and plug-in dimmers will appear in Home Assistant using an `entity_id` based on the name used in the Lutron mobile app. For example, a light called 'Bedroom Lamp' will appear in Home Assistant as `light.bedroom_lamp`.
diff --git a/source/_integrations/mailgun.markdown b/source/_integrations/mailgun.markdown
index 654fd8562a26..5c5f4def3f82 100644
--- a/source/_integrations/mailgun.markdown
+++ b/source/_integrations/mailgun.markdown
@@ -12,7 +12,7 @@ ha_platforms:
ha_integration_type: integration
---
-To be able to receive webhooks from Mailgun, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/docs/configuration/basic)).
+To be able to receive webhooks from Mailgun, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/integrations/homeassistant/#allowlist_external_urls).
To set it up, go to the integrations page in the configuration screen and find Mailgun. Click on configure. Follow the instructions on the screen to configure Mailgun.
diff --git a/source/_integrations/map.markdown b/source/_integrations/map.markdown
deleted file mode 100644
index 3702fe90909a..000000000000
--- a/source/_integrations/map.markdown
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Map
-description: Offers a map to show tracked devices.
-ha_category:
- - Other
-ha_release: 0.56
-ha_quality_scale: internal
-ha_domain: map
-ha_integration_type: system
----
-
-This offers a map on the frontend to display the location of tracked devices. To set up tracked devices, look at the [device tracker](/integrations/device_tracker/) documentation. This integration is by default enabled, unless you've disabled or removed the [`default_config:`](/integrations/default_config/) line from your configuration. If that is the case, the following example shows you how to enable this integration manually:
-
-```yaml
-# Example configuration.yaml entry
-map:
-```
-
-
-Devices that are currently at home won't show on the map.
-
-
-
-
-This map always shows the location of all tracked devices. If you want to hide certain entities, you should look into the [Map Card](/dashboards/map/).
-
-
diff --git a/source/_integrations/matrix.markdown b/source/_integrations/matrix.markdown
index 5b8ad02b746a..48cfb641a394 100644
--- a/source/_integrations/matrix.markdown
+++ b/source/_integrations/matrix.markdown
@@ -218,7 +218,7 @@ action:
-If you need to include a file from an external folder in your notifications, you will have to [list the source folder as allowed](/docs/configuration/basic/).
+If you need to include a file from an external folder in your notifications, you will have to [list the source folder as allowed](/integrations/homeassistant/#allowlist_external_dirs).
```yaml
configuration.yaml
diff --git a/source/_integrations/matter.markdown b/source/_integrations/matter.markdown
index 01e786283bf7..7e070a96b225 100644
--- a/source/_integrations/matter.markdown
+++ b/source/_integrations/matter.markdown
@@ -26,6 +26,13 @@ ha_platforms:
- sensor
- switch
ha_integration_type: integration
+related:
+ - docs: /integrations/thread/
+ title: Thread
+ - docs: /integrations/homekit_controller/
+ title: HomeKit
+ - docs: /integrations/homekit_controller/#adding-a-homekit-device-through-thread
+ title: Adding an Apple HomeKit device through Thread
---
The Matter integration allows you to control Matter devices on your local Wi-Fi or {% term Thread %} network.
@@ -138,8 +145,8 @@ This guide describes how to add a new device. This will use the Bluetooth connec
1. Open The Home Assistant app on your phone.
2. Go to {% my integrations title="**Settings** > **Devices & services**" %}.
-3. On the **Devices** tab, select the **Add device** button.
-4. Select **Add Matter device**.
+3. On the **Devices** tab, select the **Add device** button, and select **Add Matter device**.
+4. In the dialog, select **No, it's new.**.
5. Scan the QR-code of the Matter device with your phone camera or select **More options...** to manually enter the Commission code.
6. Select **Add to Home Assistant**.
- This starts the commissioning process which may take a few minutes.
@@ -151,8 +158,6 @@ This guide describes how to add a new device. This will use the Bluetooth connec
9. Once the process is complete, select **Done**.
- You are now redirected to the device page within Home Assistant. It is ready for use.
-
-
### To add a new device using the Android Companion app
This guide describes how to add a new device. This will use the Bluetooth connection of your phone to add the device.
@@ -166,8 +171,8 @@ This guide describes how to add a new device. This will use the Bluetooth connec
- When prompted to **Choose an app**, make sure to select Home Assistant.
- Once the process is complete, select **Done**, then select **Add device**.
4. If you did not see a pop-up, go to {% my integrations title="**Settings** > **Devices & Services**" %}.
- - On the **Devices** tab, select the **Add device** button.
- - Select **Add Matter device**.
+ - On the **Devices** tab, select the **Add device** button, and select **Add Matter device**.
+ - In the dialog, select **No, it's new.**.
- Scan the QR-code of the Matter device with your phone camera or select **Setup without QR-code** to manually enter the commission code.
- This starts the commissioning process which may take a few minutes.
- If you're adding a test board (e.g. ESP32 running the example apps) and commissioning fails, you might need to take some actions in the Google Developer console, have a look at any instructions for your test device.
@@ -177,7 +182,10 @@ This guide describes how to add a new device. This will use the Bluetooth connec
![image](/images/integrations/matter/matter-android-rename.png)
7. Your device is now ready to use.
-
+
+
+ Screencast showing how to add a new Matter device to Home Assistant.
+
### Troubleshooting the installation
@@ -214,37 +222,24 @@ Use one of these methods if your Matter device was added to Apple Home or Google
- Deselect the checkbox, then select **Submit**.
- In the next step, provide the URL to your Matter server.
-### Share a device from Apple Home
-
-To allow Home Assistant to control the Matter device that has previously been added to Apple Home, follow these steps:
+### To share a device from another Matter controller (like Apple or Google Home)
-1. In Apple Home find your device and select the cogwheel to view the **Accessory Settings**.
-2. Scroll all the way down and select **Turn On Pairing Mode**.
-3. You are now given a setup code, copy this to the clipboard.
-4. In the Home Assistant Companion App, go to {% my integrations title="**Settings** > **Devices & services**" %}.
-5. Select **Devices** > **Add device** and on the QR code scanner page, select **More options**.
-6. From the list, select your device and paste the code you just received from Apple Home.
-7. Once the device is connected with Home Assistant, the device page opens and you can control it from there.
+To allow Home Assistant to control the Matter device that has already been added to another Matter controller, like Google Home, follow these steps:
-
-
-### Share a device from Google Home
-
-To allow Home Assistant to control the Matter device that has previously been added to Google Home, follow these steps:
-
-1. In Google Home, open the **Devices** page and select the cogwheel.
-2. On the **Settings** page, select your Matter device.
-3. Select **Linked Matter apps and services**.
-4. Select **Link apps and services** to link the device to Home Assistant.
-5. Choose Home Assistant from the list.
- - You are redirected to the Home Assistant Companion app now.
- - Select **Add device**.
- - **Troubleshooting**: If Home Assistant fails to add the device, check if you have the Matter integration installed and the latest version of the Companion app.
+1. Open the Home Assistant app on your phone.
+2. Go to {% my integrations title="**Settings** > **Devices & services**" %}.
+3. On the **Devices** tab, select the **Add device** button and select **Add Matter device**.
+4. In the dialog, select **Yes, it's already in use**, then select which controller it is already connected to. For example, Google Home.
+5. Follow the instructions given in the dialog.
+ - **Troubleshooting**: If Home Assistant fails to add the device, check if you have the Matter integration installed and the latest version of the Companion app.
6. Once the device has been added to Home Assistant, you see a notification **Your device has been added**.
- When the process finishes, you're redirected to the device page in Home Assistant.
- You can now control your device from within Home Assistant, as well as from Google Home.
-
+
+
+ Screencast showing how to share a Matter device from Apple Home.
+
### Using a Matter bridge
@@ -368,14 +363,3 @@ Also see this [extended troubleshooting guide](https://developers.home.google.co
The Matter protocol relies on (local) IPv6 and mDNS (multicast traffic) which should be able to travel freely in your network. Matter devices that use Wi-Fi (including Thread border routers) must be on the same LAN/VLAN as Home Assistant. Matter devices that only use {% term Thread %} must be joined to {% term Thread %} networks for which there is at least one border router connected to the Home Assistant LAN.
If you experience any issues with discovering devices (for example, if the initial {% term commissioning %} keeps failing or if devices become unavailable randomly), investigate your network topology. For instance, a setting on your router or Wi-Fi access point to "optimize" multicast traffic can harm the (discovery) traffic from Matter devices. Keep this in mind when you experience issues trying to add or control Matter devices. Protocols like Matter are designed for regular residential network setups and may not integrate well with enterprise networking solutions like VLANs, Multicast filtering, and (malfunctioning) IGMP snooping. To avoid issues, try to keep your network topology as simple and flat as possible.
-
-## Related topics
-
-### Related integrations
-
-- [Thread](/integrations/thread/)
-- [HomeKit](/integrations/homekit_controller/)
-
-### Related guides
-
-- [Adding an Apple HomeKit device through Thread](/integrations/homekit_controller/#adding-a-homekit-device-through-thread)
diff --git a/source/_integrations/media_player.markdown b/source/_integrations/media_player.markdown
index 937ab1f023e5..004774224cd7 100644
--- a/source/_integrations/media_player.markdown
+++ b/source/_integrations/media_player.markdown
@@ -183,5 +183,5 @@ Allows to group media players together for synchronous playback. Only works on s
The way media players are displayed in the frontend can be modified in the [customize section](/getting-started/customizing-devices/). The following device classes are supported for media players:
- `tv`: Device is a television type device.
-- `speaker`: Device is speaker or stereo type device.
-- `receiver`: Device is audio video receiver type device taking audio and outputting to speakers and video to some display.
+- `speaker`: Device is a speaker or stereo type device.
+- `receiver`: Device is an audio/video receiver type device taking audio and outputting to speakers and video to displays.
diff --git a/source/_integrations/media_source.markdown b/source/_integrations/media_source.markdown
index 5da8c87175d6..e00c857c5815 100644
--- a/source/_integrations/media_source.markdown
+++ b/source/_integrations/media_source.markdown
@@ -64,7 +64,7 @@ homeassistant:
- If you want to use media from a network storage, the network storage must first be connected first. Refer to [these instructions on how to connect network storage](/common-tasks/os/#network-storage).
+ If you want to use media from a network storage, the network storage must be connected first. Refer to [these instructions on how to connect network storage](/common-tasks/os/#network-storage).
The media from the network storage is then automatically added to the local media browser.
@@ -99,4 +99,4 @@ data:
media_content_id: "media-source://media_source/local/videos/favourites/Epic Sax Guy 10 Hours.mp4"
```
-[basic-configuration]: /docs/configuration/basic/#media_dirs
+[basic-configuration]: /integrations/homeassistant/#media_dirs
\ No newline at end of file
diff --git a/source/_integrations/microbees.markdown b/source/_integrations/microbees.markdown
index 054e73879e66..28f0763db0e3 100644
--- a/source/_integrations/microbees.markdown
+++ b/source/_integrations/microbees.markdown
@@ -3,6 +3,7 @@ title: microBees
description: Instructions on how to integrate microBees devices into Home Assistant.
ha_category:
- Button
+ - Cover
- Light
- Sensor
- Switch
@@ -13,7 +14,9 @@ ha_config_flow: true
ha_domain: microbees
ha_iot_class: Cloud Polling
ha_platforms:
+ - binary_sensor
- button
+ - cover
- light
- sensor
- switch
@@ -27,8 +30,12 @@ To retrieve the OAuth2 Client ID and Client Secret go to [microBees Developer Da
There is currently support for the following device types within Home Assistant:
- **Switch**
+- **Cover**
+- **Binary sensors**
- **Button**
- **Light**
- **Sensor**
-
+
+Note: The cover status will be unknown
+
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/minio.markdown b/source/_integrations/minio.markdown
index 7ac507c75803..20ae31afb3f1 100644
--- a/source/_integrations/minio.markdown
+++ b/source/_integrations/minio.markdown
@@ -14,7 +14,7 @@ ha_integration_type: integration
This integration adds interaction with [Minio](https://min.io).
It also enables listening for bucket notifications: [see documentation](https://docs.min.io/docs/minio-client-complete-guide.html#watch)
-To download or upload files, folders must be added to [allowlist_external_dirs](/docs/configuration/basic/).
+To download or upload files, folders must be added to [allowlist_external_dirs](/integrations/homeassistant/#allowlist_external_dirs).
## Configuration
@@ -133,27 +133,27 @@ These services are provided:
Download file.
-| Service data attribute | Required | Description |
-|---------------------------|----------|---------------------------------------------------|
-| `bucket` | yes | Bucket to use |
-| `key` | yes | Object key of the file |
-| `file_path` | yes | File path on the local file system |
+| Service data attribute | Required | Description |
+| ---------------------- | -------- | ---------------------------------- |
+| `bucket` | yes | Bucket to use |
+| `key` | yes | Object key of the file |
+| `file_path` | yes | File path on the local file system |
### Service `minio.put`
Upload file.
-| Service data attribute | Required | Description |
-|---------------------------|----------|---------------------------------------------------|
-| `bucket` | yes | Bucket to use |
-| `key` | yes | Object key of the file |
-| `file_path` | yes | File path on the local file system |
+| Service data attribute | Required | Description |
+| ---------------------- | -------- | ---------------------------------- |
+| `bucket` | yes | Bucket to use |
+| `key` | yes | Object key of the file |
+| `file_path` | yes | File path on the local file system |
### Service `minio.remove`
Delete file.
-| Service data attribute | Required | Description |
-|---------------------------|----------|---------------------------------------------------|
-| `bucket` | yes | Bucket to use |
-| `key` | yes | Object key of the file |
+| Service data attribute | Required | Description |
+| ---------------------- | -------- | ---------------------- |
+| `bucket` | yes | Bucket to use |
+| `key` | yes | Object key of the file |
diff --git a/source/_integrations/modbus.markdown b/source/_integrations/modbus.markdown
index e1d04a81fd43..db98da4c3dc1 100644
--- a/source/_integrations/modbus.markdown
+++ b/source/_integrations/modbus.markdown
@@ -16,7 +16,7 @@ ha_platforms:
- light
- sensor
- switch
-ha_quality_scale: gold
+ha_quality_scale: platinum
ha_integration_type: integration
---
@@ -339,10 +339,12 @@ modbus:
modbus entities are grouped below each modbus communication entry.
-All modbus entities have the following parameters:
+**REMARK** Each modbus device must have at least 1 entity defined, otherwise the integration will not be loaded.
Please refer to [Parameter usage](#parameters-usage-matrix) for conflicting parameters.
+All modbus entities have the following parameters:
+
{% configuration %}
address:
description: "Address of coil/register."
@@ -735,9 +737,9 @@ climates:
word_byte:
description: "Swap word ABCD -> DCBA, **not valid with data types: `int16`, `uint16`**"
target_temp_register:
- description: "Register address for target temperature (Setpoint)."
+ description: "Register address for target temperature (Setpoint). Using a list, it is possible to define one register for each of the available HVAC Modes. The list has to have a fixed size of 7 registers corresponding to the 7 available HVAC Modes, as follows: Register **1: HVAC AUTO mode**; Register **2: HVAC Cool mode**; Register **3: HVAC Dry mode**; Register **4: HVAC Fan only mode**; Register **5: HVAC Heat mode**; Register **6: HVAC Heat Cool mode**; Register **7: HVAC OFF mode**. It is possible to set duplicated values for the modes where the devices has not a related register."
required: true
- type: integer
+ type: [integer, list]
target_temp_write_registers:
description: "If `true` use `write_registers` for target temperature."
required: false
diff --git a/source/_integrations/motionblinds_ble.markdown b/source/_integrations/motionblinds_ble.markdown
new file mode 100644
index 000000000000..aee84394c9f6
--- /dev/null
+++ b/source/_integrations/motionblinds_ble.markdown
@@ -0,0 +1,66 @@
+---
+title: Motionblinds Bluetooth
+description: Instructions on how to integrate Motionblinds Bluetooth motors into Home Assistant.
+ha_category:
+ - Cover
+ha_iot_class: Assumed State
+ha_release: 2024.4
+ha_domain: motionblinds_ble
+ha_codeowners:
+ - '@LennP'
+ - '@jerrybboy'
+ha_config_flow: true
+ha_platforms:
+ - button
+ - cover
+ - select
+ha_integration_type: device
+---
+
+This {% term integration %} adds support for [Motionblinds](https://motionblinds.com/) Bluetooth motors. Want to motorize your existing blinds? This can be done with Motionblinds motor CMD-03. Made-to-measure window coverings with Motionblinds are available through a worldwide reseller network.
+Beware that this integration does not work with Eve Motionblinds motors. Eve Motionblinds can be added to Home Assistant using the [HomeKit Device](https://www.home-assistant.io/integrations/homekit_controller/) integration or the [Matter](https://www.home-assistant.io/integrations/matter/) integration.
+
+{% include integrations/config_flow.md %}
+
+## Setup
+
+During the setup of a Motionblinds Bluetooth motor, you will be asked what kind of blind you have. There are 8 different blind types:
+
+- **Roller blind**: has the ability to change position and speed.
+- **Honeycomb blind**: has the ability to change position and speed.
+- **Roman blind**: has the ability to change position and speed.
+- **Venetian blind**: has the ability to change position, tilt, and speed.
+- **Venetian blind (tilt-only)**: has the ability to change tilt and speed.
+- **Double Roller blind**: has the ability to change position, tilt, and speed.
+- **Curtain blind**: has the ability to change position. May need to be calibrated if the end positions are lost, which can be done by using the open/close cover button or the set cover position slider. This will trigger a calibration which will first make the curtain find the end positions after which it will run to the position as indicated by the command that was given.
+- **Vertical blind**: has the ability to change position and tilt. May need to be calibrated if the end positions are lost, which must be done using the Motionblinds Bluetooth app.
+
+## Entities
+
+The following entities are available for a Motionblinds Bluetooth device:
+
+- [Cover](https://www.home-assistant.io/integrations/cover/) entity: depending on the blind that was chosen during the setup, this entity has a slider that makes it possible to change position and tilt, and buttons that allow you to open the blind, close the blind, tilt it open, tilt it closed and stop it.
+- [Button](https://www.home-assistant.io/integrations/button/) entities:
+ - Connect button: allows you to connect to the blind.
+ - Disconnect button: allows you to disconnect the blind.
+ - Favorite button: allows you to move the blind to the favorite position.
+- [Select](https://www.home-assistant.io/integrations/select/) entities:
+ - Speed select: allows you to change the speed of the motor to low, medium, or high. Available for all blinds except curtain blinds and vertical blinds.
+
+## Services
+
+Since Motionblinds Bluetooth motors require a Bluetooth connection to control them, Home Assistant does not get automatic updates of the motor's state by default. Therefore, you can use the [homeassistant.update_entity](https://www.home-assistant.io/docs/scripts/service-calls/#homeassistant-services) service on any entity belonging to a Motionblinds Bluetooth device, which will connect to your Motionblinds Bluetooth motor and update the state of all entities belong to that device. However, be aware that doing so may impact battery life.
+
+This can also be automated using a YAML automation. For instance, the following automation connects to your Motionblind every 24 hours to update its state in Home Assistant:
+
+```yaml
+alias: Motionblinds Bluetooth polling automation
+mode: single
+trigger:
+ - platform: time_pattern
+ hours: "/24"
+action:
+ - service: homeassistant.update_entity
+ target:
+ entity_id: cover.motion_shade
+```
diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown
index 158f329f35a8..9542dcaa3d46 100644
--- a/source/_integrations/mqtt.markdown
+++ b/source/_integrations/mqtt.markdown
@@ -25,6 +25,7 @@ ha_platforms:
- fan
- humidifier
- image
+ - lawn_mower
- light
- lock
- number
@@ -111,14 +112,11 @@ MQTT (aka MQ Telemetry Transport) is a machine-to-machine or "Internet of Things
{% enddetails %}
-
Your first step to get MQTT and Home Assistant working is to choose a broker.
-## Choose an MQTT broker
-
-### Run your own
+## Setting up a broker
-The most private option is running your own MQTT broker.
+While public MQTT brokers are available, the easiest and most private option is running your own.
The recommended setup method is to use the [Mosquitto MQTT broker add-on](https://github.com/home-assistant/hassio-addons/blob/master/mosquitto/DOCS.md).
@@ -129,10 +127,6 @@ There are [at least two](https://issues.apache.org/jira/browse/AMQ-6360) [issues
-### Use a public broker
-
-The Mosquitto project runs a [public broker](https://test.mosquitto.org). This is the easiest to set up, but there is no privacy as all messages are public. Use this only for testing purposes and not for real tracking of your devices or controlling your home. To use the public mosquitto broker, configure the MQTT integration to connect to broker `test.mosquitto.org` on port 1883 or 8883.
-
## Broker configuration
MQTT broker settings are configured when the MQTT integration is first set up and can be changed later if needed.
@@ -144,7 +138,12 @@ Add the MQTT integration, then provide your broker's hostname (or IP address) an
3. Select **Configure**, then **Re-configure MQTT**.
+
+
If you experience an error message like `Failed to connect due to exception: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed`, then turn on `Advanced options` and set [Broker certificate validation](/integrations/mqtt/#broker-certificate-validation) to `Auto`.
+
+
+
### Advanced broker configuration
@@ -174,14 +173,14 @@ If the server certificate does not match the hostname then validation will fail.
The MQTT protocol setting defaults to version `3.1.1`. If your MQTT broker supports MQTT version 5 you can set the protocol setting to `5`.
-#### Securing the the connection
+#### Securing the connection
With a secure broker connection it is possible to use a client certificate for authentication. To set the client certificate and private key turn on the option `Use a client certificate` and click "Next" to show the controls to upload the files. Only a PEM encoded client certificates together with a PEM encoded private key can be uploaded. Make sure the private key has no password set.
#### Using WebSockets as transport
You can select `websockets` as transport method if your MQTT broker supports it. When you select `websockets` and click `NEXT`, you will be able to add a WebSockets path (default = `/`) and WebSockets headers (optional). The target WebSockets URI: `ws://{broker}:{port}{WebSockets path}` is built with `broker`, `port` and `ws_path` (WebSocket path) settings.
-To configure the WebSocketS headers supply a valid JSON dictionary string. E.g. `{ "Authorization": "token" , "x-header": "some header"}`. The default transport method is `tcp`. The WebSockets transport can be secured using TLS and optionally using user credentials or a client certificate.
+To configure the WebSocket's headers supply a valid JSON dictionary string. E.g. `{ "Authorization": "token" , "x-header": "some header"}`. The default transport method is `tcp`. The WebSockets transport can be secured using TLS and optionally using user credentials or a client certificate.
@@ -327,7 +326,6 @@ support_url:
description: Support URL of the application that supplies the discovered MQTT item.
{% endconfiguration_basic %}
-
{% details "Supported abbreviations" %}
```txt
@@ -599,7 +597,9 @@ support_url:
'sa': 'suggested_area',
'sn': 'serial_number',
```
+
{% enddetails %}
+
{% details "Supported abbreviations for origin info" %}
```txt
@@ -607,6 +607,7 @@ support_url:
'sw': 'sw_version',
'url': 'support_url',
```
+
{% enddetails %}
### How to use discovery messages
@@ -739,6 +740,7 @@ The following software has built-in support for MQTT discovery:
- [Xiaomi DaFang Hacks](https://github.com/EliasKotlyar/Xiaomi-Dafang-Hacks)
- [Zehnder Comfoair RS232 MQTT](https://github.com/adorobis/hacomfoairmqtt)
- [Zigbee2MQTT](https://github.com/koenkk/zigbee2mqtt)
+- [OTGateway](https://github.com/Laxilef/OTGateway)
### Discovery examples
@@ -1053,16 +1055,15 @@ The MQTT notification support is different than for the other [notification](/in
```
-
+
The same will work for automations.
-
+
-
### Examples
#### REST API
@@ -1123,9 +1124,16 @@ The MQTT integration will register the service `mqtt.publish` which allows publi
| `qos` | yes | Quality of Service to use. (default: 0) |
| `retain` | yes | If message should have the retain flag set. (default: false) |
-
+
+
+
+
You must include either `topic` or `topic_template`, but not both. If providing a payload, you need to include either `payload` or `payload_template`, but not both.
+
+
+
+
```yaml
topic: homeassistant/light/1/command
diff --git a/source/_integrations/neato.markdown b/source/_integrations/neato.markdown
index 1332da1336c7..8afdb03c7054 100644
--- a/source/_integrations/neato.markdown
+++ b/source/_integrations/neato.markdown
@@ -11,7 +11,6 @@ ha_iot_class: Cloud Polling
ha_release: 0.33
ha_config_flow: true
ha_codeowners:
- - '@dshokouhi'
- '@Santobert'
ha_domain: neato
ha_platforms:
diff --git a/source/_integrations/netatmo.markdown b/source/_integrations/netatmo.markdown
index 1623dd5568cd..e55a6fd515b2 100644
--- a/source/_integrations/netatmo.markdown
+++ b/source/_integrations/netatmo.markdown
@@ -116,10 +116,10 @@ Set the heating schedule.
Set the preset mode for a Netatmo climate device. The preset mode must match a preset mode configured at Netatmo.
-| Service data attribute | Required | Description |
-| ---------------------- | -------- | ---------------------------------------------------------- |
+| Service data attribute | Required | Description |
+| ---------------------- | -------- | ----------------------------------------------------------- |
| `preset_mode` | Yes | Climate preset mode such as Schedule, Away, or Frost Guard. |
-| `end_datetime` | Yes | Date & time until which the preset will be active. |
+| `end_datetime` | Yes | Date & time until which the preset will be active. |
### Set temperature with end date & time
@@ -138,9 +138,9 @@ Sets the target temperature for a Netatmo climate device with an end date & time
Sets the target temperature for a Netatmo climate device as well as the time period during which this target temperature applies.
-| Service data attribute | Required | Description |
-| ---------------------- | -------- | ------------------------------------------------------ |
-| `target_temperature` | Yes | The target temperature for the device. |
+| Service data attribute | Required | Description |
+| ---------------------- | -------- | ----------------------------------------------------------- |
+| `target_temperature` | Yes | The target temperature for the device. |
| `time_period` | Yes | Time period during which the target temperature is applied. |
### Clear temperature setting
@@ -187,7 +187,7 @@ It is therefore recommended to use [an individual development account](#developm
-To be able to receive events from [Netatmo](https://www.netatmo.com/), your Home Assistant instance needs to be accessible from the web over port `443`. To achieve this you can either use your Nabu Casa account or for example Duck DNS ([Home Assistant instructions](/addons/duckdns/)). You also need to have the external URL configured in the Home Assistant [configuration](/docs/configuration/basic).
+To be able to receive events from [Netatmo](https://www.netatmo.com/), your Home Assistant instance needs to be accessible from the web over port `443`. To achieve this you can either use your Nabu Casa account or for example Duck DNS ([Home Assistant instructions](/addons/duckdns/)). You also need to have the external URL configured in the Home Assistant [configuration](/integrations/homeassistant/#allowlist_external_urls).
Events coming in from Netatmo will be available as an event in Home Assistant and are fired as `netatmo_event`, along with their data. You can use these events to trigger automations.
@@ -297,7 +297,7 @@ Sign in using your username and password from your regular Netatmo account.
-In your Netatmo Application configuration, do not enter a 'redirect URI' or a 'webhook URI'. The 'webhook URI' is automatically registered by this integration based on the external URL configured in the Home Assistant [configuration](/docs/configuration/basic).
+In your Netatmo Application configuration, do not enter a 'redirect URI' or a 'webhook URI'. The 'webhook URI' is automatically registered by this integration based on the external URL configured in the Home Assistant [configuration](/integrations/homeassistant/#editing-the-general-settings-in-yaml).
diff --git a/source/_integrations/network.markdown b/source/_integrations/network.markdown
index 5b072d062464..038d58736c65 100644
--- a/source/_integrations/network.markdown
+++ b/source/_integrations/network.markdown
@@ -1,6 +1,6 @@
---
-title: Network Configuration
-description: Network Configuration for Home Assistant
+title: Network configuration
+description: Network configuration for Home Assistant
ha_category:
- Other
ha_release: 2021.6
@@ -12,7 +12,7 @@ ha_codeowners:
ha_integration_type: system
---
-This integration provides network configuration for integrations such as [Zeroconf](/integrations/zeroconf/). It is managed by going to **{% my network title="Settings > System > Network" %}** and is only available to users that have "Advanced Mode" enabled on their {% my profile title="user profile" %}.
+The **Network configuration** {% term integration %} provides network configuration for integrations such as [Zeroconf](/integrations/zeroconf/). It is managed by going to **{% my network title="Settings > System > Network" %}** and is only available to users that have "Advanced Mode" enabled on their {% my profile title="user profile" %}.
**{% my general badge %}**
diff --git a/source/_integrations/notify.markdown b/source/_integrations/notify.markdown
index b1e8e4f120b7..7361b5524616 100644
--- a/source/_integrations/notify.markdown
+++ b/source/_integrations/notify.markdown
@@ -87,5 +87,3 @@ action:
```
{% endraw %}
-
-
diff --git a/source/_integrations/numato.markdown b/source/_integrations/numato.markdown
index d69384cf8da5..eaa005503a07 100644
--- a/source/_integrations/numato.markdown
+++ b/source/_integrations/numato.markdown
@@ -15,7 +15,7 @@ ha_platforms:
- binary_sensor
- sensor
- switch
-ha_integration_type: integration
+ha_integration_type: hub
---
The `numato` integration is the base for all related GPIO platforms of the
diff --git a/source/_integrations/nws.markdown b/source/_integrations/nws.markdown
index 8fdf756d46bf..cbf9d44fec9b 100644
--- a/source/_integrations/nws.markdown
+++ b/source/_integrations/nws.markdown
@@ -25,6 +25,8 @@ According to the [API documentation](https://www.weather.gov/documentation/servi
Providing a METAR station code is optional, and if not supplied, the closest station to the latitude and longitude will be chosen. A list of nearby stations is printed to the log with level `DEBUG` if no station is supplied. Stations can also be found on the [NOAA website](https://www.cnrfc.noaa.gov/metar.php). Codes with only three characters, for example, `ADW` should be prefixed with the letter K, `KADW`.
-Two weather entities are created for each entry in the configuration: one for day and night forecasts and one for hourly forecasts. The hourly forecast entity is disabled after configuration but can be enabled by the user. The time supplied for each forecast is the start time for the forecast. Sensors are also created as disabled entities after configuration and can be enabled by the user.
+One weather entity is created for each entry in the configuration. Hourly and day/night forecasts are provided through the `weather.get_forecasts` service. The time supplied for each forecast is the start time for the forecast. Sensors are also created as disabled entities after configuration and can be enabled by the user.
Details about the API are available in the [NWS API documentation](https://www.weather.gov/documentation/services-web-api). The [pynws](https://github.com/MatthewFlamm/pynws) library is used to retrieve data.
+
+Details about the `weather.get_forecasts` service are available in the [`weather` documentation](/integrations/weather/).
diff --git a/source/_integrations/octoprint.markdown b/source/_integrations/octoprint.markdown
index 60a28cdb2d60..e86b350425d4 100644
--- a/source/_integrations/octoprint.markdown
+++ b/source/_integrations/octoprint.markdown
@@ -59,7 +59,7 @@ verify ssl:
### API key
For the integration to work, please check that in Octoprint, the [Discovery Plugin](https://docs.octoprint.org/en/master/bundledplugins/discovery.html) is enabled and in the **Settings** -> **Printer Notifications** menu that **Enable popups** is checked.
-The Octoprint integration will attempt to register itself via the [Application Keys Plugin](https://docs.octoprint.org/en/master/bundledplugins/appkeys.html). After submitting the configuration UI in Home Assistant, open the Octoprint UI and click allow on the prompt.
+The Octoprint integration will attempt to register itself via the [Application Keys Plugin](https://docs.octoprint.org/en/master/bundledplugins/appkeys.html). After submitting the configuration UI in Home Assistant, open the Octoprint UI and select **Allow** on the prompt. NOTE: You must be logged into Octoprint as the user which you are adding Home Assistant. Otherwise, the popup access prompt does not appear.
## Binary sensor
@@ -90,6 +90,9 @@ The OctoPrint integration provides the following buttons:
- Pause Job
- Resume Job
- Stop Job
+- Shutdown System
+- Reboot System
+- Restart Octoprint
## Troubleshooting
diff --git a/source/_integrations/ollama.markdown b/source/_integrations/ollama.markdown
new file mode 100644
index 000000000000..bbb3bbc70801
--- /dev/null
+++ b/source/_integrations/ollama.markdown
@@ -0,0 +1,42 @@
+---
+title: Ollama
+description: Instructions on how to integrate Ollama
+ha_category:
+ - Voice
+ha_release: 2024.4
+ha_iot_class: Local Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@synesthesiam'
+ha_domain: ollama
+ha_integration_type: service
+related:
+ - docs: /docs/configuration/templating/
+ title: Home Assistant Templating
+ - docs: /docs/automation/trigger/#sentence-trigger
+ title: Sentence trigger
+---
+
+The **Ollama** {% term integration %} adds a conversation agent in Home Assistant powered by a local [Ollama](https://ollama.com/) server.
+
+This conversation agent is unable to control your house. The Ollama conversation agent can be used in automations, but not as a [sentence trigger](/docs/automation/trigger/#sentence-trigger). It can only query information that has been provided by Home Assistant. To be able to answer questions about your house, Home Assistant will need to provide Ollama with the details of your house, which include areas, devices, and their states.
+
+This integration requires an external Ollama server, which is available for macOS, Linux, and Windows. Follow the [download instructions](https://ollama.com/download) to install the server. Once installed, configure Ollama to be [accessible over the network](https://github.com/ollama/ollama/blob/main/docs/faq.md#how-can-i-expose-ollama-on-my-network).
+
+{% include integrations/config_flow.md %}
+
+{% include integrations/option_flow.md %}
+{% configuration_basic %}
+URL:
+ description: The URL of the external Ollama server, such as `http://localhost:11434`.
+
+Model:
+ description: Name of the [Ollama model](https://ollama.com/library) to use, such as `mistral` or `llama2:13b`. Models will be automatically downloaded during setup.
+
+Prompt template:
+ description: The starting text for the AI language model to generate new text from. This text can include information about your Home Assistant instance, devices, and areas and is written using [Home Assistant Templating](/docs/configuration/templating/).
+
+Max history messages:
+ description: Maximum number of messages to keep for each conversation (0 = no limit). Limiting this value will cause older messages in a conversation to be dropped.
+
+{% endconfiguration_basic %}
diff --git a/source/_integrations/onewire.markdown b/source/_integrations/onewire.markdown
index a21cb464c6db..7cb270953060 100644
--- a/source/_integrations/onewire.markdown
+++ b/source/_integrations/onewire.markdown
@@ -52,6 +52,7 @@ Each 1-wire component data sheet describes the different properties the componen
| 3B | [DS1825](https://datasheets.maximintegrated.com/en/ds/DS1825.pdf) | Temperature |
| 42 | [DS28EA00](https://datasheets.maximintegrated.com/en/ds/DS28EA00.pdf) | Temperature |
| 7E | [EDS00xx](https://www.embeddeddatasystems.com/assets/images/supportFiles/manuals/EN-UserMan%20%20OW-ENV%20Sensor%20v13.pdf) | Temperature/Humidity/Barometric pressure/Light
[6](#note_6)|
+| A6 | Secondary family code for [DS2438](https://datasheets.maximintegrated.com/en/ds/DS2438.pdf) | Temperature, Voltage, Current (pressure when using B1-R1-A, illuminance when using S2-R1-A, humidity when using compatible Honeywell or Humirel sensor)
[2](#note_2) |
| EF | [HobbyBoard](https://hobbyboards.com/) | Temperature, Humidity, Moisture, Wetness
[3](#note_3) |
#### Switches:
diff --git a/source/_integrations/opencv.markdown b/source/_integrations/opencv.markdown
deleted file mode 100644
index cf75af093537..000000000000
--- a/source/_integrations/opencv.markdown
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: OpenCV
-description: Instructions on how to integrate OpenCV image processing into Home Assistant.
-ha_category:
- - Image processing
-ha_iot_class: Local Push
-ha_release: 0.47
-ha_domain: opencv
-ha_integration_type: integration
----
-
-[OpenCV](https://www.opencv.org/) is an open source computer vision image and video processing library.
-
-Some pre-defined classifiers can be found [here](https://github.com/opencv/opencv/tree/master/data).
-
-## Configuration
-
-To setup OpenCV with Home Assistant, add the following section to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-image_processing:
- - platform: opencv
- source:
- - entity_id: camera.front_door
- classifier:
- mom: /path/to/classifier.xml
-```
-
-- **source** array (*Required*): List of image sources.
- - **entity_id** (*Required*): A camera entity id to get picture from.
- - **name** (*Optional*): This parameter allows you to override the name of your `image_processing` entity.
-- **classifier** (*Optional*): Dictionary of name to path to the classifier XML file. If this field is not provided, a face classifier will be downloaded from OpenCV's GitHub repository.
-
-**classifier** may also be defined as a dictionary of names to classifier configurations:
-
-```yaml
- mom:
- file: /path/to/classifier/xml
- neighbors: 4
- min_size: (40, 40)
- scale: 1.1f
-```
-
-- **file** (*Required*): The path to the classifier XML file.
-- **scale** (*Optional*): The scale to perform when processing, this is a `float` value that must be greater than or equal to `1.0`, default is `1.1`.
-- **neighbors** (*Optional*): The minimum number of neighbors required for a match, default is `4`. The higher this number, the more picky the matching will be; lower the number, the more false positives you may experience.
diff --git a/source/_integrations/opower.markdown b/source/_integrations/opower.markdown
index 4c24f8f3c212..663b5bfc7ab1 100644
--- a/source/_integrations/opower.markdown
+++ b/source/_integrations/opower.markdown
@@ -43,7 +43,8 @@ More than 175 utilities use Opower. Currently only the following utilities are s
- Pacific Gas & Electric (PG&E)
- Portland General Electric (PGE)
- Puget Sound Energy (PSE)
-- Seattle City Light (SCL) - *provides consumption data, but no cost data*
+- Sacramento Municipal Utility District (SMUD)
+- Seattle City Light (SCL)
When you add the Opower integration to Home Assistant, you will need to provide your utility account's authentication details to enable retrieving your energy data.
This is typically the same information needed to access your utility's website.
diff --git a/source/_integrations/ourgroceries.markdown b/source/_integrations/ourgroceries.markdown
index 8887fe86e44d..9fb27b4a781a 100644
--- a/source/_integrations/ourgroceries.markdown
+++ b/source/_integrations/ourgroceries.markdown
@@ -12,6 +12,15 @@ ha_domain: ourgroceries
ha_platforms:
- todo
ha_integration_type: integration
+related:
+ - docs: /integrations/todo
+ title: To-do list integration documentation
+ - docs: /integrations/#to-do-list
+ title: List of to-do list integrations
+ - docs: /dashboards/todo-list/
+ title: To-do list card
+ - url: https://www.ourgroceries.com/
+ title: OurGroceries
---
This integration connects with an [OurGroceries](https://www.ourgroceries.com/) account and integrates your shopping lists into Home Assistant.
diff --git a/source/_integrations/panel_iframe.markdown b/source/_integrations/panel_iframe.markdown
deleted file mode 100644
index 2ab32f0e0a17..000000000000
--- a/source/_integrations/panel_iframe.markdown
+++ /dev/null
@@ -1,72 +0,0 @@
----
-title: iFrame panel
-description: Instructions on how to add iFrames in the front end of Home Assistant.
-ha_category:
- - Front end
-ha_release: 0.25
-ha_quality_scale: internal
-ha_codeowners:
- - '@home-assistant/frontend'
-ha_domain: panel_iframe
-ha_integration_type: integration
----
-
-The `panel_iframe` support allows you to add additional panels to your Home Assistant frontend. The panels are listed in the sidebar and can contain external resources like the web frontend of your router, your monitoring system, or your media server.
-
-
-If you are accessing Home Assistant over HTTPS using SSL, you cannot access HTTP sites through an iframe panel.
-
-
-To enable Panel iFrames in your installation, add the following to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-panel_iframe:
- router:
- title: "Router"
- url: "http://192.168.1.1"
- fridge:
- title: "Fridge"
- url: "http://192.168.1.5"
- icon: mdi:fridge
- otherapp:
- title: "Other App"
- url: "/otherapp"
- require_admin: true
-```
-
-{% configuration %}
-panel_iframe:
- description: Enables the panel_iframe integration. Only allowed once.
- required: true
- type: map
- keys:
- panel_name:
- description: Name of the panel. Only allowed once.
- required: true
- type: map
- keys:
- title:
- description: Friendly title for the panel. Will be used in the sidebar.
- required: true
- type: string
- url:
- description: The absolute URL or relative URL with an absolute path to open.
- required: true
- type: string
- icon:
- description: Icon for entry.
- required: false
- type: icon
- require_admin:
- description: If admin access is required to see this iframe.
- required: false
- type: boolean
- default: false
-{% endconfiguration %}
-
-
-
-Do **not** create one that is named `lovelace` it will overwrite existing Dashboards, causing it to never load.
-
-
diff --git a/source/_integrations/permobil.markdown b/source/_integrations/permobil.markdown
index c9c25edf4edf..30b8a219b001 100644
--- a/source/_integrations/permobil.markdown
+++ b/source/_integrations/permobil.markdown
@@ -10,6 +10,7 @@ ha_codeowners:
- '@IsakNyberg'
ha_config_flow: true
ha_platforms:
+ - binary_sensor
- sensor
ha_integration_type: integration
---
@@ -20,7 +21,7 @@ The **MyPermobil** integration allows you to view various sensors with informati
## Sensors
-A total of 12 sensors are available:
+A total of 13 sensors are available:
- **Battery charge**
The current battery state of the wheelchair as a percentage.
@@ -46,3 +47,5 @@ A total of 12 sensors are available:
The highest number of adjustments ever recorded in a single day.
- **Longest distance traveled**
The largest distance traveled ever recorded in a single day.
+- **Is charging**
+ Binary sensor that is true when the Permobil wheelchair is charging.
diff --git a/source/_integrations/ping.markdown b/source/_integrations/ping.markdown
index 3760b5ccd81b..741931d29cc6 100644
--- a/source/_integrations/ping.markdown
+++ b/source/_integrations/ping.markdown
@@ -12,6 +12,7 @@ ha_domain: ping
ha_platforms:
- binary_sensor
- device_tracker
+ - sensor
ha_integration_type: integration
ha_config_flow: true
ha_codeowners:
@@ -21,6 +22,7 @@ ha_codeowners:
There is currently support for the following device types within Home Assistant:
- [Binary sensor](#binary-sensor)
+- [Sensors](#sensors)
- [Presence detection](#presence-detection)
{% include integrations/config_flow.md %}
@@ -49,12 +51,16 @@ To change the settings, go to {% my integrations title="**Settings** > **Devices
The `ping` binary sensor platform allows you to use `ping` to send ICMP echo requests. This way you can check if a given host is online and determine the round trip times from your Home Assistant instance to that system.
This sensor is enabled by default. The default polling interval is 30 seconds.
-The sensor exposes the different round trip times in milliseconds measured by `ping` as attributes:
+## Sensors
-- `round_trip_time_mdev` - the standard deviation
-- `round_trip_time_avg` - the average round trip time
-- `round_trip_time_min` - the shortest round trip time
-- `round_trip_time_max` - the longest round trip time
+The integration exposes the different round trip times milliseconds as entities:
+
+- `Round Trip Time Mean Deviation` - the standard deviation
+- `Round Trip Time Average` - the average round trip time
+- `Round Trip Time Minimum` - the shortest round trip time
+- `Round Trip Time Maximum` - the longest round trip time
+
+**These entities are disabled by default and can be enabled in the UI if needed.**
When run on Windows systems, the round trip time attributes are rounded to the nearest millisecond and the mdev value is unavailable.
diff --git a/source/_integrations/piper.markdown b/source/_integrations/piper.markdown
index 51c54fdc06d7..c5b5997631fd 100644
--- a/source/_integrations/piper.markdown
+++ b/source/_integrations/piper.markdown
@@ -19,6 +19,7 @@ ha_platforms:
- stt
- switch
- tts
+ - wake_word
ha_iot_class: Local Push
ha_zeroconf: true
---
diff --git a/source/_integrations/profiler.markdown b/source/_integrations/profiler.markdown
index 1c78faa4a868..e52cd8e04396 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" %}
@@ -187,3 +189,13 @@ Each upcoming scheduled item is logged similar to the below example:
{% my developer_call_service badge service="profiler.lru_stats" %}
Logs statistics from [lru_cache](https://docs.python.org/3/library/functools.html#functools.lru_cache) and [lru-dict](https://pypi.org/project/lru-dict/) to help tune Home Assistant and locate memory leaks.
+
+### Service profiler.set_asyncio_debug
+
+{% my developer_call_service badge service="profiler.set_asyncio_debug" %}
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | -------------------------------------- |
+| `enabled` | yes | Boolean to enable asyncio debug. |
+
+When `set_asyncio_debug` is enabled, `asyncio` will run in [debug mode](https://docs.python.org/3/library/asyncio-dev.html#debug-mode). Use this service to help identify an integration that is blocking the event loop.
diff --git a/source/_integrations/prusalink.markdown b/source/_integrations/prusalink.markdown
index 2134255988c1..aa899f6d980f 100644
--- a/source/_integrations/prusalink.markdown
+++ b/source/_integrations/prusalink.markdown
@@ -16,26 +16,38 @@ ha_platforms:
- camera
- sensor
ha_dhcp: true
+related:
+ - url: https://help.prusa3d.com/article/prusa-connect-and-prusalink-explained_302608
+ title: PrusaLink documentation
+ - url: https://help.prusa3d.com/guide/prusalink-and-prusa-connect-setup-mk3-s-_221744
+ title: PrusaLink installation guide for Prusa MK3 with Raspberry Pi Zero W
+ - url: https://help.prusa3d.com/guide/prusalink-prusa-connect-with-rpi-3-4-usb-mk2-5-s-mk3-s-_469341
+ title: Sentence trigger
---
-The PrusaLink integration allows you to monitor your [Prusa 3D printer](https://www.prusa3d.com) and its progress with your Home Assistant installation. This integration works with Prusa MINI/MINI+, Prusa MK3.9/MK4 and Prusa XL. It does not work with the older Raspberry Pi based Prusa Link printers.
+The **PrusaLink** {% term integration %} allows you to monitor your [Prusa 3D printer](https://www.prusa3d.com) and its progress with your Home Assistant installation. This integration works with Prusa MINI/MINI+, Prusa MK3.9/MK4, Prusa XL, and with the older Raspberry Pi-based Prusa MK2.5/MK3.
-This integration has been updated to utilize the latest v1 API endpoints, which require firmware version 4.7.0 or later. If you own a Prusa MINI/MINI+, please make sure your printer is running firmware 5.1.0 or a more recent version. Firmware versions 4.7.x and 5.0.x are not available for this model.
+This integration has been updated to utilize the latest v1 API endpoints, which require firmware version 4.7.0 or later. If you own a Prusa MINI/MINI+, please make sure your printer is running firmware 5.1.0 or a more recent version. Firmware versions 4.7.x and 5.0.x are not available for this model. For Prusa MK2.5/MK3, this integration requires PrusaLink version 0.7.2 or later.
Firmware update guides can be found here:
- [Prusa MINI/MINI+](https://help.prusa3d.com/article/firmware-updating-mini-mini_124784)
- [Prusa MK3.9/MK4/XL](https://help.prusa3d.com/article/how-to-update-firmware-mk4-xl_453086)
+ - [Prusa MK2.5/MK3](https://help.prusa3d.com/guide/how-to-update-prusalink-mk2-5-s-mk3-s-_650837)
-To obtain the hostname, username, and password:
+## Obtaining hostname, username, and password
+
+### Prusa MINI/MINI+/MK3.9/MK4/XL
- On your printer, navigate to **Settings** > **Network** > **PrusaLink**.
- Find the device's **IP address**. Alternatively, you can look for the printer's IP address or hostname on your router.
- Note that for some models, the username may not be visible, as it is hardcoded to `maker`.
- Depending on your model, the password entry may not be called **Password**, but **API key**.
-{% include integrations/config_flow.md %}
+### Prusa MK2.5/MK3
-## Related topics
+ - The device's **IP address** is displayed on the printer LCD after PrusaLink starts up. Alternatively, you can look for the printer's IP address or hostname on your router.
+ - Use the **username** and **password** you entered during the initial PrusaLink setup (not the API key).
+
+{% include integrations/config_flow.md %}
-- [PrusaLink documentation](https://help.prusa3d.com/article/prusa-connect-and-prusalink-explained_302608)
diff --git a/source/_integrations/pushbullet.markdown b/source/_integrations/pushbullet.markdown
index aa792d149670..97339a83a2ef 100644
--- a/source/_integrations/pushbullet.markdown
+++ b/source/_integrations/pushbullet.markdown
@@ -60,12 +60,12 @@ The Pushbullet notification platform sends messages to [Pushbullet](https://www.
Pushbullet is a notify platform and thus can be controlled by calling the notify service [as described here](/integrations/notify/). It will send a notification to all devices registered in the Pushbullet account. An optional **target** parameter can be given to Pushbullet to specify specific account's devices, contacts or channels.
-Type | Prefix | Suffix | Example
----- | ------ | ------ | -------
-Device | `device/` | Device nickname | `device/iphone`
-Channel | `channel/` | Channel tag | `channel/my_home`
-Email | `email/` | Contact's email address | `email/email@example.com`
-SMS | `sms/` | Contact's phone number | `sms/0612345678`
+| Type | Prefix | Suffix | Example |
+| ------- | ---------- | ----------------------- | ------------------------- |
+| Device | `device/` | Device nickname | `device/iphone` |
+| Channel | `channel/` | Channel tag | `channel/my_home` |
+| Email | `email/` | Contact's email address | `email/email@example.com` |
+| SMS | `sms/` | Contact's phone number | `sms/0612345678` |
If using targets, your own account's email address functions as 'send to all devices'. All targets are verified (if exists) before sending, except email.
@@ -141,6 +141,6 @@ action:
-Don't forget to [allowlist external directories](/docs/configuration/basic/), so Home Assistant has access to them.
+Don't forget to [allowlist external directories](/integrations/homeassistant/#allowlist_external_dirs), so Home Assistant has access to them.
diff --git a/source/_integrations/rachio.markdown b/source/_integrations/rachio.markdown
index 3898de7b15b0..f58ecddc2ca3 100644
--- a/source/_integrations/rachio.markdown
+++ b/source/_integrations/rachio.markdown
@@ -39,7 +39,7 @@ They will be automatically added if the Rachio integration is loaded.
-In order for Rachio switches and sensors to update, your Home Assistant instance must be accessible from the internet, either via Home Assistant Cloud or another method. See the [Remote Access documentation](/docs/configuration/remote/) for more information.
+In order for Rachio switches and sensors to update, your Home Assistant instance must be accessible from the internet, either via Home Assistant Cloud or another method. See the [Remote Access documentation](/docs/configuration/remote/) for more information. The smart hose timers use polling and don't require external access to be setup.
@@ -50,6 +50,10 @@ After setting up the integration, change the options to set the duration in minu
+### Smart hose timers
+
+The Rachio smart hose timers are not currently capable of receiving real-time updates. Instead, they rely on polling. Because of this, the current state of valves started from a schedule or the physical button will not show up immediately. Polling occurs every 2 minutes when one base station is used, with an additional minute added for every additional base station to remain with the API rate limit. Up to 4 valves can be paired to a single base station.
+
### iFrame
If you would like to see and control more detailed zone information, create an [iFrame](/integrations/panel_iframe/) that renders the Rachio web app.
@@ -64,12 +68,25 @@ panel_iframe:
## Switch
-The `rachio` switch platform allows you to toggle zones and schedules connected to your [Rachio irrigation system](https://rachio.com/) on and off.
+The `rachio` switch platform allows you to toggle zones, valves, and schedules connected to your [Rachio irrigation system](https://rachio.com/) on and off.
-Once configured, a switch will be added for every zone that is enabled on every controller in the account provided and a switch to start or stop every schedule on a controller. There will also be a switch to toggle each controller's standby mode, as well as to activate a 24 hour rain delay on the device.
+Once configured, a switch will be added for every zone that is enabled on every controller in the account provided, as well as a switch for each smart hose timer valve and a switch to start or stop every schedule on a controller. There will also be a switch to toggle each controller's standby mode, as well as to activate a 24-hour rain delay on the device.
## Services
+### Service `rachio.start_watering`
+
+Allows starting one zone on a sprinkler controller, any number of smart hose timer valves, or a schedule. To sequentially start multiple zones on a sprinkler controller, use the `start_multiple_zone_schedule` service below.
+
+Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------- |
+| `entity_id` | no | Individual zone, schedule, or multiple smart hose timer valves to run. A smart hose timer base station device can also be selected to run all valves on the given base.
+| `duration` | yes | Duration in minutes to run the zone or valves. Leave empty for schedules.
+
+
+The services below only apply to sprinkler controllers and will not be shown if only smart hose timers are on the account.
+
+
### Service `rachio.start_multiple_zone_schedule`
Allows a list of zones to be passed with a corresponding list of durations to create a custom schedule directly from Home Assistant.
@@ -86,7 +103,7 @@ It is not currently possible to have zones from multiple controllers in the same
### Examples
```yaml
-#Example sctipt to start multiple zones with individual duration for each zone.
+#Example script to start multiple zones with individual duration for each zone.
script:
run_grass_zones:
sequence:
@@ -101,7 +118,7 @@ script:
```
```yaml
-#Example sctipt to start multiple zones with one duration for all zones.
+#Example script to start multiple zones with one duration for all zones.
script:
run_grass_zones:
sequence:
@@ -114,6 +131,7 @@ script:
data:
duration: 20
```
+
### Service `rachio.set_zone_moisture_percent`
Set the zone moisture percentage for a zone or group of zones.
diff --git a/source/_integrations/recovery_mode.markdown b/source/_integrations/recovery_mode.markdown
index 475e34e34385..4df332b4ee59 100644
--- a/source/_integrations/recovery_mode.markdown
+++ b/source/_integrations/recovery_mode.markdown
@@ -1,5 +1,5 @@
---
-title: Recovery Mode
+title: Recovery mode
description: Allows Home Assistant to start up in recovery mode.
ha_category: []
ha_release: 0.105
@@ -8,9 +8,12 @@ ha_codeowners:
ha_domain: recovery_mode
ha_quality_scale: internal
ha_integration_type: system
+related:
+ - docs: /docs/troubleshooting_general/
+ title: General troubleshooting
---
-The **Recovery mode** integration is an internal integration used by the
+The **Recovery mode** {% term integration %} is an internal integration used by the
Home Assistant Core.
You don't have to configure it since it is automatically always
@@ -26,7 +29,3 @@ the Home Assistant frontend, settings and add-ons.
This gives you the possibility to correct the issue and restart Home Assistant
to re-try.
-
-## Related topics
-
-- [General troubleshooting](/docs/troubleshooting_general/)
diff --git a/source/_integrations/rejseplanen.markdown b/source/_integrations/rejseplanen.markdown
index f58e6e7953a9..75a3e8c25160 100644
--- a/source/_integrations/rejseplanen.markdown
+++ b/source/_integrations/rejseplanen.markdown
@@ -6,8 +6,6 @@ ha_category:
ha_iot_class: Cloud Polling
ha_release: 0.88
ha_domain: rejseplanen
-ha_codeowners:
- - '@DarkFox'
ha_platforms:
- sensor
ha_integration_type: integration
diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown
index 807c42df3a45..c0f29e084d4a 100644
--- a/source/_integrations/reolink.markdown
+++ b/source/_integrations/reolink.markdown
@@ -24,6 +24,11 @@ ha_platforms:
- update
ha_integration_type: integration
ha_dhcp: true
+related:
+ - docs: /dashboards/picture-glance/#creating-a-card-to-control-the-camera
+ title: Controlling the camera from the dashboard
+ - url: https://reolink.com/
+ title: Reolink product page
---
The integration allows you to control [Reolink](https://reolink.com/) NVRs or cameras.
@@ -67,6 +72,7 @@ Depending on the supported features of the camera, binary sensors are added for:
- AI pet detection
- AI animal detection
- AI face detection
+- AI package detection
These sensors receive events using 3 methods in order: ONVIF push, ONVIF long polling or fast polling (every 5 seconds).
The latency for receiving the events is the best for ONVIF push and the worst for fast polling, the fastest available method that is detected to work will be used, and slower methods will not be used.
@@ -88,11 +94,13 @@ Depending on the supported features of the camera, number entities are added for
- AI face sensitivity
- AI person sensitivity
- AI vehicle sensitivity
+- AI package sensitivity
- AI pet sensitivity
- AI animal sensitivity
- AI face delay*
- AI person delay*
- AI vehicle delay*
+- AI package delay*
- AI pet delay*
- AI animal delay*
- Auto quick reply time
@@ -141,10 +149,10 @@ Depending on the supported features of the camera, button entities are added for
Some Reolink
PTZ cameras can move at different speeds. For those cameras, the `reolink.ptz_move` service can be used in combination with the **PTZ left**, **right**, **up**, **down**, **zoom in**, or **zoom out** entity which allows specifying the speed attribute. If the
PTZ button entities for a specific camera are not shown under **Choose entity** under **targets** of the `reolink.ptz_move` service, it means that this camera does not support custom
PTZ speeds.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | -----------------------------------------------------------------------------------------|
-| `entity_id` | no | Name of the Reolink
PTZ button entity to control. For example, `button.trackmix_ptz_left`. |
-| `speed` | no |
PTZ move speed. For example `10`. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------- |
+| `entity_id` | no | Name of the Reolink
PTZ button entity to control. For example, `button.trackmix_ptz_left`. |
+| `speed` | no |
PTZ move speed. For example `10`. |
## Select entities
@@ -153,13 +161,14 @@ Depending on the supported features of the camera, select entities are added for
- Floodlight mode (Off, Auto, Schedule)
- Day night mode (Auto, Color, Black&White)
-
PTZ preset
+- Play quick reply message
- Auto quick reply message
- Auto track method (Digital, Digital first, Pan/Tilt first)
- Status LED (Doorbell only: Stay off, Auto, Auto & always on at night)
**PTZ preset** positions can be set in the Reolink app/windows/web client, the names of the presets will be loaded into Home Assistant at the start of the integration. When adding new preset positions, please restart the Reolink integration.
-**Auto quick reply messages** can be recorded in the Reolink app where a name is also supplied. New or updated quick reply messages will be loaded into Home Assistant at the start of the integration. When adding new quick reply messages, please restart the Reolink integration.
+**Play quick reply messages**/**Auto quick reply messages** can be recorded in the Reolink phone app where a name is also supplied. New or updated quick reply messages will be loaded into Home Assistant at the start of the integration. When adding new quick reply messages, please restart the Reolink integration.
## Siren entities
@@ -178,6 +187,7 @@ Depending on the supported features of the camera, switch entities are added for
- Auto tracking
- Auto focus
- Guard return
+- PTZ patrol (start/stop)
- Doorbell button sound
- Record
- Push notifications
@@ -197,6 +207,8 @@ For NVRs, a global switch for **Record**, **Push**, **Buzzer**, **Email**, and *
The Push-notification in the Reolink app is independent of the Home Assistant setting. It is also independent of the settings on other phones connected to the same camera. Reolink does this so you have an independent way of turning off push notifications per phone.
+The **PTZ patrol** positions first need to be configured using the Reolink [app](https://support.reolink.com/hc/en-us/articles/360008746833/)/[windows](https://support.reolink.com/hc/en-us/articles/900003738126/)/web client. When no positions are configured, the PTZ patrol entity will not be added. When adding patrol positions for the first time, you need to restart the Reolink integration.
+
## Light entities
Depending on the supported features of the camera, light entities are added for:
@@ -212,6 +224,7 @@ Depending on the supported features of the camera, the following sensor entities
- PTZ pan position
- Wi-Fi signal*
+- HDD/SD storage*
## Update entity
@@ -258,6 +271,7 @@ The following models have been tested and confirmed to work:
- [RLC-822A](https://reolink.com/product/rlc-822a/)
- [RLC-823A](https://reolink.com/product/rlc-823a/)
- [RLC-833A](https://reolink.com/product/rlc-833a/)
+- [RLC-1212A](https://reolink.com/product/rlc-1212a/)
- [RLC-1224A](https://reolink.com/product/rlc-1224a/)
- [RLN8-410 NVR](https://reolink.com/product/rln8-410/)
- [RLN16-410 NVR](https://reolink.com/product/rln16-410/)
@@ -351,7 +365,3 @@ An SSL certificate can still be enforced for external connections, by, for insta
To see if a Reolink integration is currently using `ONVIF push`, `ONVIF long polling` or `Fast polling`, [download the diagnostics text file](/docs/configuration/troubleshooting/#download-diagnostics) and find the `"event connection": "ONVIF push"\"ONVIF long polling"\"Fast polling"` in the txt file.
-## Related topics
-
-- [Controlling the camera from the dashboard](/dashboards/picture-glance/#creating-a-card-to-control-the-camera)
-- [Reolink product page](https://reolink.com/)
diff --git a/source/_integrations/rfxtrx.markdown b/source/_integrations/rfxtrx.markdown
index dee985fed74c..d9d3a68b6d8e 100644
--- a/source/_integrations/rfxtrx.markdown
+++ b/source/_integrations/rfxtrx.markdown
@@ -4,6 +4,7 @@ description: Instructions on how to integrate RFXtrx into Home Assistant.
ha_category:
- Binary sensor
- Cover
+ - Event
- Hub
- Light
- Sensor
@@ -21,6 +22,7 @@ ha_platforms:
- binary_sensor
- cover
- diagnostics
+ - event
- light
- sensor
- siren
@@ -33,6 +35,7 @@ The RFXtrx integration supports RFXtrx devices by [RFXCOM](http://www.rfxcom.com
There is currently support for the following device types within Home Assistant:
- [Cover](#covers)
+- [Event](#events)
- [Light](#lights)
- [Switch](#switches)
- [Sensor](#sensors)
@@ -100,6 +103,10 @@ In the options menu, select *Enable automatic add* to enable automatic addition
The RFXtrx integration supports Siemens/LightwaveRF and Somfy RTS roller shutters that communicate in the frequency range of 433.92 MHz.
+#### Events
+
+The RFXtrx integration will expose event entities for remotes controlling lights as well as security devices.
+
#### Lights
The RFXtrx integration support lights that communicate in the frequency range of 433.92 MHz.
diff --git a/source/_integrations/ring.markdown b/source/_integrations/ring.markdown
index 8bcd79fce2e8..3a855f56024b 100644
--- a/source/_integrations/ring.markdown
+++ b/source/_integrations/ring.markdown
@@ -3,6 +3,7 @@ title: Ring
description: Instructions on how to integrate your Ring.com devices within Home Assistant.
ha_category:
- Binary sensor
+ - Button
- Camera
- Doorbell
- Light
@@ -15,6 +16,7 @@ ha_domain: ring
ha_dhcp: true
ha_platforms:
- binary_sensor
+ - button
- camera
- diagnostics
- light
@@ -31,9 +33,12 @@ The Ring integration allows you to integrate your [Ring.com](https://ring.com/)
There is currently support for the following device types within Home Assistant:
- [Binary sensor](#binary-sensor)
+- [Button](#button)
- [Camera](#camera)
+ - [Saving the videos captured by your Ring Door Bell](#saving-the-videos-captured-by-your-ring-door-bell)
- [Sensor](#sensor)
- [Switch](#switch)
+- [Light](#light)
This integration does NOT allow for live viewing of your Ring camera within Home Assistant.
@@ -45,6 +50,10 @@ This integration does NOT allow for live viewing of your Ring camera within Home
Once you have enabled the [Ring integration](/integrations/ring), you can start using a binary sensor. Currently, it supports doorbell, external chimes and stickup cameras.
+## Button
+
+Once you have enabled the [Ring integration](/integrations/ring), you can start using the button platform. Currently, it supports intercom to open the door.
+
## Camera
@@ -53,7 +62,7 @@ Please note that downloading and playing Ring video will require a Ring Protect
Once you have enabled the [Ring integration](/integrations/ring), you can start using the camera platform. Currently, it supports doorbell and stickup cameras.
-## Saving the videos captured by your Ring Door Bell
+### Saving the videos captured by your Ring Door Bell
You can save locally the latest video captured by your Ring Door Bell using the [downloader](/integrations/downloader) along with either an [automation](/integrations/automation) or [python_script](/integrations/python_script). First, enable the [downloader](/integrations/downloader) integration in your configuration by adding the following to your `configuration.yaml`.
diff --git a/source/_integrations/rova.markdown b/source/_integrations/rova.markdown
index a140881e5e1c..024645f53ce0 100644
--- a/source/_integrations/rova.markdown
+++ b/source/_integrations/rova.markdown
@@ -5,105 +5,13 @@ ha_category:
- Sensor
ha_release: 0.87
ha_iot_class: Cloud Polling
+ha_config_flow: true
ha_domain: rova
ha_platforms:
- sensor
ha_integration_type: integration
---
-[ROVA](https://rova.nl) is a waste collection company that operates in the center and east of the Netherlands. The `rova` platform uses an unofficial [ROVA](https://rova.nl) API to allow you to get your waste collection schedule and integrate this in your Home Assistant installation.
+[ROVA](https://rova.nl) is a waste collection company that operates in the center and east of the Netherlands. This **ROVA** integration uses an unofficial [ROVA](https://rova.nl) API to allow you to get your waste collection schedule and integrate this into your Home Assistant installation.
-## Configuration
-
-To use the ROVA sensor in your installation, add the following to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-sensor:
- - platform: rova
- zip_code: ZIP_CODE
- house_number: HOUSE_NUMBER
-```
-
-{% configuration %}
-zip_code:
- description: Your zip code.
- required: true
- type: string
-house_number:
- description: Your house number.
- required: true
- type: string
-house_number_suffix:
- description: A suffix for your house number.
- required: false
- type: string
-name:
- description: Let you overwrite the name of the device in the frontend.
- required: false
- default: Rova
- type: string
-monitored_conditions:
- description: ROVA information to be monitored. The following collection dates can be monitored.
- required: false
- type: list
- keys:
- bio:
- description: Upcoming collection date of your biodegradable waste
- paper:
- description: Upcoming collection date of your paper waste
- plastic:
- description: upcoming collection date of your plastic waste
- residual:
- description: Upcoming collection date of your general waste
-{% endconfiguration %}
-
-If no **monitored_conditions** are specified, only **bio** will be enabled.
-
-### Full configuration sample
-
-A full configuration entry would look like the sample below.
-
-```yaml
-# Example configuration.yaml entry
-sensor:
- - platform: rova
- zip_code: ZIP_CODE
- house_number: HOUSE_NUMBER
- house_number_suffix: HOUSE_NUMBER_SUFFIX
- name: Rova
- monitored_conditions:
- - bio
- - paper
- - plastic
- - residual
-```
-
-To have your Home Assistant installation remind you of upcoming waste collections, combine the `rova` platform with some [Automations](/docs/automation/) and a [notification platform](/integrations/notify/).
-
-{% raw %}
-
-```yaml
-# Example configuration.yaml entry for Rova waste collection reminder
-automation:
- - id: rova-garbage-bio-reminder
- alias: "Send Rova Bio waste collection reminder"
- trigger:
- - platform: time
- at: "19:00:00"
- condition:
- - condition: template
- value_template: "{% if (as_timestamp(states('sensor.rova_garbage_gft')) - as_timestamp(now())) < 43200 %}true{% endif %}"
- - condition: template
- value_template: "{% if (as_timestamp(states('sensor.rova_garbage_gft')) - as_timestamp(now())) > 0 %}true{% endif %}"
- action:
- - service: NOTIFICATION_SERVICE
- data:
- message: "Reminder: put out biowaste bin"
-```
-
-{% endraw %}
-
-
-This integration is not affiliated with Rova and retrieves data from the endpoints of their website. Use at your own risk.
-
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/rpi_camera.markdown b/source/_integrations/rpi_camera.markdown
index 972b3dec5921..db98923c9bb0 100644
--- a/source/_integrations/rpi_camera.markdown
+++ b/source/_integrations/rpi_camera.markdown
@@ -87,4 +87,4 @@ file_path:
default: A temporary file is used.
{% endconfiguration %}
-The given **file_path** must be an existing file because the camera platform setup performs a writeable check on it. Also, keep in mind that the path should be [whitelisted](/docs/configuration/basic/).
+The given **file_path** must be an existing file because the camera platform setup performs a writeable check on it. Also, keep in mind that the path should be [whitelisted](/integrations/homeassistant/#allowlist_external_dirs).
diff --git a/source/_integrations/samsungtv.markdown b/source/_integrations/samsungtv.markdown
index 6727a1cb1a58..a344ed2c84dc 100644
--- a/source/_integrations/samsungtv.markdown
+++ b/source/_integrations/samsungtv.markdown
@@ -451,6 +451,6 @@ Some televisions from the H and J series use an encrypted protocol and require m
#### Samsung TV keeps asking for permission
-The default setting on newer televisions is to ask for permission on ever connection attempt.
+The default setting on newer televisions is to ask for permission on every connection attempt.
To avoid this behavior, please ensure that you adjust this to `First time only` in the `Device connection manager > Access notification` settings of your television.
It is also recommended to cleanup the previous attempts in `Device connection manager > Device list`
diff --git a/source/_integrations/schedule.markdown b/source/_integrations/schedule.markdown
index b4db6426991c..5108df962dfb 100644
--- a/source/_integrations/schedule.markdown
+++ b/source/_integrations/schedule.markdown
@@ -1,6 +1,6 @@
---
title: Schedule
-description: Instructions on how use make weekly schedule in Home Assistant.
+description: Instructions on how to make a weekly schedule in Home Assistant.
ha_category:
- Automation
- Helper
diff --git a/source/_integrations/sensor.markdown b/source/_integrations/sensor.markdown
index c8a31290d64b..5eab32ce77fb 100644
--- a/source/_integrations/sensor.markdown
+++ b/source/_integrations/sensor.markdown
@@ -70,7 +70,7 @@ The type of data a sensor returns impacts how it is displayed in the frontend. T
- **volume_storage**: Generic stored volume in L, mL, gal, fl. oz., m³, ft³, or CCF
- **water**: Water consumption in L, gal, m³, ft³, or CCF
- **weight**: Generic mass in kg, g, mg, µg, oz, lb, or st
-- **wind_speed**: Wind speed in ft/s, km/h, kn, m/s, or mph
+- **wind_speed**: Wind speed in Beaufort, ft/s, km/h, kn, m/s, or mph
diff --git a/source/_integrations/sensor.mqtt.markdown b/source/_integrations/sensor.mqtt.markdown
index 6f2f904380c4..416a43eec31d 100644
--- a/source/_integrations/sensor.mqtt.markdown
+++ b/source/_integrations/sensor.mqtt.markdown
@@ -149,7 +149,7 @@ json_attributes_topic:
required: false
type: string
last_reset_value_template:
- description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the last_reset. Available variables: `entity_id`. The `entity_id` can be used to reference the entity's attributes."
+ description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the last_reset. When `last_reset_value_template` is set, the `state_class` option must be `total`. Available variables: `entity_id`. The `entity_id` can be used to reference the entity's attributes."
required: false
type: template
name:
diff --git a/source/_integrations/seventeentrack.markdown b/source/_integrations/seventeentrack.markdown
index 20b65ad595c7..a4ed5831e407 100644
--- a/source/_integrations/seventeentrack.markdown
+++ b/source/_integrations/seventeentrack.markdown
@@ -4,14 +4,17 @@ description: Instructions on how to use 17track.net data within Home Assistant
ha_category:
- Postal Service
ha_release: 0.83
+ha_config_flow: true
ha_iot_class: Cloud Polling
+ha_codeowners:
+ - '@shaiu'
ha_domain: seventeentrack
ha_platforms:
- sensor
-ha_integration_type: integration
+ha_integration_type: service
---
-The `seventeentrack` sensor platform allows users to get package data tied to their [17track.net](https://www.17track.net/) account. The platform creates both summary sensors, which show the number of packages in a current state (e.g., "In Transit"), as well as individual sensors for each package within the account.
+The seventeentrack {% term integration %} allows users to get package data tied to their [17track.net](https://www.17track.net) account. The integration creates both summary sensors, which show the number of packages in a current state (e.g., "In Transit"), as well as individual sensors for each package within the account.
@@ -19,38 +22,7 @@ Although the 17track.net website states that account passwords cannot be longer
-## Configuration
-
-To enable the platform, add the following lines to your `configuration.yaml`
-file:
-
-```yaml
-sensor:
- - platform: seventeentrack
- username: EMAIL_ADDRESS
- password: YOUR_PASSWORD
-```
-
-{% configuration %}
-username:
- description: The email address associated with your 17track.net account.
- required: true
- type: string
-password:
- description: The password associated with your 17track.net account.
- required: true
- type: string
-show_archived:
- description: Whether sensors should be created for archived packages.
- required: false
- type: boolean
- default: false
-show_delivered:
- description: Whether sensors should be created for delivered packages.
- required: false
- type: boolean
- default: false
-{% endconfiguration %}
+{% include integrations/config_flow.md %}
## Package statuses
diff --git a/source/_integrations/sfr_box.markdown b/source/_integrations/sfr_box.markdown
index 9460349ce11b..9a1dbeec6f90 100644
--- a/source/_integrations/sfr_box.markdown
+++ b/source/_integrations/sfr_box.markdown
@@ -26,3 +26,9 @@ This integration provides the following platforms:
- Sensors - such as ADSL line status, attenuation, noise and data rate.
{% include integrations/config_flow.md %}
+
+## Compatibility
+
+The integration uses the REST API, which is known to be available on models `NB4`, `NB5`, `NB6`, `NB6V`, and `NB6VAC`.
+
+However, `NCC` models do not appear to expose this REST API, and are therefore unsupported by the integration.
diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown
index 73bb6b1837df..d9728a665040 100644
--- a/source/_integrations/shelly.markdown
+++ b/source/_integrations/shelly.markdown
@@ -5,8 +5,8 @@ ha_category:
- Binary sensor
- Climate
- Cover
- - Event
- Energy
+ - Event
- Light
- Number
- Sensor
@@ -84,6 +84,12 @@ Shelly generation 2 and 3 devices not battery-powered can act as a Bluetooth pro
{% include integrations/option_flow.md %}
+## Range Extender Support
+
+Shelly generation 2 and 3 devices that are not battery-powered can act as a Range Extender.
+Devices of the same generations can be configured via those Range Extenders specifying a custom TCP port during the configuration flow.
+Currently, only static IP or DHCP reserved IP are supported for the main device.
+
## Entity naming (generation 1)
The integration uses `Device Name` to name its entities if the device has only one relay or no relays at all.
diff --git a/source/_integrations/shopping_list.markdown b/source/_integrations/shopping_list.markdown
index 957202089ede..533e88d4f92a 100644
--- a/source/_integrations/shopping_list.markdown
+++ b/source/_integrations/shopping_list.markdown
@@ -14,9 +14,9 @@ ha_platforms:
- todo
---
-The `shopping_list` integration allows you to keep track of shopping list items.
+The **Shopping list** {% term 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 %}
@@ -28,33 +28,33 @@ You can add or remove items from your shopping list by using the following servi
Add an item to the shopping list.
-| Service data attribute | Optional | Description |
-|------------------------|----------|--------------------------------------------------------|
-| `name` | no | Name of the item to add. Example: "Milk" |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------- |
+| `name` | no | Name of the item to add. Example: "Milk" |
### Service `shopping_list.remove_item`
Remove the first item with matching name from the shopping list.
-| Service data attribute | Optional | Description |
-|------------------------|----------|--------------------------------------------------------|
-| `name` | no | Name of the item to remove. Example: "Milk" |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------- |
+| `name` | no | Name of the item to remove. Example: "Milk" |
### Service `shopping_list.complete_item`
Mark the first item with matching name as completed in the shopping list. It does not remove the item.
| Service data attribute | Optional | Description |
-|------------------------|----------|--------------------------------------------------------|
-| `name` | no | Name of the item to mark as completed. Example: "Milk" |
+| ---------------------- | -------- | ------------------------------------------------------ |
+| `name` | no | Name of the item to mark as completed. Example: "Milk" |
### Service `shopping_list.incomplete_item`
Mark the first item with matching name as incomplete in the shopping list.
-| Service data attribute | Optional | Description |
-|------------------------|----------|--------------------------------------------------------|
-| `name` | no | Name of the item to mark as incomplete. Example: "Milk" |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------- |
+| `name` | no | Name of the item to mark as incomplete. Example: "Milk" |
### Service `shopping_list.complete_all`
@@ -73,15 +73,15 @@ Clear completed items from the shopping list.
Sort all items by name in the shopping list.
| Service data attribute | Optional | Description |
-|------------------------|----------|---------------------------------------------------------------------|
-| `reverse` | yes | Whether to sort in reverse (_descending_) order. (default: `False`) |
+| ---------------------- | -------- | ------------------------------------------------------------------- |
+| `reverse` | yes | Whether to sort in reverse (_descending_) order. (default: `False`) |
## Using in automations
A `shopping_list_updated` event is triggered when items in the list are modified, with the following data payload attached to it. This can be used to trigger automations such as sending a push notification when someone adds an item to the shopping list, which when clicked, will open the list.
| Data payload attribute | Description |
-|------------------------|--------------------------------------------------------------------------------------------------------------------|
+| ---------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `action` | What action was taken on the item. Either `add` for a new item being added, or `update` for an item being updated. |
| `item` | A dictionary containing details of the item that was updated. |
| `item.id` | A unique ID for this item |
diff --git a/source/_integrations/signal_messenger.markdown b/source/_integrations/signal_messenger.markdown
index d835fb91ae3f..2a3645954290 100644
--- a/source/_integrations/signal_messenger.markdown
+++ b/source/_integrations/signal_messenger.markdown
@@ -131,7 +131,7 @@ action:
### Text message with an attachment from a URL
-To attach files from outside of Home Assistant, the URLs must be added to the [`allowlist_external_urls`](/docs/configuration/basic/#allowlist_external_urls) list.
+To attach files from outside of Home Assistant, the URLs must be added to the [`allowlist_external_urls`](/integrations/homeassistant/#allowlist_external_urls) list.
Note there is a 50MB size limit for attachments retrieved via URLs. You can also set `verify_ssl` to `false` to ignore SSL errors (default `true`).
diff --git a/source/_integrations/slack.markdown b/source/_integrations/slack.markdown
index 67d966f0b8e5..e8f50dc093fd 100644
--- a/source/_integrations/slack.markdown
+++ b/source/_integrations/slack.markdown
@@ -137,30 +137,30 @@ One sensor entity will be created:
The following attributes can be placed inside the `data` key of the service call for extended functionality:
-| Attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `username` | yes | The username of the Slack bot.
-| `icon` | yes | The icon of the Slack bot.
-| `file` | yes | A file to include with the message; see below.
-| `blocks` | yes | Array of [Slack blocks](https://api.slack.com/messaging/composing/layouts). *NOTE*: if using `blocks`, they are shown **in place of** the `message` within Slack apps. The message field will be used as notification text and anywhere else Slack is unable to display blocks. `message` is required regardless of whether this field is used.
-| `blocks_template` | yes | The same as `blocks`, but able to support [templates](https://www.home-assistant.io/docs/configuration/templating).
-| `thread_ts` | yes | Sends the message as a reply to a specified parent message.
+| Attribute | Optional | Description |
+| ----------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `username` | yes | The username of the Slack bot. |
+| `icon` | yes | The icon of the Slack bot. |
+| `file` | yes | A file to include with the message; see below. |
+| `blocks` | yes | Array of [Slack blocks](https://api.slack.com/messaging/composing/layouts). *NOTE*: if using `blocks`, they are shown **in place of** the `message` within Slack apps. The message field will be used as notification text and anywhere else Slack is unable to display blocks. `message` is required regardless of whether this field is used. |
+| `blocks_template` | yes | The same as `blocks`, but able to support [templates](https://www.home-assistant.io/docs/configuration/templating). |
+| `thread_ts` | yes | Sends the message as a reply to a specified parent message. |
Note that using `file` will ignore all usage of `blocks` and `blocks_template` (as Slack does not support those frameworks in messages that accompany uploaded files).
To include a local file with the Slack message, use these attributes underneath the `file` key:
-| Attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `path` | no | A local filepath that has been [whitelisted](/docs/configuration/basic/#allowlist_external_dirs).
+| Attribute | Optional | Description |
+| --------- | -------- | --------------------------------------------------------------------------------------------------- |
+| `path` | no | A local filepath that has been [whitelisted](/integrations/homeassistant/#allowlist_external_dirs). |
To include a remote file with the Slack message, use these attributes underneath the `file` key:
-| Attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `url` | no | A URL that has been [whitelisted](/docs/configuration/basic/#allowlist_external_urls).
-| `username` | yes | An optional username if the URL is protected by HTTP Basic Auth.
-| `password` | yes | An optional password if the URL is protected by HTTP Basic Auth.
+| Attribute | Optional | Description |
+| ---------- | -------- | ---------------------------------------------------------------------------------------- |
+| `url` | no | A URL that has been [whitelisted](/integrations/homeassistant/#allowlist_external_urls). |
+| `username` | yes | An optional username if the URL is protected by HTTP Basic Auth. |
+| `password` | yes | An optional password if the URL is protected by HTTP Basic Auth. |
### Obtaining a member ID
diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown
index 268b6ef67b4e..ae88c313e48f 100644
--- a/source/_integrations/smartthings.markdown
+++ b/source/_integrations/smartthings.markdown
@@ -64,7 +64,7 @@ The PAT is used to create a Home Assistant SmartApp in your SmartThings account
This integration requires an internet accessible incoming webhook to receive push updates from SmartThings. The preferred approach is to subscribe to [Home Assistant Cloud (Nabu Casa)](https://www.nabucasa.com/) and the integration will configure and use a cloudhook automatically. Alternatively, you will have to configure and setup an internet accessible webhook in Home Assistant as described below:
1. Setup [remote access](/docs/configuration/remote/) via a domain name secured with SSL. *Self-signed SSL certificates are not supported by the SmartThings Cloud API.*
-2. Set the external URL in the Home Assistant [configuration](/docs/configuration/basic) to the URL that Home Assistant is available on the internet (this must start with `https://`). If you do not use Nabu Casa you must configure your network to allow TCP traffic from the internet to reach the IP address and port of the device running Home Assistant.
+2. Set the external URL in the Home Assistant [configuration](/integrations/homeassistant/#external_url) to the URL that Home Assistant is available on the internet (this must start with `https://`). If you do not use Nabu Casa you must configure your network to allow TCP traffic from the internet to reach the IP address and port of the device running Home Assistant.
## Setup instructions
@@ -98,7 +98,7 @@ The SmartThings integration triggers events for select device capabilities.
### smartthings.button
-The integration will trigger an event when a device with the [button](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#button) capability is actuated and can be used to trigger automations within Home Assistant. Below is an example of the data payload:
+The integration will trigger an event when a device with the [button](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#button) capability is actuated and can be used to trigger automations within Home Assistant. Below is an example of the data payload:
```json
{
@@ -115,14 +115,14 @@ The integration will trigger an event when a device with the [button](https://de
| `component_id` | Describes which integration of the device triggered the event. `main` represents the parent device. For devices with child-devices, this attribute identifies the child that raised the event. For multi-button devices, the current SmartThings API will no longer pass the ButtonNumber but use a child component_id for each button. The device handler installed on SmartThings must be able to create those child components. |
| `device_id` | The unique id of the device in SmartThings. This can be located in the Home Assistant device registry or in the [SmartThings Developer Workspace](https://smartthings.developer.samsung.com/workspace/). |
| `location_id` | The unique id of the location the device is part of. This can be found in the configuration entry registry or in the [SmartThings Developer Workspace](https://smartthings.developer.samsung.com/workspace/). |
-| `value` | Describes the action taken on the button. See the [button](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#button) capability reference for a list of possible values (not all are supported by every device). |
+| `value` | Describes the action taken on the button. See the [button](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#button) capability reference for a list of possible values (not all are supported by every device). |
| `name` | The name given to the device in SmartThings. |
Event data payloads are logged at the debug level, see [debugging](#debugging) for more information.
## Platforms
-SmartThings represents devices as a set of [capabilities](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities) and the SmartThings integration maps those to entity platforms in Home Assistant. A single device may be represented by one or more platforms.
+SmartThings represents devices as a set of [capabilities](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference) and the SmartThings integration maps those to entity platforms in Home Assistant. A single device may be represented by one or more platforms.
- [Binary sensor](#binary-sensor)
- [Climate](#climate)
@@ -140,16 +140,16 @@ Support for additional platforms will be added in the future.
The SmartThings binary sensor platform lets you view devices that have binary sensor-related capabilities. A binary sensor entity will be created for each attribute (below) supported by the device.
-| Capability | Attribute | On-Value |
-| ------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ---------- |
-| [`accelerationSensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#accelerationSensor) | `acceleration` | `active` |
-| [`contactSensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#contactSensor) | `contact` | `open` |
-| [`filterStatus`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#filterStatus) | `filterStatus` | `replace` |
-| [`motionSensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#motionSensor) | `motion` | `active` |
-| [`presenceSensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#presenceSensor) | `presence` | `present` |
-| [`tamperAlert`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#tamperAlert) | `tamper` | `detected` |
-| [`valve`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | `valve` | `open` |
-| [`waterSensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#waterSensor) | `water` | `wet` |
+| Capability | Attribute | On-Value |
+| ----------------------------------------------------------------------------------------------------------------------------- | -------------- | ---------- |
+| [`accelerationSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#accelerationSensor) | `acceleration` | `active` |
+| [`contactSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#contactSensor) | `contact` | `open` |
+| [`filterStatus`](https://developer.smartthings.com/docs/devices/capabilities/proposed#filterStatus) | `filterStatus` | `replace` |
+| [`motionSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#motionSensor) | `motion` | `active` |
+| [`presenceSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#presenceSensor) | `presence` | `present` |
+| [`tamperAlert`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tamperAlert) | `tamper` | `detected` |
+| [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | `valve` | `open` |
+| [`waterSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#waterSensor) | `water` | `wet` |
### Climate
@@ -159,124 +159,124 @@ The SmartThings Climate platform lets you control devices that have air conditio
For a SmartThings Air Conditioner to be represented by the climate platform, it must have all of the following required capabilities:
-| Capability | Climate Features |
-| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| [`airConditionerMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) (required) | `hvac mode`, `hvac action` |
-| [`airConditionerFanMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#airConditionerFanMode) (required) | `fan mode` |
-| [`temperatureMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) (required) | `temperature` |
-| [`thermostatCoolingSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) (required) | `target temp` |
-| [`demandResponseLoadControl`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#demandResponseLoadControl) | `drlc_status_duration` (state attribute), `drlc_status_level` (state attribute), `drlc_status_override` (state attribute), `drlc_status_start` (state attribute) |
+| Capability | Climate Features |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [`airConditionerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) (required) | `hvac mode`, `hvac action` |
+| [`airConditionerFanMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerFanMode) (required) | `fan mode` |
+| [`temperatureMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) (required) | `temperature` |
+| [`thermostatCoolingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) (required) | `target temp` |
+| [`demandResponseLoadControl`](https://developer.smartthings.com/docs/devices/capabilities/proposed#demandResponseLoadControl) | `drlc_status_duration` (state attribute), `drlc_status_level` (state attribute), `drlc_status_override` (state attribute), `drlc_status_start` (state attribute) |
#### Thermostats
For a SmartThings thermostat to be represented by the climate platform, it must have all the capabilities from either "set a" _or_ "set b":
-| Capability | Climate Features |
-| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
-| [`thermostat`](https://developer-preview.smartthings.com/docs/devices/capabilities/deprecated#thermostat) (set a) | `hvac mode`, `hvac action`, `target temp high`, `target temp low` and `fan mode` |
-| [`thermostatMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) (set b) | `hvac mode` |
-| [`thermostatCoolingSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) (seb b) | `target temp low` |
-| [`thermostatHeatingSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) (set b) | `target temp high` |
-| [`temperatureMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) (set b) |
-| [`thermostatOperatingState`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatOperatingState) | `hvac action` |
-| [`thermostatFanMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatFanMode) | `fan mode` |
-| [`relativeHumidityMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#relativeHumidityMeasurement) | `humidity` (state attribute) |
+| Capability | Climate Features |
+| --------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| [`thermostat`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#thermostat) (set a) | `hvac mode`, `hvac action`, `target temp high`, `target temp low` and `fan mode` |
+| [`thermostatMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) (set b) | `hvac mode` |
+| [`thermostatCoolingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) (seb b) | `target temp low` |
+| [`thermostatHeatingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) (set b) | `target temp high` |
+| [`temperatureMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) (set b) |
+| [`thermostatOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatOperatingState) | `hvac action` |
+| [`thermostatFanMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatFanMode) | `fan mode` |
+| [`relativeHumidityMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#relativeHumidityMeasurement) | `humidity` (state attribute) |
### Cover
The SmartThings Cover platform lets you control devices that have open/close related capabilities. For a device to be represented by the cover platform, it must have one of the capabilities from "set a" below.
-| Capability | Cover Features |
-| ------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- |
-| [`doorControl`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#doorControl) (set a) | `open` and `close` |
-| [`garageDoorControl`](https://developer-preview.smartthings.com/docs/devices/capabilities/deprecated#garageDoorControl) (seb a) | `open` and `close` |
-| [`windowShade`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#windowShade) (set a) | `open` and `close` |
-| [`switchLevel`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `position` |
-| [`windowShadeLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference/#windowShadeLevel) | `position` |
-| [`battery`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery_level` (state attribute) |
+| Capability | Cover Features |
+| -------------------------------------------------------------------------------------------------------------------------- | --------------------------------- |
+| [`doorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#doorControl) (set a) | `open` and `close` |
+| [`garageDoorControl`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#garageDoorControl) (seb a) | `open` and `close` |
+| [`windowShade`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#windowShade) (set a) | `open` and `close` |
+| [`switchLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `position` |
+| [`windowShadeLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference/#windowShadeLevel) | `position` |
+| [`battery`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery_level` (state attribute) |
### Fan
The SmartThings Fan platform lets you control devices that have fan-related capabilities. For a SmartThings device to be represented by the fan platform, it must have one or more of the capabilities below in addition to the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability.
-| Capability | Fan Features |
-| ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
-| [`fanSpeed`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#fanSpeed) | `speed` (`off`, `low`, `medium`, and `high`) |
+| Capability | Fan Features |
+| --------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
+| [`fanSpeed`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#fanSpeed) | `speed` (`off`, `low`, `medium`, and `high`) |
### Light
The SmartThings Light platform lets you control devices that have light-related capabilities. For a SmartThings device to be represented by the light platform, it must have one or more of the capabilities below in addition to the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability.
-| Capability | Light Features |
-| --------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
-| [`switchLevel`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `brightness` and `transition` |
-| [`colorControl`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#colorControl) | `color` |
-| [`colorTemperature`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#colorTemperature) | `color_temp` |
+| Capability | Light Features |
+| ------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
+| [`switchLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `brightness` and `transition` |
+| [`colorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#colorControl) | `color` |
+| [`colorTemperature`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#colorTemperature) | `color_temp` |
### Lock
-The SmartThings Lock platform lets you control devices that have the [`lock`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#lock) capability, showing current lock status and supporting lock and unlock commands.
+The SmartThings Lock platform lets you control devices that have the [`lock`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#lock) capability, showing current lock status and supporting lock and unlock commands.
### Sensor
The SmartThings Sensor platform lets your view devices that have sensor-related capabilities. A Sensor entity is created for each attribute (below) supported by the device.
-| Capability | Attributes |
-| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
-| [`activityLightingMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#activityLightingMode) | `lightingMode` |
-| [`airConditionerMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) | `airConditionerMode` |
-| [`airQualitySensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#airQualitySensor) | `airQuality` |
-| [`alarm`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#alarm) | `alarm` |
-| [`audioVolume`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#audioVolume) | `volume` |
-| [`battery`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery` |
-| [`bodyMassIndexMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#bodyMassIndexMeasurement) | `bmiMeasurement` |
-| [`bodyWeightMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#bodyWeightMeasurement) | `bodyWeightMeasurement` |
-| [`carbonDioxideMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonDioxideMeasurement) | `carbonDioxide` |
-| [`carbonMonoxideDetector`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonMonoxideDetector) | `carbonMonoxide` |
-| [`carbonMonoxideMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#carbonMonoxideMeasurement) | `carbonMonoxideLevel` |
-| [`dishwasherOperatingState`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#dishwasherOperatingState) | `machineState`, `dishwasherJobState` and `completionTime` |
-| [`dryerMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#dryerMode) | `dryerMode` |
-| [`dryerOperatingState`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#dryerOperatingState) | `machineState`, `dryerJobState` and `completionTime` |
-| [`dustSensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#dustSensor) | `fineDustLevel` and `dustLevel` |
-| [`energyMeter`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#energyMeter) | `energy` |
-| [`equivalentCarbonDioxideMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#equivalentCarbonDioxideMeasurement) | `equivalentCarbonDioxideMeasurement` |
-| [`formaldehydeMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#formaldehydeMeasurement) | `formaldehydeLevel` |
-| [`gasMeter`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#gasMeter) | `gasMeter`, `meterCalorific`, `meterTime`, and `meterVolume` |
-| [`illuminanceMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#illuminanceMeasurement) | `illuminance` |
-| [`infraredLevel`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#infraredLevel) | `infraredLevel` |
-| [`lock`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#lock) | `lock` |
-| [`mediaInputSource`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#mediaInputSource) | `inputSource` |
-| [`mediaPlaybackRepeat`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackRepeat) | `playbackRepeatMode` |
-| [`mediaPlaybackShuffle`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackShuffle) | `playbackShuffle` |
-| [`mediaPlayback`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#mediaPlayback) | `playbackStatus` |
-| [`odorSensor`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#odorSensor) | `odorLevel` |
-| [`ovenMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#ovenMode) | `ovenMode` |
-| [`ovenOperatingState`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#ovenOperatingState) | `machineState`, `ovenJobState` and `completionTime` |
-| [`ovenSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#ovenSetpoint) | `ovenSetpoint` |
-| [`powerConsumptionReport`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#powerConsumptionReport) | `deltaEnergy`, `energy`, `energySaved`, `power`, `powerEnergy` |
-| [`powerMeter`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#powerMeter) | `power` |
-| [`powerSource`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#powerSource) | `powerSource` |
-| [`refrigerationSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#refrigerationSetpoint) | `refrigerationSetpoint` |
-| [`relativeHumidityMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#relativeHumidityMeasurement) | `humidity` |
-| [`robotCleanerCleaningMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#robotCleanerCleaningMode) | `robotCleanerCleaningMode` |
-| [`robotCleanerMovement`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#robotCleanerMovement) | `robotCleanerMovement` |
-| [`robotCleanerTurboMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#robotCleanerTurboMode) | `robotCleanerTurboMode` |
-| [`signalStrength`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#signalStrength) | `lqi` and `rssi` |
-| [`smokeDetector`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#smokeDetector) | `smoke` |
-| [`temperatureMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) | `temperature` |
-| [`thermostatCoolingSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) | `coolingSetpoint` |
-| [`thermostatFanMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatFanMode) | `thermostatFanMode` |
-| [`thermostatHeatingSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) | `heatingSetpoint` |
-| [`thermostatMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) | `thermostatMode` |
-| [`thermostatOperatingState`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatOperatingState) | `thermostatOperatingState` |
-| [`thermostatSetpoint`](https://developer-preview.smartthings.com/docs/devices/capabilities/deprecated#thermostatSetpoint) | `thermostatSetpoint` |
-| [`threeAxis`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#threeAxis) | `threeAxis` (as discrete sensors `X`, `Y` and `Z`) |
-| [`tvChannel`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#tvChannel) | `tvChannel` and `tvChannelName` |
-| [`tvocMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#tvocMeasurement) | `tvocLevel` |
-| [`ultravioletIndex`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#ultravioletIndex) | `ultravioletIndex` |
-| [`voltageMeasurement`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#voltageMeasurement) | `voltage` |
-| [`washerMode`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#washerMode) | `washerMode` |
-| [`washerOperatingState`](https://developer-preview.smartthings.com/docs/devices/capabilities/proposed#washerOperatingState) | `machineState`, `washerJobState` and `completionTime` |
+| Capability | Attributes |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
+| [`activityLightingMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#activityLightingMode) | `lightingMode` |
+| [`airConditionerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) | `airConditionerMode` |
+| [`airQualitySensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#airQualitySensor) | `airQuality` |
+| [`alarm`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#alarm) | `alarm` |
+| [`audioVolume`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#audioVolume) | `volume` |
+| [`battery`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery` |
+| [`bodyMassIndexMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#bodyMassIndexMeasurement) | `bmiMeasurement` |
+| [`bodyWeightMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#bodyWeightMeasurement) | `bodyWeightMeasurement` |
+| [`carbonDioxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonDioxideMeasurement) | `carbonDioxide` |
+| [`carbonMonoxideDetector`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonMonoxideDetector) | `carbonMonoxide` |
+| [`carbonMonoxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#carbonMonoxideMeasurement) | `carbonMonoxideLevel` |
+| [`dishwasherOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dishwasherOperatingState) | `machineState`, `dishwasherJobState` and `completionTime` |
+| [`dryerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dryerMode) | `dryerMode` |
+| [`dryerOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dryerOperatingState) | `machineState`, `dryerJobState` and `completionTime` |
+| [`dustSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#dustSensor) | `fineDustLevel` and `dustLevel` |
+| [`energyMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#energyMeter) | `energy` |
+| [`equivalentCarbonDioxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#equivalentCarbonDioxideMeasurement) | `equivalentCarbonDioxideMeasurement` |
+| [`formaldehydeMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#formaldehydeMeasurement) | `formaldehydeLevel` |
+| [`gasMeter`](https://developer.smartthings.com/docs/devices/capabilities/proposed#gasMeter) | `gasMeter`, `meterCalorific`, `meterTime`, and `meterVolume` |
+| [`illuminanceMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#illuminanceMeasurement) | `illuminance` |
+| [`infraredLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#infraredLevel) | `infraredLevel` |
+| [`lock`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#lock) | `lock` |
+| [`mediaInputSource`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaInputSource) | `inputSource` |
+| [`mediaPlaybackRepeat`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackRepeat) | `playbackRepeatMode` |
+| [`mediaPlaybackShuffle`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackShuffle) | `playbackShuffle` |
+| [`mediaPlayback`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlayback) | `playbackStatus` |
+| [`odorSensor`](https://developer.smartthings.com/docs/devices/capabilities/proposed#odorSensor) | `odorLevel` |
+| [`ovenMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenMode) | `ovenMode` |
+| [`ovenOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenOperatingState) | `machineState`, `ovenJobState` and `completionTime` |
+| [`ovenSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenSetpoint) | `ovenSetpoint` |
+| [`powerConsumptionReport`](https://developer.smartthings.com/docs/devices/capabilities/proposed#powerConsumptionReport) | `deltaEnergy`, `energy`, `energySaved`, `power`, `powerEnergy` |
+| [`powerMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerMeter) | `power` |
+| [`powerSource`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerSource) | `powerSource` |
+| [`refrigerationSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/proposed#refrigerationSetpoint) | `refrigerationSetpoint` |
+| [`relativeHumidityMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#relativeHumidityMeasurement) | `humidity` |
+| [`robotCleanerCleaningMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerCleaningMode) | `robotCleanerCleaningMode` |
+| [`robotCleanerMovement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerMovement) | `robotCleanerMovement` |
+| [`robotCleanerTurboMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerTurboMode) | `robotCleanerTurboMode` |
+| [`signalStrength`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#signalStrength) | `lqi` and `rssi` |
+| [`smokeDetector`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#smokeDetector) | `smoke` |
+| [`temperatureMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) | `temperature` |
+| [`thermostatCoolingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) | `coolingSetpoint` |
+| [`thermostatFanMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatFanMode) | `thermostatFanMode` |
+| [`thermostatHeatingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) | `heatingSetpoint` |
+| [`thermostatMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) | `thermostatMode` |
+| [`thermostatOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatOperatingState) | `thermostatOperatingState` |
+| [`thermostatSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#thermostatSetpoint) | `thermostatSetpoint` |
+| [`threeAxis`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#threeAxis) | `threeAxis` (as discrete sensors `X`, `Y` and `Z`) |
+| [`tvChannel`](https://developer.smartthings.com/docs/devices/capabilities/proposed#tvChannel) | `tvChannel` and `tvChannelName` |
+| [`tvocMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tvocMeasurement) | `tvocLevel` |
+| [`ultravioletIndex`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#ultravioletIndex) | `ultravioletIndex` |
+| [`voltageMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#voltageMeasurement) | `voltage` |
+| [`washerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerMode) | `washerMode` |
+| [`washerOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerOperatingState) | `machineState`, `washerJobState` and `completionTime` |
### Scene
@@ -284,12 +284,12 @@ The SmartThings Scene platform lets you activate scenes defined in SmartThings w
### Switch
-The SmartThings Switch platform lets you control devices that have the [`switch`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) capability that are not already represented by a more specific platform. The following optional capabilities will provide energy and power utilization information:
+The SmartThings Switch platform lets you control devices that have the [`switch`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) capability that are not already represented by a more specific platform. The following optional capabilities will provide energy and power utilization information:
-| Capability | Switch Features |
-| ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
-| [`energyMeter`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#energyMeter) | energy consumption (`today_energy_kwh` state attribute) |
-| [`powerMeter`](https://developer-preview.smartthings.com/docs/devices/capabilities/capabilities-reference#powerMeter) | power consumption (`current_power_w` state attribute) |
+| Capability | Switch Features |
+| --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
+| [`energyMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#energyMeter) | energy consumption (`today_energy_kwh` state attribute) |
+| [`powerMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerMeter) | power consumption (`current_power_w` state attribute) |
## Troubleshooting
diff --git a/source/_integrations/smtp.markdown b/source/_integrations/smtp.markdown
index d7defba2304f..a6eec4e2f51b 100644
--- a/source/_integrations/smtp.markdown
+++ b/source/_integrations/smtp.markdown
@@ -24,7 +24,7 @@ notify:
recipient: "YOUR_RECIPIENT"
```
-Check your email 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. A restart of Home Assistant is required to pick up the configuration changes.
{% configuration %}
name:
@@ -86,7 +86,28 @@ verify_ssl:
### Usage
-To use the SMTP notification, refer to it in an automation or script like in this example:
+A notify integration will be created using the name without spaces. In the above example, it will be called `notify.NOTIFIER_NAME`. To use the SMTP notification, refer to it in an automation or script like in this example:
+
+```yaml
+- alias: "Send E-Mail Every Morning"
+ description: ""
+ trigger:
+ - platform: time
+ at: "08:00:00"
+ condition: []
+ action:
+ - service: notify.NOTIFIER_NAME
+ data:
+ title: "Good Morning"
+ message: "Rise and shine"
+ target:
+ - "morning@example.com"
+ mode: single
+```
+
+The optional `target` field is used to specify recipient(s) for this specific service call. When `target` field is not used, this message will be sent to default recipient(s), in this example, morning@example.com.
+
+Another example attaching images stored locally in a script:
```yaml
burglar:
@@ -107,15 +128,13 @@ burglar:
- /home/pi/snapshot2.jpg
```
-The optional `target` field is used to specify recipient(s) for this specific service call. When `target` field is not used, this message will be sent to default recipient(s), in this example, my_intruder_alert@example.com.
-
The optional `html` field makes a custom text/HTML multi-part message, allowing total freedom for sending rich HTML emails by defining the HTML content. In them, if you need to include images, you can pass both arguments (`html` and `images`). The images will be attached with the basename of the images, so they can be included in the html page with `src="cid:image_name.ext"`.
The optional `images` field adds image attachments to the email. If `html` is defined, the images need to be added to the message in-line as described above (and as shown in the example below). If `html` is not defined, images will be added as separate attachments.
-When adding images, make sure the folders containing the attachments are added to `allowlist_external_dirs`.
See: [Setup basic documentation](/docs/configuration/basic/)
+When adding images, make sure the folders containing the attachments are added to `allowlist_external_dirs`.
See: [Setup basic documentation](/integrations/homeassistant/#allowlist_external_dirs)
diff --git a/source/_integrations/smud.markdown b/source/_integrations/smud.markdown
new file mode 100644
index 000000000000..a321ea4cb827
--- /dev/null
+++ b/source/_integrations/smud.markdown
@@ -0,0 +1,20 @@
+---
+title: Sacramento Municipal Utility District (SMUD)
+description: Get energy usage from Sacramento Municipal Utility District (SMUD) using the Opower integration
+ha_category:
+ - Energy
+ - Sensor
+ha_release: 2023.8
+ha_domain: smud
+ha_integration_type: virtual
+ha_supporting_domain: opower
+ha_supporting_integration: Opower
+ha_codeowners:
+ - '@tronikos'
+ha_config_flow: true
+ha_platforms:
+ - sensor
+ha_iot_class: Cloud Polling
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/sql.markdown b/source/_integrations/sql.markdown
index 3a2706fde7e5..48f001e33e39 100644
--- a/source/_integrations/sql.markdown
+++ b/source/_integrations/sql.markdown
@@ -222,6 +222,18 @@ Use `state` as column for value.
Keep in mind that, depending on the update frequency of your sensor and other factors, this may not be a 100% accurate reflection of the actual situation you are measuring. Since your database won’t necessarily have a value saved exactly 24 hours ago, use “>=” or “<=” to get one of the closest values.
+#### MariaDB
+
+On MariaDB the following where clause can be used to compare the timestamp:
+
+```sql
+...
+ AND last_updated_ts <= UNIX_TIMESTAMP(NOW() - INTERVAL 1 DAY)
+...
+```
+
+Replace `- INTERVAL 1 DAY` with the target offset, for example, `- INTERVAL 1 HOUR`.
+
### Database size
#### Postgres
diff --git a/source/_integrations/starlink.markdown b/source/_integrations/starlink.markdown
index b3f71ab60261..b2f3a251ac2f 100644
--- a/source/_integrations/starlink.markdown
+++ b/source/_integrations/starlink.markdown
@@ -8,6 +8,7 @@ ha_category:
- Network
- Sensor
- Switch
+ - Time
ha_release: 2023.2
ha_iot_class: Local Polling
ha_config_flow: true
@@ -21,6 +22,7 @@ ha_platforms:
- diagnostics
- sensor
- switch
+ - time
ha_integration_type: integration
ha_quality_scale: silver
---
@@ -61,7 +63,13 @@ The Starlink integration allows you to integrate your [Starlink](https://www.sta
### Switch
- Stowed - Controls whether Dishy is stowed
+- Sleep schedule - Controls whether Starlink will enter a power-saving sleep mode at a predefined schedule
### Device tracker
- Device location - Tracks the location of Dishy. Note you need to allow location access on the local network via the Starlink app for this to work. This is disabled by default in the Starlink app and is thus disabled by default in Home Assistant.
+
+### Time
+
+- Sleep start - The time at which Starlink will enter sleep mode, if "Sleep Schedule" is enabled
+- Sleep end - The time at which Starlink will exit sleep mode, if "Sleep Schedule" is enabled
diff --git a/source/_integrations/statistics.markdown b/source/_integrations/statistics.markdown
index b1de8075ae03..1de46f9a0419 100644
--- a/source/_integrations/statistics.markdown
+++ b/source/_integrations/statistics.markdown
@@ -140,6 +140,11 @@ max_age:
description: Maximum age of source sensor measurements stored. Setting this to a time period will cause older values to be discarded. If omitted, the number of considered source sensor measurements is limited by `sampling_size` only. Set both parameters appropriately to create suited limits for your use case. The sensor value will become `unknown` if the source sensor is not updated within the time period. A statistics sensor requires `sampling_size`, `max_age`, or both to be defined.
required: false
type: time
+keep_last_sample:
+ description: Defines whether the most recent sampled value should be preserved regardless of the `max_age` setting.
+ required: false
+ default: false
+ type: boolean
percentile:
description: Only relevant in combination with the `percentile` characteristic. Must be a value between 1 and 99. The value defines the percentile value to consider. The 25th percentile is also known as the first quartile, the 50th percentile as the median.
required: false
diff --git a/source/_integrations/supervisord.markdown b/source/_integrations/supervisord.markdown
index 1270b34152d9..838eda1ad433 100644
--- a/source/_integrations/supervisord.markdown
+++ b/source/_integrations/supervisord.markdown
@@ -20,7 +20,7 @@ It required that you enable the HTTP feature in the `/etc/supervisord.conf` conf
port=127.0.0.1:9001
```
-After a restart of `supervisord` you should be able to access the web interface. If needed then this could be added as an [iFrame panel](/integrations/panel_iframe/).
+After a restart of `supervisord` you should be able to access the web interface. If needed then this could be added as an [webpage dashboard](/dashboards/dashboards/#webpage-dashboard).
diff --git a/source/_integrations/switchbot.markdown b/source/_integrations/switchbot.markdown
index 35f23a9debb3..4308417ac8bb 100644
--- a/source/_integrations/switchbot.markdown
+++ b/source/_integrations/switchbot.markdown
@@ -62,7 +62,7 @@ Some SwitchBot devices need to be configured within the app before being control
- [Indoor/Outdoor Meter](https://switch-bot.com/pages/switchbot-indoor-outdoor-thermo-hygrometer) (WoIOSensorTH)
- [Motion Sensor (WoPresence)](https://switch-bot.com/pages/switchbot-motion-sensor)
- Plug Mini (WoPlug), both the original (model W1901400) and HomeKit-enabled (model W1901401)
-- [Lock (WoLock)](https://switch-bot.com/pages/switchbot-lock)
+- [Lock (WoLock)](https://switch-bot.com/pages/switchbot-lock) (currently the Pro model is not supported)
- [Blind Tilt (WoBlindTilt)](https://switch-bot.com/pages/switchbot-blind-tilt)
## SwitchBot Entity
diff --git a/source/_integrations/synology_srm.markdown b/source/_integrations/synology_srm.markdown
index 801023e4fd8b..9d7456d2f26a 100644
--- a/source/_integrations/synology_srm.markdown
+++ b/source/_integrations/synology_srm.markdown
@@ -58,7 +58,7 @@ verify_ssl:
type: boolean
{% endconfiguration %}
-It's not possible to create another account in SRM with admin permissions. You'll need to use your admin account (or the one you renamed at creation) for this connection.
+For instructions on creating multiple administrators on SRM, please refer to the [Synology Knowledge Center](https://kb.synology.com/en-id/SRM/tutorial/Create_multiple_administrator_accounts_on_Synology_Router).
List of models known to be supported:
diff --git a/source/_integrations/system_bridge.markdown b/source/_integrations/system_bridge.markdown
index e8bf158277d2..3a5ada8f4dbf 100644
--- a/source/_integrations/system_bridge.markdown
+++ b/source/_integrations/system_bridge.markdown
@@ -23,18 +23,30 @@ ha_integration_type: device
---
[System Bridge](https://system-bridge.timmo.dev) is an application that runs on your local machine to share system information via its API/WebSocket. You can also send commands to the device such as opening a URL or sending keyboard keypresses.
+
## Prerequisites
+
### Version
-This integration requires System Bridge 3.1.1 and above. Any older version will not work.
-### API key
-You will need your API key. This can be found following the documentation [here](https://system-bridge.timmo.dev/docs/running).
+
+This integration requires System Bridge 4.0.2 and above. Any older version will not work.
+
+### Token
+
+You will need your token. For instructions on finding your token, follow the steps in the [System Bridge documentation](https://system-bridge.timmo.dev/docs/running).
+
{% include integrations/config_flow.md %}
+
## Binary sensors
+
This integration provides the following binary sensors:
-| Name | Description |
-| --------------------- | ---------------------------------- |
-| Battery Is Charging | Whether the battery is charging |
-| New Version Available | Whether a new version is available |
+
+| Name | Description |
+| --------------------- | ----------------------------------- |
+| Battery Is Charging | Whether the battery is charging |
+| Camera In Use | Whether the camera/webcam is in use |
+| Pending Reboot | Whether a reboot is pending |
+| New Version Available | Whether a new version is available |
+
## Sensors
This integration provides the following sensors:
@@ -151,37 +163,137 @@ Here is an example action that will open a URL in the device's browser:
This is an object containing the `source` and `volume` (0-100). The source must be a URL to a playable audio file (an MP3 for example).
+### Service `system_bridge.get_process_by_id`
+
+Returns a process by its pid.
+
+{% my developer_call_service service="system_bridge.get_process_by_id" title="Show service in your Home Assistant instance." %}
+
+```yaml
+service: system_bridge.get_process_by_id
+data:
+ bridge: "deviceid"
+ id: 17752
+```
+
+This returns [Response Data](https://www.home-assistant.io/docs/scripts/service-calls#use-templates-to-handle-response-data) like the following:
+
+```yaml
+id: 17752
+name: steam.exe
+cpu_usage: 0.9
+created: 1698951361.6117153
+memory_usage: 0.23782578821487121
+path: C:\Program Files (x86)\Steam\steam.exe
+status: running
+username: hostname\user
+working_directory: null
+```
+
+### Service `system_bridge.get_processes_by_name`
+
+Returns a count and a list of processes matching the name provided.
+
+{% my developer_call_service service="system_bridge.get_processes_by_name" title="Show service in your Home Assistant instance." %}
+
+```yaml
+service: system_bridge.get_processes_by_name
+data:
+ bridge: "deviceid"
+ name: discord
+```
+
+This returns [Response Data](https://www.home-assistant.io/docs/scripts/service-calls#use-templates-to-handle-response-data) like the following:
+
+```yaml
+count: 1
+processes:
+ - id: 11196
+ name: Discord.exe
+ cpu_usage: 0.3
+ created: 1698951365.770648
+ memory_usage: 0.07285296297215042
+ path: C:\Users\user\AppData\Local\Discord\app\Discord.exe
+ status: running
+ username: hostname\user
+ working_directory: null
+```
+
### Service `system_bridge.open_path`
Open a URL or file on the server using the default application.
+
{% my developer_call_service service="system_bridge.open_path" title="Show service in your Home Assistant instance." %}
+
```yaml
service: system_bridge.open_path
data:
bridge: "deviceid"
path: "C:\\image.jpg"
```
+
+This returns [Response Data](https://www.home-assistant.io/docs/scripts/service-calls#use-templates-to-handle-response-data) like the following:
+
+```yaml
+id: abc123
+type: OPENED
+data:
+ path: C:\image.jpg
+message: Path opened
+```
+
### Service `system_bridge.open_url`
+
Open a URL or file on the server using the default application.
+
{% my developer_call_service service="system_bridge.open_url" title="Show service in your Home Assistant instance." %}
+
```yaml
service: system_bridge.open_url
data:
bridge: "deviceid"
url: "https://home-assistant.io"
```
-### Service `system_bridge.send_keypress`
+
+This returns [Response Data](https://www.home-assistant.io/docs/scripts/service-calls#use-templates-to-handle-response-data) like the following:
+
+```yaml
+id: abc123
+type: OPENED
+data:
+ url: https://home-assistant.io
+message: URL opened
+```
+
+### Service`system_bridge.send_keypress`
+
Send a keypress to the server.
+
{% my developer_call_service service="system_bridge.send_keypress" title="Show service in your Home Assistant instance." %}
+
```yaml
service: system_bridge.send_keypress
data:
bridge: "deviceid"
key: "a"
```
+
+This returns [Response Data](https://www.home-assistant.io/docs/scripts/service-calls#use-templates-to-handle-response-data) like the following:
+
+```yaml
+id: abc123
+type: KEYBOARD_KEY_PRESSED
+data:
+ key: a
+message: Key pressed
+```
+
### Service `system_bridge.send_text`
+
Sends text for the server to type.
+
{% my developer_call_service service="system_bridge.send_text" title="Show service in your Home Assistant instance." %}
+
```yaml
service: system_bridge.send_text
data:
@@ -189,12 +301,30 @@ data:
text: "Hello"
```
+This returns [Response Data](https://www.home-assistant.io/docs/scripts/service-calls#use-templates-to-handle-response-data) like the following:
+
+```yaml
+id: abc123
+type: KEYBOARD_TEXT_SENT
+data:
+ text: Hello
+message: Text entered
+```
+
### Service `system_bridge.power_command`
Sends power command to the system.
-{% my developer_call_service service="system_bridge.power_command" title="Show service in your Home Assistant instance." %}
+Supported commands are:
+- `hibernate`
+- `lock`
+- `logout`
+- `restart`
+- `shutdown`
+- `sleep`
+
+{% my developer_call_service service="system_bridge.power_command" title="Show service in your Home Assistant instance." %}
```yaml
service: system_bridge.power_command
@@ -203,11 +333,11 @@ data:
command: "sleep"
```
-Supported commands are:
+This returns [Response Data](https://www.home-assistant.io/docs/scripts/service-calls#use-templates-to-handle-response-data) like the following:
-- `hibernate`
-- `lock`
-- `logout`
-- `restart`
-- `shutdown`
-- `sleep`
+```yaml
+id: abc123
+type: POWER_SLEEPING
+data: {}
+message: Sleeping
+```
diff --git a/source/_integrations/telegram.markdown b/source/_integrations/telegram.markdown
index 1006f7d95b14..f4c16d70e2ed 100644
--- a/source/_integrations/telegram.markdown
+++ b/source/_integrations/telegram.markdown
@@ -265,7 +265,7 @@ inline_keyboard:
-Since Home Assistant version 0.48 you have to [whitelist the source folder](/docs/configuration/basic/) of the file you want to include in the notification.
+Since Home Assistant version 0.48 you have to [whitelist the source folder](/integrations/homeassistant/#allowlist_external_dirs) of the file you want to include in the notification.
```yaml
configuration.yaml
diff --git a/source/_integrations/telegram_broadcast.markdown b/source/_integrations/telegram_broadcast.markdown
index a73824f85ccd..5b62eeffd2a7 100644
--- a/source/_integrations/telegram_broadcast.markdown
+++ b/source/_integrations/telegram_broadcast.markdown
@@ -40,11 +40,7 @@ parse_mode:
type: string
default: "`markdown`"
proxy_url:
- description: Proxy URL if working behind one (`socks5://proxy_ip:proxy_port`).
- required: false
- type: string
-proxy_params:
- description: Proxy configuration parameters, as dict, if working behind a proxy (`username`, `password`, etc.).
+ description: Proxy URL if working behind one, optionally including username and password. (`socks5://username:password@proxy_ip:proxy_port`).
required: false
type: string
{% endconfiguration %}
diff --git a/source/_integrations/telegram_polling.markdown b/source/_integrations/telegram_polling.markdown
index befcd63fd031..cd847e40a465 100644
--- a/source/_integrations/telegram_polling.markdown
+++ b/source/_integrations/telegram_polling.markdown
@@ -42,11 +42,7 @@ parse_mode:
type: string
default: "`markdown`"
proxy_url:
- description: Proxy URL if working behind one (`socks5://proxy_ip:proxy_port`).
- required: false
- type: string
-proxy_params:
- description: Proxy configuration parameters, as dict, if working behind a proxy (`username`, `password`, etc.).
+ description: Proxy URL if working behind one, optionally including username and password. (`socks5://username:password@proxy_ip:proxy_port`).
required: false
type: string
{% endconfiguration %}
diff --git a/source/_integrations/telegram_webhooks.markdown b/source/_integrations/telegram_webhooks.markdown
index 3116b7162ab7..befeaa8a0b89 100644
--- a/source/_integrations/telegram_webhooks.markdown
+++ b/source/_integrations/telegram_webhooks.markdown
@@ -10,7 +10,7 @@ ha_domain: telegram_bot
Telegram chatbot webhooks implementation as described in the Telegram [documentation](https://core.telegram.org/bots/webhooks).
-By default this integration sets your bot's webhook URL automatically to `https://
/api/telegram_webhooks` with the external_url of your Home Assistant [configuration](/docs/configuration/basic/) using Telegrams `setWebhook` method.
+By default this integration sets your bot's webhook URL automatically to `https:///api/telegram_webhooks` with the external_url of your Home Assistant [configuration](/integrations/homeassistant/#external_url) using Telegrams `setWebhook` method.
This is one of two bot implementations supported by Telegram. Described by Telegram as the preferred implementation but requires your Home Assistant instance to be exposed to the internet.
The other implementation method is [Telegram polling](/integrations/telegram_polling/), for which your Home Assistant instance does not have to be exposed to the internet.
@@ -44,15 +44,11 @@ parse_mode:
default: "`markdown`"
type: string
proxy_url:
- description: Proxy URL if working behind one (`socks5://proxy_ip:proxy_port`).
- required: false
- type: string
-proxy_params:
- description: Proxy configuration parameters, as dict, if working behind a proxy (`username`, `password`, etc.).
+ description: Proxy URL if working behind one, optionally including username and password. (`socks5://username:password@proxy_ip:proxy_port`).
required: false
type: string
url:
- description: Allow to overwrite the external URL from the Home Assistant [configuration](/docs/configuration/basic/) for different setups (`https://:`).
+ description: Allow to overwrite the external URL from the Home Assistant [configuration](/integrations/homeassistant/#editing-the-general-settings-in-yaml) for different setups (`https://:`).
required: false
type: string
trusted_networks:
diff --git a/source/_integrations/teslemetry.markdown b/source/_integrations/teslemetry.markdown
index cc976baae99c..5822a1e15438 100644
--- a/source/_integrations/teslemetry.markdown
+++ b/source/_integrations/teslemetry.markdown
@@ -3,6 +3,7 @@ title: Teslemetry
description: Instructions on how to integrate Teslemetry within Home Assistant.
ha_category:
- Climate
+ - Sensor
ha_release: 2024.2
ha_iot_class: Cloud Polling
ha_config_flow: true
@@ -11,6 +12,7 @@ ha_codeowners:
ha_domain: teslemetry
ha_platforms:
- climate
+ - sensor
ha_integration_type: integration
---
@@ -30,4 +32,60 @@ The integration will create a climate entity to control the vehicle's climate co
- Turn on and off
- Change the set temperature
-- Change to one of the four modes: Off, Keep mode, Dog mode, and Camp mode
+- Change to one of the four modes: Off, Keep mode, Dog mode, and Camp mode
+
+### Sensor
+
+The integration will create sensor entities for a variety of metrics that relate to your vehicles, energy sites, and Wall Connectors:
+
+#### Energy sites
+- Battery power
+- Energy left
+- Generator power (disabled by default)
+- Grid power
+- Grid services power
+- Load power
+- Percentage charged
+- Solar power
+- Total pack energy (disabled by default)
+
+#### Vehicles
+- Battery level
+- Battery power
+- Battery range
+- Charge cable
+- Charge energy added
+- Charge rate (disabled by default)
+- Charging
+- Charger power
+- Charger voltage
+- Charger current
+- Destination
+- Distance to arrival
+- Driver temperature setting (disabled by default)
+- Estimate battery range (disabled by default)
+- Fast charger type
+- Ideal battery range (disabled by default)
+- Inside temperature
+- Odometer (disabled by default)
+- Online
+- Outside temperature
+- Passenger temperature setting (disabled by default)
+- Power (disabled by default)
+- Shift state (disabled by default)
+- Speed (disabled by default)
+- State of charge at arrival (disabled by default)
+- Time to arrival
+- Time to full charge
+- Tire pressure front left (disabled by default)
+- Tire pressure front right (disabled by default)
+- Tire pressure rear left (disabled by default)
+- Tire pressure rear right (disabled by default)
+- Traffic delay (disabled by default)
+- Usable battery level (disabled by default)
+
+#### Wall connectors
+- Fault state code (disabled by default)
+- Power
+- State code (disabled by default)
+- Vehicle
diff --git a/source/_integrations/tessie.markdown b/source/_integrations/tessie.markdown
index 765da0f72ea7..c0a63aa8c6a3 100644
--- a/source/_integrations/tessie.markdown
+++ b/source/_integrations/tessie.markdown
@@ -151,8 +151,11 @@ The integration will create sensor entities for a variety of metrics related to
#### Charge state
+- Battery charging
- Battery level
- Battery range
+- Battery range estimate (disabled)
+- Battery range ideal (disabled)
- Charge energy added
- Charge rate
- Charger current
diff --git a/source/_integrations/thread.markdown b/source/_integrations/thread.markdown
index 8b1b637c701c..4793c54d4f23 100644
--- a/source/_integrations/thread.markdown
+++ b/source/_integrations/thread.markdown
@@ -12,6 +12,23 @@ ha_config_flow: true
ha_platforms:
- diagnostics
ha_zeroconf: true
+related:
+ - docs: /yellow/
+ title: Home Assistant Yellow - hub
+ - docs: /skyconnect/
+ title: Home Assistant SkyConnect - Zigbee/Thread USB stick
+ - docs: /integrations/matter/
+ title: Matter
+ - docs: /integrations/homekit_controller/
+ title: HomeKit
+ - docs: /integrations/matter/#adding-a-matter-device-to-home-assistant
+ title: Adding a Matter device to Home Assistant
+ - docs: /integrations/homekit_controller/#adding-a-homekit-device-through-thread
+ title: Adding an Apple HomeKit device through Thread
+ - url: https://skyconnect.home-assistant.io/procedures/enable-thread/
+ title: Enabling Thread on SkyConnect
+ - url: https://yellow.home-assistant.io/procedures/enable-thread/
+ title: Enabling Thread on Yellow
---
The Thread integration helps you track the different Thread networks in your home and store the Thread network credentials (similar to a Wi-Fi password). The Thread integration in Home Assistant is currently still a work in progress.
@@ -226,21 +243,3 @@ You can only set a Thread network as preferred if the credentials are known.
In the current implementation, having multiple TBRs from different vendors results in separate networks using different credentials. This prevents devices from roaming between the Thread networks. In theory, it would be better to join all Thread networks into a single network to increase the size of the mesh network. A dense mesh network should lead to better RF coverage and better link quality, which lowers transmission latencies, making communication faster.
-## Related topics
-
-### Related hardware
-
-- [Home Assistant Yellow](/yellow/) hub
-- [Home Assistant SkyConnect](/skyconnect/) Zigbee/Thread USB stick
-
-### Related integrations for smart home standards
-
-- [Matter](/integrations/matter/)
-- [HomeKit](/integrations/homekit_controller/)
-
-### Related guides
-
-- [Adding a Matter device to Home Assistant](/integrations/matter/#adding-a-matter-device-to-home-assistant)
-- [Adding an Apple HomeKit device through Thread](/integrations/homekit_controller/#adding-a-homekit-device-through-thread)
-- [Enabling Thread on SkyConnect](https://skyconnect.home-assistant.io/procedures/enable-thread/)
-- [Enabling Thread on Yellow](https://yellow.home-assistant.io/procedures/enable-thread/)
diff --git a/source/_integrations/todo.markdown b/source/_integrations/todo.markdown
index c7b62ea55af3..8799cfc8e9af 100644
--- a/source/_integrations/todo.markdown
+++ b/source/_integrations/todo.markdown
@@ -9,6 +9,11 @@ ha_quality_scale: internal
ha_codeowners:
- '@home-assistant/core'
ha_integration_type: entity
+related:
+ - docs: /integrations/local_todo
+ title: Local to-do list integration documentation
+ - docs: /dashboards/todo-list/
+ title: To-do list card
---
The **To-do list** {% term integration %} provides to-do list {% term entities %}, allowing other integrations
@@ -46,9 +51,9 @@ services provided by some to-do list entities are described below or you can rea
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:
-| Service data attribute | Optional | Description | Example |
-| ---------------------- | -------- | ----------- | --------|
-| `status` | yes | Only return to-do items with this status. | `needs_action`, `completed`
+| Service data attribute | Optional | Description | Example |
+| ---------------------- | -------- | ----------------------------------------- | --------------------------- |
+| `status` | yes | Only return to-do items with this status. | `needs_action`, `completed` |
This is a full example that returns all to-do items that have not been completed:
@@ -65,12 +70,12 @@ data:
Add a new to-do item. A to-do list `target` is selected with a [Target Selector](/docs/blueprint/selectors/#target-selector) and the `data` payload supports the following fields:
-| Service data attribute | Optional | Description | Example |
-| ---------------------- | -------- | ----------- | --------|
-| `item` | no | the name of the to-do Item. | Submit income tax return
-| `due_date` | yes | The date the to-do item is expected to be completed. | 2024-04-10
-| `due_datetime` | yes | The date and time the to-do item is expected to be completed. | 2024-04-10 23:00:00
-| `description` | yes | A more complete description than the one provided by the summary | Collect all necessary documents and submit the final return.
+| Service data attribute | Optional | Description | Example |
+| ---------------------- | -------- | ---------------------------------------------------------------- | ------------------------------------------------------------ |
+| `item` | no | the name of the to-do Item. | Submit income tax return |
+| `due_date` | yes | The date the to-do item is expected to be completed. | 2024-04-10 |
+| `due_datetime` | yes | The date and time the to-do item is expected to be completed. | 2024-04-10 23:00:00 |
+| `description` | yes | A more complete description than the one provided by the summary | Collect all necessary documents and submit the final return. |
Only one of `due_date` or `due_datetime` may be specified.
@@ -90,14 +95,14 @@ data:
Update a to-do item. A to-do list `target` is selected with a [Target Selector](/docs/blueprint/selectors/#target-selector) and the `data` payload supports the following fields:
-| Service data attribute | Optional | Description | Example |
-| ---------------------- | -------- | ----------- | --------|
-| `item` | no | The name of the to-do Item to update. | Submit income tax return
-| `rename` | yes | The new name of the to-do Item. | Something else
-| `status` | yes | The overall status of the To-do Item. | `needs_action` or `completed`
-| `due_date` | yes | The date the to-do item is expected to be completed. | 2024-04-10
-| `due_datetime` | yes | The date and time the to-do item is expected to be completed. | 2024-04-10 23:00:00
-| `description` | yes | A more complete description than the one provided by the summary. | Collect all necessary documents and submit the final return.
+| Service data attribute | Optional | Description | Example |
+| ---------------------- | -------- | ----------------------------------------------------------------- | ------------------------------------------------------------ |
+| `item` | no | The name of the to-do Item to update. | Submit income tax return |
+| `rename` | yes | The new name of the to-do Item. | Something else |
+| `status` | yes | The overall status of the To-do Item. | `needs_action` or `completed` |
+| `due_date` | yes | The date the to-do item is expected to be completed. | 2024-04-10 |
+| `due_datetime` | yes | The date and time the to-do item is expected to be completed. | 2024-04-10 23:00:00 |
+| `description` | yes | A more complete description than the one provided by the summary. | Collect all necessary documents and submit the final return. |
At least one of `rename` or `status` is required. Only one of `due_date` or `due_datetime` may be specified. This is a full example of a service call that updates the status and the name of a to-do item.
@@ -115,9 +120,9 @@ data:
Removing a to-do item. A to-do list `target` is selected with a [Target Selector](/docs/blueprint/selectors/#target-selector), and the `data` payload supports the following fields:
-| Service data attribute | Optional | Description | Example |
-| ---------------------- | -------- | ----------- | --------|
-| `item` | no | The name of the to-do item. | Submit income tax return
+| Service data attribute | Optional | Description | Example |
+| ---------------------- | -------- | --------------------------- | ------------------------ |
+| `item` | no | The name of the to-do item. | Submit income tax return |
This is a full example of a service call that deletes a to-do Item with the specified name.
@@ -140,8 +145,3 @@ service: todo.remove_completed_items
target:
entity_id: todo.personal_tasks
```
-
-## Related topics
-
-- [Local to-do integration](/integrations/local_todo/)
-- [Shopping list card](/dashboards/shopping-list/)
\ No newline at end of file
diff --git a/source/_integrations/todoist.markdown b/source/_integrations/todoist.markdown
index a76b775331fd..127d94013289 100644
--- a/source/_integrations/todoist.markdown
+++ b/source/_integrations/todoist.markdown
@@ -14,12 +14,25 @@ ha_platforms:
- todo
ha_integration_type: integration
ha_config_flow: true
+related:
+ - docs: /integrations/todo
+ title: To-do list integration documentation
+ - docs: /integrations/#to-do-list
+ title: List of to-do list integrations
+ - docs: /dashboards/todo-list/
+ title: To-do list card
+ - docs: /dashboards/dashboards/
+ title: Dashboards
+ - docs: /integrations/calendar/
+ title: Calendar
+ - url: https://todoist.com
+ title: Todoist projects
---
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
diff --git a/source/_integrations/tolo.markdown b/source/_integrations/tolo.markdown
index 530775b786da..9c46d58439d0 100644
--- a/source/_integrations/tolo.markdown
+++ b/source/_integrations/tolo.markdown
@@ -1,6 +1,6 @@
---
title: TOLO Sauna
-description: Control your TOLO Sauna and TOLO Steam Bath with Home Assistant.
+description: Control your TOLO Sauna and Steam Bath with Home Assistant.
ha_release: '2021.12'
ha_category:
- Climate
@@ -20,19 +20,111 @@ ha_platforms:
- number
- select
- sensor
+ - switch
ha_dhcp: true
ha_integration_type: integration
---
-The TOLO Sauna integration allows you to control your [TOLO Sauna and TOLO Steam Bath](https://www.tolosauna.com/) with Home Assistant.
+The TOLO integration allows to control [Steamtec TOLO](https://www.tolosauna.com/) devices with Home Assistant.
-The integration allows for:
-- Turning the sauna on and off
-- Setting the target temperature and target humidity
-- Controlling the fan (used for drying and cooling down the sauna)
-- Controlling the sauna lights (on/off, mode selection)
-- Configuring timers for automatic power shutdown, automatic fan shutdown and salt spray activation interval
-- Checking diagnostic information (water level, tank temperature, water in/out valves)
+## Prerequisites
+
+To be able to connect to your TOLO system via Home Assistant, you need to have the TOLO App Control Box, which is also required to be able to control your TOLO system using your mobile phone.
+Connect the TOLO App Control Box to your network.
+For auto detection, your Home Assistant instance needs to be connected to the same network broadcast domain as your TOLO App Control Box (which is usually true for normal home networks).
+However, you can also manually define the IP to which the Home Assistant TOLO integration should connect to.
+Please use your router to find out the IP address of your TOLO App Control Box.
+
+
+## Features
+
+**General notice:**
+A TOLO system can be equipped with many optional accessoires, such as [lights](#light-control), [fans](#fan-control), [aroma oil injectors](#aroma-therapy), [sole nebulizer](#salt-bath) and [descaling pump](#sweeping-and-descaling).
+The TOLO system does not report back which optional accessories are attached. Therefore, the TOLO integration always provides all possible entities even if the features are not available due to missing optional accessories.
+
+
+### Sauna operating mode
+
+The TOLO integration offers a climate entity to control the general operating mode of your TOLO system.
+This can either be *Off*, *Heat*, or *Dry*.
+
+ - *Off*: Energy is shut down, the water boiler is empty (or will be emptied soon, see [Sweeping and Descaling](#sweeping-and-descaling)).
+ - *Heat*: This is the normal operating mode for enjoying your sauna or steam bath.
+ If *Power timer* is set to a value greater than zero, the TOLO system will automatically turn off after the amount of minutes configured in the *Power timer* setting.
+ If *Power timer* is set to zero, the TOLO system will run indefinitely, until it is turned off manually.
+ - *Dry*: In this mode, everything is turned off except the fan.
+ This mode can be used when shutting down the TOLO system to reduce humidity in the room.
+ After the time configured in *Fan timer* (see [Fan Control](#fan-control)) has passed, the fan and the TOLO system will automatically turn to *Off*.
+
+
+### Temperature and humidity
+
+The TOLO system allows setting a target temperature between 35°C and 60°C.
+The TOLO system will heat and continue to produce steam until the room temperature sensor reaches the configured target temperature.
+
+Target humidity can be set between 60% and 99%.
+Once the configured humidity is reached, the steam generator will stop producing steam.
+If then the humidity is below 6% (this value is hardcoded by TOLO systems and cannot be changed by the TOLO integration), the TOLO system will start to produce steam again.
+This setting is only recognized if the TOLO system is equipped with a humidity sensor (not part of the default configuration).
+If no humidity sensor is present, steam production will only depend on the temperature.
+
+
+### Light control
+
+The TOLO system allows to connect RGB LEDs, which can be controlled by the TOLO integration.
+The TOLO system provides two modes for LED operation, *manual* and *automatic*.
+
+ - *Manual*: When turned on, the RGB LEDs will stick to the same color until it is manually changed by pressing the *Next color* button.
+ - *Automatic*: When turned on, the RGB LEDs will slowly fade from one color to another.
+
+
+### Fan control
+
+The TOLO system allows to connect a fan, which can be used to reduce the humidity after the steam generation has been turned off.
+Once activated, the fan will automatically turn off between 1 and 60 minutes, depending on the *Fan timer* setting.
+
+
+### Aroma therapy
+
+The TOLO system allows to connect an aroma oil injector with slots for either one or two aroma flavors.
+When enabled, the aroma pump will work every 5 minutes for 5 seconds each.
+Unfortunately, the TOLO system does not allow to change these intervals.
+For shorter intervals between pump activations, the TOLO manual suggests to manually disable and enable *Aroma therapy*.
+
+
+### Salt bath
+
+The TOLO system allows to connect a sole nebulizer, which can be used to inject salt spray in your sauna or steam bath room to allow for a salt bath.
+Using the *Salt bath timer*, the salt bath feature can be configured to run indefinitely (set *Salt bath timer* to 0) or for a pre-defined time between 1 and 60 minutes.
+
+
+### Sweeping and descaling
+
+The TOLO system has a built-in system for sweeping and descaling.
+This feature is currently not supported by the TOLO integration and will be added in an upcoming release.
+
+
+### Diagnostic information
+
+Beside the controls described above, the TOLO integration provides following diagnostic information:
+ - *Power timer*:
+ The remaining time the TOLO system will produce steam after it has been turned on.
+ - *Fan timer*:
+ The remaining time the fan will be on after it has been turned on.
+ - *Salt bath timer*:
+ The remaining time the salt bath will be active after it has been turned on.
+ - *Tank temperature*:
+ Current temperature of the water in the water tank.
+ Should be close to 100°C when in *Heat* mode.
+ - *Water level*:
+ The current water level in the water tank.
+ This should be 0% when off and 100% when in *Heat* mode.
+ - *Water in/out valves*:
+ Indicates if the TOLO system currently lets water run in or out.
+ When starting up, *Water in valve* should be open while *Water out valve* should be closed.
+ During *Heat* operation, both valves should be normally closed except short moments where consumed water needs to be refilled.
+ When off, the *Water out valve* should remain open.
+
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/tplink.markdown b/source/_integrations/tplink.markdown
index 767e1e9f710a..6ec871c023e2 100644
--- a/source/_integrations/tplink.markdown
+++ b/source/_integrations/tplink.markdown
@@ -116,7 +116,8 @@ Devices not listed below may work but if you encounter issues submit a bug repor
- L510B
- L530E
-
+- TL135E
+
#### Light strips
- L900-5
diff --git a/source/_integrations/tplink_omada.markdown b/source/_integrations/tplink_omada.markdown
index 5c8bb88ea64e..d81801236fc1 100644
--- a/source/_integrations/tplink_omada.markdown
+++ b/source/_integrations/tplink_omada.markdown
@@ -37,7 +37,7 @@ TP-Link Omada Controller:
- OC200
- OC300
-- Software Controller.
+- Software Controller
Controller versions 5.1.0 and later are supported.
@@ -45,18 +45,17 @@ Controller versions 5.1.0 and later are supported.
### Network Switches
-- Support for enabling/disabling Power over Ethernet on a per-port basis.
-- Firmware Update entities.
+- Support for enabling/disabling Power over Ethernet on a per-port basis
+- Firmware Update
### Access Points
-- Firmware Update entities.
+- Firmware Update
### Internet Gateways
-- Firmware Update entities.
-- WAN/LAN Port connectivity sensor entities.
-
-## Device trackers
-
-- Not currently supported.
+- WAN/LAN Port connectivity sensors
+- WAN Port Online detection sensors
+- WAN Port Connect/Disconnect switches
+- LAN Port PoE activity sensor
+- Firmware Update
diff --git a/source/_integrations/transmission.markdown b/source/_integrations/transmission.markdown
index 71551d120a65..f2b88eef5bf4 100644
--- a/source/_integrations/transmission.markdown
+++ b/source/_integrations/transmission.markdown
@@ -84,40 +84,40 @@ All Transmission services require integration `entry_id`. To find it, go to Deve
### Service `add_torrent`
-Adds a new torrent to download. It can either be a URL (HTTP, HTTPS or FTP), magnet link or a local file (make sure that the path is [white listed](/docs/configuration/basic/#allowlist_external_dirs)).
+Adds a new torrent to download. It can either be a URL (HTTP, HTTPS or FTP), magnet link or a local file (make sure that the path is [white listed](/integrations/homeassistant/#allowlist_external_dirs)).
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entry_id` | no | The integration entry_id
-| `torrent` | no | Torrent to download
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------ |
+| `entry_id` | no | The integration entry_id |
+| `torrent` | no | Torrent to download |
### Service `remove_torrent`
Removes a torrent from the client.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entry_id` | no | The integration entry_id
-| `id` | no | ID of the torrent, can be found in the `torrent_info` attribute of the `*_torrents` sensors
-| `delete_data` | yes | Delete torrent data (Default: false)
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------- |
+| `entry_id` | no | The integration entry_id |
+| `id` | no | ID of the torrent, can be found in the `torrent_info` attribute of the `*_torrents` sensors |
+| `delete_data` | yes | Delete torrent data (Default: false) |
### Service `start_torrent`
Starts a torrent.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entry_id` | no | The integration entry_id
-| `id` | no | ID of the torrent, can be found in the `torrent_info` attribute of the `*_torrents` sensors
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------- |
+| `entry_id` | no | The integration entry_id |
+| `id` | no | ID of the torrent, can be found in the `torrent_info` attribute of the `*_torrents` sensors |
### Service `stop_torrent`
Stops a torrent.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entry_id` | no | The integration entry_id
-| `id` | no | ID of the torrent, can be found in the `torrent_info` attribute of the `*_torrents` sensors
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------- |
+| `entry_id` | no | The integration entry_id |
+| `id` | no | ID of the torrent, can be found in the `torrent_info` attribute of the `*_torrents` sensors |
## Templating
diff --git a/source/_integrations/tts.markdown b/source/_integrations/tts.markdown
index c3f4e8bc0004..e0258a107865 100644
--- a/source/_integrations/tts.markdown
+++ b/source/_integrations/tts.markdown
@@ -12,6 +12,17 @@ ha_quality_scale: internal
ha_platforms:
- notify
ha_integration_type: entity
+related:
+ - url: https://www.home-assistant.io/integrations/#text-to-speech
+ title: List of integrations using the TTS integration
+ - url: https://www.nabucasa.com/config/tts/
+ title: TTS with Home Assistant Cloud
+ - url: https://www.home-assistant.io/integrations/google_translate/
+ title: Google Translate TTS
+ - url: https://www.home-assistant.io/integrations/microsoft/
+ title: Microsoft TTS
+ - url: https://www.home-assistant.io/voice_control/
+ title: Home Assistant Assist
---
Text-to-speech (TTS) enables Home Assistant to speak to you.
@@ -122,7 +133,7 @@ $ curl -X POST -H "Authorization: Bearer " \
-Depending on your setup, you might need to set an external URL (`external_url`) inside the [configuration](/docs/configuration/basic/).
+Depending on your setup, you might need to set an external URL (`external_url`) inside the [configuration](/integrations/homeassistant/#external_url).
@@ -143,11 +154,3 @@ The Google cast devices (Google Home, Chromecast, etc.) present the following pr
- They do not work with URLs that contain hostnames established by local naming means. Let's say your Home Assistant instance is running on a machine made known locally as `ha`. All your machines on your local network are able to access it as `ha`. However, try as you may, your cast device won't download the media files from your `ha` machine. That's because your cast device ignores your local naming setup. In this example, the `say` service creates a URL like `http://ha/path/to/media.mp3` (or `https://...` if you are using SSL). If you are _not_ using SSL then setting an internal URL that contains the IP address of your server works around this issue. By using an IP address, the cast device does not have to resolve the hostname.
- If you are using SSL (e.g., `https://yourhost.example.org/...`) then you _must_ use the hostname in the certificate (e.g., `external_url: https://yourhost.example.org`). You cannot use an IP address since the certificate won't be valid for the IP address, and the cast device will refuse the connection.
-
-### Related topics
-
-- [List of integrations using the TTS integration](https://www.home-assistant.io/integrations/#text-to-speech)
-- [TTS with Home Assistant Cloud](https://www.nabucasa.com/config/tts/)
-- [Google Translate TTS](https://www.home-assistant.io/integrations/google_translate/)
-- [Microsoft TTS](https://www.home-assistant.io/integrations/microsoft/)
-- [Home Assistant Assist](https://www.home-assistant.io/voice_control/)
diff --git a/source/_integrations/twilio.markdown b/source/_integrations/twilio.markdown
index 9a9f7e706ad5..22e8cdf8afef 100644
--- a/source/_integrations/twilio.markdown
+++ b/source/_integrations/twilio.markdown
@@ -41,7 +41,7 @@ auth_token:
After configuring the base Twilio integration, add and configure either or both of the [Twilio SMS](/integrations/twilio_sms) and [Twilio Phone](/integrations/twilio_call) integrations to utilize the notification functionality.
-To be able to receive events from Twilio, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/docs/configuration/basic) in Home Assistant.
+To be able to receive events from Twilio, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/integrations/homeassistant/#external_url) in Home Assistant.
To set it up, go to the integrations page in the configuration screen and find Twilio. Click on configure. Follow the instructions on the screen to configure Twilio.
diff --git a/source/_integrations/twitch.markdown b/source/_integrations/twitch.markdown
index 2e07e18c2f48..f6dcd84459ba 100644
--- a/source/_integrations/twitch.markdown
+++ b/source/_integrations/twitch.markdown
@@ -18,6 +18,10 @@ The Twitch integration will allow you to monitor [Twitch](https://www.twitch.tv/
## Get Twitch application credentials
-Create a new app at **Register Your Application** in the [Twitch developer portal](https://dev.twitch.tv/console/apps). Enter `https://my.home-assistant.io/redirect/oauth` in the **OAuth Redirect URL** field. Then, get the **Client ID** and **Client secret** from the new application.
+Create a new app at **Register Your Application** in the [Twitch developer portal](https://dev.twitch.tv/console/apps):
+
+- Enter a **Name** for your app. Note that it needs to be unique all over Twitch.
+- Enter `https://my.home-assistant.io/redirect/oauth` in the **OAuth Redirect URL** field.
+- Get the **Client ID** and **Client secret** from the new application, you need them to complete the integration setup in Home Assistant.
{% include integrations/config_flow.md %}
diff --git a/source/_integrations/unifi.markdown b/source/_integrations/unifi.markdown
index 64bbe58f4a79..e19dcac1b961 100644
--- a/source/_integrations/unifi.markdown
+++ b/source/_integrations/unifi.markdown
@@ -34,6 +34,7 @@ There is currently support for the following device types within Home Assistant:
- [Button](#button)
- [Image](#image)
- [Presence detection](#presence-detection)
+- [Services](#services)
- [Switch](#switch)
- [Sensor](#sensor)
- [Firmware updates](#firmware-updates)
diff --git a/source/_integrations/unifiprotect.markdown b/source/_integrations/unifiprotect.markdown
index 664685f6c99b..93dfad061be0 100644
--- a/source/_integrations/unifiprotect.markdown
+++ b/source/_integrations/unifiprotect.markdown
@@ -262,6 +262,15 @@ Use to set the paired doorbell(s) with a smart chime.
| `device_id` | No | The device ID of the Chime you want to pair or unpair doorbells to. |
| `doorbells` | Yes | A target selector for any number of doorbells you want to pair to the chime. No value means unpair all. |
+### Service unifiprotect.remove_privacy_zone
+
+Use to remove a privacy zone from a camera.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------- |
+| `device_id` | No | Camera you want to remove privacy zone from. |
+| `name` | No | The name of the zone to remove. |
+
## Views
The {% term integrations %} provides two proxy views to proxy media content from your Home Assistant instance so you can access thumbnails and video clips from within the context of Home Assistant without having to expose your UniFi Protect NVR Console. As with the media identifiers, all IDs are UniFi Protect IDs as they may not map to specific Home Assistant entities depending on how you have configured your {% term integrations %}.
diff --git a/source/_integrations/universal.markdown b/source/_integrations/universal.markdown
index 5838f0199e36..b2fb1e6959d1 100644
--- a/source/_integrations/universal.markdown
+++ b/source/_integrations/universal.markdown
@@ -327,6 +327,61 @@ media_player:
{% endraw %}
+### Denon AVR & HEOS
+
+This media player combines the media players provided by the [Denon AVR](/integrations/denonavr/) and [HEOS](/integrations/heos/) integrations.
+
+Features:
+- Volume control via Denon entity (might be more fine-granular than HEOS volume control)
+- ON/OFF button via Denon entity (not provided by HEOS media player)
+- Sound mode selector via Denon entity (not provided by HEOS media player)
+- Album art & Metadata via HEOS entity (not provided by Denon media player)
+
+The complete configuration is:
+
+{% raw %}
+
+```yaml
+media_player:
+ - platform: universal
+ name: Denon
+ unique_id: denon_universal_remote
+ device_class: receiver
+ children:
+ - media_player.denon_avr_x2700h # Denon AVR Integration entity
+ - media_player.denon_avr_x2700h_heos # Denon HEOS Integration entity
+ browse_media_entity: media_player.denon_avr_x2700h_heos
+ commands:
+ turn_off:
+ service: media_player.turn_off
+ data:
+ entity_id: media_player.denon_avr_x2700h
+ turn_on:
+ service: media_player.turn_on
+ data:
+ entity_id: media_player.denon_avr_x2700h
+ volume_up:
+ service: media_player.volume_up
+ data:
+ entity_id: media_player.denon_avr_x2700h
+ volume_down:
+ service: media_player.volume_down
+ data:
+ entity_id: media_player.denon_avr_x2700h
+ select_sound_mode:
+ service: media_player.select_sound_mode
+ target:
+ entity_id: media_player.denon_avr_x2700h
+ data:
+ sound_mode: "{{ sound_mode }}"
+ attributes:
+ sound_mode: media_player.denon_avr_x2700h|sound_mode
+ sound_mode_raw: media_player.denon_avr_x2700h|sound_mode_raw
+ sound_mode_list: media_player.denon_avr_x2700h|sound_mode_list
+```
+
+{% endraw %}
+
### Override active children
This example shows how you can use `active_child_template`:
diff --git a/source/_integrations/vallox.markdown b/source/_integrations/vallox.markdown
index 9f6ca5306bf3..66479c717028 100644
--- a/source/_integrations/vallox.markdown
+++ b/source/_integrations/vallox.markdown
@@ -11,6 +11,7 @@ ha_iot_class: Local Polling
ha_domain: vallox
ha_platforms:
- binary_sensor
+ - date
- fan
- number
- sensor
diff --git a/source/_integrations/velux.markdown b/source/_integrations/velux.markdown
index 227140ccba9b..430906870ca8 100644
--- a/source/_integrations/velux.markdown
+++ b/source/_integrations/velux.markdown
@@ -30,6 +30,13 @@ There is currently support for the following device types within Home Assistant:
{% include integrations/config_flow.md %}
+During configuration, you will be asked for a hostname and password:
+
+- Hostname: enter the IP address of the KLF 200 gateway.
+- Password: enter the password of the gateway's wireless access point (printed on the underside - **not** the web login password).
+
+You must complete the configuration within 5 minutes of rebooting the KLF 200 gateway while the access point is still available.
+
## Services
### Service `velux.reboot_gateway`
diff --git a/source/_integrations/vivotek.markdown b/source/_integrations/vivotek.markdown
index f1eb47af9be4..1fade9eb67fc 100644
--- a/source/_integrations/vivotek.markdown
+++ b/source/_integrations/vivotek.markdown
@@ -108,11 +108,11 @@ Available services: `enable_motion_detection`, `disable_motion_detection`, `snap
Play a live stream from a camera to selected media player(s). Requires [`stream`](/integrations/stream) {% term integration %} to be set up.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | no | Name of {% term entity %} to fetch stream from, e.g., `camera.front_door_camera`. |
-| `media_player` | no | Name of media player to play stream on, e.g., `media_player.living_room_tv`. |
-| `format` | yes | Stream format supported by `stream` {% term integration %} and selected `media_player`. Default: `hls` |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------ |
+| `entity_id` | no | Name of {% term entity %} to fetch stream from, e.g., `camera.front_door_camera`. |
+| `media_player` | no | Name of media player to play stream on, e.g., `media_player.living_room_tv`. |
+| `format` | yes | Stream format supported by `stream` {% term integration %} and selected `media_player`. Default: `hls` |
For example, the following action in an automation would send an `hls` live stream to your chromecast.
@@ -129,28 +129,28 @@ action:
Enable motion detection in a camera. Currently, this will enable the first event configured on the camera.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | yes | Name(s) of entities to enable motion detection, e.g., `camera.front_door_camera`. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | --------------------------------------------------------------------------------- |
+| `entity_id` | yes | Name(s) of entities to enable motion detection, e.g., `camera.front_door_camera`. |
#### Service `disable_motion_detection`
Disable the motion detection in a camera. Currently, this will disable the first event configured on the camera.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | yes | Name(s) of entities to disable motion detection, e.g., `camera.front_door_camera`. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ---------------------------------------------------------------------------------- |
+| `entity_id` | yes | Name(s) of entities to disable motion detection, e.g., `camera.front_door_camera`. |
#### Service `snapshot`
Take a snapshot from a camera.
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.front_door_camera`. |
-| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/snapshot_{{ entity_id }}`{% endraw %}. |
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------- |
+| `entity_id` | no | Name(s) of entities to create a snapshot from, e.g., `camera.front_door_camera`. |
+| `filename` | no | Template of a file name. Variable is `entity_id`, e.g., {% raw %}`/tmp/snapshot_{{ entity_id }}`{% endraw %}. |
-The path part of `filename` must be an entry in the `allowlist_external_dirs` in your [`homeassistant:`](/docs/configuration/basic/) section of your `configuration.yaml` file.
+The path part of `filename` must be an entry in the `allowlist_external_dirs` in your [`homeassistant:`](/integrations/homeassistant/#allowlist_external_dirs) section of your `configuration.yaml` file.
For example, the following action is an automation that would take a snapshot from "front_door_camera" and save it to /tmp with a timestamped filename.
diff --git a/source/_integrations/weather.template.markdown b/source/_integrations/weather.template.markdown
index 3787862b5f1c..b5c8c7cb6551 100644
--- a/source/_integrations/weather.template.markdown
+++ b/source/_integrations/weather.template.markdown
@@ -34,7 +34,7 @@ weather:
temperature_template: "{{ states('sensor.temperature') | float }}"
temperature_unit: "°C"
humidity_template: "{{ states('sensor.humidity') | float }}"
- forecast_daily_template: "{{ state_attr('weather.my_region', 'forecast') }}"
+ forecast_daily_template: "{{ state_attr('weather.my_region', 'forecast_data') }}"
```
{% endraw %}
@@ -116,10 +116,6 @@ visibility_unit:
description: Unit for visibility_template output. Valid options are km, mi, ft, m, cm, mm, in, yd.
required: false
type: string
-forecast_template:
- description: Forecast data.
- required: false
- type: template
forecast_daily_template:
description: Daily forecast data.
required: false
diff --git a/source/_integrations/webmin.markdown b/source/_integrations/webmin.markdown
index f37204eca78b..24ac6e982dc1 100644
--- a/source/_integrations/webmin.markdown
+++ b/source/_integrations/webmin.markdown
@@ -11,6 +11,7 @@ ha_codeowners:
ha_domain: webmin
ha_integration_type: device
ha_platforms:
+ - diagnostics
- sensor
---
diff --git a/source/_integrations/whirlpool.markdown b/source/_integrations/whirlpool.markdown
index 5629b5f13f77..7ef99e50b5dd 100644
--- a/source/_integrations/whirlpool.markdown
+++ b/source/_integrations/whirlpool.markdown
@@ -13,6 +13,7 @@ ha_codeowners:
ha_domain: whirlpool
ha_platforms:
- climate
+ - diagnostics
- sensor
ha_integration_type: hub
---
@@ -27,7 +28,7 @@ There is currently support for the following device types within Home Assistant:
## Supported hardware
-The following air conditioners are confirmed to be working, but other models that use the 6th Sense Live application may also work:
+The following appliances are confirmed to be working, but other models that use the 6th Sense Live application may also work:
Climate:
@@ -37,6 +38,7 @@ Climate:
Washer:
- WTW6120HW2
+- MHW8630HW0
Dryer:
diff --git a/source/_integrations/whisper.markdown b/source/_integrations/whisper.markdown
index 9298b2de6db4..d60b91aa302e 100644
--- a/source/_integrations/whisper.markdown
+++ b/source/_integrations/whisper.markdown
@@ -19,6 +19,7 @@ ha_platforms:
- stt
- switch
- tts
+ - wake_word
ha_iot_class: Local Push
ha_zeroconf: true
---
diff --git a/source/_integrations/withings.markdown b/source/_integrations/withings.markdown
index 9fbc0ee4abe6..2bbf743b617b 100644
--- a/source/_integrations/withings.markdown
+++ b/source/_integrations/withings.markdown
@@ -57,6 +57,8 @@ Withings will validate (with HTTP HEAD) these requirements each time you save yo
{% enddetails %}
+Note: You will only need one developer account; the same account and credentials are used for each Withings configuration.
+
{% include integrations/config_flow.md %}
## Data updates
diff --git a/source/_integrations/xiaomi_ble.markdown b/source/_integrations/xiaomi_ble.markdown
index d65c92aa52fc..43a3c6fe7b85 100644
--- a/source/_integrations/xiaomi_ble.markdown
+++ b/source/_integrations/xiaomi_ble.markdown
@@ -20,16 +20,12 @@ ha_platforms:
ha_integration_type: integration
---
-Integrates devices that implement the Xiaomi Mijia BLE MiBeacon protocol and the BLE protocols implemented in the MiScales and the MiFora plant sensor. The integration listens to Bluetooth broadcasts that the device makes by itself, allowing it to track the latest sensor values or events without waking the device up for polling. This method conserves battery lifetime.
+Integrates devices that use the Xiaomi Mijia BLE MiBeacon protocol and the BLE protocols implemented in the MiScales and the MiFora plant sensor. This integration does not support Xiaomi BLE Mesh devices. The integration listens to Bluetooth broadcasts that the device makes by itself, allowing it to track the latest sensor values or events without waking the device up for polling (except HHCCJCY01, see note below). This method conserves battery lifetime.
The integration automatically discovers devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional. The entities are added after the values are first received. This means that entities might show up later if the corresponding values are broadcasted at a lower interval (for example, battery).
{% include integrations/config_flow.md %}
-## Supported devices
-
-From the devices that support the Xiaomi Mijia BLE MiBeacon protocol, currently locks are not implemented yet. This integration also does not support Xiaomi BLE Mesh devices.
-
## Encryption
Some devices use AES encryption to protect the sensor values they are broadcasting.
@@ -63,3 +59,5 @@ Flower Care firmware update steps:
- Wait for the synchronization of the sensor to finish, and a dialog asking for a firmware update should appear (this might take a few minutes)
- The installed and latest firmware version can be verified by selecting the plant -> three-dot menu -> Hardware settings -> Hardware update
- The Flower Care account and app are not required any further for this integration to work
+
+Also note that the battery level of the plant sensor can only be retrieved by connecting to the device (reading characteristics), while the other sensor data is broadcasted passively. To prevent battery drainage, a connection is made only once a day. Connecting to the device also requires that the device has a good signal strength.
diff --git a/source/_integrations/yolink.markdown b/source/_integrations/yolink.markdown
index 5640db460ed0..e84ad1c4a671 100644
--- a/source/_integrations/yolink.markdown
+++ b/source/_integrations/yolink.markdown
@@ -27,6 +27,7 @@ ha_platforms:
- sensor
- siren
- switch
+ - valve
ha_integration_type: integration
---
@@ -78,6 +79,7 @@ The integration is tested and verified for the following devices from YoLink:
- YS6704-UC (In-wall Outlet)
- YS6801-UC (Smart Power Strip)
- YS6802-UC (Smart Outdoor Power Strip)
+- YS6803-UC (Outdoor Energy Plug)
- YS7103-UC (Siren Alarm)
- YS7104-UC (Outdoor Alarm Controller)
- YS7105-UC (X3 Outdoor Alarm Controller)
@@ -95,6 +97,7 @@ The integration is tested and verified for the following devices from YoLink:
- YS7904-UC (Water Leak Sensor 2)
- YS7906-UC (Water Leak Sensor 4)
- YS7916-UC (Water Leak Sensor 4 MoveAlert)
+- YS7905-UC (WaterDepthSensor)
- YS7A01-UC (Smart Smoke/CO Alarm)
- YS8003-UC (Temperature Humidity Sensor)
- YS8004-UC (Weatherproof Temperature Sensor)
@@ -102,3 +105,6 @@ The integration is tested and verified for the following devices from YoLink:
- YS8006-UC (X3 Temperature & Humidity Sensor)
- YS8014-UC (X3 Outdoor Temperature Sensor)
- YS8015-UC (X3 Outdoor Temperature & Humidity Sensor)
+- YS5006-UC (FlowSmart Control)
+- YS5007-UC (FlowSmart Meter)
+- YS5008-UC (FlowSmart All-in-One)
diff --git a/source/_integrations/zha.markdown b/source/_integrations/zha.markdown
index 29eb3f8e7b2d..d12151c816d7 100644
--- a/source/_integrations/zha.markdown
+++ b/source/_integrations/zha.markdown
@@ -106,6 +106,7 @@ Some other Zigbee coordinator hardware may not support a firmware that is capabl
- [CC2652P/CC2652R/CC2652RB USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/guide/adapters/)
- [CC1352P/CC1352R USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/guide/adapters/)
- dresden elektronik deCONZ based Zigbee radios (via the [zigpy-deconz](https://github.com/zigpy/zigpy-deconz) library for zigpy)
+ - [ConBee III (a.k.a. ConBee 3) USB adapter from dresden elektronik](https://phoscon.de/conbee3)
- [ConBee II (a.k.a. ConBee 2) USB adapter from dresden elektronik](https://phoscon.de/conbee2)
- [RaspBee II (a.k.a. RaspBee 2) Raspberry Pi Shield from dresden elektronik](https://phoscon.de/raspbee2)
diff --git a/source/_integrations/zwave_js.markdown b/source/_integrations/zwave_js.markdown
index 9e8e9e6f046c..307c8723d895 100644
--- a/source/_integrations/zwave_js.markdown
+++ b/source/_integrations/zwave_js.markdown
@@ -59,7 +59,7 @@ To run a Z-Wave network, you need the following elements:
### Setting up a Z-Wave JS server
-If you are running Home Assistant Operating System or Home Assistant Supervised, the easiest way to get started is by using the built-in Z-Wave JS add-on in Home Assistant.
+If you are running {% term "Home Assistant Operating System" %} or {% term "Home Assistant Supervised" %}, the easiest way to get started is by using the built-in Z-Wave JS add-on in Home Assistant.
For other ways to setup a Z-Wave server, refer to the [advanced installation instructions](#advanced-installation-instructions).
@@ -726,13 +726,13 @@ The chart below illustrates Options 1 and 2, which are available for Home Assist
**Option 1: The official Z-Wave JS add-on, as described above**
-_This option is only available for Home Assistant OS (the recommended installation type) and Home Assistant Supervised installations._
+_This option is only available for {% term "Home Assistant Operating System" %} (the recommended installation type) and {% term "Home Assistant Supervised" %} installations._
This add-on can only be configured via the built-in Z-Wave control panel in Home Assistant. If you followed the standard [installation procedure](#setting-up-a-z-wave-js-server), this is how you are running the Z-Wave JS server.
**Option 2: The Z-Wave JS UI add-on installed from the community add-on store**
-_This option is only available for Home Assistant OS (the recommended installation type) and Home Assistant Supervised installations._
+_This option is only available for {% term "Home Assistant Operating System" %} (the recommended installation type) and {% term "Home Assistant Supervised" %} installations._
This add-on includes the Z-Wave JS Server as part of the Z-Wave JS UI application. The Z-Wave network can be configured via the built-in Z-Wave control panel in Home Assistant and alternatively via the Z-Wave control panel built into Z-Wave JS UI. It provides you with a full-fledged, attractive, and feature-complete UI to manage your Z-Wave nodes and settings, which may support more advanced use cases as development continues on the Z-Wave control panel.
diff --git a/source/_layouts/page.html b/source/_layouts/page.html
index 7d320b83a069..fb1122d4cff6 100644
--- a/source/_layouts/page.html
+++ b/source/_layouts/page.html
@@ -35,5 +35,6 @@
{% endif %}
{{ content }}
+ {% include related.html %}
{% include feedback.html %}
diff --git a/source/_posts/2024-04-03-release-20244.markdown b/source/_posts/2024-04-03-release-20244.markdown
new file mode 100644
index 000000000000..64d6213de5b8
--- /dev/null
+++ b/source/_posts/2024-04-03-release-20244.markdown
@@ -0,0 +1,1052 @@
+---
+layout: post
+title: "2024.4: Organize all the things!"
+description: "Time for spring cleaning 🧹 Introducing new ways to organize your automations (and more) with floors, labels, and categories. Easily add Matter devices from other controllers, and two brand new map and webpage dashboards."
+date: 2024-04-03 00:00:00
+date_formatted: "April 3, 2024"
+author: Franck Nijhof
+author_twitter: frenck
+comments: true
+categories:
+ - Release-Notes
+ - Core
+og_image: /images/blog/2024-04/social.png
+---
+
+
+
+Home Assistant Core 2024.4! 🌱 🌻
+
+Are you ready for another massive release? This release addresses the most
+requested feature in Home Assistant history: grouping automations! 🎉
+
+But why stop there?
+
+This release brings excellent new features to our user interface that house not
+one, not two, but three! new ways to organize your Home Assistant setup!
+The best part is that it is not just for automations, but for everything! 🤯
+
+Perfect timing: spring is here! Time to spring clean your Home Assistant
+setup by adding some organization to your configuration! 🧹
+
+Enjoy the release! 🌞
+
+../Frenck
+
+
+
+- [Home Assistant spring cleaning! 🧹 New ways to get your automations (and more) organized](#home-assistant-spring-cleaning--new-ways-to-get-your-automations-and-more-organized)
+- [Upgraded tables!](#upgraded-tables)
+ - [A new toolbar](#a-new-toolbar)
+ - [Filter panel](#filter-panel)
+ - [Item grouping](#item-grouping)
+ - [Selection mode and batch actions](#selection-mode-and-batch-actions)
+- [Three new ways to organize](#three-new-ways-to-organize)
+ - [Floors: Help Home Assistant understand your house](#floors-help-home-assistant-understand-your-house)
+ - [Labels: Tag everything any way you want](#labels-tag-everything-any-way-you-want)
+ - [Categories: Make each settings page easier to browse](#categories-make-each-settings-page-easier-to-browse)
+ - [Time to clean up your Home Assistant!](#time-to-clean-up-your-home-assistant)
+- [Map dashboard](#map-dashboard)
+- [Webpage dashboard](#webpage-dashboard)
+- [Define the columns in the section view](#define-the-columns-in-the-section-view)
+- [Adding Matter devices from other controllers](#adding-matter-devices-from-other-controllers)
+- [Lock behavior improvements](#lock-behavior-improvements)
+- [Even more performance!](#even-more-performance)
+- [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.4.1 - April 5](#release-202441---april-5)
+- [Release 2024.4.2 - April 8](#release-202442---april-8)
+- [Release 2024.4.3 - April 12](#release-202443---april-12)
+- [Release 2024.4.4 - April 23](#release-202444---april-23)
+- [Need help? Join the community!](#need-help-join-the-community)
+- [Backward-incompatible changes](#backward-incompatible-changes)
+- [Farewell to the following](#farewell-to-the-following)
+- [All changes](#all-changes)
+
+Don't forget to [join our release party live stream on YouTube](https://www.youtube.com/watch?v=Q1yHfqsVidw)
+3 April 2024, at 20:00 GMT / 12:00 PST / 21:00 CEST!
+
+
+
+## Home Assistant spring cleaning! 🧹 New ways to get your automations (and more) organized
+
+By far, the most requested feature in Home Assistant history would be:
+
+[_"Grouping Automations on frontend for organization"_](https://community.home-assistant.io/t/grouping-automations-on-frontend-for-organization/102771).
+
+We hear you! Today, in this release, we are going to give you tools to organize
+your Home Assistant setup, and we took it a few (well, many) steps further than
+just grouping {% term automations %}!
+
+We are introducing 3 (yes, you’ve read it correctly. It’s _three_) organization
+taxonomies, and we revamped our entire table user interface plus a few goodies
+along the way.
+
+## Upgraded tables!
+
+Adding more ways to organize your Home Assistant is great! But being able to
+easily view, filter, and navigate information is just as important. To achieve
+this, we have re-designed ALL the tables in Home Assistant.
+
+For an admin interface, tables are essential for visualizing and managing
+large datasets. Home Assistant has many tables in its settings pages.
+Previously, our UI provided the ability to search, sort, and filter for a few
+aspects, but it was relatively barebones.
+
+Today, we are rolling out a revamped table UI that will be standardized across
+**all** tables in the settings pages with new and improved features.
+
+### A new toolbar
+
+As we add more features to the tables, we need to keep the UI clean and its
+features easy to find. Therefore, we added descriptive text to the dropdown
+menus and standardized the look and feel of the toolbar buttons and text boxes.
+Shiny!
+
+
+
+ The new toolbar that is now on every table in Home Assistant.
+
+
+### Filter panel
+
+Previously, our automations page allowed you to filter by {% term areas %},
+{% term entities %}, or {% term devices %}, but only one at a time, and the
+filters were tucked away in a dropdown menu, which meant you needed to select
+a dropdown menu inside a dropdown menu to filter by area.
+
+A new filter panel fixes these issues by providing a new dual pane user
+interface that can let you check multiple filters across multiple filter
+types on the left that stay put and view the filtered results on the right.
+
+
+
+We also introduced multiple new filter types for each table. For example,
+{% term automations %} can now be filtered not only by {% term areas %},
+{% term entities %} , or {% term devices %}, but also by used
+{% term blueprints %}, labels, and categories (more on these later!).
+
+We didn’t stop at just that page! The devices and entities pages now also have
+a way to filter not only by state but also by integrations and areas. Almost all
+tables now have useful new filters to help you find what you are looking for.
+
+### Item grouping
+
+Browsing a list of hundreds of {% term automations %} or thousands of
+{% term entities %} can be overwhelming. While filters can help narrow the list,
+visually grouping the items into smaller chunks makes browsing easier.
+
+With the item grouping feature, we introduced a new dropdown menu to pick
+how you’d like the items on the table to be grouped. On the automations page,
+you can group automations by their {% term state %} - whether enabled
+or not - and custom categories (more on that later!). On the {% term devices %}
+page, you can even group them by manufacturers, {% term areas %},
+or {% term integrations %}, which is really cool because it makes the page much
+easier to browse. It gives you a new perspective on organizing your vast
+network of devices.
+
+
+
+### Selection mode and batch actions
+
+We removed the clutter of displaying a column of checkboxes by introducing
+a new selection mode. When it is toggled on, checkboxes will appear, and you
+can apply actions to all your selections with one click on the toolbar.
+
+
+
+ This button enables selection mode in the new tables.
+
+
+It allows you to, for example, enable or disable multiple selected
+{% term entities %} on the entities page at once. This new paradigm will allow
+us to introduce more batch management actions in the future.
+
+
+
+## Three new ways to organize
+
+Upon reading through and ideating on the feature request thread on
+[“Automation Grouping”](https://community.home-assistant.io/t/grouping-automations-on-frontend-for-organization/102771),
+we realized that organization can be done in multiple ways for different purposes.
+
+We learned that users who are proficient in making {% term automations %} have
+hundreds of them, which makes locating a particular automation hard. They often
+had to resort to using "hacks" such as emojis, bracketed “tags”, or numbering
+each automation to get the sort order they wanted. They needed a way to easily
+filter down and break down the giant list into more manageable chunks.
+
+We also noticed that users are stretching our areas feature beyond its
+intended purpose. For example, some users would create “{% term areas %}” such
+as “3D printer”, “Christmas decorations”, or even “Left side of my office desk”,
+to group different {% term devices %} and {% term entities %} together under
+one umbrella for dashboards or {% term automations %}.
+
+As we are developing our new dashboards and voice commands, this poses a
+big problem: We would be unable to provide specialized solutions if a dashboard
+{% term blueprint %} or automation blueprint cannot confidently assume the context of
+how it would be used. We need something more specialized.
+
+Therefore, to balance the basic goal of providing a more digestible UI for
+all users, the need for flexibility for our power users, and the future vision
+of Home Assistant, we are introducing 3 new organization structures to
+Home Assistant:
+
+**[Floors](#floors-help-home-assistant-understand-your-house)**,
+**[Labels](#labels-tag-everything-any-way-you-want)**,
+and **[Categories](#categories-make-each-settings-page-easier-to-browse)**
+
+### Floors: Help Home Assistant understand your house
+
+Let's talk about the new organizational structures, starting with **floors**.
+
+To become a truly intelligent home automation platform, Home Assistant needs
+to understand the context: Where exactly is a {% term device%}? How does one
+{%term area %} relate to another? What is the space used for?
+
+Currently, Home Assistant has {% term areas %}. Areas specify the physical
+location or vicinity of your devices per living space in your home
+(like the living room or kitchen). However, some users living in standalone
+houses might have multiple floors with their own areas.
+
+{% term Floors %} are a new way to organize your areas per level of floors in
+your home. The better Home Assistant knows your home and how it is spatially
+structured, the better it can help you. Especially when it comes to future
+features like generating dashboards, voice commands, and maybe even
+AI-related features.
+
+
+
+You can use floors in your {% term automations %} and {% term scripts %} as a
+target for your actions or control them with your voice. For example, you can
+turn off all the lights on the downstairs floor when you go to bed or ask
+[Assist](/voice_control/) to turn on the lights upstairs.
+
+For our power users, you can even use [floors in your templates](/docs/configuration/templating/#floors)
+to create the most advanced and creative automations.
+
+{% my areas badge %}
+
+### Labels: Tag everything any way you want
+
+{% term Floors %} and {% term areas %} are great for representing your actual
+home, but as everyone has their own ways of organizing their home, everyone
+has their own ways of organizing their Home Assistant, too!
+This is where **labels** 🏷️ come in!
+
+Labels is an organizational structure that is completely up to you. You can
+make as many labels with any naming structure, in any color 🌈 you want, and
+assign them to basically anything in Home Assistant. You assign labels to
+anything: {% term areas %}, {% term devices %}, {% term entities %},
+{% term automations %}, {% term scripts %}, helpers, you name it!
+You can even assign multiple labels to the same thing.
+
+
+
+Just like with floors, you can use labels in your automations and scripts as
+a target for your {% term actions %}. This gives you a lot of flexibility,
+not just in organizing your Home Assistant, but also in automating your home! 🤯
+
+For example, you could create a label "🎄 Christmas" to label all your
+Christmas decorations during the holiday season. You can then use this label to
+automate all of those decorations at once or to filter them in the new tables.
+
+More examples? You could create a label "🔒 Security" to label and control all
+your security-related devices and automations. Or, "🛌 Bedrooms" to label all
+your bedroom areas and simultaneously control all the devices in those areas.
+
+Do you have solar panels or home batteries? Create a label "⚡️ Heavy energy usage"
+to label devices that consume a lot of energy. You could switch them off when
+there is not enough battery or solar energy available.
+
+You decide how to use labels, and the possibilities are endless! And for our
+power users, you guessed it, you can use [labels in your templates](/docs/configuration/templating/#labels).
+
+{% my labels badge %}
+
+### Categories: Make each settings page easier to browse
+
+Last but not least, we are introducing **categories**. Categories are designed
+to be paired with the aforementioned [item grouping feature](#item-grouping),
+and it can be used to group things visually specific to a certain table
+in Home Assistant.
+
+This is great for those who have a particular way of displaying their
+{% term entities %} by separating them into multiple sections on a specific page.
+For example, on the {% term automations %} page, you can create categories only
+used for visually grouping automations but nowhere else, like "Notifications"
+or “NFC tags”. You can then view your automations grouped or filtered by
+those categories.
+
+
+
+As these categories are unique for each dashboard, you can have different
+sets of categories depending on the place you are organizing. This means
+you can have different categories on the automations page than the
+{% term scene %}, {% term scripts %}, or helpers settings page.
+
+### Time to clean up your Home Assistant!
+
+In summary, there are a total of 4 taxonomies for organizing your entities.
+It sounds like a lot, but they all serve a distinct purpose. We are extending
+and clarifying {% term areas %} with {% term floors %}, and we are introducing
+{% term labels %} and {% term categories %} to make your {% term automations %}
+and many other tables look more organized and be more manageable.
+
+What’s next? Time to dig in! Here are a few steps we recommend you take
+action on to organize your Home Assistant better:
+
+- **Migrate to labels**:
+ - If you have been grouping automations with emojis and bracketed text,
+ you can now create labels for each. Labels can have icons to replace the
+ emojis you had before.
+ - For areas that aren’t really physical spaces, switching them to labels will
+ provide you more flexibility in organizing your entities.
+- **Start using categories**:
+ If you have a favorite way of organizing a particular page, create those
+ categories and group the table by them. For example, you could create a
+ notification category for all your notification automations and put all
+ notification automations in that category.
+- **Group your areas into floors**:
+ If you live in a multi-story home, grouping areas into floors help with
+ organizing the areas as well as making them more compatible with future
+ features.
+
+Last of all, to help us to help you to perfect the design of these new features,
+we would love to hear your feedback and see how you use them! Please feel free
+to share them in the comments below and discuss them in our community.
+
+## Map dashboard
+
+Introducing a new dashboard this release: The **map**! 🗺️
+
+You might think, "Hey, we already have a map dashboard in Home Assistant!"
+and you are right! However, the map was an integration that was always there
+and didn't provide the flexibility and features that were wanted.
+
+With the map dashboard's introduction, you can now add multiple map dashboards
+with different entities and configuration settings. For example, create a
+dashboard to show the location of your family members, another to track your
+car, and another to show the location of your pets. 🐶
+
+
+
+On upgrade, Home Assistant will automatically migrate your existing map
+integration to a map dashboard.
+
+You don't like having the map in your sidebar? Well, that is no longer a
+problem. Since it is now a dashboard it means you can remove it in the dashboard
+settings.
+
+## Webpage dashboard
+
+Another new dashboard for this release is the **webpage**! 🌐
+
+The webpage dashboard allows you to add and embed a webpage to your dashboard.
+This could be a web page from the internet or a local web page from a local
+machine or device like your router or NAS.
+
+
+
+This dashboard replaces the old iFrame panel (`iframe_panel`). If you have
+existing panels configured in your YAML configuration, Home Assistant will
+automatically migrate them to the new webpage dashboard on upgrade.
+
+
+
+Note that not every webpage can be embedded due to security restrictions that
+some sites or pages have in place, enforced by your browser, that prevent
+embedding them into a Home Assistant dashboard.
+
+## Define the columns in the section view
+
+In the last release, we [introduced the section view](/blog/2024/03/06/release-20243/#a-new-experimental-sections-view)
+with drag and drop support. We are absolutely thrilled to see how many of you
+loved it! 🥰
+
+Many thanks for all the feedback and suggestions! We are prioritizing them and
+are working on making the section view even better in the upcoming releases.
+
+In this release, based on your feedback, we have added the ability for you to
+define the maximum number of columns that the section view uses. This allows you
+to limit the number of columns, regardless of the screen width on which you
+are viewing your dashboard.
+
+
+
+## Adding Matter devices from other controllers
+
+In the [February release](/blog/2024/02/07/release-20242/#matter-diagnostics-and-actions),
+we added support for sharing Matter devices tied to Home Assistant with other
+Matter controllers. This release, we are making the other way around easier.
+
+We have improved how you can add Matter devices from other controllers to
+Home Assistant. When you add a Matter device to Home Assistant, it will now
+ask you if you want to add a new Matter device or if you want to add a device
+that is already added to another controller (like Google Home or Apple Home).
+
+
+
+Suppose you choose to add a device that has already been added to another
+controller. In that case, Home Assistant will guide you through how to
+achieve this step by step.
+
+
+
+## Lock behavior improvements
+
+Some smart locks have an open (or unlatching) mechanism that can be triggered
+remotely. The door either pops out of the lock or can be opened by pushing
+against the door.
+
+We want to ensure you don't accidentally open the door when you miss-clicked
+the button (for example, while not at home 😬). Therefore, we have improved
+the behavior of locks in our user interface by requiring you to confirm the
+action.
+
+
+
+## Even more performance!
+
+Remember how we wrote last release that [Home Assistant now boots twice as fast](/blog/2024/03/06/release-20243/#home-assistant-boots-twice-as-fast)?
+Well, [@bdraco] wasn't done yet and teamed up with [@balloob]. If you thought
+the previous release was fast, you are in for a treat! 🚀 The difference is,
+yet again, very noticeable.
+
+Besides streamlining what is loaded at startup (and doing less loading), we
+have adjusted the startup time tracking. It used to be that one integration
+could push other integrations to be slow too; that should no longer be the case,
+making this a more accurate representation of the actual startup time.
+
+Want to learn about the individual startup times of your integrations? You can
+find them in the {% my repairs title="**Settings** -> **System** -> **Repairs**" %}
+page by selecting the three-dotted menu in the top right and selecting the
+**Integration startup time** item.
+
+{% my repairs badge %}
+
+[@bdraco]: https://github.com/bdraco
+[@balloob]: https://github.com/balloob
+
+## Other noteworthy changes
+
+There are many more improvements in this release; here are some of the other
+noteworthy changes this release:
+
+- [@karwosts] has improved your Home Assistant {% my profile title="user profile" %}
+ page, making navigating and finding the settings you are looking for easier.
+ Nice work!
+- If you use a [sentence trigger] in your automation to trigger it using
+ [Assist]. The trigger will now include the `device_id` in its trigger data
+ you can automate with. Thanks, [@synesthesiam]!
+- The [HomeWizard Energy] integration now supports the newest generation of
+ HomeWizard Energy Sockets! Thanks, [@DCSBL]!
+- We can now ship new releases of Home Assistant in waaay less time.
+ Building and shipping Home Assistant for you, went down from 1.5-2 hours to
+ just 20 minutes! 🚀 Thanks [@edenhaus]!
+ [Learn more about it in our developer blog](https://developers.home-assistant.io/blog/2024/04/03/build-images-with-uv/).
+- [Reolink] now supports PTZ patrol start/stop, package detection and controls
+ for playing quick reply messages. Thanks, [@starkillerOG]!
+- We have brand new template functions available to list [all the issues] in
+ your repairs dashboard. Thanks, [@RoboMagus]!
+- If you prefer your wind speed sensors to be in Beaufort, you are in luck!
+ You can now change the unit of measurement to Beaufort. Thanks, [@fwestenberg]!
+- The [Husqvarna Automower] integration development continues and has additional
+ new entities, including sensors, select entities, and a device tracker.
+ Thanks, [@Thomas55555]!
+- [@catsmanac] has added a sensor to monitor the battery storage attached
+ to your [Enphase Envoy]; it works with the energy dashboard! Nice!
+- The [Xiaomi BLE] integration now supports locks and fingerprint readers!
+ Awesome, [@Ernst79]!
+
+[@catsmanac]: https://github.com/catsmanac
+[@DCSBL]: https://github.com/DCSBL
+[@edenhaus]: https://github.com/edenhaus
+[@Ernst79]: https://github.com/Ernst79
+[@fwestenberg]: https://github.com/fwestenberg
+[@karwosts]: https://github.com/karwosts
+[@RoboMagus]: https://github.com/RoboMagus
+[@starkillerOG]: https://github.com/starkillerOG
+[@synesthesiam]: https://github.com/synesthesiam
+[@Thomas55555]: https://github.com/Thomas55555
+[all the issues]: /docs/configuration/templating/#issues
+[Assist]: /voice_control/
+[Enphase Envoy]: /integrations/enphase_envoy
+[HomeWizard Energy]: /integrations/homewizard
+[Husqvarna Automower]: /integrations/husqvarna_automower
+[Reolink]: /integrations/reolink
+[sentence trigger]: /docs/automation/trigger/#sentence-trigger
+[Xiaomi BLE]: /integrations/xiaomi_ble
+
+## New integrations
+
+We welcome the following new integrations in this release:
+
+- **[Fyta]**, added by [@dontinelli]
+ Monitor your plants with Fyta, a smart plant sensor that measures light,
+ temperature, humidity, and soil moisture.
+- **[Motionblinds Bluetooth]**, added by [@LennP]
+ Control your Bluetooth Low Energy Motionblinds motorized window coverings.
+- **[Ollama]**, added by [@synesthesiam]
+ Ollama a fully local AI conversation platform that can be used to create
+ custom voice assistants.
+
+[@dontinelli]: https://github.com/dontinelli
+[@LennP]: https://github.com/LennP
+[@synesthesiam]: https://github.com/synesthesiam
+[Fyta]: /integrations/fyta
+[Motionblinds Bluetooth]: /integrations/motionblinds_ble
+[Ollama]: /integrations/ollama
+
+This release also has new virtual integration. Virtual integrations are stubs
+that are handled by other (existing) integrations to help with findability.
+The following virtual integration have been added:
+
+- **[Sacramento Municipal Utility District (SMUD)]**, provided by [Opower]
+
+[Sacramento Municipal Utility District (SMUD)]: /integrations/smud
+[Opower]: /integrations/opower
+
+## Integrations now available to set up from the UI
+
+The following integrations are now available via the Home Assistant UI:
+
+- **[Lutron Homeworks]**, done by [@emontnemery]
+- **[17TRACK]**, done by [@shaiu]
+- **[Downloader]**, done by [@erwindouna]
+- **[ROVA]**, done by [@GidoHakvoort]
+
+[@emontnemery]: https://github.com/emontnemery
+[@erwindouna]: https://github.com/erwindouna
+[@GidoHakvoort]: https://github.com/GidoHakvoort
+[@shaiu]: https://github.com/shaiu
+[17TRACK]: /integrations/seventeentrack
+[Downloader]: /integrations/downloader
+[Lutron Homeworks]: /integrations/homeworks
+[ROVA]: /integrations/rova
+
+## Release 2024.4.1 - April 5
+
+- Update aioairzone-cloud to v0.4.7 ([@Noltari] - [#114761])
+- Bump myuplink dependency to 0.6.0 ([@astrandb] - [#114767])
+- Update romy to 0.0.9 ([@cdce8p] - [#114360])
+- Update romy to 0.0.10 ([@xeniter] - [#114785])
+- Fix unhandled `KeyError` during Notion setup ([@bachya] - [#114787])
+- Fix Lutron light brightness values ([@cdheiser] - [#114794])
+- Fix type cast in snmp ([@lextm] - [#114795])
+- Handle ambiguous script actions by using action map order ([@bdraco] - [#114825])
+- Bump opower to 0.4.3 ([@tronikos] - [#114826])
+- Refactor ConfigStore to avoid needing to pass config_dir ([@bdraco] - [#114827])
+- Avoid blocking IO in downloader initialization ([@joostlek] - [#114841])
+- Fix Downloader YAML import ([@joostlek] - [#114844])
+- Update frontend to 20240404.0 ([@bramkragten] - [#114859])
+- Fix Axis camera platform support HTTPS ([@Kane610] - [#114886])
+- Bump weatherflow4py to 0.2.20 ([@jeeftor] - [#114888])
+- Fix Axis reconfigure step not providing protocols as alternatives but as string ([@Kane610] - [#114889])
+- Update frontend to 20240404.1 ([@bramkragten] - [#114890])
+- Ensure all tables have the default table args in the db_schema ([@bdraco] - [#114895])
+- Reduce august polling frequency ([@bdraco] - [#114904])
+- Show correct model string in myuplink ([@astrandb] - [#114921])
+- Create right import issues in Downloader ([@joostlek] - [#114922])
+- Fix cast dashboard in media browser ([@joostlek] - [#114924])
+- Pin systembridgemodels to 4.0.4 ([@timmo001] - [#114842])
+- Fix ROVA validation ([@joostlek] - [#114938])
+
+[#114360]: https://github.com/home-assistant/core/pull/114360
+[#114761]: https://github.com/home-assistant/core/pull/114761
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114767]: https://github.com/home-assistant/core/pull/114767
+[#114785]: https://github.com/home-assistant/core/pull/114785
+[#114787]: https://github.com/home-assistant/core/pull/114787
+[#114794]: https://github.com/home-assistant/core/pull/114794
+[#114795]: https://github.com/home-assistant/core/pull/114795
+[#114825]: https://github.com/home-assistant/core/pull/114825
+[#114826]: https://github.com/home-assistant/core/pull/114826
+[#114827]: https://github.com/home-assistant/core/pull/114827
+[#114841]: https://github.com/home-assistant/core/pull/114841
+[#114842]: https://github.com/home-assistant/core/pull/114842
+[#114844]: https://github.com/home-assistant/core/pull/114844
+[#114859]: https://github.com/home-assistant/core/pull/114859
+[#114886]: https://github.com/home-assistant/core/pull/114886
+[#114888]: https://github.com/home-assistant/core/pull/114888
+[#114889]: https://github.com/home-assistant/core/pull/114889
+[#114890]: https://github.com/home-assistant/core/pull/114890
+[#114895]: https://github.com/home-assistant/core/pull/114895
+[#114904]: https://github.com/home-assistant/core/pull/114904
+[#114921]: https://github.com/home-assistant/core/pull/114921
+[#114922]: https://github.com/home-assistant/core/pull/114922
+[#114924]: https://github.com/home-assistant/core/pull/114924
+[#114938]: https://github.com/home-assistant/core/pull/114938
+[@Kane610]: https://github.com/Kane610
+[@Noltari]: https://github.com/Noltari
+[@astrandb]: https://github.com/astrandb
+[@bachya]: https://github.com/bachya
+[@bdraco]: https://github.com/bdraco
+[@bramkragten]: https://github.com/bramkragten
+[@cdce8p]: https://github.com/cdce8p
+[@cdheiser]: https://github.com/cdheiser
+[@frenck]: https://github.com/frenck
+[@jeeftor]: https://github.com/jeeftor
+[@joostlek]: https://github.com/joostlek
+[@lextm]: https://github.com/lextm
+[@timmo001]: https://github.com/timmo001
+[@tronikos]: https://github.com/tronikos
+[@xeniter]: https://github.com/xeniter
+
+## Release 2024.4.2 - April 8
+
+- Fix hang in SNMP device_tracker implementation ([@nmaggioni] - [#112815])
+- Fix missing if statement in homematic ([@bbr111] - [#114832])
+- Bump pylitterbot to 2023.4.11 ([@natekspencer] - [#114918])
+- Fix Snapcast Config flow ([@joostlek] - [#114952])
+- Bump axis to v61 ([@Kane610] - [#114964])
+- Filter out fuzzy translations from Lokalise ([@joostlek] - [#114968])
+- Upgrade to pynobo 1.8.1 ([@oyvindwe] - [#114982])
+- Fix dictionary changed size during iteration in prometheus ([@bdraco] - [#115005])
+- Bump `brother` to version 4.1.0 ([@bieniu] - [#115021])
+- Bump yolink-api to 0.4.2 ([@matrixd2] - [#115026])
+- Update xknxproject to 3.7.1 ([@farmio] - [#115053])
+- Fix synology_dsm availablity ([@bdraco] - [#115073])
+- Downgrade hass-nabucasa from 0.80.0 to 0.78.0 ([@ludeeus] - [#115078])
+- Bump velbus-aio to 2024.4.1 ([@Cereal2nd] - [#115109])
+- Terminate scripts with until and while conditions that execute more than 10000 times ([@bdraco] - [#115110])
+- improve handling of incorrect values in fyta integration ([@dontinelli] - [#115134])
+- Bump fyta_cli to 0.3.5 ([@dontinelli] - [#115143])
+- Fix fibaro sensor additional sensor lookup ([@rappenze] - [#115148])
+- Write timer entity state before firing events ([@bdraco] - [#115151])
+- Avoid checking for polling if an entity fails to add ([@bdraco] - [#115159])
+- Only reset requested utility meter with no tariff ([@gibwar] - [#115170])
+
+[#112815]: https://github.com/home-assistant/core/pull/112815
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114832]: https://github.com/home-assistant/core/pull/114832
+[#114918]: https://github.com/home-assistant/core/pull/114918
+[#114934]: https://github.com/home-assistant/core/pull/114934
+[#114952]: https://github.com/home-assistant/core/pull/114952
+[#114964]: https://github.com/home-assistant/core/pull/114964
+[#114968]: https://github.com/home-assistant/core/pull/114968
+[#114982]: https://github.com/home-assistant/core/pull/114982
+[#115005]: https://github.com/home-assistant/core/pull/115005
+[#115021]: https://github.com/home-assistant/core/pull/115021
+[#115026]: https://github.com/home-assistant/core/pull/115026
+[#115053]: https://github.com/home-assistant/core/pull/115053
+[#115073]: https://github.com/home-assistant/core/pull/115073
+[#115078]: https://github.com/home-assistant/core/pull/115078
+[#115109]: https://github.com/home-assistant/core/pull/115109
+[#115110]: https://github.com/home-assistant/core/pull/115110
+[#115134]: https://github.com/home-assistant/core/pull/115134
+[#115143]: https://github.com/home-assistant/core/pull/115143
+[#115148]: https://github.com/home-assistant/core/pull/115148
+[#115151]: https://github.com/home-assistant/core/pull/115151
+[#115159]: https://github.com/home-assistant/core/pull/115159
+[#115170]: https://github.com/home-assistant/core/pull/115170
+[@Cereal2nd]: https://github.com/Cereal2nd
+[@Kane610]: https://github.com/Kane610
+[@bbr111]: https://github.com/bbr111
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@dontinelli]: https://github.com/dontinelli
+[@farmio]: https://github.com/farmio
+[@frenck]: https://github.com/frenck
+[@gibwar]: https://github.com/gibwar
+[@joostlek]: https://github.com/joostlek
+[@ludeeus]: https://github.com/ludeeus
+[@matrixd2]: https://github.com/matrixd2
+[@natekspencer]: https://github.com/natekspencer
+[@nmaggioni]: https://github.com/nmaggioni
+[@oyvindwe]: https://github.com/oyvindwe
+[@rappenze]: https://github.com/rappenze
+
+## Release 2024.4.3 - April 12
+
+- Bump aiohttp to 3.9.4 ([@bdraco] - [#110730])
+- Add support for adopt data disk repair ([@mdegat01] - [#114891])
+- Improve Risco exception logging ([@OnFreund] - [#115232])
+- Configurable maximum concurrency in Risco local ([@OnFreund] - [#115226])
+- Fix misssing timeout in caldav ([@bdraco] - [#115247])
+- Fix Google Tasks parsing of remove responses ([@allenporter] - [#115258])
+- Bump forecast-solar lib to v3.1.0 ([@klaasnicolaas] - [#115272])
+- Support backup of add-ons with hyphens ([@agners] - [#115274])
+- Bump pymodbus v3.6.7 ([@janiversen] - [#115279])
+- Bump yt-dlp to 2024.04.09 ([@joostlek] - [#115295])
+- Fix Aranet failure when the Bluetooth proxy is not providing a device name ([@thecode] - [#115298])
+- Bump zha-quirks to 0.0.114 ([@TheJulianJES] - [#115299])
+- Ensure automations do not execute from a trigger if they are disabled ([@bdraco] - [#115305])
+- Bump bleak-retry-connector 3.5.0 ([@bdraco] - [#115328])
+- Secure against resetting a non active modbus ([@janiversen] - [#115364])
+- Solve modbus test problem ([@janiversen] - [#115376])
+- Fix deadlock in holidays dynamic loading ([@bdraco] - [#115385])
+- Bump whirlpool-sixth-sense to 0.18.8 ([@NodeJSmith] - [#115393])
+- Fix bug in rainbird switch when turning off a switch that is already off ([@allenporter] - [#115421])
+- Bump pybotvac to 0.0.25 ([@Santobert] - [#115435])
+- Update frontend to 20240404.2 ([@bramkragten] - [#115460])
+
+[#110730]: https://github.com/home-assistant/core/pull/110730
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114891]: https://github.com/home-assistant/core/pull/114891
+[#114934]: https://github.com/home-assistant/core/pull/114934
+[#115186]: https://github.com/home-assistant/core/pull/115186
+[#115226]: https://github.com/home-assistant/core/pull/115226
+[#115232]: https://github.com/home-assistant/core/pull/115232
+[#115247]: https://github.com/home-assistant/core/pull/115247
+[#115258]: https://github.com/home-assistant/core/pull/115258
+[#115272]: https://github.com/home-assistant/core/pull/115272
+[#115274]: https://github.com/home-assistant/core/pull/115274
+[#115279]: https://github.com/home-assistant/core/pull/115279
+[#115295]: https://github.com/home-assistant/core/pull/115295
+[#115298]: https://github.com/home-assistant/core/pull/115298
+[#115299]: https://github.com/home-assistant/core/pull/115299
+[#115305]: https://github.com/home-assistant/core/pull/115305
+[#115328]: https://github.com/home-assistant/core/pull/115328
+[#115364]: https://github.com/home-assistant/core/pull/115364
+[#115376]: https://github.com/home-assistant/core/pull/115376
+[#115385]: https://github.com/home-assistant/core/pull/115385
+[#115393]: https://github.com/home-assistant/core/pull/115393
+[#115421]: https://github.com/home-assistant/core/pull/115421
+[#115435]: https://github.com/home-assistant/core/pull/115435
+[#115460]: https://github.com/home-assistant/core/pull/115460
+[@NodeJSmith]: https://github.com/NodeJSmith
+[@OnFreund]: https://github.com/OnFreund
+[@Santobert]: https://github.com/Santobert
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@agners]: https://github.com/agners
+[@allenporter]: https://github.com/allenporter
+[@bdraco]: https://github.com/bdraco
+[@bramkragten]: https://github.com/bramkragten
+[@frenck]: https://github.com/frenck
+[@janiversen]: https://github.com/janiversen
+[@joostlek]: https://github.com/joostlek
+[@klaasnicolaas]: https://github.com/klaasnicolaas
+[@mdegat01]: https://github.com/mdegat01
+[@thecode]: https://github.com/thecode
+
+## Release 2024.4.4 - April 23
+
+- Bump slixmpp version to 1.8.5 ([@ravermeister] - [#114448])
+- Make Withings recoverable after internet outage ([@joostlek] - [#115124])
+- Fix Hyperion light not updating state ([@avee87] - [#115389])
+- Add scheduled mode to renault charge mode ([@slyoldfox] - [#115427])
+- Bump zeroconf to 0.132.1 ([@bdraco] - [#115501])
+- Bump zeroconf to 0.132.2 ([@bdraco] - [#115505])
+- Update pillow to 10.3.0 ([@cdce8p] - [#115524])
+- Fix race in TimestampDataUpdateCoordinator ([@bdraco] - [#115542])
+- Fix Teslemetry sensor values ([@Bre77] - [#115571])
+- Modbus: Bump pymodbus v3.6.8 ([@janiversen] - [#115574])
+- Fix sensor entity description in Teslemetry ([@Bre77] - [#115614])
+- Bump httpcore to 1.0.5 ([@bdraco] - [#115672])
+- Bump sqlparse to 0.5.0 ([@bdraco] - [#115681])
+- Bump aiohttp to 3.9.5 ([@bdraco] - [#115727])
+- Bump renault-api to 0.2.2 ([@epenet] - [#115738])
+- Fix homeworks import flow ([@emontnemery] - [#115761])
+- Allow [##:##:##] type keypad address in homeworks ([@emontnemery] - [#115762])
+- Add missing media_player features to Samsung TV ([@chemelli74] - [#115788])
+- Bump aiounifi to v75 ([@Kane610] - [#115819])
+- Ensure scripts with timeouts of zero timeout immediately ([@bdraco] - [#115830])
+- Fix KeyError error when fetching sensors (Airthings) ([@LaStrada] - [#115844])
+- Bump plexapi to 4.15.12 ([@jjlawren] - [#115872])
+- Bump ical to 8.0.0 ([@allenporter] - [#115907])
+- Fix geo location attributes of Tankerkoenig sensors ([@mib1185] - [#115914])
+- Use start helper in squeezebox for server discovery ([@rajlaud] - [#115978])
+
+[#114448]: https://github.com/home-assistant/core/pull/114448
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114934]: https://github.com/home-assistant/core/pull/114934
+[#115124]: https://github.com/home-assistant/core/pull/115124
+[#115186]: https://github.com/home-assistant/core/pull/115186
+[#115389]: https://github.com/home-assistant/core/pull/115389
+[#115427]: https://github.com/home-assistant/core/pull/115427
+[#115463]: https://github.com/home-assistant/core/pull/115463
+[#115501]: https://github.com/home-assistant/core/pull/115501
+[#115505]: https://github.com/home-assistant/core/pull/115505
+[#115524]: https://github.com/home-assistant/core/pull/115524
+[#115542]: https://github.com/home-assistant/core/pull/115542
+[#115571]: https://github.com/home-assistant/core/pull/115571
+[#115574]: https://github.com/home-assistant/core/pull/115574
+[#115614]: https://github.com/home-assistant/core/pull/115614
+[#115672]: https://github.com/home-assistant/core/pull/115672
+[#115681]: https://github.com/home-assistant/core/pull/115681
+[#115727]: https://github.com/home-assistant/core/pull/115727
+[#115738]: https://github.com/home-assistant/core/pull/115738
+[#115761]: https://github.com/home-assistant/core/pull/115761
+[#115762]: https://github.com/home-assistant/core/pull/115762
+[#115788]: https://github.com/home-assistant/core/pull/115788
+[#115819]: https://github.com/home-assistant/core/pull/115819
+[#115830]: https://github.com/home-assistant/core/pull/115830
+[#115844]: https://github.com/home-assistant/core/pull/115844
+[#115872]: https://github.com/home-assistant/core/pull/115872
+[#115907]: https://github.com/home-assistant/core/pull/115907
+[#115914]: https://github.com/home-assistant/core/pull/115914
+[#115978]: https://github.com/home-assistant/core/pull/115978
+[@Bre77]: https://github.com/Bre77
+[@Kane610]: https://github.com/Kane610
+[@LaStrada]: https://github.com/LaStrada
+[@allenporter]: https://github.com/allenporter
+[@avee87]: https://github.com/avee87
+[@bdraco]: https://github.com/bdraco
+[@cdce8p]: https://github.com/cdce8p
+[@chemelli74]: https://github.com/chemelli74
+[@emontnemery]: https://github.com/emontnemery
+[@epenet]: https://github.com/epenet
+[@frenck]: https://github.com/frenck
+[@janiversen]: https://github.com/janiversen
+[@jjlawren]: https://github.com/jjlawren
+[@joostlek]: https://github.com/joostlek
+[@mib1185]: https://github.com/mib1185
+[@rajlaud]: https://github.com/rajlaud
+[@ravermeister]: https://github.com/ravermeister
+[@slyoldfox]: https://github.com/slyoldfox
+
+## Need help? Join the community!
+
+Home Assistant has a great community of users who are all more than willing
+to help each other out. So, join us!
+
+Our very active [Discord chat server](/join-chat) is an excellent place to be
+at, and don't forget to join our amazing [forums](https://community.home-assistant.io/).
+
+Found a bug or issue? Please report it in our [issue tracker](https://github.com/home-assistant/core/issues),
+to get it fixed! Or, check [our help page](/help) for guidance for more
+places you can go.
+
+Are you more into email? [Sign-up for our Building the Open Home Newsletter](/newsletter)
+to get the latest news about features, things happening in our community and
+other news about building an Open Home; straight into your inbox.
+
+## Backward-incompatible changes
+
+{% details "Python 3.11 support has been removed" %}
+
+Python 3.11 support has previously been deprecated and has now been removed.
+Home Assistant now requires Python 3.12 to run.
+
+You don’t have to do anything if you are using the Home Assistant Operating
+System, Home Assistant Container, or Home Assistant Supervised installation
+method. In those cases, we handle all of this for you. Your system has been
+using Python 3.12 for quite some time already.
+
+([@frenck] - [#114220])
+
+[@frenck]: https://github.com/frenck
+[#114220]: https://github.com/home-assistant/core/pull/114220
+
+{% enddetails %}
+
+{% details "AEMET OpenData" %}
+
+The AEMET OpenData integration previously created two entities for each
+configured location: one provided daily weather forecasts and the other hourly
+forecasts.
+
+The AEMET OpenData integration now only creates a single entity that provides
+both daily and hourly weather forecasts.
+
+([@gjohansson-ST] - [#110764]) ([documentation](/integrations/aemet))
+
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[#110764]: https://github.com/home-assistant/core/pull/110764
+
+{% enddetails %}
+
+{% details "Dexcom" %}
+
+The trend sensor now uses values that are using snake_case instead of a space
+in the middle:
+
+- `rising quickly` -> `rising_quickly`
+- `rising slightly` -> `rising_slightly`
+- `falling slightly` -> `falling_slightly`
+- `falling quickly` -> `falling_quickly`
+
+Please update your automations and scripts accordingly.
+
+([@joostlek] - [#112423]) ([documentation](/integrations/dexcom))
+
+[@joostlek]: https://github.com/joostlek
+[#112423]: https://github.com/home-assistant/core/pull/112423
+
+{% enddetails %}
+
+{% details "ecobee" %}
+
+The non-functional `away` preset mode has been replaced with the correct
+`away_indefinitely` preset mode.
+
+If any automation or script depends on the `away` preset mode,
+it needs to be updated.
+
+([@alexsydell] - [#108636]) ([documentation](/integrations/ecobee))
+
+[@alexsydell]: https://github.com/alexsydell
+[#108636]: https://github.com/home-assistant/core/pull/108636
+
+{% enddetails %}
+
+{% details "Environment Canada" %}
+
+The Environment Canada integration previously created two entities for each
+configured location: one provided daily weather forecasts and the other hourly
+forecasts.
+
+The Environment Canada integration now only creates a single entity that
+provides both daily and hourly weather forecasts.
+
+([@gjohansson-ST] - [#112447]) ([documentation](/integrations/environment_canada))
+
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[#112447]: https://github.com/home-assistant/core/pull/112447
+
+{% enddetails %}
+
+{% details "National Weather Service (NWS)" %}
+
+The National Weather Service integration previously created two entities for each
+configured location: one provided daily weather forecasts and the other hourly
+forecasts.
+
+The National Weather Service integration now only creates a single entity that
+provides both daily and hourly weather forecasts.
+
+([@gjohansson-ST] - [#112503]) ([documentation](/integrations/nws))
+
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[#112503]: https://github.com/home-assistant/core/pull/112503
+
+{% enddetails %}
+
+{% details "Met Éireann" %}
+
+The Met Éireann integration previously created two entities for each configured
+location: one provided daily weather forecasts and the other hourly forecasts.
+
+The Met Éireann integration now only creates a single entity that provides both
+daily and hourly weather forecasts.
+
+([@gjohansson-ST] - [#112449]) ([documentation](/integrations/met_eireann))
+
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[#112449]: https://github.com/home-assistant/core/pull/112449
+
+{% enddetails %}
+
+{% details "Met Office" %}
+
+The Met Office integration previously created two entities for each configured
+location: one provided daily weather forecasts and the other hourly forecasts.
+
+The Met Office integration now only creates a single entity that provides both
+daily and hourly weather forecasts.
+
+([@gjohansson-ST] - [#112452]) ([documentation](/integrations/metoffice))
+
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[#112452]: https://github.com/home-assistant/core/pull/112452
+
+{% enddetails %}
+
+{% details "Modbus" %}
+
+The Modbus integration does not allow a configuration with the device only
+(no entities); this will create an issue, and the entry will not be loaded.
+
+For the special cases (like some custom_components) where it is wanted,
+please add a dummy entity.
+
+([@janiversen] - [#113516]) ([documentation](/integrations/modbus))
+
+[@janiversen]: https://github.com/janiversen
+[#113516]: https://github.com/home-assistant/core/pull/113516
+
+{% enddetails %}
+
+{% details "MQTT" %}
+
+Support for `brightness` is now assumed for `mqtt` lights with the `json` schema
+unless only color modes `rgb`, `rgbw`, or `rgbww` are supported.
+
+For lights which only support color modes `rgb`, `rgbw`, or `rgbww`,
+the `brightness` option flag can still be set to `false` if brightness is not
+supported. In this case brightness support is emulated in Home Assistant by
+scaling the RGBx-values.
+
+For all other color modes except `ColorMode.ONOFF`, it is assumed brightness is
+supported, and the `brightness` attribute will be included in the MQTT payload
+when the `brightness` attribute is supplied to the `light.turn_on` service.
+
+([@jbouwh] - [#111676]) ([documentation](/integrations/mqtt))
+
+[@jbouwh]: https://github.com/jbouwh
+[#111676]: https://github.com/home-assistant/core/pull/111676
+
+{% enddetails %}
+
+{% details "myUplink" %}
+
+If you have a Nibe SMO 20 in your account, you will notice that some 550
+entities are no longer provided by the integration.
+
+You can safely remove these entities as the integration does not use them.
+
+([@astrandb] - [#113493]) ([documentation](/integrations/myuplink))
+
+[@astrandb]: https://github.com/astrandb
+[#113493]: https://github.com/home-assistant/core/pull/113493
+
+{% enddetails %}
+
+{% details "Waze Travel Time" %}
+
+The options `excl_filter` and `incl_filter` now filter for exact matches to
+street names in the route. Previously, they only filtered on the short
+description of the route.
+
+([@eifinger] - [#108613]) ([documentation](/integrations/waze_travel_time))
+
+[@eifinger]: https://github.com/eifinger
+[#108613]: https://github.com/home-assistant/core/pull/108613
+
+{% enddetails %}
+
+{% details "Weather" %}
+
+The previously deprecated `forecast` attribute of weather entities, has now been
+removed. Use the [`weather.get_forecasts`](/integrations/weather#service-weatherget_forecasts)
+service to get the forecast data instead.
+
+([@gjohansson-ST] - [#110761]) ([documentation](/integrations/metoffice))
+
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[#110761]: https://github.com/home-assistant/core/pull/110761
+
+{% enddetails %}
+
+If you are a custom integration developer and want to learn about breaking
+changes and new features available for your integration: Be sure to follow our
+[developer blog][devblog]. The following are the most notable for this release:
+
+- [Climate entity auxiliary heater is deprecated](https://developers.home-assistant.io/blog/2024/03/10/climate-aux-heater-deprecated)
+- [Config Entries can now provide a reconfigure step](https://developers.home-assistant.io/blog/2024/03/21/config-entry-reconfigure-step)
+- [Deprecate hass.helpers usage](https://developers.home-assistant.io/blog/2024/03/30/deprecate-hass-helpers/)
+- [Deprecating `async_run_job` and `async_add_job`](https://developers.home-assistant.io/blog/2024/03/13/deprecate_add_run_job)
+- [How uv saves Home Assistant 215 compute hours per month](https://developers.home-assistant.io/blog/2024/04/03/build-images-with-uv/)
+- [Integrations import in the executor to avoid blocking the event loop](https://developers.home-assistant.io/blog/2024/03/09/import_executor_default)
+- [New state timestamp State.last_reported](https://developers.home-assistant.io/blog/2024/03/20/state_reported_timestamp)
+- [Raising exceptions with translations](https://developers.home-assistant.io/blog/2024/03/15/exception-translations)
+
+[devblog]: https://developers.home-assistant.io/blog/
+
+## Farewell to the following
+
+The following integrations are also no longer available as of this release:
+
+- **OpenCV** has been removed. The integration has been in a broken state
+ for over a year and currently has no path forward.
+ ([@thecode] - [#113455])
+
+[@thecode]: https://github.com/thecode
+[#113455]: https://github.com/home-assistant/core/pull/113455
+
+## All changes
+
+Of course, there is a lot more in this release. You can find a list of
+all changes made here: [Full changelog for Home Assistant Core 2024.4](/changelogs/core-2024.4)
diff --git a/source/_posts/2024-04-24-state-of-the-open-home-2024.markdown b/source/_posts/2024-04-24-state-of-the-open-home-2024.markdown
new file mode 100644
index 000000000000..7b2359930ee2
--- /dev/null
+++ b/source/_posts/2024-04-24-state-of-the-open-home-2024.markdown
@@ -0,0 +1,33 @@
+---
+layout: post
+title: "Thinking Bigger: State of the Open Home 2024"
+description: "The State of the Open Home 2024 stream includes a deep dive into the evolution of Home Assistant, and how it has now reached an estimated 1 million installations."
+date: 2024-04-24 00:00:01
+date_formatted: "April 24, 2024"
+author: Gordon Cameron
+comments: true
+categories: Announcements
+og_image: /images/blog/2024-04-24-state-of-the-open-home-2024/banner.jpg
+---
+
+We recently held our [State of the Open Home 2024 live stream](https://www.youtube.com/live/oa__fLArsFk?si=PzlfiHLUYE6uAEq3), where we revealed how we are thinking [even bigger](/blog/2018/09/17/thinking-big/) about securing the future of the smart home. During this stream we launched the [Open Home Foundation](https://www.openhomefoundation.org/), a new non-profit organization created to fight for the fundamental principles of the smart home — privacy, choice, and sustainability — focused on serving everyone that lives in one. To learn more about the Open Home Foundation read the full [announcement](https://www.openhomefoundation.org/blog/announcing-the-open-home-foundation/).
+
+The stream includes a deep dive into the evolution of Home Assistant and how it has now reached an estimated 1 million installations. There were other substantial updates on voice and hardware, including teasing our upcoming Z-Wave and voice assistant hardware. The first panel discussion featured the founders of Open Home Foundation collaborating projects WLED, Zigbee2MQTT, Rhasspy, and Z-Wave JS. A second panel gave a comprehensive overview of the state of open standards, featuring key open-source developers working on Zigbee, Z-Wave, Matter, and Bluetooth. The stream caps off with a look into the future of the open home, including the announcement of a roadmap full of exciting new features.
+
+
+
+
+
+Full list of chapters:
+
+- Introduction ([0:00:11](https://www.youtube.com/watch?v=oa__fLArsFk&t=11s))
+- Announcing the Open Home Foundation - Paulus Schoutsen ([0:02:36](https://www.youtube.com/watch?v=oa__fLArsFk&t=156s))
+- Panel with Open Home Foundation collaborators - WLED, Zigbee2MQTT, Rhasspy, Z-Wave JS ([0:18:31](https://www.youtube.com/watch?v=oa__fLArsFk&t=1111s))
+- Voice - Michael Hansen ([0:36:31](https://www.youtube.com/watch?v=oa__fLArsFk&t=2191s))
+- Home Assistant - Franck Nijhof ([0:53:08](https://www.youtube.com/watch?v=oa__fLArsFk&t=3188s))
+- Hardware - Uwe Bernitt ([1:21:37](https://www.youtube.com/watch?v=oa__fLArsFk&t=4897s))
+- Panel on Open Standards - Zigbee, Z-Wave, Matter, Bluetooth ([1:40:21](https://www.youtube.com/watch?v=oa__fLArsFk&t=6021s))
+- Future - Madelena Mak ([2:07:29](https://www.youtube.com/watch?v=oa__fLArsFk&t=7649s))
+- Closing ([2:37:33](https://www.youtube.com/watch?v=oa__fLArsFk&t=9453s))
+
+**The Open Home Foundation** now owns and governs over 240 open-source projects, standards, drivers, and libraries, including Home Assistant - protecting these projects from buy-out or becoming abandoned. To learn more about the Open Home Foundation, visit: [www.openhomefoundation.org](https://www.openhomefoundation.org/)
diff --git a/source/_redirects b/source/_redirects
index e6ab03a270e6..7e39cbd4647d 100644
--- a/source/_redirects
+++ b/source/_redirects
@@ -256,6 +256,7 @@ layout: null
# Redirect for the QR Codes on the S3 Box
/s3-box-no-wifi /voice_control/troubleshooting_the_s3_box/#error-unable-to-connect-to-wi-fi
/s3-box-no-ha /voice_control/troubleshooting_the_s3_box/#error-no-home-assistant
+
/docs/assist/troubleshooting/ /voice_control/troubleshooting/
/docs/assist/worlds-most-private-voice-assistant/ /voice_control/worlds-most-private-voice-assistant/
/projects/worlds-most-private-voice-assistant/ /voice_control/worlds-most-private-voice-assistant/
@@ -263,6 +264,11 @@ layout: null
/draw_assist /voice_control/s3-box-customize/#to-draw-your-own-images
/projects/thirteen-usd-voice-remote/ /voice_control/thirteen-usd-voice-remote/
/docs/backend/updater /integrations/analytics
+/docs/configuration/basic/#allowlist_external_urls /integrations/homeassistant/#allowlist_external_urls
+/docs/configuration/basic/#allowlist_external_dirs /integrations/homeassistant/#allowlist_external_dirs
+/docs/configuration/basic/#external_urls /integrations/homeassistant/#external_urls
+/docs/configuration/customizing-devices/#device-class /integrations/homeassistant/#device-class
+/docs/configuration/customizing-devices/#customizing-entities /integrations/homeassistant/#editing-the-entity-settings-in-yaml
/docs/ecosystem/ios/ https://companion.home-assistant.io/
/docs/ecosystem/ios/devices_file https://companion.home-assistant.io/
/docs/ecosystem/ios/integration https://companion.home-assistant.io/docs/integrations/integrations
@@ -329,7 +335,6 @@ layout: null
/getting-started/automation-trigger /docs/automation/trigger
/getting-started/automation-templating /docs/automation/templating
/getting-started/basic /docs/configuration/basic
-/getting-started/browsers /docs/frontend/browsers
/getting-started/customizing-devices /docs/configuration/customizing-devices
/getting-started/installation /docs/installation
/getting-started/installation-docker /docs/installation/docker
@@ -357,6 +362,8 @@ layout: null
/topics/state_object /docs/configuration/state_object
/topics/templating /docs/configuration/templating
/common-tasks /common-tasks/os
+/common-tasks/os/#flashing-an-odroid-m1s /installation/odroid#flashing-an-odroid-m1s
+/common-tasks/os/#flashing-an-odroid-n2 /installation/odroid#flashing-an-odroid-n2
/docs/installation /installation
/docs/installation/docker /installation
/docs/installation/raspberry-pi /installation
@@ -467,6 +474,7 @@ layout: null
/docs/tools/credstash/ /docs/configuration/secrets
/docs/scripts/editor/ /docs/scripts
/getting-started/devices /integrations
+/integrations/map /dashboards/map/
# Blog
/blog/2019/05/29/release-94 /blog/2019/06/05/release-94
@@ -529,7 +537,6 @@ layout: null
/integrations/hydroquebec /more-info/removed-integration 301
/integrations/ialarm_xr /more-info/removed-integration 301
/integrations/iota /more-info/removed-integration 301
-/integrations/juicenet /more-info/removed-integration 301
/integrations/life360 /more-info/removed-integration 301
/integrations/lifx_legacy /more-info/removed-integration 301
/integrations/linksys_ap /more-info/removed-integration 301
@@ -557,8 +564,10 @@ layout: null
/integrations/nuimo_controller /more-info/removed-integration 301
/integrations/openalpr /more-info/removed-integration 301
/integrations/openalpr_local /more-info/removed-integration 301
+/integrations/opencv /more-info/removed-integration 301
/integrations/orangepi_gpio /more-info/removed-integration 301
/integrations/ozw /more-info/removed-integration 301
+/integrations/panel_iframe /more-info/removed-integration 301
/integrations/pcal9535a /more-info/removed-integration 301
/integrations/pi4ioe5v9xxxx /more-info/removed-integration 301
/integrations/piglow /more-info/removed-integration 301
diff --git a/source/changelogs/core-2024.4.markdown b/source/changelogs/core-2024.4.markdown
new file mode 100644
index 000000000000..a7d0caa5d982
--- /dev/null
+++ b/source/changelogs/core-2024.4.markdown
@@ -0,0 +1,3433 @@
+---
+title: Full changelog for Home Assistant Core 2024.4
+description: Detailed changelog for the Home Assistant Core 2024.4 release
+replace_regex: \s\(\[?[a-z0-9\-\s_]+\]?\)$
+---
+
+These are all the changes included in the Home Assistant Core 2024.4 release.
+
+For a summary in a more readable format:
+[Release notes blog for this release](/blog/2024/04/03/release-20244/).
+
+## All changes
+
+- Add permobil entity ([@IsakNyberg] - [#111761])
+- Bump version to 2024.4.0.dev0 ([@bramkragten] - [#111755])
+- Improve zha coordinator typing ([@cdce8p] - [#111767])
+- Add normalized name registry items base class ([@jpbede] - [#111666])
+- Remove 'values' from services validation ([@balloob] - [#111440])
+- Use proper constant in Airzone Cloud climate tests ([@Noltari] - [#111747])
+- Axis improve coverage binary tests ([@Kane610] - [#111758])
+- Add icon translations to Hue ([@joostlek] - [#111725])
+- Import enphase_envoy in the executor to avoid blocking the event loop ([@bdraco] - [#111805])
+- Add icon translations to IPP ([@joostlek] - [#111846])
+- Import discovergy in the executor to avoid blocking the event loop ([@jpbede] - [#111824])
+- Import homekit in the executor to avoid blocking the event loop ([@bdraco] - [#111809])
+- Import upnp in the executor to avoid blocking the event loop ([@bdraco] - [#111808])
+- Import logbook in the executor to avoid blocking the event loop ([@bdraco] - [#111807])
+- Import flux_led in the executor to avoid blocking the event loop ([@bdraco] - [#111806])
+- Import rest in the executor to avoid blocking the event loop ([@bdraco] - [#111804])
+- Remove areas template filter ([@emontnemery] - [#111827])
+- Add generic classes BaseFlowHandler and BaseFlowManager ([@emontnemery] - [#111814])
+- Remove unused translation key from Ecovacs mower ([@edenhaus] - [#111754])
+- Add icon translations to Laundrify ([@joostlek] - [#111856])
+- Add icon translations to Lastfm ([@joostlek] - [#111855])
+- Add icon translations to Justnimbus ([@joostlek] - [#111849])
+- Add icon translations to Kaleidescape ([@joostlek] - [#111850])
+- Add icon translations to Intellifire ([@joostlek] - [#111845])
+- Add icon translations to KNX ([@joostlek] - [#111852])
+- Migrate integrations a-d to generic flowhandler ([@emontnemery] - [#111861])
+- Migrate integrations e-h to generic flowhandler ([@emontnemery] - [#111862])
+- Migrate integrations u-z to generic flowhandler ([@emontnemery] - [#111866])
+- Migrate integrations i-m to generic flowhandler ([@emontnemery] - [#111863])
+- Migrate integrations n-r to generic flowhandler ([@emontnemery] - [#111864])
+- Migrate integrations s-t to generic flowhandler ([@emontnemery] - [#111865])
+- Switch influxdb to use a SimpleQueue ([@bdraco] - [#111798])
+- Remove unused variable in stats _sorted_statistics_to_dict ([@bdraco] - [#111912])
+- Add person tracking for UniFi Protect ([@AngellusMortis] - [#111289])
+- Add Vallox filter replacement date ([@yozik04] - [#111391])
+- Bump actions/cache from 4.0.0 to 4.0.1 (@dependabot - [#111916])
+- Bump github/codeql-action from 3.24.5 to 3.24.6 (@dependabot - [#111917])
+- Add icon translations to Kodi ([@joostlek] - [#111853])
+- Add icon translations to Enocean ([@joostlek] - [#111514])
+- Add icon translations to EZVIZ ([@joostlek] - [#111532])
+- Add icon translations to Flipr ([@joostlek] - [#111540])
+- Add icon translations to Flux LED ([@joostlek] - [#111545])
+- Add icon translations to Hydrawise ([@joostlek] - [#111810])
+- Add reconfigure step to config flow ([@gjohansson-ST] - [#108794])
+- Add icon translations to Medcom BLE ([@joostlek] - [#111904])
+- Add icon translations to Keymitt BLE ([@joostlek] - [#111851])
+- Add icon translations to IFTTT ([@joostlek] - [#111842])
+- Add icon translations to Idasen desk ([@joostlek] - [#111813])
+- Add icon translations to Lidarr ([@joostlek] - [#111896])
+- Add icon translations to LCN ([@joostlek] - [#111895])
+- Remove config flow specifics from FlowResult ([@emontnemery] - [#111932])
+- Add icon translations to LifX ([@joostlek] - [#111897])
+- Add icon translations to min max ([@joostlek] - [#111908])
+- Add icon translations to Minecraft Server ([@joostlek] - [#111928])
+- Add icon translations to Mill ([@joostlek] - [#111907])
+- Update mypy to a custom version ([@cdce8p] - [#111258])
+- Add icon translations to Litterrobot ([@joostlek] - [#111899])
+- Add icon translations to Local IP ([@joostlek] - [#111900])
+- Add icon translations to Lyric ([@joostlek] - [#111902])
+- Add icon translations to Motioneye ([@joostlek] - [#111936])
+- Add icon translations to Monoprice ([@joostlek] - [#111934])
+- Fix utility meter reset without tarrifs ([@gibwar] - [#102884])
+- Fix LingeringTask after test completion in enphase_envoy ([@catsmanac] - [#111940])
+- Fix loader test warning ([@cdce8p] - [#111965])
+- Add icon translations to MQTT ([@joostlek] - [#111945])
+- Add icon translations to Neato ([@joostlek] - [#111947])
+- Add icon translations to Nanoleaf ([@joostlek] - [#111946])
+- Add icon translations to Motion blinds ([@joostlek] - [#111935])
+- Add icon translations to Modem callerID ([@joostlek] - [#111929])
+- Use default icon for Melcloud ([@joostlek] - [#111905])
+- Fix generic HassJob typing ([@cdce8p] - [#111973])
+- Fix util create_eager_task typing ([@cdce8p] - [#111976])
+- Add icon translations to OpenUV ([@joostlek] - [#111996])
+- Add icon translations to Notion ([@joostlek] - [#111984])
+- Add icon translations to Modern Forms ([@joostlek] - [#111933])
+- Add icon translations to Nextcloud ([@joostlek] - [#111982])
+- Add icon translations to NZBGet ([@joostlek] - [#111985])
+- Add icon translations to Netgear LTE ([@joostlek] - [#111974])
+- Add icon translations to Omnilogic ([@joostlek] - [#111989])
+- Add icon translations to Ondilo ico ([@joostlek] - [#111990])
+- Add icon translations to Octoprint ([@joostlek] - [#111988])
+- Add icon translations to Opensky ([@joostlek] - [#111994])
+- Add icon translations to Openhome ([@joostlek] - [#111993])
+- Add icon translations to OpenAI Conversation ([@joostlek] - [#111992])
+- Add icon translations to ovo energy ([@joostlek] - [#111997])
+- Reduce ESPHome reconnect time ([@bdraco] - [#112001])
+- Reduce samsungtv startup time ([@bdraco] - [#112007])
+- Convert command_line to use asyncio for subprocesses ([@bdraco] - [#111927])
+- Apply better names to a couple of dicts in Axis config flow ([@Kane610] - [#111964])
+- Add icon translations to Nmap tracker ([@joostlek] - [#111983])
+- Add icon translations to Opentherm gw ([@joostlek] - [#111995])
+- Add entity and icon translations to Onvif ([@joostlek] - [#111991])
+- Add icon translations to Netgear ([@joostlek] - [#111972])
+- Remove deprecated `hass.components.hassio` usage ([@jpbede] - [#111878])
+- Streamline naming in the Axis integration ([@Kane610] - [#112044])
+- Simplify load_executor check in loader ([@bdraco] - [#112029])
+- Import co2signal in the executor to avoid blocking the event loop ([@bdraco] - [#112058])
+- Import ambient_station in the executor to avoid blocking the event loop ([@bdraco] - [#112053])
+- Refactor file_upload to avoid janus dep ([@bdraco] - [#112032])
+- Import snmp in the executor to avoid blocking the event loop ([@bdraco] - [#112065])
+- Pre-import more frontend deps to avoid importing when the event loop is running ([@bdraco] - [#112031])
+- Switch config to use async_get_component/async_get_platform ([@bdraco] - [#112071])
+- Import switchbot in the executor to avoid blocking the event loop ([@bdraco] - [#112077])
+- Import smtp in the executor to avoid blocking the loop ([@bdraco] - [#112089])
+- Import integrations using sense-energy in the executor to avoid loop blocking ([@bdraco] - [#112087])
+- Import baf in the executor to avoid blocking the event loop ([@bdraco] - [#112086])
+- Import caldav in the executor to avoid blocking the event loop ([@bdraco] - [#112081])
+- Import yeelight in the executor to avoid blocking the event loop ([@bdraco] - [#112080])
+- Import template in the executor to avoid blocking the event loop ([@bdraco] - [#112070])
+- Import stream in the executor to avoid blocking the event loop ([@bdraco] - [#112078])
+- Avoid trying to import platforms that do not exist ([@bdraco] - [#112028])
+- Preload platform integrations to better group executor usage ([@bdraco] - [#112010])
+- Move Ping binary sensor attributes to sensor entities ([@jpbede] - [#112004])
+- Add YoLInk YS7905-UC Support ([@matrixd2] - [#111709])
+- Fix flakey airzone_cloud tests by avoiding creation of the websocket ([@Noltari] - [#112102])
+- Add icon translations to Nextbus ([@joostlek] - [#111981])
+- Add icon translations to Nexia ([@joostlek] - [#111980])
+- Add tests for number of devices created in myuplink ([@astrandb] - [#111816])
+- Load wyoming in the executor to avoid blocking the event loop ([@bdraco] - [#112107])
+- Add event platform to rfxtrx ([@elupus] - [#111526])
+- Add comment to integration platform helper about blocking I/O ([@bdraco] - [#112103])
+- Address late review for Ping ([@jpbede] - [#112123])
+- Import steamist in the executor to avoid blocking the loop ([@bdraco] - [#112111])
+- Move all System Monitor updates into single Data Update Coordinator ([@gjohansson-ST] - [#112055])
+- Add the ability to resume cleaning on start button ([@Lash-L] - [#112122])
+- Clean up setup and teardown of Axis integration ([@Kane610] - [#112120])
+- Exclude tankerkoenig attributes from recording ([@jpbede] - [#112109])
+- Avoid calling async_get_component twice for each component being setup ([@bdraco] - [#112096])
+- Import screenlogic in the executor to avoid blocking the loop ([@bdraco] - [#112097])
+- Avoid compiling entity service schema when passed defaults ([@bdraco] - [#112099])
+- Add package detection to Reolink ([@starkillerOG] - [#112126])
+- Try to preload the config platform when loading a component ([@bdraco] - [#112104])
+- Fix flakey tplink test ([@bdraco] - [#112135])
+- Add icon translations to Melnor ([@joostlek] - [#111906])
+- Ensure setup loads top level component before platforms ([@bdraco] - [#112057])
+- Add Reolink PTZ patrol start/stop ([@starkillerOG] - [#112129])
+- Fix async_prepare_setup_platform test ([@bdraco] - [#112143])
+- Fix places not changed to hub in Axis tests ([@Kane610] - [#112128])
+- Split up hassio coordinator and data into new file to allow preload ([@bdraco] - [#112147])
+- Preload config flow if it exists when loading a component ([@bdraco] - [#112145])
+- Migrate condition/state/trigger helper to use async_get_platform ([@bdraco] - [#112144])
+- Use MockConfigEntry in hue tests ([@bdraco] - [#112149])
+- Fix async_get_component loading in the executor when the module is already loaded ([@bdraco] - [#112153])
+- Add types throughout the prometheus tests ([@agoode] - [#112156])
+- Run more of hassio setup in in tasks ([@bdraco] - [#112151])
+- Streamline UniFi entity descriptions ([@Kane610] - [#112136])
+- Avoid multiple executor jobs with concurrent calls to async_get_component ([@bdraco] - [#112155])
+- Ignore unsupported devices (room sensors, floor heating) in ViCare integration ([@CFenner] - [#112106])
+- Group loading of platforms in the import executor ([@bdraco] - [#112141])
+- Improve mqtt value template error logging ([@jbouwh] - [#110492])
+- Import recorder and common recorder platforms before asyncio starts ([@bdraco] - [#112131])
+- Group platform loads in homekit_controller to minimize executor use ([@bdraco] - [#112148])
+- Avoid using coordinator in config flow of APCUPSD ([@yuxincs] - [#112121])
+- Update System Bridge to support version 4.x.x and above ([@timmo001] - [#107957])
+- Add local API support to elmax ([@albertogeniola] - [#94392])
+- Bump actions/download-artifact from 4.1.3 to 4.1.4 (@dependabot - [#112159])
+- Remove unused test helper mock_area_registry ([@emontnemery] - [#112172])
+- Migrate config to use async_get_component ([@bdraco] - [#112160])
+- Migrate device_automation to use async_get_platform ([@bdraco] - [#112162])
+- Migrate rest to use eager tasks for setup ([@bdraco] - [#112166])
+- Migrate application_credentials to use async_get_platform ([@bdraco] - [#112161])
+- Import in the executor by default for core integrations ([@bdraco] - [#112127])
+- Update systembridgeconnector to 4.0.2 ([@timmo001] - [#112174])
+- Issues template function ([@RoboMagus] - [#95206])
+- Fix pylint/mypy on elmax integration ([@Noltari] - [#112211])
+- Add icon translations to Snapcast ([@joostlek] - [#112229])
+- Add icon translations to Rainbird ([@joostlek] - [#112200])
+- Add icon translations to RFXCOM RFXtrx ([@joostlek] - [#112209])
+- Add icon translations to Simplisafe ([@joostlek] - [#112224])
+- Add icon translations to Ridwell ([@joostlek] - [#112210])
+- Add icon translations to Recollect Waste ([@joostlek] - [#112204])
+- Add icon translations to Private BLE Device ([@joostlek] - [#112185])
+- Add icon translations to PurpleAir ([@joostlek] - [#112192])
+- Add icon translations to Rainmachine ([@joostlek] - [#112202])
+- Add icon translations to Renault ([@joostlek] - [#112205])
+- Add icon translations to Solarlog ([@joostlek] - [#112232])
+- Add icon translations to Songpal ([@joostlek] - [#112234])
+- Add icon translations to Philips TV ([@joostlek] - [#112179])
+- Add icon translations to Smarttub ([@joostlek] - [#112227])
+- Add icon translations to sabNZBd ([@joostlek] - [#112219])
+- Add icon translations to Slack ([@joostlek] - [#112226])
+- Add icon translations to Season ([@joostlek] - [#112221])
+- Add icon translations to Screenlogic ([@joostlek] - [#112220])
+- Change log level for System Bridge service handlers ([@timmo001] - [#112175])
+- Add icon translations to Roon ([@joostlek] - [#112218])
+- Add icon translations to Swiss public transport ([@joostlek] - [#112254])
+- Address srp_energy late review comment ([@briglx] - [#105756])
+- Add Hyperion sensor to report active priority on each instance ([@belangp] - [#102333])
+- Add icon translations to Sensibo ([@joostlek] - [#112222])
+- Fix authentication issues for asekopool ([@hopkins-tk] - [#99495])
+- Fix spaceapi attribute for closed icon ([@Xiretza] - [#108596])
+- Add sensor platform to Teslemetry ([@Bre77] - [#109088])
+- Add config flow to homeworks ([@emontnemery] - [#112042])
+- Enable strict typing of homeworks ([@emontnemery] - [#112267])
+- Add device and enable entity name for Lutron homeworks ([@emontnemery] - [#112268])
+- Add icon translations to Steamist ([@joostlek] - [#112246])
+- Add icon translations to Starlink ([@joostlek] - [#112244])
+- Add icon translations to Squeezebox ([@joostlek] - [#112240])
+- Add icon translations to Streamlabswater ([@joostlek] - [#112247])
+- Add permobil binary sensor ([@IsakNyberg] - [#112130])
+- Add icon translations to Sure Petcare ([@joostlek] - [#112253])
+- Add icon translations to Spotify ([@joostlek] - [#112239])
+- Remove callback decorator from coroutine ([@Kane610] - [#112276])
+- Update pytest to 8.1.0 ([@cdce8p] - [#112173])
+- Reduce some linear searches to cleanup the device registry ([@bdraco] - [#112277])
+- Ensure hassio diagnostics get imported with the integration ([@bdraco] - [#112286])
+- Add support for preloading platforms in the loader ([@bdraco] - [#112282])
+- Add icon translations to Elkm1 ([@joostlek] - [#111512])
+- Refactor integration platforms to import in the executor ([@bdraco] - [#112168])
+- Remove unnecessary access to UniFi hub object in tests ([@Kane610] - [#112275])
+- Add icon translations to SMS ([@joostlek] - [#112228])
+- Add icon translations to Rainforest Raven ([@joostlek] - [#112201])
+- Add icon translations to Plum lightpad ([@joostlek] - [#112183])
+- Add icon translations to Profiler ([@joostlek] - [#112186])
+- Add icon translations to Prosegur ([@joostlek] - [#112187])
+- Add icon translations to Prusalink ([@joostlek] - [#112188])
+- Add icon translations to PS4 ([@joostlek] - [#112190])
+- Add icon translations to QBittorrent ([@joostlek] - [#112193])
+- Add icon translations to QNap QSW ([@joostlek] - [#112194])
+- Add icon translations to Rachio ([@joostlek] - [#112195])
+- Add icon translations to Radarr ([@joostlek] - [#112196])
+- Add icon translations to Radiotherm ([@joostlek] - [#112197])
+- Add icon translations to RDW ([@joostlek] - [#112203])
+- Add icon translations to Renson ([@joostlek] - [#112207])
+- Add icon translations to Ring ([@joostlek] - [#112212])
+- Add icon translations to Rituals perfume genie ([@joostlek] - [#112213])
+- Add icon translations to Roomba ([@joostlek] - [#112217])
+- Add icon translations to Skybell ([@joostlek] - [#112225])
+- Add icon translations to Snooz ([@joostlek] - [#112230])
+- Add icon translations to Solaredge ([@joostlek] - [#112231])
+- Add icon translations to Soundtouch ([@joostlek] - [#112236])
+- Add icon translations to Subaru ([@joostlek] - [#112252])
+- Deprecate old config options for MQTT json light ([@jbouwh] - [#111676])
+- Add icon translations to P1 monitor ([@joostlek] - [#111998])
+- Add icon translations to Speedtestdotnet ([@joostlek] - [#112237])
+- Use default icon in Romy ([@joostlek] - [#112215])
+- Add icon translations to Shopping list ([@joostlek] - [#112223])
+- Add icon translations to Pi-hole ([@joostlek] - [#112180])
+- Add icon translations to PECO ([@joostlek] - [#112169])
+- Add icon translations to Permobil ([@joostlek] - [#112170])
+- Add icon translations to Plex ([@joostlek] - [#112182])
+- Cleanup rainbird aiohttp client cleanup on EVENT_HOMEASSISTANT_CLOSE ([@allenporter] - [#112292])
+- Add icon translations to Switcher kis ([@joostlek] - [#112296])
+- Add icon translations to Systemmonitor ([@joostlek] - [#112300])
+- Add icon translations to Tautulli ([@joostlek] - [#112305])
+- Add icon translations to Trafikverket Train ([@joostlek] - [#112322])
+- Add icon translations to Trafikverket Ferry ([@joostlek] - [#112321])
+- Add icon translations to Trafikverket Camera ([@joostlek] - [#112320])
+- Add icon translations to Trafikverket Weather station ([@joostlek] - [#112323])
+- Add icon translations to Workday ([@joostlek] - [#112359])
+- Add icon translations to Yale ([@joostlek] - [#112361])
+- Add icon translations to YouTube ([@joostlek] - [#112365])
+- Add icon translations to YoLink ([@joostlek] - [#112364])
+- Add icon translations to Yardian ([@joostlek] - [#112362])
+- Add icon translations to Xiaomi Aqara ([@joostlek] - [#112360])
+- Add icon translations to Weatherkit ([@joostlek] - [#112354])
+- Add icon translations to Synology DSM ([@joostlek] - [#112299])
+- Add icon translations to Trend ([@joostlek] - [#112325])
+- Add icon translations to TP-Link ([@joostlek] - [#112317])
+- Add icon translations to Tesla Wall Connector ([@joostlek] - [#112309])
+- Add icon translations to Tolo ([@joostlek] - [#112313])
+- Add icon translations to Tile ([@joostlek] - [#112310])
+- Add icon translations to Todoist ([@joostlek] - [#112312])
+- Add icon translations to Template ([@joostlek] - [#112308])
+- Add icon translations to Syncthing ([@joostlek] - [#112297])
+- Add icon translations to Tedee ([@joostlek] - [#112307])
+- Update aioairzone-cloud to v0.4.6 ([@Noltari] - [#112198])
+- Add support for System Bridge service responses ([@timmo001] - [#100055])
+- Remove async_entity_ids and get_entity_ids from entity registry ([@bdraco] - [#112311])
+- Add Beaufort to wind_speed ([@fwestenberg] - [#105795])
+- Add icon translations to WebOS TV ([@joostlek] - [#112355])
+- Add icon translations to Watttime ([@joostlek] - [#112351])
+- Add icon translations to Uptimerobot ([@joostlek] - [#112336])
+- Initialize triggers eagerly ([@bdraco] - [#112294])
+- Migrate remaining calls in config modules to async_get_component ([@bdraco] - [#112293])
+- Migrate system flows to use the discovery helper ([@bdraco] - [#112291])
+- Simplify loader preload logic for config_flows ([@bdraco] - [#112290])
+- Remove entity description mixin in Accuweather ([@joostlek] - [#112375])
+- Remove entity description mixin in Bravia TV ([@joostlek] - [#112395])
+- Remove entity description mixin in Brother ([@joostlek] - [#112396])
+- Add icon translations to Vizio ([@joostlek] - [#112348])
+- Remove entity description mixin in Balboa ([@joostlek] - [#112389])
+- Remove entity description mixin in BMW ([@joostlek] - [#112391])
+- Remove entity description mixin in Bond ([@joostlek] - [#112393])
+- Remove entity description mixin in Bosch SHC ([@joostlek] - [#112394])
+- Remove entity description mixin in Dovado ([@joostlek] - [#112402])
+- Remove entity description mixin in Ecobee ([@joostlek] - [#112408])
+- Add icon translations to Vodafone Station ([@joostlek] - [#112349])
+- Remove entity description mixin in AirQ ([@joostlek] - [#112377])
+- Remove entity description mixin in Aladdin Connect ([@joostlek] - [#112379])
+- Remove entity description mixin in Azure DevOps ([@joostlek] - [#112385])
+- Add comments why we use loop.create_task in core ([@MartinHjelmare] - [#112372])
+- Remove entity description mixin in Dormakaba dKey ([@joostlek] - [#112401])
+- Add button to homeworks ([@emontnemery] - [#112269])
+- Remove entity description mixin in Airzone ([@joostlek] - [#112378])
+- Remove list comprehension when adding entities in Nextcloud ([@jpbede] - [#112429])
+- Remove list comprehension when adding entities in opengarage ([@jpbede] - [#112430])
+- Remove entity description mixin in Electric Kiwi ([@joostlek] - [#112411])
+- Migrate Azure DevOps to has entity name ([@joostlek] - [#112420])
+- Remove entity description mixin in Devolo Home Network ([@joostlek] - [#112399])
+- Remove list comprehension when adding entities in Smartthings ([@jpbede] - [#112432])
+- Remove list comprehension when adding entities in Wallbox ([@jpbede] - [#112433])
+- Remove the deprecated YAML support for Aftership ([@jpbede] - [#112390])
+- Add icon translations to Azure DevOps ([@joostlek] - [#112436])
+- Small cleanup in Dexcom ([@joostlek] - [#112425])
+- Break out UniFi config handling to own class ([@Kane610] - [#111325])
+- Rename reconfigure step in apple_tv ([@gjohansson-ST] - [#112438])
+- Remove myself as a codeowner for neato ([@dshokouhi] - [#112410])
+- Remove entity description mixin in AirNow ([@joostlek] - [#112376])
+- Add icon translations to Vilfo ([@joostlek] - [#112347])
+- Add icon translations to Verisure ([@joostlek] - [#112342])
+- Add icon translations to Vallox ([@joostlek] - [#112339])
+- Remove entity description mixin in Abode ([@joostlek] - [#112374])
+- Add icon translations to Velbus ([@joostlek] - [#112340])
+- Add icon translations to Ukraine Alarm ([@joostlek] - [#112330])
+- Add icon translations to Twitch ([@joostlek] - [#112329])
+- Remove entity description mixin in Android IP Webcam ([@joostlek] - [#112380])
+- Remove entity description mixin in Aseko ([@joostlek] - [#112382])
+- Remove entity description mixin in Awair ([@joostlek] - [#112384])
+- Remove entity description mixin in Comfoconnect ([@joostlek] - [#112397])
+- Remove entity description mixin in Daikin ([@joostlek] - [#112398])
+- Remove entity description mixin in Doorbird ([@joostlek] - [#112400])
+- Remove entity description mixin in Ecoforest ([@joostlek] - [#112409])
+- Add icon translations to Tomorrowio ([@joostlek] - [#112315])
+- Add TypeVar default for FlowResult ([@emontnemery] - [#112345])
+- Bump dorny/paths-filter from 3.0.1 to 3.0.2 (@dependabot - [#112158])
+- Bump SQLAlchemy to 2.0.28 ([@bdraco] - [#112314])
+- Pre import image_upload to avoid loading it after asyncio has started ([@bdraco] - [#112444])
+- Pre import webhook before asyncio starts ([@bdraco] - [#112441])
+- Limit legacy state translations to custom components ([@bdraco] - [#112295])
+- Remove list comprehension when adding entities in Vallox ([@jpbede] - [#112446])
+- Remove entity description mixin in BAF ([@joostlek] - [#112386])
+- Fix config modules being imported in the event loop ([@bdraco] - [#112462])
+- Adjust MAX_LOAD_CONCURRENTLY constant to allow 6 storage loaders ([@bdraco] - [#112468])
+- Add system_health to the hassio pre-imports to avoid a late executor job ([@bdraco] - [#112466])
+- Start fetching the source ip sooner in http to reduce setup time ([@bdraco] - [#112461])
+- Load network storage in a task to reduce startup time ([@bdraco] - [#112460])
+- Fix incorrect scope on checking files to load in translations ([@bdraco] - [#112457])
+- Migrate remaining get_platform in config to async_get_platform ([@bdraco] - [#112469])
+- Migrate remaining get_platform in check_config to async_get_platform ([@bdraco] - [#112470])
+- Add icon translations to Zeversolar ([@joostlek] - [#112367])
+- Remove myself as maintainer of the Rejseplanen integration ([@DarkFox] - [#112426])
+- Add icon translations to Tado ([@joostlek] - [#112301])
+- Add icon translations to iCloud ([@joostlek] - [#111812])
+- Add icon translations to Weatherflow ([@joostlek] - [#112353])
+- Add icon translations to Vesync ([@joostlek] - [#112344])
+- Add icon translations to Velux ([@joostlek] - [#112341])
+- Add icon translations to Tradfri ([@joostlek] - [#112319])
+- Add icon translations to UPnP ([@joostlek] - [#112335])
+- Add icon translations to Totalconnect ([@joostlek] - [#112316])
+- Add icon translations to TechnoVE ([@joostlek] - [#112306])
+- Add icon translations to Tami4 ([@joostlek] - [#112304])
+- Use default icon for Lupusec ([@joostlek] - [#111901])
+- Add icon translations to iBeacon ([@joostlek] - [#111811])
+- Add icon translations to V2C ([@joostlek] - [#112338])
+- Add test to ensure bootstrap continues if an integraton raises CancelledError ([@bdraco] - [#112472])
+- Avoid waiting for integration platforms in the parent integration ([@bdraco] - [#112467])
+- Add Reolink play quick reply message ([@starkillerOG] - [#112134])
+- Deprecate attributes of Nuki entities ([@steffenrapp] - [#111419])
+- Remove deprecated `hass.components` usage in config entry flow ([@jpbede] - [#111880])
+- Bump tesla-fleet-api to 0.4.9 ([@Bre77] - [#112288])
+- Remove deprecated `hass.components` usage in mobile_app ([@jpbede] - [#111888])
+- Wait to start emulated_hue until the started event ([@bdraco] - [#112477])
+- Fix detection of DLI sockets in wemo ([@bdraco] - [#112485])
+- Bump Wandalen/wretry.action from 1.4.4 to 1.4.5 (@dependabot - [#111700])
+- Remove entity description mixin in Enphase Envoy ([@joostlek] - [#112486])
+- Post System Bridge 4.x.x integration improvements ([@timmo001] - [#112189])
+- Add icon translations to Reolink ([@joostlek] - [#112208])
+- Improve integration_entities template function ([@emontnemery] - [#111943])
+- Remove constructor in WLED Options flow ([@joostlek] - [#112456])
+- Add icon translations to Tailwind ([@joostlek] - [#112303])
+- Add icon translations to Elgato ([@joostlek] - [#111423])
+- Add icon translations to Twentemilieu ([@joostlek] - [#112327])
+- Fix typo in Reolink translation keys ([@joostlek] - [#112489])
+- Remove entity description mixin in EnOcean ([@joostlek] - [#112483])
+- Add icon translations to Zone ([@joostlek] - [#112370])
+- Add icon translations to Zodiac ([@joostlek] - [#112369])
+- Add icon translations to Wilight ([@joostlek] - [#112357])
+- Add icon translations to ViCare ([@joostlek] - [#112346])
+- Add icon translations to UPB ([@joostlek] - [#112333])
+- Add icon translations to Tuya ([@joostlek] - [#112326])
+- Add icon translations to Transmission ([@joostlek] - [#112324])
+- Add icon translations to TP-Link Omada ([@joostlek] - [#112318])
+- Add icon translations to Poolsense ([@joostlek] - [#112184])
+- Add icon translations to Starline ([@joostlek] - [#112241])
+- Add icon translations to iZone ([@joostlek] - [#111848])
+- Add icon translations to isy994 ([@joostlek] - [#111847])
+- Add icon translations to Insteon ([@joostlek] - [#111844])
+- Add Shelly restart required binary sensor ([@chemelli74] - [#112493])
+- Remove entity description mixin in August ([@joostlek] - [#112383])
+- Add icon translations to Zerproc ([@joostlek] - [#112366])
+- Add icon translations to Whois ([@joostlek] - [#112356])
+- Add icon translations to Tailscale ([@joostlek] - [#112302])
+- Disable Shelly diagnostic binary sensor ([@chemelli74] - [#112497])
+- Remove entity description mixin in EasyEnergy ([@joostlek] - [#112407])
+- Remove entity description mixin in EnergyZero ([@joostlek] - [#112412])
+- Remove entity description mixin in Dremel 3D Printer ([@joostlek] - [#112405])
+- Add icon translations to Sonarr ([@joostlek] - [#112233])
+- Add icon translations to Wallbox ([@joostlek] - [#112350])
+- Enable some PERF rules ([@joostlek] - [#112498])
+- Simplify color mode logic in Tuya light ([@emontnemery] - [#110327])
+- Use an eager task for Sonos async_update_device_properties ([@bdraco] - [#112488])
+- Fix sonos overloading the executor when there are many devices ([@bdraco] - [#112482])
+- Add snapshot tests to webmin ([@autinerd] - [#112518])
+- Remove hourly weather entity from Environment Canada ([@gjohansson-ST] - [#112447])
+- Reduce executor jobs needed to setup filesize ([@bdraco] - [#112490])
+- Increase bootstrap preload test timeout ([@bdraco] - [#112520])
+- Fix homekit creating executor jobs to resolve default listen ips ([@bdraco] - [#112522])
+- Avoid importing counter and proximity integrations in logbook ([@bdraco] - [#112528])
+- Add icon translations to Waze Travel Time ([@joostlek] - [#112352])
+- Log tasks that are being waited on when startup is blocked ([@bdraco] - [#112542])
+- Move analytics setup to later stage to avoid delaying frontend startup ([@bdraco] - [#112535])
+- Pre import the rest of the recorder platforms before asyncio starts ([@bdraco] - [#112289])
+- Avoid having to work out the job type for each entity service at startup ([@bdraco] - [#112557])
+- Pass job type to event listeners when creating entities ([@bdraco] - [#112551])
+- Make HassJob job_type lookup lazy ([@bdraco] - [#112563])
+- Bump aioesphomeapi to 23.1.0 ([@jesserockz] - [#112560])
+- Speed up the frame helper ([@bdraco] - [#112562])
+- Bump Wandalen/wretry.action from 1.4.5 to 1.4.7 (@dependabot - [#112575])
+- Add icon translations to Twinkly ([@joostlek] - [#112328])
+- Make FlowResult a generic type ([@emontnemery] - [#111952])
+- Change KEY_HASS to be an aiohttp AppKey ([@cdce8p] - [#111954])
+- Avoid extracting the stack twice in system_log ([@bdraco] - [#112572])
+- Use KEY_HASS [h-z] ([@cdce8p] - [#112610])
+- Use KEY_HASS [a-g] ([@cdce8p] - [#112609])
+- Fix Bang and olufsen naming ([@joostlek] - [#111344])
+- Remove local imports of hass-nabucasa ([@emontnemery] - [#112634])
+- Log waiting tasks in bootstrap that are delaying startup ([@bdraco] - [#112637])
+- Schedule polling as periodic tasks ([@bdraco] - [#112640])
+- Fix homekit_controller delaying startup and shutdown ([@bdraco] - [#112671])
+- Fix dhcp delaying shutdown ([@bdraco] - [#112670])
+- Make zeroconf lookups background tasks ([@bdraco] - [#112669])
+- Close hue api if setup fails ([@bdraco] - [#112164])
+- Avoid writing registries to disk during startup ([@bdraco] - [#112662])
+- Bump python-telegram-bot package to 21.0.1 ([@malkstar] - [#110297])
+- Speed up importing mqtt platforms ([@bdraco] - [#112682])
+- Use aiohttp.AppKey for http ban keys ([@cdce8p] - [#112657])
+- Add TypeVar defaults for DataUpdateCoordinator ([@cdce8p] - [#111949])
+- Add reauthentication for husqvarna_automower ([@Thomas55555] - [#109930])
+- Use aiohttp.AppKey for http cors keys ([@cdce8p] - [#112658])
+- Bump devcontainer to 1-3.12 ([@edenhaus] - [#108709])
+- Update systembridgeconnector to version 4.0.3 ([@timmo001] - [#112608])
+- Make Event data generic ([@cdce8p] - [#111955])
+- Add empty line after module docstring [d-f] ([@cdce8p] - [#112698])
+- Add empty line after module docstring [s] ([@cdce8p] - [#112704])
+- Add empty line after module docstring [tests t-z] ([@cdce8p] - [#112712])
+- Add empty line after module docstring [tests q-s] ([@cdce8p] - [#112711])
+- Add empty line after module docstring [tests f-k] ([@cdce8p] - [#112709])
+- Add empty line after module docstring [tests a-e] ([@cdce8p] - [#112708])
+- Add empty line after module docstring [a-d] ([@cdce8p] - [#112697])
+- Add empty line after module docstring [g-i] ([@cdce8p] - [#112699])
+- Add empty line after module docstring [tests l-p] ([@cdce8p] - [#112710])
+- Add empty line after module docstring [j-m] ([@cdce8p] - [#112700])
+- Add empty line after module docstring [n-q] ([@cdce8p] - [#112702])
+- Add empty line after module docstring [r] ([@cdce8p] - [#112703])
+- Add empty line after module docstring [t-v] ([@cdce8p] - [#112705])
+- Add empty line after module docstring [w-z] ([@cdce8p] - [#112706])
+- Add empty line after module docstring [helpers + other] ([@cdce8p] - [#112707])
+- Remove Python 3.11 from CI ([@frenck] - [#112626])
+- Remove built-in support for import_executor in manifest ([@balloob] - [#112725])
+- Use more f-strings [ruff] ([@cdce8p] - [#112695])
+- Add empty line after module docstring (2) [components] ([@cdce8p] - [#112736])
+- Add empty line after module docstring (2) [tests.components] ([@cdce8p] - [#112737])
+- Add empty line after module docstring (2) [other] ([@cdce8p] - [#112738])
+- Replace EventType with Event [a-g] ([@cdce8p] - [#112739])
+- Replace EventType with Event [h-i] ([@cdce8p] - [#112740])
+- Replace EventType with Event [l-s] ([@cdce8p] - [#112741])
+- Replace EventType with Event [t-z] ([@cdce8p] - [#112742])
+- Replace EventType with Event [helpers] ([@cdce8p] - [#112743])
+- Add diagnostics to webmin ([@autinerd] - [#112543])
+- Update byte string formatting ([@cdce8p] - [#112752])
+- Add empty line after module docstring (3) ([@cdce8p] - [#112750])
+- Replace EventType with Event [missing] ([@cdce8p] - [#112753])
+- Update EventBus listen type signatures ([@cdce8p] - [#112760])
+- Remove entity description mixin in Fully Kiosk ([@joostlek] - [#112768])
+- Remove entity description mixin in Flume ([@joostlek] - [#112765])
+- Remove entity description mixin in HomeKit Device ([@joostlek] - [#112775])
+- Remove entity description mixin in iBeacon ([@joostlek] - [#112779])
+- Avoid trying to load translations for integrations that have none ([@bdraco] - [#112683])
+- Replace periodic tasks with background tasks ([@bdraco] - [#112726])
+- Fix race reloading homekit_controller ([@bdraco] - [#112790])
+- Add Event typing to websocket_api for entity subscriptions ([@bdraco] - [#112786])
+- Improve entity translation typing ([@bdraco] - [#112788])
+- Run service call tasks eagerly ([@bdraco] - [#112791])
+- Use Mapping as default for Event data ([@cdce8p] - [#112769])
+- Use eager_start for homeassistant triggers ([@bdraco] - [#112801])
+- Use eager_start for tasks to register integration platforms ([@bdraco] - [#112800])
+- Break out UniFi platform registration to its own class ([@Kane610] - [#112514])
+- Unifi more polish on entity description ([@Kane610] - [#112281])
+- Cache the job type for entity service calls ([@bdraco] - [#112793])
+- Make SSDP tasks background HassJob to avoid delaying startup ([@bdraco] - [#112668])
+- Give the UniFi integration better control over what data to load ([@Kane610] - [#112804])
+- Move restoring inactive clients method into UniFi entity loader ([@Kane610] - [#112805])
+- Remove entity description mixin in Jellyfin ([@joostlek] - [#112782])
+- Remove entity description mixin in Goodwe ([@joostlek] - [#112773])
+- Move wireless clients into entity_loader ([@Kane610] - [#112813])
+- Cleanup mqtt discovery code ([@jbouwh] - [#112749])
+- Update modbus test to include a dummy sensor ([@janiversen] - [#112820])
+- Revert "Cleanup mqtt discovery code" ([@jbouwh] - [#112818])
+- Remove deprecated CLOSE_COMM_ON_ERROR from modbus ([@janiversen] - [#112821])
+- Remove entity description mixin in Huawei LTE ([@joostlek] - [#112777])
+- Remove outdated prettier and yamllint `azure-*.yml` ignores ([@scop] - [#112819])
+- Remove deprecated retry_on_empty from modbus ([@janiversen] - [#112822])
+- Remove entity description mixin in Glances ([@joostlek] - [#112772])
+- Remove entity description mixin in EZVIZ ([@joostlek] - [#112764])
+- Remove entity description mixin in Environment Canada ([@joostlek] - [#112763])
+- Remove entity description mixin in Google wifi ([@joostlek] - [#112774])
+- Remove entity description mixin in idasen desk ([@joostlek] - [#112780])
+- Remove entity description mixin in Honeywell ([@joostlek] - [#112776])
+- Remove entity description mixin in Geocaching ([@joostlek] - [#112770])
+- Remove entity description mixin in AVM Fritz!Tools ([@joostlek] - [#112767])
+- Use eager_start for discovery listeners ([@bdraco] - [#112803])
+- Rename get_deconz_session to get_deconz_api ([@Kane610] - [#112826])
+- Split out Axis config data ([@Kane610] - [#112825])
+- Add icon translations to Yeelight ([@joostlek] - [#112363])
+- Bump mastodon.py version to 1.8.1 ([@thejeffreystone] - [#112728])
+- Improve performance of image streams ([@bdraco] - [#112810])
+- Allow Just-in-Time platform setup for mqtt ([@jbouwh] - [#112720])
+- Enphase Envoy refactor and extend diagnostics ([@catsmanac] - [#109080])
+- Avoid saving auth right after we load it during startup ([@bdraco] - [#112008])
+- Schedule coroutines with eager_task from async_track_state_change_event ([@bdraco] - [#112807])
+- Remove entity description mixin in IPP ([@joostlek] - [#112781])
+- Cleanup mqtt PLATFORMS constant and CI-test platform filters ([@jbouwh] - [#112847])
+- Only read cpu once during systemmonitor setup ([@bdraco] - [#112863])
+- Schedule coroutine functions eagerly when async_listen uses run_immediately ([@bdraco] - [#112846])
+- Update pytest to 8.1.1 ([@cdce8p] - [#112859])
+- Refactor handling of device updates in ESPHome ([@bdraco] - [#112864])
+- Split out deCONZ hub ([@Kane610] - [#112854])
+- Bump yalexs to 2.0.0 ([@abjorck] - [#111706])
+- Add Locks to Xiaomi-BLE ([@Ernst79] - [#111156])
+- Remove entity description mixin in Freebox ([@joostlek] - [#112766])
+- Remove entity description mixin in Private BLE Device ([@joostlek] - [#112922])
+- Remove entity description mixin in Netgear ([@joostlek] - [#112911])
+- Remove entity description mixin in SFR Box ([@joostlek] - [#112937])
+- Remove entity description mixin in Renault ([@joostlek] - [#112925])
+- Remove entity description mixin in Roku ([@joostlek] - [#112931])
+- Remove entity description mixin in Overkiz ([@joostlek] - [#112914])
+- Remove entity description mixin in Trafikverket Weatherstation ([@joostlek] - [#112957])
+- Remove entity description mixin in Trafikverket Train ([@joostlek] - [#112956])
+- Remove entity description mixin in Trafikverket Ferry ([@joostlek] - [#112955])
+- Remove entity description mixin in Trafikverket Camera ([@joostlek] - [#112954])
+- Remove entity description mixin in Sensibo ([@joostlek] - [#112936])
+- Improve 17track tests ([@shaiu] - [#112734])
+- Fix mqtt platform setup race ([@jbouwh] - [#112888])
+- Run debouncer tasks eagerly to avoid scheduling on the event loop ([@bdraco] - [#112789])
+- Import custom components in the executor by default ([@bdraco] - [#112177])
+- Remove entity description mixin in Vodafone Station ([@joostlek] - [#112967])
+- Remove entity description mixin in Zeversolar ([@joostlek] - [#112977])
+- Remove entity description mixin in Youtube ([@joostlek] - [#112975])
+- Remove entity description mixin in WAQI ([@joostlek] - [#112970])
+- Remove entity description mixin in Tradfri ([@joostlek] - [#112953])
+- Use async_at_started in Speedtest.Net ([@gjohansson-ST] - [#112110])
+- Remove entity description mixin in Permobil ([@joostlek] - [#112918])
+- Remove entity description mixin in PEGELONLINE ([@joostlek] - [#112917])
+- Remove entity description mixin in Melcloud ([@joostlek] - [#112905])
+- Remove entity description mixin in Justnimbus ([@joostlek] - [#112893])
+- Remove entity description mixin in LaCrosse View ([@joostlek] - [#112900])
+- Move wsdot fixture to integration test ([@joostlek] - [#112996])
+- Move uk_transport fixture to integration test ([@joostlek] - [#112995])
+- Move OpenALPR cloud fixture to integration test ([@joostlek] - [#112994])
+- Remove not needed hass.async_block_till_done in test ([@jbouwh] - [#113002])
+- Remove entity description mixin in Switcher Kis ([@joostlek] - [#112945])
+- Remove entity description mixin in Nettigo Air Monitor ([@joostlek] - [#112909])
+- Remove entity description mixin in Tractive ([@joostlek] - [#112952])
+- Remove entity description mixin in Synology DSM ([@joostlek] - [#112946])
+- Add icon translations to Picnic ([@joostlek] - [#112181])
+- Add icon translations to Husqvarna automower ([@joostlek] - [#111727])
+- Remove entity description mixin in Shelly ([@joostlek] - [#112938])
+- Migrate APCUPSD to has entity name ([@yuxincs] - [#112997])
+- Fix race condition when ZHA group members change ([@dmulcahey] - [#113030])
+- Ignore logging events in zha websocket tests ([@bdraco] - [#113031])
+- Fix Bang & Olufsen enum naming ([@joostlek] - [#113022])
+- Bump aioesphomeapi to 23.1.1 ([@bdraco] - [#113016])
+- Enable more SIM ruff rules ([@joostlek] - [#113015])
+- Migrate duckdns to use async_run_hass_job ([@bdraco] - [#113012])
+- Avoid scheduling person updates on the event loop ([@bdraco] - [#113010])
+- Move Microsoft face fixture to integration test ([@joostlek] - [#112993])
+- Move metoffice fixture to integration test ([@joostlek] - [#112992])
+- Move london_air fixture to integration test ([@joostlek] - [#112991])
+- Move Feedreader fixture to integration test ([@joostlek] - [#112989])
+- Schedule tasks eagerly when called from hass.add_job ([@bdraco] - [#113014])
+- Move openhardwaremonitor fixture to integration tests ([@joostlek] - [#112982])
+- Remove entity description mixin in V2C ([@joostlek] - [#112960])
+- Remove a redundant check in APCUPSD's config flow ([@yuxincs] - [#113032])
+- Rename mqtt platform setup method ([@jbouwh] - [#113042])
+- Fix google assistant cloud sync test ([@bdraco] - [#113044])
+- Fix CoreState in cloud google assistant tests ([@bdraco] - [#113045])
+- Allow Shelly CoAP to honour default network adapter ([@chemelli74] - [#110997])
+- Remove entity description mixin in Vilfo ([@joostlek] - [#112966])
+- Remove entity description mixin in Tado ([@joostlek] - [#112947])
+- Add tests for Aussie Broadband diagnostics ([@Bre77] - [#113049])
+- Bump aioslimproto to 3.0.0 ([@marcelveldt] - [#113046])
+- Remove entity description mixin in Opower ([@joostlek] - [#112913])
+- Bump Wandalen/wretry.action from 1.4.7 to 1.4.8 (@dependabot - [#113038])
+- Remove entity description mixin in WeatherFlow ([@joostlek] - [#112971])
+- Remove entity description mixin in Starlink ([@joostlek] - [#112943])
+- Remove entity description mixin in Schlage ([@joostlek] - [#112934])
+- Remove entity description mixin in Kaleidescape ([@joostlek] - [#112896])
+- Remove entity description mixin in Launch Library ([@joostlek] - [#112902])
+- Remove entity description mixin in Kaiterra ([@joostlek] - [#112895])
+- Move yandex transport fixture to integration test ([@joostlek] - [#112988])
+- Remove entity description mixin in Meater ([@joostlek] - [#112904])
+- Remove entity description mixin in Minecraft Server ([@joostlek] - [#112908])
+- Remove YAML configuration from WAQI ([@joostlek] - [#113027])
+- Bump webmin-xmlrpc to 0.0.2 ([@autinerd] - [#113004])
+- Remove entity description mixin in QNAP QSW ([@joostlek] - [#112924])
+- Remove entity description mixin in Wallbox ([@joostlek] - [#112969])
+- Remove entity description mixin in SABnzbd ([@joostlek] - [#112933])
+- Remove entity description mixin in Honeywell Lyric ([@joostlek] - [#112903])
+- Remove entity description mixin in Z-Wave.js ([@joostlek] - [#112979])
+- Remove entity description mixin in Zamg ([@joostlek] - [#112976])
+- Remove entity description mixin in Yalexs BLE ([@joostlek] - [#112974])
+- Remove entity description mixin in Xiaomi Miio ([@joostlek] - [#112973])
+- Remove entity description mixin in Whirlpool ([@joostlek] - [#112972])
+- Remove entity description mixin in VeSync ([@joostlek] - [#112965])
+- Remove entity description mixin in Venstar ([@joostlek] - [#112964])
+- Remove entity description mixin in Vallox ([@joostlek] - [#112963])
+- Remove entity description mixin in Tuya ([@joostlek] - [#112959])
+- Remove entity description mixin in Transmission ([@joostlek] - [#112958])
+- Remove entity description mixin in Tolo ([@joostlek] - [#112951])
+- Remove entity description mixin in Tautulli ([@joostlek] - [#112949])
+- Remove entity description mixin in Steamist ([@joostlek] - [#112944])
+- Remove entity description mixin in Solaredge ([@joostlek] - [#112942])
+- Remove entity description mixin in Smappee ([@joostlek] - [#112941])
+- Remove entity description mixin in SleepIQ ([@joostlek] - [#112940])
+- Remove entity description mixin in Skybell ([@joostlek] - [#112939])
+- Remove entity description mixin in Roomba ([@joostlek] - [#112932])
+- Remove entity description mixin in Ring ([@joostlek] - [#112928])
+- Remove entity description mixin in Roborock ([@joostlek] - [#112930])
+- Remove entity description mixin in Meteo-France ([@joostlek] - [#112907])
+- Remove entity description mixin in Rituals Perfume Genie ([@joostlek] - [#112929])
+- Remove entity description mixin in Renson ([@joostlek] - [#112926])
+- Remove entity description mixin in Pure Energie ([@joostlek] - [#112923])
+- Remove entity description in Point ([@joostlek] - [#112921])
+- Remove entity description mixin in Picnic ([@joostlek] - [#112920])
+- Remove entity description mixin in Pi-hole ([@joostlek] - [#112919])
+- Remove entity description mixin in PECO ([@joostlek] - [#112915])
+- Remove entity description mixin in Onvif ([@joostlek] - [#112912])
+- Remove entity description mixin in Netatmo ([@joostlek] - [#112910])
+- Remove entity description mixin in Melnor ([@joostlek] - [#112906])
+- Remove entity description mixin in Landisgyr Heat Meter ([@joostlek] - [#112901])
+- Remove entity description mixin in Kraken ([@joostlek] - [#112899])
+- Remove entity description mixin in Kostal Plenticore ([@joostlek] - [#112898])
+- Remove entity description mixin in Juicenet ([@joostlek] - [#112892])
+- Use UV instead of PIP in the CI ([@edenhaus] - [#113051])
+- Fix adding Hue bridge manually by IP ([@marcelveldt] - [#113055])
+- Bump xiaomi-ble to 0.27.0 ([@Ernst79] - [#113013])
+- Add ConfigFlow for seventeentrack integration ([@shaiu] - [#111196])
+- Move HomematicIP Cloud fixture to integration test ([@joostlek] - [#112987])
+- Prepare ring update service for deprecation ([@sdb9696] - [#108781])
+- Enable even more SIM ruff rules ([@joostlek] - [#113017])
+- Fix for Hue not applying effect in scene ([@marcelveldt] - [#113057])
+- Fix here_travel_time creating many refresh requests at startup ([@bdraco] - [#113041])
+- Remove entity description mixin in Github ([@joostlek] - [#112771])
+- Ensure wemo discovery is run in a background task ([@bdraco] - [#112665])
+- Remove fixtures from global fixtures folder ([@joostlek] - [#113060])
+- Improve lists in integrations [A] ([@joostlek] - [#113006])
+- Change airthings pressure sensor device_class to atmospheric pressure ([@OndraM] - [#113005])
+- Bump `regenmaschine` to 2024.03.0 ([@bachya] - [#113074])
+- Improve lists in integrations [C-D] ([@joostlek] - [#113072])
+- Improve lists in integrations [B] ([@joostlek] - [#113069])
+- Add icon translations to Version ([@joostlek] - [#112343])
+- Only load services.yaml for integrations that have it ([@balloob] - [#112732])
+- Start tasks eagerly in for async_at_start(ed) ([@bdraco] - [#112802])
+- Migrate dispatcher to create tasks eagerly ([@bdraco] - [#112845])
+- Migrate _async_when_setup to use eager_start ([@bdraco] - [#112872])
+- Ensure that the ring integration always raises HomeAssistantError for user actions ([@sdb9696] - [#109893])
+- Fix race in script stop that could cause async_stop to hang forever ([@bdraco] - [#113089])
+- Fix location data in Teslemetry ([@Bre77] - [#112866])
+- Migrate async_run_job to use eager_start for tasks ([@bdraco] - [#113011])
+- Reduce latency to populate initial HKC bluetooth device state ([@bdraco] - [#113103])
+- Make sonos ssdp discovery callback a callback function ([@bdraco] - [#113107])
+- Make sonos household_coordinator setup a callback function ([@bdraco] - [#113108])
+- Make sonos binary sensor entity creation callback functions ([@bdraco] - [#113109])
+- Add support for run_immediately to async_listen_once ([@bdraco] - [#113020])
+- Run coroutines as eager tasks in async_run_hass_job ([@bdraco] - [#111683])
+- Make cast async_cast_discovered a callback function ([@bdraco] - [#113111])
+- Migrate homekit to use async_at_started ([@bdraco] - [#113102])
+- Make restore state started a callback function ([@bdraco] - [#113110])
+- Use run_immediately for starting discovery at the started event ([@bdraco] - [#113112])
+- Update timezone in supervisor in an eager task ([@bdraco] - [#113113])
+- Migrate scene platform to use async_add_executor_job ([@bdraco] - [#113114])
+- Attach template triggers at start eagerly ([@bdraco] - [#113120])
+- Add run_immediately to the zone core config update async_listen ([@bdraco] - [#113119])
+- Remove unnecessary use of async_run_job in script helper ([@bdraco] - [#113118])
+- Remove unnecessary use of async_add_job in openalpr_cloud ([@bdraco] - [#113116])
+- Await discovery_function in the DiscoveryFlowHandler instead of wrapping it in a task ([@bdraco] - [#113115])
+- Simplify automation startup logic ([@bdraco] - [#113122])
+- Migrate remaining call in check_config helper to use async_get_component ([@bdraco] - [#113123])
+- Import homeassistant trigger platforms in the executor ([@bdraco] - [#113124])
+- Switch the reload helper to use async_get_component ([@bdraco] - [#113126])
+- Add A6 family code for DS2438 1-Wire sensor ([@definitio] - [#112844])
+- Add missing device info to Husqvarna Automower ([@Thomas55555] - [#113090])
+- Add scheduled mode to renault charge mode ([@slyoldfox] - [#105967])
+- Add reconfigure flow to homeworks ([@emontnemery] - [#112419])
+- Validate state_class with last_reset_value_template for mqtt sensors ([@jbouwh] - [#113099])
+- Update vallox_websocket_api to 5.1.1 ([@yozik04] - [#113139])
+- Bump Wandalen/wretry.action from 1.4.8 to 1.4.9 (@dependabot - [#113132])
+- Convert sets to list before passing to the JSON serializer in the registries ([@bdraco] - [#113133])
+- Add the ability to create Debouncer tasks as background tasks ([@bdraco] - [#113128])
+- Add device_id to sentence trigger and external conversation APIs ([@synesthesiam] - [#113094])
+- Remove deprecated `hass.components` usage in device_sun_light_trigger ([@jpbede] - [#111881])
+- Add motion detection enable/disable to ring camera platform ([@sdb9696] - [#108789])
+- Remove entity description mixin in Screenlogic ([@joostlek] - [#112935])
+- Remove deprecated `hass.components` usage in service tests ([@jpbede] - [#111883])
+- Clean up Abode imports ([@joostlek] - [#113138])
+- Improve lists in integrations [E-F] ([@joostlek] - [#113075])
+- Make august activity update a background task ([@bdraco] - [#112652])
+- Make Bluetooth active coordinator debouncers run tasks in the background ([@bdraco] - [#113129])
+- Ensure HKC debounced availability poll does not block startup ([@bdraco] - [#113130])
+- Avoid multiple executor jobs to add wemo devices ([@bdraco] - [#112484])
+- Add icon translations to Lametric ([@joostlek] - [#111854])
+- Add options update listener for Speedtest.Net ([@gjohansson-ST] - [#112108])
+- Add binary_sensor to homeworks ([@emontnemery] - [#112418])
+- Fix Axis unique ID ([@Kane610] - [#112132])
+- Use enum device class in Dexcom ([@joostlek] - [#112423])
+- Add icons to Teslemetry ([@Bre77] - [#112546])
+- Sonos reduce test time ([@PeteRager] - [#111688])
+- Avoid some event loop overhead for ESPHome listeners ([@bdraco] - [#113173])
+- Add "language" to strings.json ([@autinerd] - [#112869])
+- Move Notion coordinator to its own module ([@bachya] - [#112756])
+- Add icon translations to Bond ([@joostlek] - [#111349])
+- Fix System Bridge media source data URL ([@timmo001] - [#112612])
+- Small improvement to test run time ([@bdraco] - [#113175])
+- Remove ZHA IasZone sensor migration ([@TheJulianJES] - [#111893])
+- Add a task name to the config entry retry tasks ([@bdraco] - [#113188])
+- Fix radon precision for Airthings BLE ([@LaStrada] - [#113185])
+- ESPHome: Catch and re-raise client library errors as HomeAssistantErrors ([@jesserockz] - [#113026])
+- Properly mark Plex update sensor when current ([@jjlawren] - [#113197])
+- ESPHome: Add Date Entity support ([@jesserockz] - [#112475])
+- Bump radios to 0.3.1 ([@bdraco] - [#112850])
+- Bump github/codeql-action from 3.24.6 to 3.24.7 (@dependabot - [#113207])
+- Bump Wandalen/wretry.action from 1.4.9 to 1.4.10 (@dependabot - [#113206])
+- Update pytest artifact actions to v4 ([@cdce8p] - [#110906])
+- Improve lists for MQTT integration ([@jbouwh] - [#113184])
+- Migrate one time listeners to use async_run_hass_job ([@bdraco] - [#113179])
+- Bump actions/checkout from 4.1.1 to 4.1.2 (@dependabot - [#113208])
+- Migrate torque to use async_add_hass_job ([@bdraco] - [#113218])
+- Only extract traceback once in system_log ([@bdraco] - [#113201])
+- Simplify entity _attr cached_property getter implementation ([@bdraco] - [#113195])
+- Migrate harmony to use async_run_hass_job ([@bdraco] - [#113178])
+- Ensure apple_tv connect loop is cancelled on shutdown ([@bdraco] - [#113191])
+- Simplify clearing _attr cached_property in entities ([@bdraco] - [#113136])
+- Add diagnostics platform to IPMA ([@dgomes] - [#105697])
+- Update dsmr reader codeowner ([@joostlek] - [#108152])
+- Constrain pycountry to >=23.12.11 ([@bdraco] - [#112849])
+- Remove HassJob wrapping from the DataUpdateCoordinator ([@bdraco] - [#113192])
+- Add processes services to System Bridge ([@timmo001] - [#103564])
+- Improve lists in integrations [I-K] ([@joostlek] - [#113221])
+- Deprecate `homeassistant.components.is_on` function ([@jpbede] - [#111891])
+- Improve lists in integrations [G-H] ([@joostlek] - [#113168])
+- CI: Move pytest-github-actions-annotate-failures to test deps, upgrade ([@akx] - [#104604])
+- Improve lists in integrations [P-Q] ([@joostlek] - [#113236])
+- Run coordinator shutdown eagerly ([@bdraco] - [#113174])
+- Use `single_config_entry` in Accuweather manifest ([@bieniu] - [#111548])
+- Improve lists in integrations [T-U] ([@joostlek] - [#113243])
+- Parameterize some tests in generic_thermostat ([@esciara] - [#105643])
+- Add icon translations to Roku ([@joostlek] - [#112214])
+- Remove remaining async_add_job calls in core ([@bdraco] - [#113217])
+- Improve lists in integrations [V-W] ([@joostlek] - [#113252])
+- Use async_update_reload_and_abort helper in tailwind ([@jpbede] - [#110885])
+- Rework Melissa tests ([@joostlek] - [#113241])
+- Improve lists in integrations [X-Z] ([@joostlek] - [#113253])
+- Improve lists in integrations [L-M] ([@joostlek] - [#113227])
+- Improve lists in integrations [N-O] ([@joostlek] - [#113231])
+- Improve lists in integrations [R-S] ([@joostlek] - [#113233])
+- Split out deCONZ config model ([@Kane610] - [#112851])
+- Add service icons to Bluesound ([@joostlek] - [#113281])
+- Add service icons to Browser ([@joostlek] - [#113283])
+- Add service icons to Command line ([@joostlek] - [#113285])
+- Ensure apple_tv setup retries later on timeout ([@bdraco] - [#113367])
+- Bump aiodns to 3.1.1 ([@bdraco] - [#113371])
+- Bump bluetooth-auto-recovery to 1.4.0 ([@bdraco] - [#113368])
+- Bump aiodiscover to 2.0.0 ([@bdraco] - [#113337])
+- Fix uv cache dir env [ci] ([@cdce8p] - [#113312])
+- Avoid pre-importing config_flows if the integration does not support migration ([@bdraco] - [#113369])
+- Bump ha-ffmpeg to 3.2.0 ([@bdraco] - [#113297])
+- Add default_config to the bootstrap pre-imports ([@bdraco] - [#113263])
+- Migrate solax away from using async_add_job ([@bdraco] - [#113257])
+- Remove async_add_job calls from configurator ([@bdraco] - [#113256])
+- Migrate script integration to create eager tasks ([@bdraco] - [#113189])
+- Add a helper to import modules from the event loop ([@bdraco] - [#113169])
+- Remove async_add_job calls from qwikswitch ([@bdraco] - [#113258])
+- Add service icons to REST command ([@joostlek] - [#113347])
+- Fix group loading too late resulting in incorrect state ([@bdraco] - [#113262])
+- Remove usage of async_add_job in tests ([@bdraco] - [#113259])
+- Add service icons to Unifi ([@joostlek] - [#113360])
+- Bump opower to 0.4.0 ([@tronikos] - [#113390])
+- Bump gassist-text to 0.0.11 ([@tronikos] - [#113386])
+- Bump docker/login-action from 3.0.0 to 3.1.0 (@dependabot - [#113384])
+- Add service icons to Debug py ([@joostlek] - [#113287])
+- Add virtual integration Sacramento Municipal Utility District (SMUD) ([@tronikos] - [#113389])
+- Add service icons to Filter ([@joostlek] - [#113295])
+- Improve loops and lists ([@joostlek] - [#113269])
+- Enable ISC ruff rule ([@joostlek] - [#113270])
+- Remove old migration from lovelace ([@emontnemery] - [#113388])
+- Update ring integration imports ([@sdb9696] - [#113397])
+- Migrate auth to use async_import_module to avoid blocking I/O in the event loop ([@bdraco] - [#113387])
+- Fix telegram_bot doing blocking I/O in the event loop to import platforms ([@bdraco] - [#113383])
+- Migrate sun to use single_config_entry ([@bdraco] - [#113370])
+- Add service icons to Zoneminder ([@joostlek] - [#113366])
+- Fix smartthings doing blocking I/O in the event loop to import platforms ([@bdraco] - [#113382])
+- Add service icons to Wake on LAN ([@joostlek] - [#113362])
+- Add service icons to System Log ([@joostlek] - [#113355])
+- Add service icons to Statistics ([@joostlek] - [#113353])
+- Add service icons to Universal ([@joostlek] - [#113361])
+- Add service icons to Alert ([@joostlek] - [#113274])
+- Add service icons to System Bridge ([@joostlek] - [#113354])
+- Add service icons to Timer ([@joostlek] - [#113358])
+- Add service icons to SMTP ([@joostlek] - [#113351])
+- Add service icons to Schedule ([@joostlek] - [#113350])
+- Add service icons to Recorder ([@joostlek] - [#113344])
+- Add service icons to Snips ([@joostlek] - [#113352])
+- Add service icons to Ombi ([@joostlek] - [#113339])
+- Move modbus check_config to setup, to have access to hass ([@janiversen] - [#112828])
+- Bump hass-nabucasa from 0.78.0 to 0.79.0 ([@ludeeus] - [#113405])
+- Add floor support to areas WebSocket API ([@frenck] - [#113402])
+- Add service icons to Yamaha ([@joostlek] - [#113365])
+- Add service icons to Wemo ([@joostlek] - [#113363])
+- Add service icons to Telegram bot ([@joostlek] - [#113357])
+- Add service icons to Toon ([@joostlek] - [#113359])
+- Add service icons to Telegram ([@joostlek] - [#113356])
+- Add service icons to Route53 ([@joostlek] - [#113349])
+- Add service icons to RFLink ([@joostlek] - [#113348])
+- Add service icons to Remember the milk ([@joostlek] - [#113345])
+- Add service icons to Xiaomi Miio ([@joostlek] - [#113364])
+- Add service icons to QVR Pro ([@joostlek] - [#113343])
+- Add service icons to Python Scripts ([@joostlek] - [#113342])
+- Add service icons to Pilight ([@joostlek] - [#113341])
+- Add service icons to nx584 ([@joostlek] - [#113338])
+- Add service icons to Nissan Leaf ([@joostlek] - [#113336])
+- Add service icons to Netatmo ([@joostlek] - [#113335])
+- Add service icons to Media Extractor ([@joostlek] - [#113329])
+- Add service icons to Microsoft Face ([@joostlek] - [#113330])
+- Add service icons to Minio ([@joostlek] - [#113331])
+- Add service icons to Ness alarm ([@joostlek] - [#113333])
+- Add service icons to Matrix ([@joostlek] - [#113328])
+- Add service icons to Lovelace ([@joostlek] - [#113327])
+- Add service icons to Logi circle ([@joostlek] - [#113326])
+- Add service icons to Local file ([@joostlek] - [#113323])
+- Add service icons to Keyboard ([@joostlek] - [#113322])
+- Add service icons to Kef ([@joostlek] - [#113321])
+- Add service icons to Keba ([@joostlek] - [#113320])
+- Add service icons to Iperf3 ([@joostlek] - [#113319])
+- Add service icons to Intent Script ([@joostlek] - [#113318])
+- Add service icons to Input Text ([@joostlek] - [#113317])
+- Add service icons to Input Select ([@joostlek] - [#113316])
+- Add service icons to Input button ([@joostlek] - [#113313])
+- Add service icons to Input Number ([@joostlek] - [#113315])
+- Add service icons to IHC ([@joostlek] - [#113311])
+- Add service icons to HTML5 ([@joostlek] - [#113309])
+- Add service icons to Homematic ([@joostlek] - [#113308])
+- Add service icons to Home Assistant ([@joostlek] - [#113307])
+- Add service icons to Habitica ([@joostlek] - [#113303])
+- Add service icons to Geniushub ([@joostlek] - [#113301])
+- Add service icons to Generic Thermostat ([@joostlek] - [#113300])
+- Add service icons to Frontend ([@joostlek] - [#113299])
+- Add service icons to Freebox ([@joostlek] - [#113298])
+- Add service icons to Ffmpeg ([@joostlek] - [#113294])
+- Add service icons to Evohome ([@joostlek] - [#113293])
+- Add service icons to Foursquare ([@joostlek] - [#113296])
+- Add service icons to Envisalink ([@joostlek] - [#113292])
+- Add service icons to HDMI CEC ([@joostlek] - [#113304])
+- Add service icons to Ebusd ([@joostlek] - [#113291])
+- Add service icons to Downloader ([@joostlek] - [#113289])
+- Add service icons to Dominos ([@joostlek] - [#113288])
+- Add service icons to Logbook ([@joostlek] - [#113324])
+- Add service icons to Logger ([@joostlek] - [#113325])
+- Add service icons to Input Datetime ([@joostlek] - [#113314])
+- Add service icons to Conversation ([@joostlek] - [#113286])
+- Add service icons to DuckDNS ([@joostlek] - [#113290])
+- Add service icons to Agent DVR ([@joostlek] - [#113273])
+- Bump tololib to 1.1.0 ([@MatthiasLohr] - [#113268])
+- Add service icons to Advantage air ([@joostlek] - [#113272])
+- Add service icons to Channels ([@joostlek] - [#113284])
+- Add service icons to Modbus ([@joostlek] - [#113332])
+- Add service icons to Backup ([@joostlek] - [#113277])
+- Add service icons to Bayesian ([@joostlek] - [#113278])
+- Add service icons to Bluetooth Tracker ([@joostlek] - [#113282])
+- Add service icons to History Stats ([@joostlek] - [#113306])
+- Add service icons to Group ([@joostlek] - [#113302])
+- Add service icons to REST ([@joostlek] - [#113346])
+- Add service icons to Amcrest ([@joostlek] - [#113276])
+- Add service icons to Blackbird ([@joostlek] - [#113280])
+- Add service icons to Persistent Notification ([@joostlek] - [#113340])
+- Deprecate the map integration ([@emontnemery] - [#113215])
+- Enable PERF ruff rules ([@joostlek] - [#113408])
+- Fix icon mistakes ([@joostlek] - [#113420])
+- Add service icons to Utility meter ([@joostlek] - [#113419])
+- Add service icons to Demo ([@joostlek] - [#113414])
+- Bump weatherflow_cloud backing lib v0.2.13 ([@jeeftor] - [#113181])
+- Add service icons to Scene ([@joostlek] - [#113418])
+- Add service icons to ADS ([@joostlek] - [#113412])
+- Add UniFi Protect service to remove privacy zones ([@AngellusMortis] - [#111292])
+- Add icon translations to Unifi protect ([@joostlek] - [#112332])
+- Add floors to service target ([@frenck] - [#110850])
+- add switch platform for tolo ([@MatthiasLohr] - [#113440])
+- Allow entity platforms without entity_component in icon validation ([@joostlek] - [#113422])
+- Add service icons to Fan ([@joostlek] - [#113415])
+- Fix alarm control panel icons ([@joostlek] - [#113413])
+- Add service icons to Abode ([@joostlek] - [#113411])
+- Add icon translations to ZHA ([@joostlek] - [#112368])
+- Fix calling sync api in counter/ffmpeg/device_tracker tests ([@bdraco] - [#113441])
+- Deprecate async_run_job and async_add_job ([@bdraco] - [#113260])
+- Add service icons to Climate ([@joostlek] - [#113409])
+- Add aroma therapy select entity for tolo integration ([@MatthiasLohr] - [#113442])
+- Revert "Remove unused test helper mock_area_registry" ([@jbouwh] - [#113453])
+- Fix hassfest icons check for notify and image_processing ([@jbouwh] - [#113446])
+- Add aliases support to floor registry WebSocket API ([@frenck] - [#113401])
+- Support lutron transition time and flash for lights ([@wilburCforce] - [#109185])
+- Change modbus integration to use async library calls ([@janiversen] - [#113450])
+- Add service icons to Notify ([@joostlek] - [#113417])
+- Add service icons to Image processing ([@joostlek] - [#113416])
+- Bump aiooncue to 0.3.7 ([@PeteRager] - [#113451])
+- Add icon translations to myuplink ([@astrandb] - [#111466])
+- Construct storage data in the executor to avoid blocking the event loop ([@bdraco] - [#113465])
+- Reduce overhead to save the larger registries ([@bdraco] - [#113462])
+- Avoid creating another ssl context in cert_expiry ([@bdraco] - [#113467])
+- Bump aiodhcpwatcher to 1.0.0 ([@bdraco] - [#113469])
+- Reduce script overhead by avoiding creation of many tasks ([@bdraco] - [#113183])
+- Fix scene integration doing blocking I/O in the event loop to import platforms ([@bdraco] - [#113391])
+- Fix delayed registry check to only using the short delay at running ([@bdraco] - [#113471])
+- Start script runs eagerly ([@bdraco] - [#113190])
+- Remove unused tts fixture ([@emontnemery] - [#113480])
+- Move loading of ha-av to the executor ([@bdraco] - [#113485])
+- Remove supports_encryption check from mobile_app ([@bdraco] - [#113490])
+- Improve State docstring ([@emontnemery] - [#113501])
+- Avoid multiple context switches to setup a sonos speaker ([@bdraco] - [#113378])
+- Address late review on adding an error sensor to Husqvarna Automower ([@Thomas55555] - [#113242])
+- Add missing mystrom sensor ([@slyoldfox] - [#113225])
+- Remove old update unique id function from deCONZ binary sensor ([@Kane610] - [#112536])
+- Create more relevant names for myuplink DeviceInfo ([@astrandb] - [#111502])
+- Add icon translations to Moon ([@dougiteixeira] - [#111386])
+- Use `single_config_entry` in KNX manifest ([@farmio] - [#112526])
+- Remove OpenCV integration ([@thecode] - [#113455])
+- Ensure TurboJPEG is imported in the executor ([@bdraco] - [#113504])
+- Use on state icons by default in Balboa spa integration ([@snoack] - [#111911])
+- Add Ring Intercom support ([@cosimomeli] - [#109819])
+- Add theme color support to labels ([@frenck] - [#113404])
+- Add category registry ([@frenck] - [#110897])
+- create issues for modbus config errors ([@janiversen] - [#113431])
+- Speed up ffmpeg setup ([@bdraco] - [#113496])
+- Filter out irrelevant entities on SMO20 devices in myuplink ([@astrandb] - [#113493])
+- Remove Sonos migrations ([@joostlek] - [#113506])
+- Add diagnostics platform to Fastdotcom ([@erwindouna] - [#111525])
+- Remove modbus create_issue from init ([@janiversen] - [#113510])
+- Add Ring Intercom open door button ([@cosimomeli] - [#113514])
+- Add icon translations to Sonos ([@joostlek] - [#112235])
+- Add missing icon for Unifi protect service ([@joostlek] - [#113508])
+- Protect SupervisorIssues.update method ([@mdegat01] - [#113425])
+- Bump opower to 0.4.1 ([@drewclauson] - [#113509])
+- Remove repetitive words in comments and docstrings ([@soonsouth] - [#113529])
+- Add Fyta integration ([@dontinelli] - [#110816])
+- Use Volume Flow Rate device class in BTHome ([@joostlek] - [#113530])
+- Freeze timezone in bmw_connected_drive tests ([@Thomas55555] - [#113533])
+- Fix MyUplink tests ([@joostlek] - [#113534])
+- Support configuring Axis to use HTTPS ([@Kane610] - [#113271])
+- Use Volume Flow Rate device class in DROP connect ([@joostlek] - [#113528])
+- Use Volume Flow Rate device class in Opentherm gw ([@joostlek] - [#113531])
+- Do not allow modbus config without entities ([@janiversen] - [#113516])
+- Use single_config_entry in jellyfin manifest ([@ctalkington] - [#113202])
+- Import and create pyudev for usb in the executor ([@bdraco] - [#113478])
+- Remove old update of sensor unique id in deCONZ ([@Kane610] - [#113527])
+- Remove old update of number unique id in deCONZ ([@Kane610] - [#113524])
+- Remove old update of group unique id in deCONZ ([@Kane610] - [#112533])
+- Add missing continue in legacy recorder history function ([@emontnemery] - [#113535])
+- fix mqtt siren test asserts ([@autinerd] - [#113550])
+- fix homekit test asserts ([@autinerd] - [#113549])
+- Speed up loading sun ([@bdraco] - [#113544])
+- Revert "Avoid pre-importing config_flows if the integration does not … ([@gjohansson-ST] - [#113553])
+- Add missing async_block_till_done to jellyfin test_invalid_auth test ([@bdraco] - [#113556])
+- Avoid calling entry.async_migrate in sonarr tests ([@bdraco] - [#113557])
+- Remove danielperna84 as codeowner ([@danielperna84] - [#109662])
+- Add translations for devolo Home Network exceptions ([@Shutgun] - [#105755])
+- Restore group config_flow pre-import ([@bdraco] - [#113558])
+- Send keep-alive frames in image proxy stream ([@OnFreund] - [#113542])
+- Add profiler set_asyncio_debug service ([@bdraco] - [#113447])
+- Remove group integration platforms that use the default states ([@bdraco] - [#113562])
+- Fix lingering hassio issues test ([@jbouwh] - [#113569])
+- Cleanup some circular imports in group ([@bdraco] - [#113554])
+- Add ruff B005, B015, B032 and fix occurrences ([@autinerd] - [#113543])
+- Improve typing of State.as_compressed_state ([@emontnemery] - [#113540])
+- Move group config flow pre-import to its init ([@bdraco] - [#113564])
+- Reduce bottlenecks in bootstrap by ordering the setup of integrations ([@bdraco] - [#113570])
+- Fix unifiprotect tests for ruff B018 ([@autinerd] - [#113584])
+- Fix freedompro tests for ruff B018 ([@autinerd] - [#113583])
+- Add additional sensors to Teslemetry ([@Bre77] - [#112555])
+- Add battery discharge sensor to ViCare integration ([@CFenner] - [#113502])
+- Shelly config flow test wait for tasks to finish ([@thecode] - [#113588])
+- Use async_create_task in recorder init tests ([@bdraco] - [#113586])
+- Add JVC Projector Sensors ([@msavazzi] - [#108949])
+- Enable ruff RUF005 and fix occurrences ([@autinerd] - [#113589])
+- Remove unnecessary method in UniFi entity loader ([@Kane610] - [#113597])
+- Axis use entity description in switch platform ([@Kane610] - [#113595])
+- Clean up unneeded ruff noqa directives ([@autinerd] - [#113616])
+- Remove deprecated `hass.components` from mysensors ([@jpbede] - [#113611])
+- Freeze time on profile test ([@jbouwh] - [#113618])
+- Add a guard to handle unhashable platforms in config ([@bdraco] - [#113607])
+- Avoid creating tasks in homeassistant_alerts when the debouncer will not fire ([@bdraco] - [#113580])
+- Gather loading platforms in async_process_component_config ([@bdraco] - [#113573])
+- Fix vulcan calendar offset ([@Antoni-Czaplicki] - [#113604])
+- Add ruff rules PIE790, PIE794, PIE807, PIE810 ([@autinerd] - [#113617])
+- Remove deprecated `hass.components` from legacy device tracker platform ([@jpbede] - [#113612])
+- Fix race in removing modified devices from the entity registry ([@bdraco] - [#113623])
+- snmp: Better sensor support to resolve previous issues ([@lextm] - [#113624])
+- Generate HomeAssistantError message from English translations ([@jbouwh] - [#113305])
+- Add ruff rule PIE804 ([@autinerd] - [#113620])
+- Remove ignore for ruff PLC0208 ([@autinerd] - [#113537])
+- Use `mock_platform` for button entity component tests instead of `hass.components` ([@jpbede] - [#113627])
+- Add new fields from UniFi Protect v3 ([@AngellusMortis] - [#113631])
+- Run apple_tv shutdown eagerly at the stop event ([@bdraco] - [#113637])
+- Run shelly coordinator shutdown immediately at the stop event ([@bdraco] - [#113633])
+- Shutdown config entry manager immediately at the stop event ([@bdraco] - [#113632])
+- Shutdown homekit eagerly at the stop event ([@bdraco] - [#113639])
+- Consolidate ruff PL and Q rules ([@autinerd] - [#113555])
+- Run functions from ssdp listeners immediately ([@bdraco] - [#113634])
+- Fix zeroconf shutting down too early ([@bdraco] - [#113638])
+- Run entity component shutdown immediately ([@bdraco] - [#113635])
+- Create config entry async_on_unload tasks eagerly ([@bdraco] - [#113626])
+- Bump snapcast to 2.3.6 ([@luar123] - [#113606])
+- Cleanup sonos shutdown process ([@bdraco] - [#113654])
+- Deprecate UniFi Protect HDR switch and package sensor ([@AngellusMortis] - [#113636])
+- Add ruff rule PIE800 ([@autinerd] - [#113619])
+- Eagerly shutdown unifiprotect at the stop event ([@bdraco] - [#113655])
+- Run yalexs_ble shutdown with run_immediately ([@bdraco] - [#113653])
+- Eagerly shutdown homekit_controller at the stop event ([@bdraco] - [#113650])
+- Run bond shutdown listener with run_immediately ([@bdraco] - [#113657])
+- Save bluetooth passive data eagerly at the stop event ([@bdraco] - [#113648])
+- Add run_immediately to bluetooth listeners ([@bdraco] - [#113659])
+- Add tests of homeworks binary sensor ([@emontnemery] - [#113577])
+- Add tests of homeworks light ([@emontnemery] - [#113579])
+- Add ruff rule PIE808 ([@autinerd] - [#113621])
+- Add tests of homeworks button ([@emontnemery] - [#113578])
+- Add tests of homeworks __init__ ([@emontnemery] - [#113581])
+- Replace pylint pointless-statement with ruff B018 ([@autinerd] - [#113582])
+- Improve debug logging in Tankerkoenig ([@mib1185] - [#113674])
+- Remove deprecated `hass.components` from image_processing platform ([@jpbede] - [#113613])
+- Add Ruff LOG rules ([@autinerd] - [#113677])
+- Freeze time on zwave_js update test ([@jbouwh] - [#113625])
+- Re-ignore Ruff rule PLC1901 ([@autinerd] - [#113675])
+- Add WAN port connection control to TP-Link Omada gateways ([@MarkGodwin] - [#111431])
+- Use `mock_platform` for event entity component tests instead of `hass.components` ([@jpbede] - [#113667])
+- Migrate stream listeners to use run_immediately and eager tasks ([@bdraco] - [#113660])
+- Remove deprecated `hass.components` from network helper function ([@jpbede] - [#113615])
+- Remove deprecated `hass.components` from withings webhook tests ([@jpbede] - [#113687])
+- Add run_immediately to usb start/stop listeners ([@bdraco] - [#113658])
+- Move ESPHome disconnects to the close event ([@bdraco] - [#113652])
+- Run entity registry write_unavailable_states immediately at start ([@bdraco] - [#113647])
+- Run registry cleanup listeners immediately ([@bdraco] - [#113646])
+- Migrate registry for labels and categories to run_immediately ([@bdraco] - [#113645])
+- Start and stop template cache watcher to run_immediately ([@bdraco] - [#113644])
+- Cache late imported async_get_exception_message for HomeAssistantError ([@jbouwh] - [#113683])
+- Enable Ruff RSE ([@autinerd] - [#113695])
+- Improve scaffold test_config_flow ([@jwillemsen] - [#113229])
+- Adjust config flow pre-import comment in group ([@bdraco] - [#113702])
+- Migrate isy994 listeners to use run_immediately ([@bdraco] - [#113661])
+- Bump xiaomi-ble to 0.27.1 ([@Ernst79] - [#113686])
+- Bump dawidd6/action-download-artifact from 3.1.2 to 3.1.3 (@dependabot - [#113720])
+- Move legacy device_tracker setup to a tracked task ([@bdraco] - [#113715])
+- Run august stop listener with run_immediately ([@bdraco] - [#113729])
+- Move legacy notify setup to use tracked tasks ([@bdraco] - [#113716])
+- Move legacy stt setup to use tracked tasks ([@bdraco] - [#113718])
+- Move legacy tts setup to use tracked tasks ([@bdraco] - [#113717])
+- Add first batch of Ruff PT rules ([@autinerd] - [#113665])
+- Get HomeAssistantError message from translation cache only ([@jbouwh] - [#113688])
+- Get ServiceValidationError message from translation cache only ([@jbouwh] - [#113704])
+- Run dhcp listeners with run_immediately ([@bdraco] - [#113726])
+- Bump apprise to 1.7.4 ([@caronc] - [#113629])
+- Add Downloader config flow, including tests ([@erwindouna] - [#98722])
+- Allow configuring Starlink sleep schedule ([@boswelja] - [#103057])
+- Add additional buttons to OctoPrint ([@Xitee1] - [#103139])
+- Add camera in use and pending reboot binary sensors to System Bridge ([@timmo001] - [#104095])
+- Log cannot connect exception in Tedee config flow ([@zweckj] - [#113740])
+- Patch Discovery timeout in govee light local ([@joostlek] - [#113692])
+- Add support for Tuya dimmer module ([@mjh1] - [#113741])
+- Add config flow to Rova ([@GidoHakvoort] - [#113596])
+- Axis use entity description light platform ([@Kane610] - [#113602])
+- Remove deprecated `hass.components` from netatmo webhook tests ([@jpbede] - [#113691])
+- Add WebSocket support for handling labels on device registry ([@frenck] - [#113758])
+- Add WebSocket support for assigning labels to entities ([@frenck] - [#113757])
+- Streamline naming in deCONZ integration ([@Kane610] - [#111977])
+- Add WebSocket support for handling labels on areas registry ([@frenck] - [#113755])
+- Add labels to service target ([@frenck] - [#113753])
+- Run websocket shutdown listener with run_immediately ([@bdraco] - [#113727])
+- Refactor integration startup time to show wall clock time ([@bdraco] - [#113707])
+- Bump PyMetno to 0.12.0 ([@bdraco] - [#113777])
+- Start live history/logbook with eager tasks ([@bdraco] - [#113779])
+- Bump dawidd6/action-download-artifact from 3.1.3 to 3.1.4 (@dependabot - [#113788])
+- Bump github/codeql-action from 3.24.7 to 3.24.8 (@dependabot - [#113789])
+- Require an icon for a service ([@joostlek] - [#112373])
+- Create tasks eagerly with core create_task ([@bdraco] - [#113781])
+- Align Comelit climate code to humidifier ([@chemelli74] - [#113747])
+- Migrate restore_state shutdown to use run_immediately ([@bdraco] - [#113786])
+- Use async api in template weather to create tasks ([@bdraco] - [#113784])
+- Use async api in yamaha_musiccast to create tasks ([@bdraco] - [#113785])
+- Use async api in generic_thermostat to create tasks ([@bdraco] - [#113783])
+- Call async task creation api in apple_tv ([@bdraco] - [#113782])
+- Start energy load platform task eagerly ([@bdraco] - [#113778])
+- Bump sunweg to 2.1.1 ([@rokam] - [#113767])
+- Enable Ruff rule PT007 ([@autinerd] - [#113764])
+- Update Home Assistant base image to 2024.03.0 ([@frenck] - [#113797])
+- Add WS command cloud/remove_data ([@emontnemery] - [#109821])
+- Add Room Audio Control to Control4 Integration ([@nalin29] - [#87821])
+- Simplify UV install in CI ([@edenhaus] - [#113803])
+- Allow retries on communication exceptions for Aurora ABB Powerone solar inverter ([@davet2001] - [#104492])
+- Bump bthome-ble to 3.8.1 ([@Ernst79] - [#113800])
+- Migrate Harmony to has entity name ([@joostlek] - [#104737])
+- Find referenced floors in automations & scripts ([@frenck] - [#113802])
+- Add binary sensor platform for Husqvarna Automower ([@Thomas55555] - [#113248])
+- Add device_tracker platform for husqvarna_automower ([@Thomas55555] - [#111403])
+- Find referenced labels in automations & scripts ([@frenck] - [#113812])
+- Revert get_model from myuplink lib ([@astrandb] - [#113811])
+- Do not patch `asyncio.timeout` in govee light local test ([@jpbede] - [#113819])
+- Fix flakey profiler object growth tests ([@bdraco] - [#113825])
+- Fix duplicate events in live logbook ([@bdraco] - [#113828])
+- Remove deprecated `hass.components` from http test ([@jpbede] - [#113823])
+- Remove deprecated `hass.components` from cloud client test ([@jpbede] - [#113820])
+- Remove deprecated `hass.components` from person test ([@jpbede] - [#113822])
+- Only wait for import flows in setup of there is a config flow ([@bdraco] - [#113780])
+- Fix template sensor test relying on event bus debug logging ([@bdraco] - [#113842])
+- Migrate samsungtv stop to use run_immediately ([@bdraco] - [#113834])
+- Migrate camera listeners to use run_immediately ([@bdraco] - [#113840])
+- Only create one executor job to shutdown wemo ([@bdraco] - [#113836])
+- Migrate legacy device_tracker shutdown to use run_immediately ([@bdraco] - [#113835])
+- Use `mock_platform` for light entity component tests instead of `hass.components` ([@jpbede] - [#113845])
+- Remove deprecated `hass.components` from vilfo config flow tests ([@jpbede] - [#113821])
+- Update actions/cache to 4.0.2 ([@cdce8p] - [#113817])
+- Upgrade whirlpool integration to add shared appliances and allow brand selection ([@NodeJSmith] - [#111687])
+- Reduce overhead to write dlna_dmr state ([@bdraco] - [#113776])
+- Avoid expensive db queries at startup to check if data is migrated ([@bdraco] - [#113773])
+- Bump aioesphomeapi to 23.2.0 ([@jesserockz] - [#113854])
+- Add icon translations to Github ([@joostlek] - [#111614])
+- Fix flapping device tracker test ([@bdraco] - [#113859])
+- Fix flapping stream hls test ([@bdraco] - [#113858])
+- Remove deprecated `hass.components` from group light tests and use fixture ([@jpbede] - [#113862])
+- Avoid creating unneeded Context and Event objects when firing events ([@emontnemery] - [#113798])
+- Deprecate cloud tts gender ([@MartinHjelmare] - [#112256])
+- Remove Amcrest camera unique id migration ([@joostlek] - [#113870])
+- Bump bluecurrent-api to 1.2.2 ([@Floris272] - [#110483])
+- Bump numato-gpio to v0.13.0 ([@clssn] - [#113182])
+- Add floor template functions ([@frenck] - [#110847])
+- Make temperature a required parameter for tado climate service ([@alinbalutoiu] - [#113872])
+- Update Amcrest services.yaml ([@tuday2] - [#111161])
+- Change quotes in cloud translations ([@piitaya] - [#113871])
+- Add matter device serial number ([@MartinHjelmare] - [#113878])
+- Provide better debug capabilities for the Traccar Server integration ([@ludeeus] - [#113868])
+- Remove obsolete issue strings in WAQI ([@joostlek] - [#113884])
+- YoLink fix cover incorrect state ([@matrixd2] - [#104975])
+- Bump aioshelly to 8.2.0 ([@chemelli74] - [#113886])
+- Bump islamic_prayer_times to 0.0.12 ([@uchagani] - [#113744])
+- Fix duplicate events in live history ([@bdraco] - [#113896])
+- Add State.last_reported ([@emontnemery] - [#113511])
+- Small cleanup to unifiprotect subscriptions ([@bdraco] - [#113901])
+- Fix flakey test_reading_yaml_config test ([@bdraco] - [#113902])
+- Fix system_info importing hassio in the event loop ([@bdraco] - [#113903])
+- Cache parsing the url for the device registry ([@bdraco] - [#113910])
+- Use faster time compare in history and live logbook ([@bdraco] - [#113897])
+- Reduce overhead to clear cache in button state ([@bdraco] - [#113895])
+- Refactor rate limit helper to track time in seconds ([@bdraco] - [#113898])
+- Use intersection for determine_script_action ([@bdraco] - [#113915])
+- Reduce overhead to construct and validate entity service schema ([@bdraco] - [#113920])
+- ESPHome: Add Time Entity support ([@jesserockz] - [#113852])
+- Fetch MaxLengthExceeded exception mesage from the translation cache ([@jbouwh] - [#113904])
+- Fetch ServiceNotFound message from translation cache ([@jbouwh] - [#113893])
+- Load system info with base functionality ([@bdraco] - [#113923])
+- Add run_immediately to the trace stop listener ([@bdraco] - [#113922])
+- Only calculate native value once per update in systemmonitor ([@bdraco] - [#113921])
+- Add a fast path for async_get_platform ([@bdraco] - [#113917])
+- Enable Ruff PT023, disable PT011, PT012, PT018 ([@autinerd] - [#113900])
+- Upgrade Modbus quality scale to platinum ([@janiversen] - [#113482])
+- Add diagnostics to Husqvarna Automower ([@Thomas55555] - [#111857])
+- modbus: Remove PARALLEL_UPDATES from base_platform ([@janiversen] - [#113928])
+- Split light fixture from implementation to only import when fixture is actually used ([@jpbede] - [#113892])
+- Add transmission-integration path and protocol ([@idelsink] - [#104334])
+- Remove AUX heating from demo climate ([@emontnemery] - [#113929])
+- Add Reolink hdd/sd card storage sensor ([@starkillerOG] - [#110961])
+- Bump Wandalen/wretry.action from 1.4.10 to 2.0.0 (@dependabot - [#113888])
+- Remove deprecated `hass.components` from flux switch tests and use fixture ([@jpbede] - [#113875])
+- Add Bluetooth support to La Marzocco integration ([@zweckj] - [#108287])
+- Add availability to Scrape config flow ([@gjohansson-ST] - [#105516])
+- Add select platform to Husqvarna Automower ([@Thomas55555] - [#113816])
+- Remove unrelated patching from scrape test ([@bdraco] - [#113951])
+- Add support for Shelly RPC devices custom TCP port ([@chemelli74] - [#110860])
+- Add Shelly RGB/RGBW profiles support ([@thecode] - [#113808])
+- Fix grammar in async_get_platform comment ([@bdraco] - [#113948])
+- Avoid writing HomeKit state to disk unless its missing ([@bdraco] - [#111970])
+- Improve user error messages for generic camera ([@davet2001] - [#112814])
+- Add guard to HomeAssistantError `__str__` method to prevent a recursive loop ([@jbouwh] - [#113913])
+- Bump pyenphase to 1.20.0 ([@catsmanac] - [#113963])
+- Fix argument name in async_update_ha_state warning message ([@MrXANA91] - [#113969])
+- Pre import mobile app platforms to avoid having to wait on them ([@bdraco] - [#113966])
+- Deprecate the panel_iframe integration ([@emontnemery] - [#113410])
+- Group wemo platform forwards to reduce overhead ([@bdraco] - [#113972])
+- Return default repairs flow for cloud TTS issues ([@ludeeus] - [#113981])
+- Correct HomeAssistantError __str__ implementation and test ([@jbouwh] - [#113991])
+- Update JVC Projector polling time to be more responsive for automations ([@msavazzi] - [#113765])
+- Add binary sensor platform to microBees ([@FedDam] - [#111190])
+- Add icon translations to Wiz ([@joostlek] - [#112358])
+- Add reformatting commits to .git-blame-ignore-revs ([@akx] - [#110481])
+- Add cover platform to microBees ([@FedDam] - [#111135])
+- Axis use entity descripton binary sensor platform ([@Kane610] - [#113705])
+- Remember entered IP when error happend while setting up HomeWizard ([@DCSBL] - [#113815])
+- Remove hourly weather entity from Aemet ([@gjohansson-ST] - [#110764])
+- Remove hourly weather entity from NWS ([@gjohansson-ST] - [#112503])
+- Add new HomeWizard Energy Socket to tests ([@DCSBL] - [#113406])
+- Use uv instead of pip on production images ([@edenhaus] - [#112496])
+- Remove deprecated `hass.components` from frontend tests ([@jpbede] - [#114011])
+- Remove deprecated `hass.components` from scene tests ([@jpbede] - [#114014])
+- Remove deprecated `hass.components` from zeroconf tests ([@jpbede] - [#114013])
+- Remove deprecated `hass.components` from conversation tests and use light setup fixture ([@jpbede] - [#114012])
+- Rename device to api in Axis integration ([@Kane610] - [#113965])
+- Tweak marking private methods in UniFi, no need to mark inner functio… ([@Kane610] - [#113964])
+- Speed up recorder startup by making schema query read only ([@bdraco] - [#113987])
+- Define and use entity description in Axis entity base class ([@Kane610] - [#114007])
+- Add home battery storage entities for enphase_envoy ([@catsmanac] - [#114015])
+- Add missing is_closed property to powerview tilt only entities ([@kingy444] - [#113792])
+- Improve deCONZ test_non_color_light_reports_color ([@Kane610] - [#114021])
+- Add ecobee indefinite away preset, remove unusable/broken presets ([@alexsydell] - [#108636])
+- Update pytest warnings filter ([@cdce8p] - [#114036])
+- Update byte string formatting (2) ([@cdce8p] - [#114039])
+- Update empty line formatting after module docstring ([@cdce8p] - [#114040])
+- Move powerview timeout logic to the upstream api ([@kingy444] - [#113984])
+- Improve axis tests ([@Kane610] - [#114035])
+- Combine recorder and frontend bootstrap step ([@bdraco] - [#113985])
+- Add Powerview Type 11 ([@kingy444] - [#114047])
+- Move setup of legacy device_tracker see service to legacy setup task ([@bdraco] - [#114043])
+- Fix missing linked device on Overkiz integration ([@Tronix117] - [#114006])
+- Load light profiles in a task to avoid delaying platform setup ([@bdraco] - [#114038])
+- Smhi add reconfigure step to config flow ([@gjohansson-ST] - [#114044])
+- Fix flakey stream hls test ([@bdraco] - [#114046])
+- Fix after deps not being considered for integrations before stage 1 ([@bdraco] - [#114045])
+- Fix building images for nightlies ([@edenhaus] - [#114054])
+- Show correct ipv6 address in System Monitor ([@gjohansson-ST] - [#114024])
+- Reduce sqlalchemy reflection overhead at recorder setup time ([@bdraco] - [#113989])
+- Migrate UpdateCoordinator to its own file in aurora_abb_powerone ([@davet2001] - [#114053])
+- Create registry matrix to run publishing for images in parallel ([@edenhaus] - [#114060])
+- Enable turn_on / turn_off features for HitachiAirToAirHeatPump in Overkiz ([@iMicknl] - [#112990])
+- Bump pyrisco to 0.6.0 ([@OnFreund] - [#114063])
+- Fix bug in roon media player to use correct 'seek position' while playing a track. ([@pavoni] - [#113999])
+- Bump holidays to 0.45 ([@gjohansson-ST] - [#114069])
+- Add Rachio smart hose timer support ([@brg468] - [#107901])
+- Add Lutron Serena tilt only wood blinds ([@wujiaqi] - [#113791])
+- Add Risco system binary sensors ([@OnFreund] - [#114062])
+- Use a constant to reference `homeassistant` domain ([@jbouwh] - [#113889])
+- Fix setup timings when config entry platform loads are not awaited ([@bdraco] - [#113959])
+- Refactor recorder states tests ([@bdraco] - [#114073])
+- Catch Mill timeout error ([@joostlek] - [#114068])
+- Fix Shelly WallDisplay device power ([@thecode] - [#114071])
+- Centralize loading Axis entities ([@Kane610] - [#114018])
+- Avoid creating inner function in EntityComponent setup ([@bdraco] - [#114050])
+- Add more sensors to aurora_abb_powerone ([@davet2001] - [#114074])
+- Add reconfigure step to holiday ([@gjohansson-ST] - [#114057])
+- Migrate nut to use aionut ([@bdraco] - [#114078])
+- Allow retry during Config Flow in Advantage Air ([@Bre77] - [#114083])
+- Small performance improvement to template expand ([@bdraco] - [#114086])
+- Optimize loading of translations ([@bdraco] - [#114089])
+- Bump gcal-sync to 6.0.4 ([@allenporter] - [#114085])
+- Bump tplink_omada to 1.3.12 for ER7212PC support ([@MarkGodwin] - [#114077])
+- Add vehicle config to coordinator to fix bug in Teslemetry ([@Bre77] - [#113850])
+- Improve blue current integration code ([@Floris272] - [#114004])
+- Add more sensors to aurora_abb_powerone (part 2) ([@davet2001] - [#114097])
+- Add reconfigure flow to Axis integration ([@Kane610] - [#114067])
+- Fix flapping device_tracker test_bad_platform test ([@bdraco] - [#114102])
+- Tado: fix 113982 ([@niro1987] - [#114109])
+- Fix launch library translation keys ([@LarsStegman] - [#114093])
+- Replace if in range check ([@cdce8p] - [#114107])
+- Bump xiaomi-ble to 0.28.0 ([@Ernst79] - [#114120])
+- Ensure discovery can setup legacy device tracker platforms ([@bdraco] - [#114101])
+- Fetch ServiceNotFound message from translation cache and fix super ([@jbouwh] - [#114084])
+- Use TypeVarTuple for add_job and run_job methods ([@cdce8p] - [#114122])
+- Fix google assistant diagnostics test ([@jbouwh] - [#114111])
+- Cancel config entry setup retry at shutdown ([@bdraco] - [#114124])
+- Bump aionut to 4.1.0 ([@bdraco] - [#114125])
+- Implement diagnostics platform for APCUPSD ([@yuxincs] - [#112284])
+- Bump aionut to 4.2.1 ([@bdraco] - [#114132])
+- Bump yolink-api to 0.4.1 fix water depth sensor error when device is not initialize ([@matrixd2] - [#113994])
+- Bump aionut to 4.3.2 ([@bdraco] - [#114142])
+- Covert system_log services to be callbacks ([@bdraco] - [#114143])
+- Add repair for UniFi Protect if RTSP is disabled on camera ([@AngellusMortis] - [#114088])
+- Bump github/codeql-action from 3.24.8 to 3.24.9 (@dependabot - [#114151])
+- Bump Wandalen/wretry.action from 2.0.0 to 2.1.0 (@dependabot - [#114150])
+- Bump vilfo-api-client to 0.5.0 ([@ManneW] - [#114082])
+- Update pre-commit to 3.7.0 ([@cdce8p] - [#114154])
+- Use uv and sort jobs in builder.yml ([@edenhaus] - [#114153])
+- Update pytest-asyncio to 0.23.6 ([@cdce8p] - [#114155])
+- Generate ConfigValidationError message from English translations ([@jbouwh] - [#113844])
+- Add climate fan modes for Airzone Cloud Aidoo devices ([@Noltari] - [#103574])
+- Update coverage to 7.4.4 ([@cdce8p] - [#114158])
+- Update pytest-timeout to 2.3.1 ([@cdce8p] - [#114161])
+- Update respx to 0.21.0 ([@cdce8p] - [#114163])
+- Update pipdeptree to 2.16.1 ([@cdce8p] - [#114159])
+- Bump plugwise to v0.37.1 ([@bouwew] - [#113245])
+- Update pyOpenSSL to 24.1.0 ([@cdce8p] - [#114165])
+- Update yamllint to 1.35.1 ([@cdce8p] - [#114166])
+- Update pytest-cov to 5.0.0 ([@cdce8p] - [#114160])
+- Allow debugging tests by default in vscode ([@jbouwh] - [#114065])
+- Update typing-extensions to 4.11.0rc1 ([@cdce8p] - [#114116])
+- Avoid homekit random id generation for existing entries ([@bdraco] - [#114144])
+- Remove hourly weather entity from met_eireann ([@gjohansson-ST] - [#112449])
+- Update types packages ([@cdce8p] - [#114164])
+- Fix spelling [runtime] ([@cdce8p] - [#114169])
+- Fix spelling [docstrings + comments] ([@cdce8p] - [#114168])
+- Update pytest-unordered to 0.6.0 ([@cdce8p] - [#114162])
+- Update codespell to 2.2.6 ([@cdce8p] - [#114167])
+- Use enums to define choices in tolo ([@MatthiasLohr] - [#113992])
+- Refactor homekit device linking to use the device index ([@bdraco] - [#114145])
+- Add Withings webhook manager ([@joostlek] - [#106311])
+- Add base entity to romy integration ([@xeniter] - [#113750])
+- Updated temp offset logging in tado component ([@343max] - [#106308])
+- Bump pywaze to 1.0.0 ([@eifinger] - [#108613])
+- Bump aioautomower to 2024.3.4 ([@Thomas55555] - [#114127])
+- Adapt to Axis library file structure changes ([@Kane610] - [#114181])
+- Fix Axis not generate unique IDs ([@Kane610] - [#114115])
+- Refactor options flow in dnsip ([@gjohansson-ST] - [#114058])
+- Add Ecovacs last job event entity ([@edenhaus] - [#113826])
+- Add reauth support to NUT ([@bdraco] - [#114131])
+- Add restrictions for listening to event_reported events ([@emontnemery] - [#114183])
+- Telegram bot proxy params deprecation ([@malkstar] - [#112778])
+- Add generic test component platform setup function ([@jpbede] - [#114016])
+- Fix Shelly reauth flow ([@thecode] - [#114180])
+- Improve test coverage mqtt discovery test ([@jbouwh] - [#114188])
+- Remove deprecated `hass.components` from system_health tests ([@jpbede] - [#114207])
+- Bump anyio to 4.3.0 ([@bdraco] - [#114198])
+- Bump ruff to 0.3.4 ([@joostlek] - [#112690])
+- Use new `setup_test_component_platform` helper instead of test fixture for light platform ([@jpbede] - [#114200])
+- Bump SQLAlchemy to 2.0.29 ([@bdraco] - [#114208])
+- Preload storage for integrations we know we are going to setup ([@bdraco] - [#114192])
+- Revert "Update typing-extensions to 4.11.0rc1 (#114116)" ([@cdce8p] - [#114216])
+- Rework Axis entity loader to have a better internal storage structure ([@Kane610] - [#114114])
+- Remove async_get_device_class_lookup from entity_registry ([@bdraco] - [#114212])
+- Add YoLink Water Meter Support ([@matrixd2] - [#114148])
+- Bump pyenphase to 1.20.1 ([@catsmanac] - [#114218])
+- Add Motionblinds BLE integration ([@LennP] - [#109497])
+- Fix motion blinds formatting ([@joostlek] - [#114222])
+- Allow pre-releases for "Adjust nightly version" only ([@edenhaus] - [#114219])
+- Add more timestamp sensors to swiss_public_transport ([@miaucl] - [#107916])
+- Add label template functions ([@frenck] - [#111024])
+- Implement Identify button and Cloud connection toggle for HomeWizard Watermeter ([@DCSBL] - [#113814])
+- Don't allow listening to state_reported in event triggers ([@emontnemery] - [#114191])
+- Add test to ensure non callback event filter is rejected ([@emontnemery] - [#114182])
+- Allow string formatting for dispatcher SignalType ([@cdce8p] - [#114174])
+- Add ruff commit to git-blame-ignore-revs ([@cdce8p] - [#114229])
+- Drop Python 3.11 support ([@frenck] - [#114220])
+- Bump motionblindsble to 0.0.9 ([@LennP] - [#114232])
+- Remove test cases for task eager_start <3.12 ([@cdce8p] - [#114243])
+- Default floor level to None (and allow unsetting it) ([@frenck] - [#114249])
+- Refactor Riemann sum integral sensor to prepare for time based trigger ([@ronweikamp] - [#113932])
+- Allow numeric state trigger/condition against zone entities ([@frenck] - [#114221])
+- Use `setup_test_component_platform` helper for update entity component tests instead of `hass.components` ([@jpbede] - [#114203])
+- Add label selector ([@frenck] - [#111029])
+- Small performance improvements to energy sensors ([@bdraco] - [#114149])
+- Bump bring-api to 0.5.7 ([@tr4nt0r] - [#114252])
+- Fix ruff-format on energy sensor ([@bdraco] - [#114261])
+- Restore scapy pin to >=2.5.0 ([@bdraco] - [#114253])
+- Remove unused code in ESPHome entry_data ([@bdraco] - [#114263])
+- Do not late import config_entry in `setup_test_component_platform` test helper ([@jpbede] - [#114260])
+- Use `setup_test_component_platform` func for number entity component tests instead of `hass.components` ([@jpbede] - [#114017])
+- Add Ollama conversation agent ([@synesthesiam] - [#113962])
+- Fix Opower accounts that report cost less regularly than usage ([@tronikos] - [#114034])
+- Combine tts cache init executor jobs ([@bdraco] - [#114271])
+- Add Motionblinds brand ([@LennP] - [#114235])
+- Bump actions/setup-python from 5.0.0 to 5.1.0 (@dependabot - [#114276])
+- Bump ondilo_ico to 0.4.0 ([@JeromeHXP] - [#114022])
+- Move SignalTypes to util ([@cdce8p] - [#114236])
+- Run recorder shutdown tasks eagerly ([@bdraco] - [#113018])
+- Refactor/fix search component, including labels & floors support ([@frenck] - [#114206])
+- Bump aiounifi to v73 ([@Kane610] - [#114278])
+- Avoid delaying automation/script startup for sample blueprints ([@bdraco] - [#114277])
+- Refactor yeelight scanner to avoid creating tasks to wait for scanner start ([@bdraco] - [#113919])
+- Add select to Motionblinds BLE integration ([@LennP] - [#114228])
+- Add buttons to Motionblinds BLE integration ([@LennP] - [#114227])
+- Address late review of 17track config flow ([@shaiu] - [#114283])
+- Remove hourly weather entity from metoffice ([@gjohansson-ST] - [#112452])
+- Allow Humidifier.current_humidity to be a float ([@cdce8p] - [#111297])
+- Do not override state property in `MockEntity` ([@jpbede] - [#114231])
+- Allow float for int argument type [pylint plugin] ([@cdce8p] - [#114105])
+- Use `setup_test_component_platform` func for cover entity component tests instead of `hass.components` ([@jpbede] - [#114010])
+- Update mypy-dev to 1.10.0a3 ([@cdce8p] - [#114289])
+- Record state.last_reported ([@emontnemery] - [#114201])
+- Add tests to Rova ([@joostlek] - [#114285])
+- Use SignalType to improve typing [esphome] ([@cdce8p] - [#114296])
+- Use SignalType to improve typing [bthome] ([@cdce8p] - [#114295])
+- Update bump_version.py to append also the time to nightlies and add possibility to set manual a nightly version ([@edenhaus] - [#114300])
+- Add coordinator to Rova ([@joostlek] - [#114288])
+- Use `setup_test_component_platform` helper for binary_sensor entity component tests instead of `hass.components` ([@jpbede] - [#114293])
+- Use SignalType to improve typing [core] ([@cdce8p] - [#114298])
+- Use `setup_test_component_platform` helper for alarm_control_panel entity component tests instead of `hass.components` ([@jpbede] - [#114301])
+- Fix missing powerview shade data when initial refresh fails ([@bdraco] - [#113033])
+- Fix version_bump --set-nightly-version ([@edenhaus] - [#114304])
+- Bump pyprusalink to 2.1.1 and support Prusa MK3 ([@the-ress] - [#114210])
+- Raise issue if not Rova area anymore ([@joostlek] - [#114309])
+- Fix exception when logging out from cloud ([@emontnemery] - [#114306])
+- Add support for PoE control of TP-Link Omada Gateways ([@MarkGodwin] - [#114138])
+- Start deprecation of auxiliary heater in ClimateEntity ([@gjohansson-ST] - [#112532])
+- Refactor switcher kis ([@YogevBokobza] - [#114281])
+- Migrate Rova to has entity name ([@joostlek] - [#114303])
+- Version Bump for WeatherFlow Cloud Backing Lib ([@jeeftor] - [#114302])
+- Finish ROVA init tests ([@joostlek] - [#114315])
+- Bump intents to 2024.3.27 ([@synesthesiam] - [#114312])
+- Change min and max humidity for MQTT climate and humidifier ([@jbouwh] - [#114292])
+- Remove deprecated forecast attribute from WeatherEntity ([@gjohansson-ST] - [#110761])
+- Defensively validate ZHA quirks v2 supplied entity metadata ([@dmulcahey] - [#112643])
+- Handle TypeError in Spotify ([@joostlek] - [#114317])
+- Fix icons for Motionblinds BLE integration ([@LennP] - [#114321])
+- Fix feedback in ROVA ([@joostlek] - [#114308])
+- Use SignalType to improve typing [homekit] ([@cdce8p] - [#114297])
+- Support the Home Assistant Connect ZBT-1 ([@puddly] - [#114213])
+- Update frontend to 20240327.0 ([@bramkragten] - [#114322])
+- Use fallback voice for selected language in cloud ([@MartinHjelmare] - [#114246])
+- Bump zha-quirks to 0.0.113 ([@TheJulianJES] - [#114311])
+- Bump pyduotecno to 2024.3.2 ([@Cereal2nd] - [#114320])
+- Fix Matter airconditioner discovery of climate platform ([@marcelveldt] - [#114326])
+- Avoid changing local time on Nobø Ecohub ([@oyvindwe] - [#114332])
+- Don't access States.last_reported_ts before it's added ([@emontnemery] - [#114333])
+- Download translations only once in the build pipeline ([@edenhaus] - [#114335])
+- Remove checked in translations ([@edenhaus] - [#114336])
+- Revert velocity change in powerview ([@bdraco] - [#114337])
+- Add more Ollama models ([@synesthesiam] - [#114339])
+- Bump fjaraskupan to 2.3.0 ([@elupus] - [#114344])
+- Fix empty delays in script helper ([@bdraco] - [#114346])
+- Bump pyunifiprotect to 5.1.2 ([@AngellusMortis] - [#114348])
+- Fix script for checking on existing translations ([@edenhaus] - [#114354])
+- Improve utility meter restore state tests ([@emontnemery] - [#114356])
+- Improve device class of utility meter ([@emontnemery] - [#114368])
+- Update pytile to 2023.12.0 ([@cdce8p] - [#114370])
+- Fix streamlabswater feedback ([@joostlek] - [#114371])
+- Fix Suez water feedback ([@joostlek] - [#114372])
+- Fix Swiss public transport feedback ([@joostlek] - [#114373])
+- Fix Lupusec feedback ([@joostlek] - [#114374])
+- Adapt Tractive integration the latest API changes ([@bieniu] - [#114380])
+- Fix hassfest service icons check for custom integrations ([@frenck] - [#114389])
+- Filter preferred TTS format options if not supported ([@synesthesiam] - [#114392])
+- Fix area search for entities of devices ([@frenck] - [#114394])
+- Update frontend to 20240328.0 ([@piitaya] - [#114396])
+- Bump aioraven to 0.5.3 ([@cottsay] - [#114397])
+- Follow real AtlanticPassAPCZoneControlZone physical mode on Overkiz (HEAT, COOL or HEAT_COOL) ([@Tronix117] - [#111830])
+- Add overkiz heating status, absence mode, and boost mode binary sensors for Atlantic Water Heater ([@ALERTua] - [#114184])
+- Add overkiz water targets temperature numbers for Atlantic water heater ([@ALERTua] - [#114185])
+- Add overkiz bottom tank water temperature and core control water temperature for Atlantic Water Heater ([@ALERTua] - [#114186])
+- Avoid concurrent radio operations with powerview hubs ([@bdraco] - [#114399])
+- Cleanup some plex tasks that delayed startup ([@bdraco] - [#114418])
+- Bump python-ring-doorbell to 0.8.8 ([@sdb9696] - [#114431])
+- Bump pyoverkiz to 1.13.9 ([@iMicknl] - [#114442])
+- Log warnings in Renault initialisation ([@epenet] - [#114445])
+- Bump async-upnp-client to 0.38.3 ([@StevenLooman] - [#114447])
+- Update frontend to 20240329.0 ([@piitaya] - [#114452])
+- Avoid tracking import executor jobs ([@bdraco] - [#114453])
+- Update frontend to 20240329.1 ([@piitaya] - [#114459])
+- Cleanup Shelly RGBW light entities ([@thecode] - [#114410])
+- Mark executor jobs as background unless created from a tracked task ([@bdraco] - [#114450])
+- Add initial support for floors to intents ([@synesthesiam] - [#114456])
+- Improve sonos test synchronization ([@bdraco] - [#114468])
+- Fix Overkiz Hitachi OVP air-to-air heat pump ([@dotvav] - [#114487])
+- Fix late load of anyio doing blocking I/O in the event loop ([@bdraco] - [#114491])
+- Fix workday doing blocking I/O in the event loop ([@bdraco] - [#114492])
+- Fix server update from breaking setup in Speedtest.NET ([@gjohansson-ST] - [#114524])
+- Bump axis to v60 ([@Kane610] - [#114544])
+- Fix wrong icons ([@joostlek] - [#114567])
+- Bump velbusaio to 2024.4.0 ([@Cereal2nd] - [#114569])
+- Reduce usage of executer threads in AVM Fritz!Tools ([@mib1185] - [#114570])
+- Filter out ignored entries in ssdp step of AVM Fritz!SmartHome ([@mib1185] - [#114574])
+- Bump plexapi to 4.15.11 ([@jjlawren] - [#114581])
+- Fix reolink media source data access ([@MartinHjelmare] - [#114593])
+- Bump zeroconf to 0.132.0 ([@bdraco] - [#114596])
+- Add missing platforms_exist guard to check_config ([@bdraco] - [#114600])
+- Fix memory leak when importing a platform fails ([@bdraco] - [#114602])
+- Avoid storing raw extracted traceback in system_log ([@bdraco] - [#114603])
+- Bump whirlpool-sixth-sense to 0.18.7 ([@mkmer] - [#114606])
+- Display sonos album title with URL encoding ([@PeteRager] - [#113693])
+- Bump roombapy to 1.8.1 ([@joostlek] - [#114478])
+- Improve Shelly RPC device update progress ([@bieniu] - [#114566])
+- Fix battery heater in Tessie ([@Bre77] - [#114568])
+- Add diagnostic platform to Whirlpool ([@mkmer] - [#114578])
+- Catch potential ValueError when getting or setting Starlink sleep values ([@boswelja] - [#114607])
+- Bump opower to 0.4.2 ([@max2697] - [#114608])
+- Add floor selector ([@frenck] - [#114614])
+- Fix Starlink integration startup issue ([@Fexiven] - [#114615])
+- Update frontend to 20240402.0 ([@bramkragten] - [#114627])
+- Reduce ZHA OTA logbook entries and extraneous updates ([@puddly] - [#114591])
+- Fix Overkiz Hitachi OVP air-to-air heat pump ([@dotvav] - [#114611])
+- Bump ring_doorbell integration to 0.8.9 ([@sdb9696] - [#114631])
+- Update frontend to 20240402.1 ([@bramkragten] - [#114646])
+- Fix Sonos play imported playlists ([@PeteRager] - [#113934])
+- Bump aiounifi to v74 ([@Kane610] - [#114649])
+- Add missing state to the Tractive tracker state sensor ([@bieniu] - [#114654])
+- Bump holidays to 0.46 ([@gjohansson-ST] - [#114657])
+- Avoid trying to load platform that are known to not exist in async_prepare_setup_platform ([@bdraco] - [#114659])
+- Update frontend to 20240402.2 ([@bramkragten] - [#114683])
+- Rename Motionblinds BLE integration to Motionblinds Bluetooth ([@LennP] - [#114584])
+- Bump flexit_bacnet to 2.2.1 ([@lellky] - [#114641])
+- Import zha quirks in the executor ([@dmulcahey] - [#114685])
+- Fix Downloader config flow ([@joostlek] - [#114718])
+- Avoid blocking IO in downloader config flow ([@joostlek] - [#114741])
+- Update frontend to 20240403.0 ([@bramkragten] - [#114747])
+- Allow passing area/device/entity IDs to floor_id and floor_name ([@edenhaus] - [#114748])
+- Bump intents ([@synesthesiam] - [#114755])
+- Update frontend to 20240403.1 ([@bramkragten] - [#114756])
+- Fix Synology DSM setup in case no Surveillance Station permission ([@mib1185] - [#114757])
+- Fix for Sonos URL encoding problem #102557 ([@IngoK1] - [#109518])
+- Use `setup_test_component_platform` helper for sensor entity component tests instead of `hass.components` ([@jpbede] - [#114316])
+
+
+## Release 2024.4.1 - April 5
+
+- Update aioairzone-cloud to v0.4.7 ([@Noltari] - [#114761])
+- Bump myuplink dependency to 0.6.0 ([@astrandb] - [#114767])
+- Update romy to 0.0.9 ([@cdce8p] - [#114360])
+- Update romy to 0.0.10 ([@xeniter] - [#114785])
+- Fix unhandled `KeyError` during Notion setup ([@bachya] - [#114787])
+- Fix Lutron light brightness values ([@cdheiser] - [#114794])
+- Fix type cast in snmp ([@lextm] - [#114795])
+- Handle ambiguous script actions by using action map order ([@bdraco] - [#114825])
+- Bump opower to 0.4.3 ([@tronikos] - [#114826])
+- Refactor ConfigStore to avoid needing to pass config_dir ([@bdraco] - [#114827])
+- Avoid blocking IO in downloader initialization ([@joostlek] - [#114841])
+- Fix Downloader YAML import ([@joostlek] - [#114844])
+- Update frontend to 20240404.0 ([@bramkragten] - [#114859])
+- Fix Axis camera platform support HTTPS ([@Kane610] - [#114886])
+- Bump weatherflow4py to 0.2.20 ([@jeeftor] - [#114888])
+- Fix Axis reconfigure step not providing protocols as alternatives but as string ([@Kane610] - [#114889])
+- Update frontend to 20240404.1 ([@bramkragten] - [#114890])
+- Ensure all tables have the default table args in the db_schema ([@bdraco] - [#114895])
+- Reduce august polling frequency ([@bdraco] - [#114904])
+- Show correct model string in myuplink ([@astrandb] - [#114921])
+- Create right import issues in Downloader ([@joostlek] - [#114922])
+- Fix cast dashboard in media browser ([@joostlek] - [#114924])
+- Pin systembridgemodels to 4.0.4 ([@timmo001] - [#114842])
+- Fix ROVA validation ([@joostlek] - [#114938])
+
+[#114360]: https://github.com/home-assistant/core/pull/114360
+[#114761]: https://github.com/home-assistant/core/pull/114761
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114767]: https://github.com/home-assistant/core/pull/114767
+[#114785]: https://github.com/home-assistant/core/pull/114785
+[#114787]: https://github.com/home-assistant/core/pull/114787
+[#114794]: https://github.com/home-assistant/core/pull/114794
+[#114795]: https://github.com/home-assistant/core/pull/114795
+[#114825]: https://github.com/home-assistant/core/pull/114825
+[#114826]: https://github.com/home-assistant/core/pull/114826
+[#114827]: https://github.com/home-assistant/core/pull/114827
+[#114841]: https://github.com/home-assistant/core/pull/114841
+[#114842]: https://github.com/home-assistant/core/pull/114842
+[#114844]: https://github.com/home-assistant/core/pull/114844
+[#114859]: https://github.com/home-assistant/core/pull/114859
+[#114886]: https://github.com/home-assistant/core/pull/114886
+[#114888]: https://github.com/home-assistant/core/pull/114888
+[#114889]: https://github.com/home-assistant/core/pull/114889
+[#114890]: https://github.com/home-assistant/core/pull/114890
+[#114895]: https://github.com/home-assistant/core/pull/114895
+[#114904]: https://github.com/home-assistant/core/pull/114904
+[#114921]: https://github.com/home-assistant/core/pull/114921
+[#114922]: https://github.com/home-assistant/core/pull/114922
+[#114924]: https://github.com/home-assistant/core/pull/114924
+[#114938]: https://github.com/home-assistant/core/pull/114938
+[@Kane610]: https://github.com/Kane610
+[@Noltari]: https://github.com/Noltari
+[@astrandb]: https://github.com/astrandb
+[@bachya]: https://github.com/bachya
+[@bdraco]: https://github.com/bdraco
+[@bramkragten]: https://github.com/bramkragten
+[@cdce8p]: https://github.com/cdce8p
+[@cdheiser]: https://github.com/cdheiser
+[@frenck]: https://github.com/frenck
+[@jeeftor]: https://github.com/jeeftor
+[@joostlek]: https://github.com/joostlek
+[@lextm]: https://github.com/lextm
+[@timmo001]: https://github.com/timmo001
+[@tronikos]: https://github.com/tronikos
+[@xeniter]: https://github.com/xeniter
+
+## Release 2024.4.2 - April 8
+
+- Fix hang in SNMP device_tracker implementation ([@nmaggioni] - [#112815])
+- Fix missing if statement in homematic ([@bbr111] - [#114832])
+- Bump pylitterbot to 2023.4.11 ([@natekspencer] - [#114918])
+- Fix Snapcast Config flow ([@joostlek] - [#114952])
+- Bump axis to v61 ([@Kane610] - [#114964])
+- Filter out fuzzy translations from Lokalise ([@joostlek] - [#114968])
+- Upgrade to pynobo 1.8.1 ([@oyvindwe] - [#114982])
+- Fix dictionary changed size during iteration in prometheus ([@bdraco] - [#115005])
+- Bump `brother` to version 4.1.0 ([@bieniu] - [#115021])
+- Bump yolink-api to 0.4.2 ([@matrixd2] - [#115026])
+- Update xknxproject to 3.7.1 ([@farmio] - [#115053])
+- Fix synology_dsm availablity ([@bdraco] - [#115073])
+- Downgrade hass-nabucasa from 0.80.0 to 0.78.0 ([@ludeeus] - [#115078])
+- Bump velbus-aio to 2024.4.1 ([@Cereal2nd] - [#115109])
+- Terminate scripts with until and while conditions that execute more than 10000 times ([@bdraco] - [#115110])
+- improve handling of incorrect values in fyta integration ([@dontinelli] - [#115134])
+- Bump fyta_cli to 0.3.5 ([@dontinelli] - [#115143])
+- Fix fibaro sensor additional sensor lookup ([@rappenze] - [#115148])
+- Write timer entity state before firing events ([@bdraco] - [#115151])
+- Avoid checking for polling if an entity fails to add ([@bdraco] - [#115159])
+- Only reset requested utility meter with no tariff ([@gibwar] - [#115170])
+
+[#112815]: https://github.com/home-assistant/core/pull/112815
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114832]: https://github.com/home-assistant/core/pull/114832
+[#114918]: https://github.com/home-assistant/core/pull/114918
+[#114934]: https://github.com/home-assistant/core/pull/114934
+[#114952]: https://github.com/home-assistant/core/pull/114952
+[#114964]: https://github.com/home-assistant/core/pull/114964
+[#114968]: https://github.com/home-assistant/core/pull/114968
+[#114982]: https://github.com/home-assistant/core/pull/114982
+[#115005]: https://github.com/home-assistant/core/pull/115005
+[#115021]: https://github.com/home-assistant/core/pull/115021
+[#115026]: https://github.com/home-assistant/core/pull/115026
+[#115053]: https://github.com/home-assistant/core/pull/115053
+[#115073]: https://github.com/home-assistant/core/pull/115073
+[#115078]: https://github.com/home-assistant/core/pull/115078
+[#115109]: https://github.com/home-assistant/core/pull/115109
+[#115110]: https://github.com/home-assistant/core/pull/115110
+[#115134]: https://github.com/home-assistant/core/pull/115134
+[#115143]: https://github.com/home-assistant/core/pull/115143
+[#115148]: https://github.com/home-assistant/core/pull/115148
+[#115151]: https://github.com/home-assistant/core/pull/115151
+[#115159]: https://github.com/home-assistant/core/pull/115159
+[#115170]: https://github.com/home-assistant/core/pull/115170
+[@Cereal2nd]: https://github.com/Cereal2nd
+[@Kane610]: https://github.com/Kane610
+[@bbr111]: https://github.com/bbr111
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@dontinelli]: https://github.com/dontinelli
+[@farmio]: https://github.com/farmio
+[@frenck]: https://github.com/frenck
+[@gibwar]: https://github.com/gibwar
+[@joostlek]: https://github.com/joostlek
+[@ludeeus]: https://github.com/ludeeus
+[@matrixd2]: https://github.com/matrixd2
+[@natekspencer]: https://github.com/natekspencer
+[@nmaggioni]: https://github.com/nmaggioni
+[@oyvindwe]: https://github.com/oyvindwe
+[@rappenze]: https://github.com/rappenze
+
+## Release 2024.4.3 - April 12
+
+- Bump aiohttp to 3.9.4 ([@bdraco] - [#110730])
+- Add support for adopt data disk repair ([@mdegat01] - [#114891])
+- Improve Risco exception logging ([@OnFreund] - [#115232])
+- Configurable maximum concurrency in Risco local ([@OnFreund] - [#115226])
+- Fix misssing timeout in caldav ([@bdraco] - [#115247])
+- Fix Google Tasks parsing of remove responses ([@allenporter] - [#115258])
+- Bump forecast-solar lib to v3.1.0 ([@klaasnicolaas] - [#115272])
+- Support backup of add-ons with hyphens ([@agners] - [#115274])
+- Bump pymodbus v3.6.7 ([@janiversen] - [#115279])
+- Bump yt-dlp to 2024.04.09 ([@joostlek] - [#115295])
+- Fix Aranet failure when the Bluetooth proxy is not providing a device name ([@thecode] - [#115298])
+- Bump zha-quirks to 0.0.114 ([@TheJulianJES] - [#115299])
+- Ensure automations do not execute from a trigger if they are disabled ([@bdraco] - [#115305])
+- Bump bleak-retry-connector 3.5.0 ([@bdraco] - [#115328])
+- Secure against resetting a non active modbus ([@janiversen] - [#115364])
+- Solve modbus test problem ([@janiversen] - [#115376])
+- Fix deadlock in holidays dynamic loading ([@bdraco] - [#115385])
+- Bump whirlpool-sixth-sense to 0.18.8 ([@NodeJSmith] - [#115393])
+- Fix bug in rainbird switch when turning off a switch that is already off ([@allenporter] - [#115421])
+- Bump pybotvac to 0.0.25 ([@Santobert] - [#115435])
+- Update frontend to 20240404.2 ([@bramkragten] - [#115460])
+
+[#110730]: https://github.com/home-assistant/core/pull/110730
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114891]: https://github.com/home-assistant/core/pull/114891
+[#114934]: https://github.com/home-assistant/core/pull/114934
+[#115186]: https://github.com/home-assistant/core/pull/115186
+[#115226]: https://github.com/home-assistant/core/pull/115226
+[#115232]: https://github.com/home-assistant/core/pull/115232
+[#115247]: https://github.com/home-assistant/core/pull/115247
+[#115258]: https://github.com/home-assistant/core/pull/115258
+[#115272]: https://github.com/home-assistant/core/pull/115272
+[#115274]: https://github.com/home-assistant/core/pull/115274
+[#115279]: https://github.com/home-assistant/core/pull/115279
+[#115295]: https://github.com/home-assistant/core/pull/115295
+[#115298]: https://github.com/home-assistant/core/pull/115298
+[#115299]: https://github.com/home-assistant/core/pull/115299
+[#115305]: https://github.com/home-assistant/core/pull/115305
+[#115328]: https://github.com/home-assistant/core/pull/115328
+[#115364]: https://github.com/home-assistant/core/pull/115364
+[#115376]: https://github.com/home-assistant/core/pull/115376
+[#115385]: https://github.com/home-assistant/core/pull/115385
+[#115393]: https://github.com/home-assistant/core/pull/115393
+[#115421]: https://github.com/home-assistant/core/pull/115421
+[#115435]: https://github.com/home-assistant/core/pull/115435
+[#115460]: https://github.com/home-assistant/core/pull/115460
+[@NodeJSmith]: https://github.com/NodeJSmith
+[@OnFreund]: https://github.com/OnFreund
+[@Santobert]: https://github.com/Santobert
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@agners]: https://github.com/agners
+[@allenporter]: https://github.com/allenporter
+[@bdraco]: https://github.com/bdraco
+[@bramkragten]: https://github.com/bramkragten
+[@frenck]: https://github.com/frenck
+[@janiversen]: https://github.com/janiversen
+[@joostlek]: https://github.com/joostlek
+[@klaasnicolaas]: https://github.com/klaasnicolaas
+[@mdegat01]: https://github.com/mdegat01
+[@thecode]: https://github.com/thecode
+
+## Release 2024.4.4 - April 23
+
+- Bump slixmpp version to 1.8.5 ([@ravermeister] - [#114448])
+- Make Withings recoverable after internet outage ([@joostlek] - [#115124])
+- Fix Hyperion light not updating state ([@avee87] - [#115389])
+- Add scheduled mode to renault charge mode ([@slyoldfox] - [#115427])
+- Bump zeroconf to 0.132.1 ([@bdraco] - [#115501])
+- Bump zeroconf to 0.132.2 ([@bdraco] - [#115505])
+- Update pillow to 10.3.0 ([@cdce8p] - [#115524])
+- Fix race in TimestampDataUpdateCoordinator ([@bdraco] - [#115542])
+- Fix Teslemetry sensor values ([@Bre77] - [#115571])
+- Modbus: Bump pymodbus v3.6.8 ([@janiversen] - [#115574])
+- Fix sensor entity description in Teslemetry ([@Bre77] - [#115614])
+- Bump httpcore to 1.0.5 ([@bdraco] - [#115672])
+- Bump sqlparse to 0.5.0 ([@bdraco] - [#115681])
+- Bump aiohttp to 3.9.5 ([@bdraco] - [#115727])
+- Bump renault-api to 0.2.2 ([@epenet] - [#115738])
+- Fix homeworks import flow ([@emontnemery] - [#115761])
+- Allow [##:##:##] type keypad address in homeworks ([@emontnemery] - [#115762])
+- Add missing media_player features to Samsung TV ([@chemelli74] - [#115788])
+- Bump aiounifi to v75 ([@Kane610] - [#115819])
+- Ensure scripts with timeouts of zero timeout immediately ([@bdraco] - [#115830])
+- Fix KeyError error when fetching sensors (Airthings) ([@LaStrada] - [#115844])
+- Bump plexapi to 4.15.12 ([@jjlawren] - [#115872])
+- Bump ical to 8.0.0 ([@allenporter] - [#115907])
+- Fix geo location attributes of Tankerkoenig sensors ([@mib1185] - [#115914])
+- Use start helper in squeezebox for server discovery ([@rajlaud] - [#115978])
+
+[#114448]: https://github.com/home-assistant/core/pull/114448
+[#114764]: https://github.com/home-assistant/core/pull/114764
+[#114934]: https://github.com/home-assistant/core/pull/114934
+[#115124]: https://github.com/home-assistant/core/pull/115124
+[#115186]: https://github.com/home-assistant/core/pull/115186
+[#115389]: https://github.com/home-assistant/core/pull/115389
+[#115427]: https://github.com/home-assistant/core/pull/115427
+[#115463]: https://github.com/home-assistant/core/pull/115463
+[#115501]: https://github.com/home-assistant/core/pull/115501
+[#115505]: https://github.com/home-assistant/core/pull/115505
+[#115524]: https://github.com/home-assistant/core/pull/115524
+[#115542]: https://github.com/home-assistant/core/pull/115542
+[#115571]: https://github.com/home-assistant/core/pull/115571
+[#115574]: https://github.com/home-assistant/core/pull/115574
+[#115614]: https://github.com/home-assistant/core/pull/115614
+[#115672]: https://github.com/home-assistant/core/pull/115672
+[#115681]: https://github.com/home-assistant/core/pull/115681
+[#115727]: https://github.com/home-assistant/core/pull/115727
+[#115738]: https://github.com/home-assistant/core/pull/115738
+[#115761]: https://github.com/home-assistant/core/pull/115761
+[#115762]: https://github.com/home-assistant/core/pull/115762
+[#115788]: https://github.com/home-assistant/core/pull/115788
+[#115819]: https://github.com/home-assistant/core/pull/115819
+[#115830]: https://github.com/home-assistant/core/pull/115830
+[#115844]: https://github.com/home-assistant/core/pull/115844
+[#115872]: https://github.com/home-assistant/core/pull/115872
+[#115907]: https://github.com/home-assistant/core/pull/115907
+[#115914]: https://github.com/home-assistant/core/pull/115914
+[#115978]: https://github.com/home-assistant/core/pull/115978
+[@Bre77]: https://github.com/Bre77
+[@Kane610]: https://github.com/Kane610
+[@LaStrada]: https://github.com/LaStrada
+[@allenporter]: https://github.com/allenporter
+[@avee87]: https://github.com/avee87
+[@bdraco]: https://github.com/bdraco
+[@cdce8p]: https://github.com/cdce8p
+[@chemelli74]: https://github.com/chemelli74
+[@emontnemery]: https://github.com/emontnemery
+[@epenet]: https://github.com/epenet
+[@frenck]: https://github.com/frenck
+[@janiversen]: https://github.com/janiversen
+[@jjlawren]: https://github.com/jjlawren
+[@joostlek]: https://github.com/joostlek
+[@mib1185]: https://github.com/mib1185
+[@rajlaud]: https://github.com/rajlaud
+[@ravermeister]: https://github.com/ravermeister
+[@slyoldfox]: https://github.com/slyoldfox
+
+[#100055]: https://github.com/home-assistant/core/pull/100055
+[#102333]: https://github.com/home-assistant/core/pull/102333
+[#102884]: https://github.com/home-assistant/core/pull/102884
+[#103057]: https://github.com/home-assistant/core/pull/103057
+[#103139]: https://github.com/home-assistant/core/pull/103139
+[#103564]: https://github.com/home-assistant/core/pull/103564
+[#103574]: https://github.com/home-assistant/core/pull/103574
+[#104095]: https://github.com/home-assistant/core/pull/104095
+[#104334]: https://github.com/home-assistant/core/pull/104334
+[#104492]: https://github.com/home-assistant/core/pull/104492
+[#104604]: https://github.com/home-assistant/core/pull/104604
+[#104737]: https://github.com/home-assistant/core/pull/104737
+[#104975]: https://github.com/home-assistant/core/pull/104975
+[#105516]: https://github.com/home-assistant/core/pull/105516
+[#105643]: https://github.com/home-assistant/core/pull/105643
+[#105697]: https://github.com/home-assistant/core/pull/105697
+[#105755]: https://github.com/home-assistant/core/pull/105755
+[#105756]: https://github.com/home-assistant/core/pull/105756
+[#105795]: https://github.com/home-assistant/core/pull/105795
+[#105967]: https://github.com/home-assistant/core/pull/105967
+[#106308]: https://github.com/home-assistant/core/pull/106308
+[#106311]: https://github.com/home-assistant/core/pull/106311
+[#107901]: https://github.com/home-assistant/core/pull/107901
+[#107916]: https://github.com/home-assistant/core/pull/107916
+[#107957]: https://github.com/home-assistant/core/pull/107957
+[#108152]: https://github.com/home-assistant/core/pull/108152
+[#108287]: https://github.com/home-assistant/core/pull/108287
+[#108596]: https://github.com/home-assistant/core/pull/108596
+[#108613]: https://github.com/home-assistant/core/pull/108613
+[#108636]: https://github.com/home-assistant/core/pull/108636
+[#108709]: https://github.com/home-assistant/core/pull/108709
+[#108781]: https://github.com/home-assistant/core/pull/108781
+[#108789]: https://github.com/home-assistant/core/pull/108789
+[#108794]: https://github.com/home-assistant/core/pull/108794
+[#108949]: https://github.com/home-assistant/core/pull/108949
+[#109080]: https://github.com/home-assistant/core/pull/109080
+[#109088]: https://github.com/home-assistant/core/pull/109088
+[#109185]: https://github.com/home-assistant/core/pull/109185
+[#109497]: https://github.com/home-assistant/core/pull/109497
+[#109518]: https://github.com/home-assistant/core/pull/109518
+[#109662]: https://github.com/home-assistant/core/pull/109662
+[#109819]: https://github.com/home-assistant/core/pull/109819
+[#109821]: https://github.com/home-assistant/core/pull/109821
+[#109893]: https://github.com/home-assistant/core/pull/109893
+[#109930]: https://github.com/home-assistant/core/pull/109930
+[#110297]: https://github.com/home-assistant/core/pull/110297
+[#110327]: https://github.com/home-assistant/core/pull/110327
+[#110481]: https://github.com/home-assistant/core/pull/110481
+[#110483]: https://github.com/home-assistant/core/pull/110483
+[#110492]: https://github.com/home-assistant/core/pull/110492
+[#110761]: https://github.com/home-assistant/core/pull/110761
+[#110764]: https://github.com/home-assistant/core/pull/110764
+[#110816]: https://github.com/home-assistant/core/pull/110816
+[#110847]: https://github.com/home-assistant/core/pull/110847
+[#110850]: https://github.com/home-assistant/core/pull/110850
+[#110860]: https://github.com/home-assistant/core/pull/110860
+[#110885]: https://github.com/home-assistant/core/pull/110885
+[#110897]: https://github.com/home-assistant/core/pull/110897
+[#110906]: https://github.com/home-assistant/core/pull/110906
+[#110961]: https://github.com/home-assistant/core/pull/110961
+[#110997]: https://github.com/home-assistant/core/pull/110997
+[#111024]: https://github.com/home-assistant/core/pull/111024
+[#111029]: https://github.com/home-assistant/core/pull/111029
+[#111135]: https://github.com/home-assistant/core/pull/111135
+[#111156]: https://github.com/home-assistant/core/pull/111156
+[#111161]: https://github.com/home-assistant/core/pull/111161
+[#111190]: https://github.com/home-assistant/core/pull/111190
+[#111196]: https://github.com/home-assistant/core/pull/111196
+[#111258]: https://github.com/home-assistant/core/pull/111258
+[#111289]: https://github.com/home-assistant/core/pull/111289
+[#111292]: https://github.com/home-assistant/core/pull/111292
+[#111297]: https://github.com/home-assistant/core/pull/111297
+[#111325]: https://github.com/home-assistant/core/pull/111325
+[#111344]: https://github.com/home-assistant/core/pull/111344
+[#111349]: https://github.com/home-assistant/core/pull/111349
+[#111386]: https://github.com/home-assistant/core/pull/111386
+[#111391]: https://github.com/home-assistant/core/pull/111391
+[#111403]: https://github.com/home-assistant/core/pull/111403
+[#111419]: https://github.com/home-assistant/core/pull/111419
+[#111423]: https://github.com/home-assistant/core/pull/111423
+[#111431]: https://github.com/home-assistant/core/pull/111431
+[#111440]: https://github.com/home-assistant/core/pull/111440
+[#111466]: https://github.com/home-assistant/core/pull/111466
+[#111502]: https://github.com/home-assistant/core/pull/111502
+[#111512]: https://github.com/home-assistant/core/pull/111512
+[#111514]: https://github.com/home-assistant/core/pull/111514
+[#111525]: https://github.com/home-assistant/core/pull/111525
+[#111526]: https://github.com/home-assistant/core/pull/111526
+[#111532]: https://github.com/home-assistant/core/pull/111532
+[#111540]: https://github.com/home-assistant/core/pull/111540
+[#111545]: https://github.com/home-assistant/core/pull/111545
+[#111548]: https://github.com/home-assistant/core/pull/111548
+[#111614]: https://github.com/home-assistant/core/pull/111614
+[#111666]: https://github.com/home-assistant/core/pull/111666
+[#111676]: https://github.com/home-assistant/core/pull/111676
+[#111683]: https://github.com/home-assistant/core/pull/111683
+[#111687]: https://github.com/home-assistant/core/pull/111687
+[#111688]: https://github.com/home-assistant/core/pull/111688
+[#111700]: https://github.com/home-assistant/core/pull/111700
+[#111706]: https://github.com/home-assistant/core/pull/111706
+[#111709]: https://github.com/home-assistant/core/pull/111709
+[#111725]: https://github.com/home-assistant/core/pull/111725
+[#111727]: https://github.com/home-assistant/core/pull/111727
+[#111747]: https://github.com/home-assistant/core/pull/111747
+[#111754]: https://github.com/home-assistant/core/pull/111754
+[#111755]: https://github.com/home-assistant/core/pull/111755
+[#111758]: https://github.com/home-assistant/core/pull/111758
+[#111761]: https://github.com/home-assistant/core/pull/111761
+[#111767]: https://github.com/home-assistant/core/pull/111767
+[#111798]: https://github.com/home-assistant/core/pull/111798
+[#111804]: https://github.com/home-assistant/core/pull/111804
+[#111805]: https://github.com/home-assistant/core/pull/111805
+[#111806]: https://github.com/home-assistant/core/pull/111806
+[#111807]: https://github.com/home-assistant/core/pull/111807
+[#111808]: https://github.com/home-assistant/core/pull/111808
+[#111809]: https://github.com/home-assistant/core/pull/111809
+[#111810]: https://github.com/home-assistant/core/pull/111810
+[#111811]: https://github.com/home-assistant/core/pull/111811
+[#111812]: https://github.com/home-assistant/core/pull/111812
+[#111813]: https://github.com/home-assistant/core/pull/111813
+[#111814]: https://github.com/home-assistant/core/pull/111814
+[#111816]: https://github.com/home-assistant/core/pull/111816
+[#111824]: https://github.com/home-assistant/core/pull/111824
+[#111827]: https://github.com/home-assistant/core/pull/111827
+[#111830]: https://github.com/home-assistant/core/pull/111830
+[#111842]: https://github.com/home-assistant/core/pull/111842
+[#111844]: https://github.com/home-assistant/core/pull/111844
+[#111845]: https://github.com/home-assistant/core/pull/111845
+[#111846]: https://github.com/home-assistant/core/pull/111846
+[#111847]: https://github.com/home-assistant/core/pull/111847
+[#111848]: https://github.com/home-assistant/core/pull/111848
+[#111849]: https://github.com/home-assistant/core/pull/111849
+[#111850]: https://github.com/home-assistant/core/pull/111850
+[#111851]: https://github.com/home-assistant/core/pull/111851
+[#111852]: https://github.com/home-assistant/core/pull/111852
+[#111853]: https://github.com/home-assistant/core/pull/111853
+[#111854]: https://github.com/home-assistant/core/pull/111854
+[#111855]: https://github.com/home-assistant/core/pull/111855
+[#111856]: https://github.com/home-assistant/core/pull/111856
+[#111857]: https://github.com/home-assistant/core/pull/111857
+[#111861]: https://github.com/home-assistant/core/pull/111861
+[#111862]: https://github.com/home-assistant/core/pull/111862
+[#111863]: https://github.com/home-assistant/core/pull/111863
+[#111864]: https://github.com/home-assistant/core/pull/111864
+[#111865]: https://github.com/home-assistant/core/pull/111865
+[#111866]: https://github.com/home-assistant/core/pull/111866
+[#111878]: https://github.com/home-assistant/core/pull/111878
+[#111880]: https://github.com/home-assistant/core/pull/111880
+[#111881]: https://github.com/home-assistant/core/pull/111881
+[#111883]: https://github.com/home-assistant/core/pull/111883
+[#111888]: https://github.com/home-assistant/core/pull/111888
+[#111891]: https://github.com/home-assistant/core/pull/111891
+[#111893]: https://github.com/home-assistant/core/pull/111893
+[#111895]: https://github.com/home-assistant/core/pull/111895
+[#111896]: https://github.com/home-assistant/core/pull/111896
+[#111897]: https://github.com/home-assistant/core/pull/111897
+[#111899]: https://github.com/home-assistant/core/pull/111899
+[#111900]: https://github.com/home-assistant/core/pull/111900
+[#111901]: https://github.com/home-assistant/core/pull/111901
+[#111902]: https://github.com/home-assistant/core/pull/111902
+[#111904]: https://github.com/home-assistant/core/pull/111904
+[#111905]: https://github.com/home-assistant/core/pull/111905
+[#111906]: https://github.com/home-assistant/core/pull/111906
+[#111907]: https://github.com/home-assistant/core/pull/111907
+[#111908]: https://github.com/home-assistant/core/pull/111908
+[#111911]: https://github.com/home-assistant/core/pull/111911
+[#111912]: https://github.com/home-assistant/core/pull/111912
+[#111916]: https://github.com/home-assistant/core/pull/111916
+[#111917]: https://github.com/home-assistant/core/pull/111917
+[#111927]: https://github.com/home-assistant/core/pull/111927
+[#111928]: https://github.com/home-assistant/core/pull/111928
+[#111929]: https://github.com/home-assistant/core/pull/111929
+[#111932]: https://github.com/home-assistant/core/pull/111932
+[#111933]: https://github.com/home-assistant/core/pull/111933
+[#111934]: https://github.com/home-assistant/core/pull/111934
+[#111935]: https://github.com/home-assistant/core/pull/111935
+[#111936]: https://github.com/home-assistant/core/pull/111936
+[#111940]: https://github.com/home-assistant/core/pull/111940
+[#111943]: https://github.com/home-assistant/core/pull/111943
+[#111945]: https://github.com/home-assistant/core/pull/111945
+[#111946]: https://github.com/home-assistant/core/pull/111946
+[#111947]: https://github.com/home-assistant/core/pull/111947
+[#111949]: https://github.com/home-assistant/core/pull/111949
+[#111952]: https://github.com/home-assistant/core/pull/111952
+[#111954]: https://github.com/home-assistant/core/pull/111954
+[#111955]: https://github.com/home-assistant/core/pull/111955
+[#111964]: https://github.com/home-assistant/core/pull/111964
+[#111965]: https://github.com/home-assistant/core/pull/111965
+[#111970]: https://github.com/home-assistant/core/pull/111970
+[#111972]: https://github.com/home-assistant/core/pull/111972
+[#111973]: https://github.com/home-assistant/core/pull/111973
+[#111974]: https://github.com/home-assistant/core/pull/111974
+[#111976]: https://github.com/home-assistant/core/pull/111976
+[#111977]: https://github.com/home-assistant/core/pull/111977
+[#111980]: https://github.com/home-assistant/core/pull/111980
+[#111981]: https://github.com/home-assistant/core/pull/111981
+[#111982]: https://github.com/home-assistant/core/pull/111982
+[#111983]: https://github.com/home-assistant/core/pull/111983
+[#111984]: https://github.com/home-assistant/core/pull/111984
+[#111985]: https://github.com/home-assistant/core/pull/111985
+[#111988]: https://github.com/home-assistant/core/pull/111988
+[#111989]: https://github.com/home-assistant/core/pull/111989
+[#111990]: https://github.com/home-assistant/core/pull/111990
+[#111991]: https://github.com/home-assistant/core/pull/111991
+[#111992]: https://github.com/home-assistant/core/pull/111992
+[#111993]: https://github.com/home-assistant/core/pull/111993
+[#111994]: https://github.com/home-assistant/core/pull/111994
+[#111995]: https://github.com/home-assistant/core/pull/111995
+[#111996]: https://github.com/home-assistant/core/pull/111996
+[#111997]: https://github.com/home-assistant/core/pull/111997
+[#111998]: https://github.com/home-assistant/core/pull/111998
+[#112001]: https://github.com/home-assistant/core/pull/112001
+[#112004]: https://github.com/home-assistant/core/pull/112004
+[#112007]: https://github.com/home-assistant/core/pull/112007
+[#112008]: https://github.com/home-assistant/core/pull/112008
+[#112010]: https://github.com/home-assistant/core/pull/112010
+[#112028]: https://github.com/home-assistant/core/pull/112028
+[#112029]: https://github.com/home-assistant/core/pull/112029
+[#112031]: https://github.com/home-assistant/core/pull/112031
+[#112032]: https://github.com/home-assistant/core/pull/112032
+[#112042]: https://github.com/home-assistant/core/pull/112042
+[#112044]: https://github.com/home-assistant/core/pull/112044
+[#112053]: https://github.com/home-assistant/core/pull/112053
+[#112055]: https://github.com/home-assistant/core/pull/112055
+[#112057]: https://github.com/home-assistant/core/pull/112057
+[#112058]: https://github.com/home-assistant/core/pull/112058
+[#112065]: https://github.com/home-assistant/core/pull/112065
+[#112070]: https://github.com/home-assistant/core/pull/112070
+[#112071]: https://github.com/home-assistant/core/pull/112071
+[#112077]: https://github.com/home-assistant/core/pull/112077
+[#112078]: https://github.com/home-assistant/core/pull/112078
+[#112080]: https://github.com/home-assistant/core/pull/112080
+[#112081]: https://github.com/home-assistant/core/pull/112081
+[#112086]: https://github.com/home-assistant/core/pull/112086
+[#112087]: https://github.com/home-assistant/core/pull/112087
+[#112089]: https://github.com/home-assistant/core/pull/112089
+[#112096]: https://github.com/home-assistant/core/pull/112096
+[#112097]: https://github.com/home-assistant/core/pull/112097
+[#112099]: https://github.com/home-assistant/core/pull/112099
+[#112102]: https://github.com/home-assistant/core/pull/112102
+[#112103]: https://github.com/home-assistant/core/pull/112103
+[#112104]: https://github.com/home-assistant/core/pull/112104
+[#112106]: https://github.com/home-assistant/core/pull/112106
+[#112107]: https://github.com/home-assistant/core/pull/112107
+[#112108]: https://github.com/home-assistant/core/pull/112108
+[#112109]: https://github.com/home-assistant/core/pull/112109
+[#112110]: https://github.com/home-assistant/core/pull/112110
+[#112111]: https://github.com/home-assistant/core/pull/112111
+[#112120]: https://github.com/home-assistant/core/pull/112120
+[#112121]: https://github.com/home-assistant/core/pull/112121
+[#112122]: https://github.com/home-assistant/core/pull/112122
+[#112123]: https://github.com/home-assistant/core/pull/112123
+[#112126]: https://github.com/home-assistant/core/pull/112126
+[#112127]: https://github.com/home-assistant/core/pull/112127
+[#112128]: https://github.com/home-assistant/core/pull/112128
+[#112129]: https://github.com/home-assistant/core/pull/112129
+[#112130]: https://github.com/home-assistant/core/pull/112130
+[#112131]: https://github.com/home-assistant/core/pull/112131
+[#112132]: https://github.com/home-assistant/core/pull/112132
+[#112134]: https://github.com/home-assistant/core/pull/112134
+[#112135]: https://github.com/home-assistant/core/pull/112135
+[#112136]: https://github.com/home-assistant/core/pull/112136
+[#112141]: https://github.com/home-assistant/core/pull/112141
+[#112143]: https://github.com/home-assistant/core/pull/112143
+[#112144]: https://github.com/home-assistant/core/pull/112144
+[#112145]: https://github.com/home-assistant/core/pull/112145
+[#112147]: https://github.com/home-assistant/core/pull/112147
+[#112148]: https://github.com/home-assistant/core/pull/112148
+[#112149]: https://github.com/home-assistant/core/pull/112149
+[#112151]: https://github.com/home-assistant/core/pull/112151
+[#112153]: https://github.com/home-assistant/core/pull/112153
+[#112155]: https://github.com/home-assistant/core/pull/112155
+[#112156]: https://github.com/home-assistant/core/pull/112156
+[#112158]: https://github.com/home-assistant/core/pull/112158
+[#112159]: https://github.com/home-assistant/core/pull/112159
+[#112160]: https://github.com/home-assistant/core/pull/112160
+[#112161]: https://github.com/home-assistant/core/pull/112161
+[#112162]: https://github.com/home-assistant/core/pull/112162
+[#112164]: https://github.com/home-assistant/core/pull/112164
+[#112166]: https://github.com/home-assistant/core/pull/112166
+[#112168]: https://github.com/home-assistant/core/pull/112168
+[#112169]: https://github.com/home-assistant/core/pull/112169
+[#112170]: https://github.com/home-assistant/core/pull/112170
+[#112172]: https://github.com/home-assistant/core/pull/112172
+[#112173]: https://github.com/home-assistant/core/pull/112173
+[#112174]: https://github.com/home-assistant/core/pull/112174
+[#112175]: https://github.com/home-assistant/core/pull/112175
+[#112177]: https://github.com/home-assistant/core/pull/112177
+[#112179]: https://github.com/home-assistant/core/pull/112179
+[#112180]: https://github.com/home-assistant/core/pull/112180
+[#112181]: https://github.com/home-assistant/core/pull/112181
+[#112182]: https://github.com/home-assistant/core/pull/112182
+[#112183]: https://github.com/home-assistant/core/pull/112183
+[#112184]: https://github.com/home-assistant/core/pull/112184
+[#112185]: https://github.com/home-assistant/core/pull/112185
+[#112186]: https://github.com/home-assistant/core/pull/112186
+[#112187]: https://github.com/home-assistant/core/pull/112187
+[#112188]: https://github.com/home-assistant/core/pull/112188
+[#112189]: https://github.com/home-assistant/core/pull/112189
+[#112190]: https://github.com/home-assistant/core/pull/112190
+[#112192]: https://github.com/home-assistant/core/pull/112192
+[#112193]: https://github.com/home-assistant/core/pull/112193
+[#112194]: https://github.com/home-assistant/core/pull/112194
+[#112195]: https://github.com/home-assistant/core/pull/112195
+[#112196]: https://github.com/home-assistant/core/pull/112196
+[#112197]: https://github.com/home-assistant/core/pull/112197
+[#112198]: https://github.com/home-assistant/core/pull/112198
+[#112200]: https://github.com/home-assistant/core/pull/112200
+[#112201]: https://github.com/home-assistant/core/pull/112201
+[#112202]: https://github.com/home-assistant/core/pull/112202
+[#112203]: https://github.com/home-assistant/core/pull/112203
+[#112204]: https://github.com/home-assistant/core/pull/112204
+[#112205]: https://github.com/home-assistant/core/pull/112205
+[#112207]: https://github.com/home-assistant/core/pull/112207
+[#112208]: https://github.com/home-assistant/core/pull/112208
+[#112209]: https://github.com/home-assistant/core/pull/112209
+[#112210]: https://github.com/home-assistant/core/pull/112210
+[#112211]: https://github.com/home-assistant/core/pull/112211
+[#112212]: https://github.com/home-assistant/core/pull/112212
+[#112213]: https://github.com/home-assistant/core/pull/112213
+[#112214]: https://github.com/home-assistant/core/pull/112214
+[#112215]: https://github.com/home-assistant/core/pull/112215
+[#112217]: https://github.com/home-assistant/core/pull/112217
+[#112218]: https://github.com/home-assistant/core/pull/112218
+[#112219]: https://github.com/home-assistant/core/pull/112219
+[#112220]: https://github.com/home-assistant/core/pull/112220
+[#112221]: https://github.com/home-assistant/core/pull/112221
+[#112222]: https://github.com/home-assistant/core/pull/112222
+[#112223]: https://github.com/home-assistant/core/pull/112223
+[#112224]: https://github.com/home-assistant/core/pull/112224
+[#112225]: https://github.com/home-assistant/core/pull/112225
+[#112226]: https://github.com/home-assistant/core/pull/112226
+[#112227]: https://github.com/home-assistant/core/pull/112227
+[#112228]: https://github.com/home-assistant/core/pull/112228
+[#112229]: https://github.com/home-assistant/core/pull/112229
+[#112230]: https://github.com/home-assistant/core/pull/112230
+[#112231]: https://github.com/home-assistant/core/pull/112231
+[#112232]: https://github.com/home-assistant/core/pull/112232
+[#112233]: https://github.com/home-assistant/core/pull/112233
+[#112234]: https://github.com/home-assistant/core/pull/112234
+[#112235]: https://github.com/home-assistant/core/pull/112235
+[#112236]: https://github.com/home-assistant/core/pull/112236
+[#112237]: https://github.com/home-assistant/core/pull/112237
+[#112239]: https://github.com/home-assistant/core/pull/112239
+[#112240]: https://github.com/home-assistant/core/pull/112240
+[#112241]: https://github.com/home-assistant/core/pull/112241
+[#112244]: https://github.com/home-assistant/core/pull/112244
+[#112246]: https://github.com/home-assistant/core/pull/112246
+[#112247]: https://github.com/home-assistant/core/pull/112247
+[#112252]: https://github.com/home-assistant/core/pull/112252
+[#112253]: https://github.com/home-assistant/core/pull/112253
+[#112254]: https://github.com/home-assistant/core/pull/112254
+[#112256]: https://github.com/home-assistant/core/pull/112256
+[#112267]: https://github.com/home-assistant/core/pull/112267
+[#112268]: https://github.com/home-assistant/core/pull/112268
+[#112269]: https://github.com/home-assistant/core/pull/112269
+[#112275]: https://github.com/home-assistant/core/pull/112275
+[#112276]: https://github.com/home-assistant/core/pull/112276
+[#112277]: https://github.com/home-assistant/core/pull/112277
+[#112281]: https://github.com/home-assistant/core/pull/112281
+[#112282]: https://github.com/home-assistant/core/pull/112282
+[#112284]: https://github.com/home-assistant/core/pull/112284
+[#112286]: https://github.com/home-assistant/core/pull/112286
+[#112288]: https://github.com/home-assistant/core/pull/112288
+[#112289]: https://github.com/home-assistant/core/pull/112289
+[#112290]: https://github.com/home-assistant/core/pull/112290
+[#112291]: https://github.com/home-assistant/core/pull/112291
+[#112292]: https://github.com/home-assistant/core/pull/112292
+[#112293]: https://github.com/home-assistant/core/pull/112293
+[#112294]: https://github.com/home-assistant/core/pull/112294
+[#112295]: https://github.com/home-assistant/core/pull/112295
+[#112296]: https://github.com/home-assistant/core/pull/112296
+[#112297]: https://github.com/home-assistant/core/pull/112297
+[#112299]: https://github.com/home-assistant/core/pull/112299
+[#112300]: https://github.com/home-assistant/core/pull/112300
+[#112301]: https://github.com/home-assistant/core/pull/112301
+[#112302]: https://github.com/home-assistant/core/pull/112302
+[#112303]: https://github.com/home-assistant/core/pull/112303
+[#112304]: https://github.com/home-assistant/core/pull/112304
+[#112305]: https://github.com/home-assistant/core/pull/112305
+[#112306]: https://github.com/home-assistant/core/pull/112306
+[#112307]: https://github.com/home-assistant/core/pull/112307
+[#112308]: https://github.com/home-assistant/core/pull/112308
+[#112309]: https://github.com/home-assistant/core/pull/112309
+[#112310]: https://github.com/home-assistant/core/pull/112310
+[#112311]: https://github.com/home-assistant/core/pull/112311
+[#112312]: https://github.com/home-assistant/core/pull/112312
+[#112313]: https://github.com/home-assistant/core/pull/112313
+[#112314]: https://github.com/home-assistant/core/pull/112314
+[#112315]: https://github.com/home-assistant/core/pull/112315
+[#112316]: https://github.com/home-assistant/core/pull/112316
+[#112317]: https://github.com/home-assistant/core/pull/112317
+[#112318]: https://github.com/home-assistant/core/pull/112318
+[#112319]: https://github.com/home-assistant/core/pull/112319
+[#112320]: https://github.com/home-assistant/core/pull/112320
+[#112321]: https://github.com/home-assistant/core/pull/112321
+[#112322]: https://github.com/home-assistant/core/pull/112322
+[#112323]: https://github.com/home-assistant/core/pull/112323
+[#112324]: https://github.com/home-assistant/core/pull/112324
+[#112325]: https://github.com/home-assistant/core/pull/112325
+[#112326]: https://github.com/home-assistant/core/pull/112326
+[#112327]: https://github.com/home-assistant/core/pull/112327
+[#112328]: https://github.com/home-assistant/core/pull/112328
+[#112329]: https://github.com/home-assistant/core/pull/112329
+[#112330]: https://github.com/home-assistant/core/pull/112330
+[#112332]: https://github.com/home-assistant/core/pull/112332
+[#112333]: https://github.com/home-assistant/core/pull/112333
+[#112335]: https://github.com/home-assistant/core/pull/112335
+[#112336]: https://github.com/home-assistant/core/pull/112336
+[#112338]: https://github.com/home-assistant/core/pull/112338
+[#112339]: https://github.com/home-assistant/core/pull/112339
+[#112340]: https://github.com/home-assistant/core/pull/112340
+[#112341]: https://github.com/home-assistant/core/pull/112341
+[#112342]: https://github.com/home-assistant/core/pull/112342
+[#112343]: https://github.com/home-assistant/core/pull/112343
+[#112344]: https://github.com/home-assistant/core/pull/112344
+[#112345]: https://github.com/home-assistant/core/pull/112345
+[#112346]: https://github.com/home-assistant/core/pull/112346
+[#112347]: https://github.com/home-assistant/core/pull/112347
+[#112348]: https://github.com/home-assistant/core/pull/112348
+[#112349]: https://github.com/home-assistant/core/pull/112349
+[#112350]: https://github.com/home-assistant/core/pull/112350
+[#112351]: https://github.com/home-assistant/core/pull/112351
+[#112352]: https://github.com/home-assistant/core/pull/112352
+[#112353]: https://github.com/home-assistant/core/pull/112353
+[#112354]: https://github.com/home-assistant/core/pull/112354
+[#112355]: https://github.com/home-assistant/core/pull/112355
+[#112356]: https://github.com/home-assistant/core/pull/112356
+[#112357]: https://github.com/home-assistant/core/pull/112357
+[#112358]: https://github.com/home-assistant/core/pull/112358
+[#112359]: https://github.com/home-assistant/core/pull/112359
+[#112360]: https://github.com/home-assistant/core/pull/112360
+[#112361]: https://github.com/home-assistant/core/pull/112361
+[#112362]: https://github.com/home-assistant/core/pull/112362
+[#112363]: https://github.com/home-assistant/core/pull/112363
+[#112364]: https://github.com/home-assistant/core/pull/112364
+[#112365]: https://github.com/home-assistant/core/pull/112365
+[#112366]: https://github.com/home-assistant/core/pull/112366
+[#112367]: https://github.com/home-assistant/core/pull/112367
+[#112368]: https://github.com/home-assistant/core/pull/112368
+[#112369]: https://github.com/home-assistant/core/pull/112369
+[#112370]: https://github.com/home-assistant/core/pull/112370
+[#112372]: https://github.com/home-assistant/core/pull/112372
+[#112373]: https://github.com/home-assistant/core/pull/112373
+[#112374]: https://github.com/home-assistant/core/pull/112374
+[#112375]: https://github.com/home-assistant/core/pull/112375
+[#112376]: https://github.com/home-assistant/core/pull/112376
+[#112377]: https://github.com/home-assistant/core/pull/112377
+[#112378]: https://github.com/home-assistant/core/pull/112378
+[#112379]: https://github.com/home-assistant/core/pull/112379
+[#112380]: https://github.com/home-assistant/core/pull/112380
+[#112382]: https://github.com/home-assistant/core/pull/112382
+[#112383]: https://github.com/home-assistant/core/pull/112383
+[#112384]: https://github.com/home-assistant/core/pull/112384
+[#112385]: https://github.com/home-assistant/core/pull/112385
+[#112386]: https://github.com/home-assistant/core/pull/112386
+[#112389]: https://github.com/home-assistant/core/pull/112389
+[#112390]: https://github.com/home-assistant/core/pull/112390
+[#112391]: https://github.com/home-assistant/core/pull/112391
+[#112393]: https://github.com/home-assistant/core/pull/112393
+[#112394]: https://github.com/home-assistant/core/pull/112394
+[#112395]: https://github.com/home-assistant/core/pull/112395
+[#112396]: https://github.com/home-assistant/core/pull/112396
+[#112397]: https://github.com/home-assistant/core/pull/112397
+[#112398]: https://github.com/home-assistant/core/pull/112398
+[#112399]: https://github.com/home-assistant/core/pull/112399
+[#112400]: https://github.com/home-assistant/core/pull/112400
+[#112401]: https://github.com/home-assistant/core/pull/112401
+[#112402]: https://github.com/home-assistant/core/pull/112402
+[#112405]: https://github.com/home-assistant/core/pull/112405
+[#112407]: https://github.com/home-assistant/core/pull/112407
+[#112408]: https://github.com/home-assistant/core/pull/112408
+[#112409]: https://github.com/home-assistant/core/pull/112409
+[#112410]: https://github.com/home-assistant/core/pull/112410
+[#112411]: https://github.com/home-assistant/core/pull/112411
+[#112412]: https://github.com/home-assistant/core/pull/112412
+[#112418]: https://github.com/home-assistant/core/pull/112418
+[#112419]: https://github.com/home-assistant/core/pull/112419
+[#112420]: https://github.com/home-assistant/core/pull/112420
+[#112423]: https://github.com/home-assistant/core/pull/112423
+[#112425]: https://github.com/home-assistant/core/pull/112425
+[#112426]: https://github.com/home-assistant/core/pull/112426
+[#112429]: https://github.com/home-assistant/core/pull/112429
+[#112430]: https://github.com/home-assistant/core/pull/112430
+[#112432]: https://github.com/home-assistant/core/pull/112432
+[#112433]: https://github.com/home-assistant/core/pull/112433
+[#112436]: https://github.com/home-assistant/core/pull/112436
+[#112438]: https://github.com/home-assistant/core/pull/112438
+[#112441]: https://github.com/home-assistant/core/pull/112441
+[#112444]: https://github.com/home-assistant/core/pull/112444
+[#112446]: https://github.com/home-assistant/core/pull/112446
+[#112447]: https://github.com/home-assistant/core/pull/112447
+[#112449]: https://github.com/home-assistant/core/pull/112449
+[#112452]: https://github.com/home-assistant/core/pull/112452
+[#112456]: https://github.com/home-assistant/core/pull/112456
+[#112457]: https://github.com/home-assistant/core/pull/112457
+[#112460]: https://github.com/home-assistant/core/pull/112460
+[#112461]: https://github.com/home-assistant/core/pull/112461
+[#112462]: https://github.com/home-assistant/core/pull/112462
+[#112466]: https://github.com/home-assistant/core/pull/112466
+[#112467]: https://github.com/home-assistant/core/pull/112467
+[#112468]: https://github.com/home-assistant/core/pull/112468
+[#112469]: https://github.com/home-assistant/core/pull/112469
+[#112470]: https://github.com/home-assistant/core/pull/112470
+[#112472]: https://github.com/home-assistant/core/pull/112472
+[#112475]: https://github.com/home-assistant/core/pull/112475
+[#112477]: https://github.com/home-assistant/core/pull/112477
+[#112482]: https://github.com/home-assistant/core/pull/112482
+[#112483]: https://github.com/home-assistant/core/pull/112483
+[#112484]: https://github.com/home-assistant/core/pull/112484
+[#112485]: https://github.com/home-assistant/core/pull/112485
+[#112486]: https://github.com/home-assistant/core/pull/112486
+[#112488]: https://github.com/home-assistant/core/pull/112488
+[#112489]: https://github.com/home-assistant/core/pull/112489
+[#112490]: https://github.com/home-assistant/core/pull/112490
+[#112493]: https://github.com/home-assistant/core/pull/112493
+[#112496]: https://github.com/home-assistant/core/pull/112496
+[#112497]: https://github.com/home-assistant/core/pull/112497
+[#112498]: https://github.com/home-assistant/core/pull/112498
+[#112503]: https://github.com/home-assistant/core/pull/112503
+[#112514]: https://github.com/home-assistant/core/pull/112514
+[#112518]: https://github.com/home-assistant/core/pull/112518
+[#112520]: https://github.com/home-assistant/core/pull/112520
+[#112522]: https://github.com/home-assistant/core/pull/112522
+[#112526]: https://github.com/home-assistant/core/pull/112526
+[#112528]: https://github.com/home-assistant/core/pull/112528
+[#112532]: https://github.com/home-assistant/core/pull/112532
+[#112533]: https://github.com/home-assistant/core/pull/112533
+[#112535]: https://github.com/home-assistant/core/pull/112535
+[#112536]: https://github.com/home-assistant/core/pull/112536
+[#112542]: https://github.com/home-assistant/core/pull/112542
+[#112543]: https://github.com/home-assistant/core/pull/112543
+[#112546]: https://github.com/home-assistant/core/pull/112546
+[#112551]: https://github.com/home-assistant/core/pull/112551
+[#112555]: https://github.com/home-assistant/core/pull/112555
+[#112557]: https://github.com/home-assistant/core/pull/112557
+[#112560]: https://github.com/home-assistant/core/pull/112560
+[#112562]: https://github.com/home-assistant/core/pull/112562
+[#112563]: https://github.com/home-assistant/core/pull/112563
+[#112572]: https://github.com/home-assistant/core/pull/112572
+[#112575]: https://github.com/home-assistant/core/pull/112575
+[#112608]: https://github.com/home-assistant/core/pull/112608
+[#112609]: https://github.com/home-assistant/core/pull/112609
+[#112610]: https://github.com/home-assistant/core/pull/112610
+[#112612]: https://github.com/home-assistant/core/pull/112612
+[#112626]: https://github.com/home-assistant/core/pull/112626
+[#112634]: https://github.com/home-assistant/core/pull/112634
+[#112637]: https://github.com/home-assistant/core/pull/112637
+[#112640]: https://github.com/home-assistant/core/pull/112640
+[#112643]: https://github.com/home-assistant/core/pull/112643
+[#112652]: https://github.com/home-assistant/core/pull/112652
+[#112657]: https://github.com/home-assistant/core/pull/112657
+[#112658]: https://github.com/home-assistant/core/pull/112658
+[#112662]: https://github.com/home-assistant/core/pull/112662
+[#112665]: https://github.com/home-assistant/core/pull/112665
+[#112668]: https://github.com/home-assistant/core/pull/112668
+[#112669]: https://github.com/home-assistant/core/pull/112669
+[#112670]: https://github.com/home-assistant/core/pull/112670
+[#112671]: https://github.com/home-assistant/core/pull/112671
+[#112682]: https://github.com/home-assistant/core/pull/112682
+[#112683]: https://github.com/home-assistant/core/pull/112683
+[#112690]: https://github.com/home-assistant/core/pull/112690
+[#112695]: https://github.com/home-assistant/core/pull/112695
+[#112697]: https://github.com/home-assistant/core/pull/112697
+[#112698]: https://github.com/home-assistant/core/pull/112698
+[#112699]: https://github.com/home-assistant/core/pull/112699
+[#112700]: https://github.com/home-assistant/core/pull/112700
+[#112702]: https://github.com/home-assistant/core/pull/112702
+[#112703]: https://github.com/home-assistant/core/pull/112703
+[#112704]: https://github.com/home-assistant/core/pull/112704
+[#112705]: https://github.com/home-assistant/core/pull/112705
+[#112706]: https://github.com/home-assistant/core/pull/112706
+[#112707]: https://github.com/home-assistant/core/pull/112707
+[#112708]: https://github.com/home-assistant/core/pull/112708
+[#112709]: https://github.com/home-assistant/core/pull/112709
+[#112710]: https://github.com/home-assistant/core/pull/112710
+[#112711]: https://github.com/home-assistant/core/pull/112711
+[#112712]: https://github.com/home-assistant/core/pull/112712
+[#112720]: https://github.com/home-assistant/core/pull/112720
+[#112725]: https://github.com/home-assistant/core/pull/112725
+[#112726]: https://github.com/home-assistant/core/pull/112726
+[#112728]: https://github.com/home-assistant/core/pull/112728
+[#112732]: https://github.com/home-assistant/core/pull/112732
+[#112734]: https://github.com/home-assistant/core/pull/112734
+[#112736]: https://github.com/home-assistant/core/pull/112736
+[#112737]: https://github.com/home-assistant/core/pull/112737
+[#112738]: https://github.com/home-assistant/core/pull/112738
+[#112739]: https://github.com/home-assistant/core/pull/112739
+[#112740]: https://github.com/home-assistant/core/pull/112740
+[#112741]: https://github.com/home-assistant/core/pull/112741
+[#112742]: https://github.com/home-assistant/core/pull/112742
+[#112743]: https://github.com/home-assistant/core/pull/112743
+[#112749]: https://github.com/home-assistant/core/pull/112749
+[#112750]: https://github.com/home-assistant/core/pull/112750
+[#112752]: https://github.com/home-assistant/core/pull/112752
+[#112753]: https://github.com/home-assistant/core/pull/112753
+[#112756]: https://github.com/home-assistant/core/pull/112756
+[#112760]: https://github.com/home-assistant/core/pull/112760
+[#112763]: https://github.com/home-assistant/core/pull/112763
+[#112764]: https://github.com/home-assistant/core/pull/112764
+[#112765]: https://github.com/home-assistant/core/pull/112765
+[#112766]: https://github.com/home-assistant/core/pull/112766
+[#112767]: https://github.com/home-assistant/core/pull/112767
+[#112768]: https://github.com/home-assistant/core/pull/112768
+[#112769]: https://github.com/home-assistant/core/pull/112769
+[#112770]: https://github.com/home-assistant/core/pull/112770
+[#112771]: https://github.com/home-assistant/core/pull/112771
+[#112772]: https://github.com/home-assistant/core/pull/112772
+[#112773]: https://github.com/home-assistant/core/pull/112773
+[#112774]: https://github.com/home-assistant/core/pull/112774
+[#112775]: https://github.com/home-assistant/core/pull/112775
+[#112776]: https://github.com/home-assistant/core/pull/112776
+[#112777]: https://github.com/home-assistant/core/pull/112777
+[#112778]: https://github.com/home-assistant/core/pull/112778
+[#112779]: https://github.com/home-assistant/core/pull/112779
+[#112780]: https://github.com/home-assistant/core/pull/112780
+[#112781]: https://github.com/home-assistant/core/pull/112781
+[#112782]: https://github.com/home-assistant/core/pull/112782
+[#112786]: https://github.com/home-assistant/core/pull/112786
+[#112788]: https://github.com/home-assistant/core/pull/112788
+[#112789]: https://github.com/home-assistant/core/pull/112789
+[#112790]: https://github.com/home-assistant/core/pull/112790
+[#112791]: https://github.com/home-assistant/core/pull/112791
+[#112793]: https://github.com/home-assistant/core/pull/112793
+[#112800]: https://github.com/home-assistant/core/pull/112800
+[#112801]: https://github.com/home-assistant/core/pull/112801
+[#112802]: https://github.com/home-assistant/core/pull/112802
+[#112803]: https://github.com/home-assistant/core/pull/112803
+[#112804]: https://github.com/home-assistant/core/pull/112804
+[#112805]: https://github.com/home-assistant/core/pull/112805
+[#112807]: https://github.com/home-assistant/core/pull/112807
+[#112810]: https://github.com/home-assistant/core/pull/112810
+[#112813]: https://github.com/home-assistant/core/pull/112813
+[#112814]: https://github.com/home-assistant/core/pull/112814
+[#112818]: https://github.com/home-assistant/core/pull/112818
+[#112819]: https://github.com/home-assistant/core/pull/112819
+[#112820]: https://github.com/home-assistant/core/pull/112820
+[#112821]: https://github.com/home-assistant/core/pull/112821
+[#112822]: https://github.com/home-assistant/core/pull/112822
+[#112825]: https://github.com/home-assistant/core/pull/112825
+[#112826]: https://github.com/home-assistant/core/pull/112826
+[#112828]: https://github.com/home-assistant/core/pull/112828
+[#112844]: https://github.com/home-assistant/core/pull/112844
+[#112845]: https://github.com/home-assistant/core/pull/112845
+[#112846]: https://github.com/home-assistant/core/pull/112846
+[#112847]: https://github.com/home-assistant/core/pull/112847
+[#112849]: https://github.com/home-assistant/core/pull/112849
+[#112850]: https://github.com/home-assistant/core/pull/112850
+[#112851]: https://github.com/home-assistant/core/pull/112851
+[#112854]: https://github.com/home-assistant/core/pull/112854
+[#112859]: https://github.com/home-assistant/core/pull/112859
+[#112863]: https://github.com/home-assistant/core/pull/112863
+[#112864]: https://github.com/home-assistant/core/pull/112864
+[#112866]: https://github.com/home-assistant/core/pull/112866
+[#112869]: https://github.com/home-assistant/core/pull/112869
+[#112872]: https://github.com/home-assistant/core/pull/112872
+[#112888]: https://github.com/home-assistant/core/pull/112888
+[#112892]: https://github.com/home-assistant/core/pull/112892
+[#112893]: https://github.com/home-assistant/core/pull/112893
+[#112895]: https://github.com/home-assistant/core/pull/112895
+[#112896]: https://github.com/home-assistant/core/pull/112896
+[#112898]: https://github.com/home-assistant/core/pull/112898
+[#112899]: https://github.com/home-assistant/core/pull/112899
+[#112900]: https://github.com/home-assistant/core/pull/112900
+[#112901]: https://github.com/home-assistant/core/pull/112901
+[#112902]: https://github.com/home-assistant/core/pull/112902
+[#112903]: https://github.com/home-assistant/core/pull/112903
+[#112904]: https://github.com/home-assistant/core/pull/112904
+[#112905]: https://github.com/home-assistant/core/pull/112905
+[#112906]: https://github.com/home-assistant/core/pull/112906
+[#112907]: https://github.com/home-assistant/core/pull/112907
+[#112908]: https://github.com/home-assistant/core/pull/112908
+[#112909]: https://github.com/home-assistant/core/pull/112909
+[#112910]: https://github.com/home-assistant/core/pull/112910
+[#112911]: https://github.com/home-assistant/core/pull/112911
+[#112912]: https://github.com/home-assistant/core/pull/112912
+[#112913]: https://github.com/home-assistant/core/pull/112913
+[#112914]: https://github.com/home-assistant/core/pull/112914
+[#112915]: https://github.com/home-assistant/core/pull/112915
+[#112917]: https://github.com/home-assistant/core/pull/112917
+[#112918]: https://github.com/home-assistant/core/pull/112918
+[#112919]: https://github.com/home-assistant/core/pull/112919
+[#112920]: https://github.com/home-assistant/core/pull/112920
+[#112921]: https://github.com/home-assistant/core/pull/112921
+[#112922]: https://github.com/home-assistant/core/pull/112922
+[#112923]: https://github.com/home-assistant/core/pull/112923
+[#112924]: https://github.com/home-assistant/core/pull/112924
+[#112925]: https://github.com/home-assistant/core/pull/112925
+[#112926]: https://github.com/home-assistant/core/pull/112926
+[#112928]: https://github.com/home-assistant/core/pull/112928
+[#112929]: https://github.com/home-assistant/core/pull/112929
+[#112930]: https://github.com/home-assistant/core/pull/112930
+[#112931]: https://github.com/home-assistant/core/pull/112931
+[#112932]: https://github.com/home-assistant/core/pull/112932
+[#112933]: https://github.com/home-assistant/core/pull/112933
+[#112934]: https://github.com/home-assistant/core/pull/112934
+[#112935]: https://github.com/home-assistant/core/pull/112935
+[#112936]: https://github.com/home-assistant/core/pull/112936
+[#112937]: https://github.com/home-assistant/core/pull/112937
+[#112938]: https://github.com/home-assistant/core/pull/112938
+[#112939]: https://github.com/home-assistant/core/pull/112939
+[#112940]: https://github.com/home-assistant/core/pull/112940
+[#112941]: https://github.com/home-assistant/core/pull/112941
+[#112942]: https://github.com/home-assistant/core/pull/112942
+[#112943]: https://github.com/home-assistant/core/pull/112943
+[#112944]: https://github.com/home-assistant/core/pull/112944
+[#112945]: https://github.com/home-assistant/core/pull/112945
+[#112946]: https://github.com/home-assistant/core/pull/112946
+[#112947]: https://github.com/home-assistant/core/pull/112947
+[#112949]: https://github.com/home-assistant/core/pull/112949
+[#112951]: https://github.com/home-assistant/core/pull/112951
+[#112952]: https://github.com/home-assistant/core/pull/112952
+[#112953]: https://github.com/home-assistant/core/pull/112953
+[#112954]: https://github.com/home-assistant/core/pull/112954
+[#112955]: https://github.com/home-assistant/core/pull/112955
+[#112956]: https://github.com/home-assistant/core/pull/112956
+[#112957]: https://github.com/home-assistant/core/pull/112957
+[#112958]: https://github.com/home-assistant/core/pull/112958
+[#112959]: https://github.com/home-assistant/core/pull/112959
+[#112960]: https://github.com/home-assistant/core/pull/112960
+[#112963]: https://github.com/home-assistant/core/pull/112963
+[#112964]: https://github.com/home-assistant/core/pull/112964
+[#112965]: https://github.com/home-assistant/core/pull/112965
+[#112966]: https://github.com/home-assistant/core/pull/112966
+[#112967]: https://github.com/home-assistant/core/pull/112967
+[#112969]: https://github.com/home-assistant/core/pull/112969
+[#112970]: https://github.com/home-assistant/core/pull/112970
+[#112971]: https://github.com/home-assistant/core/pull/112971
+[#112972]: https://github.com/home-assistant/core/pull/112972
+[#112973]: https://github.com/home-assistant/core/pull/112973
+[#112974]: https://github.com/home-assistant/core/pull/112974
+[#112975]: https://github.com/home-assistant/core/pull/112975
+[#112976]: https://github.com/home-assistant/core/pull/112976
+[#112977]: https://github.com/home-assistant/core/pull/112977
+[#112979]: https://github.com/home-assistant/core/pull/112979
+[#112982]: https://github.com/home-assistant/core/pull/112982
+[#112987]: https://github.com/home-assistant/core/pull/112987
+[#112988]: https://github.com/home-assistant/core/pull/112988
+[#112989]: https://github.com/home-assistant/core/pull/112989
+[#112990]: https://github.com/home-assistant/core/pull/112990
+[#112991]: https://github.com/home-assistant/core/pull/112991
+[#112992]: https://github.com/home-assistant/core/pull/112992
+[#112993]: https://github.com/home-assistant/core/pull/112993
+[#112994]: https://github.com/home-assistant/core/pull/112994
+[#112995]: https://github.com/home-assistant/core/pull/112995
+[#112996]: https://github.com/home-assistant/core/pull/112996
+[#112997]: https://github.com/home-assistant/core/pull/112997
+[#113002]: https://github.com/home-assistant/core/pull/113002
+[#113004]: https://github.com/home-assistant/core/pull/113004
+[#113005]: https://github.com/home-assistant/core/pull/113005
+[#113006]: https://github.com/home-assistant/core/pull/113006
+[#113010]: https://github.com/home-assistant/core/pull/113010
+[#113011]: https://github.com/home-assistant/core/pull/113011
+[#113012]: https://github.com/home-assistant/core/pull/113012
+[#113013]: https://github.com/home-assistant/core/pull/113013
+[#113014]: https://github.com/home-assistant/core/pull/113014
+[#113015]: https://github.com/home-assistant/core/pull/113015
+[#113016]: https://github.com/home-assistant/core/pull/113016
+[#113017]: https://github.com/home-assistant/core/pull/113017
+[#113018]: https://github.com/home-assistant/core/pull/113018
+[#113020]: https://github.com/home-assistant/core/pull/113020
+[#113022]: https://github.com/home-assistant/core/pull/113022
+[#113026]: https://github.com/home-assistant/core/pull/113026
+[#113027]: https://github.com/home-assistant/core/pull/113027
+[#113030]: https://github.com/home-assistant/core/pull/113030
+[#113031]: https://github.com/home-assistant/core/pull/113031
+[#113032]: https://github.com/home-assistant/core/pull/113032
+[#113033]: https://github.com/home-assistant/core/pull/113033
+[#113038]: https://github.com/home-assistant/core/pull/113038
+[#113041]: https://github.com/home-assistant/core/pull/113041
+[#113042]: https://github.com/home-assistant/core/pull/113042
+[#113044]: https://github.com/home-assistant/core/pull/113044
+[#113045]: https://github.com/home-assistant/core/pull/113045
+[#113046]: https://github.com/home-assistant/core/pull/113046
+[#113049]: https://github.com/home-assistant/core/pull/113049
+[#113051]: https://github.com/home-assistant/core/pull/113051
+[#113055]: https://github.com/home-assistant/core/pull/113055
+[#113057]: https://github.com/home-assistant/core/pull/113057
+[#113060]: https://github.com/home-assistant/core/pull/113060
+[#113069]: https://github.com/home-assistant/core/pull/113069
+[#113072]: https://github.com/home-assistant/core/pull/113072
+[#113074]: https://github.com/home-assistant/core/pull/113074
+[#113075]: https://github.com/home-assistant/core/pull/113075
+[#113089]: https://github.com/home-assistant/core/pull/113089
+[#113090]: https://github.com/home-assistant/core/pull/113090
+[#113094]: https://github.com/home-assistant/core/pull/113094
+[#113099]: https://github.com/home-assistant/core/pull/113099
+[#113102]: https://github.com/home-assistant/core/pull/113102
+[#113103]: https://github.com/home-assistant/core/pull/113103
+[#113107]: https://github.com/home-assistant/core/pull/113107
+[#113108]: https://github.com/home-assistant/core/pull/113108
+[#113109]: https://github.com/home-assistant/core/pull/113109
+[#113110]: https://github.com/home-assistant/core/pull/113110
+[#113111]: https://github.com/home-assistant/core/pull/113111
+[#113112]: https://github.com/home-assistant/core/pull/113112
+[#113113]: https://github.com/home-assistant/core/pull/113113
+[#113114]: https://github.com/home-assistant/core/pull/113114
+[#113115]: https://github.com/home-assistant/core/pull/113115
+[#113116]: https://github.com/home-assistant/core/pull/113116
+[#113118]: https://github.com/home-assistant/core/pull/113118
+[#113119]: https://github.com/home-assistant/core/pull/113119
+[#113120]: https://github.com/home-assistant/core/pull/113120
+[#113122]: https://github.com/home-assistant/core/pull/113122
+[#113123]: https://github.com/home-assistant/core/pull/113123
+[#113124]: https://github.com/home-assistant/core/pull/113124
+[#113126]: https://github.com/home-assistant/core/pull/113126
+[#113128]: https://github.com/home-assistant/core/pull/113128
+[#113129]: https://github.com/home-assistant/core/pull/113129
+[#113130]: https://github.com/home-assistant/core/pull/113130
+[#113132]: https://github.com/home-assistant/core/pull/113132
+[#113133]: https://github.com/home-assistant/core/pull/113133
+[#113136]: https://github.com/home-assistant/core/pull/113136
+[#113138]: https://github.com/home-assistant/core/pull/113138
+[#113139]: https://github.com/home-assistant/core/pull/113139
+[#113168]: https://github.com/home-assistant/core/pull/113168
+[#113169]: https://github.com/home-assistant/core/pull/113169
+[#113173]: https://github.com/home-assistant/core/pull/113173
+[#113174]: https://github.com/home-assistant/core/pull/113174
+[#113175]: https://github.com/home-assistant/core/pull/113175
+[#113178]: https://github.com/home-assistant/core/pull/113178
+[#113179]: https://github.com/home-assistant/core/pull/113179
+[#113181]: https://github.com/home-assistant/core/pull/113181
+[#113182]: https://github.com/home-assistant/core/pull/113182
+[#113183]: https://github.com/home-assistant/core/pull/113183
+[#113184]: https://github.com/home-assistant/core/pull/113184
+[#113185]: https://github.com/home-assistant/core/pull/113185
+[#113188]: https://github.com/home-assistant/core/pull/113188
+[#113189]: https://github.com/home-assistant/core/pull/113189
+[#113190]: https://github.com/home-assistant/core/pull/113190
+[#113191]: https://github.com/home-assistant/core/pull/113191
+[#113192]: https://github.com/home-assistant/core/pull/113192
+[#113195]: https://github.com/home-assistant/core/pull/113195
+[#113197]: https://github.com/home-assistant/core/pull/113197
+[#113201]: https://github.com/home-assistant/core/pull/113201
+[#113202]: https://github.com/home-assistant/core/pull/113202
+[#113206]: https://github.com/home-assistant/core/pull/113206
+[#113207]: https://github.com/home-assistant/core/pull/113207
+[#113208]: https://github.com/home-assistant/core/pull/113208
+[#113215]: https://github.com/home-assistant/core/pull/113215
+[#113217]: https://github.com/home-assistant/core/pull/113217
+[#113218]: https://github.com/home-assistant/core/pull/113218
+[#113221]: https://github.com/home-assistant/core/pull/113221
+[#113225]: https://github.com/home-assistant/core/pull/113225
+[#113227]: https://github.com/home-assistant/core/pull/113227
+[#113229]: https://github.com/home-assistant/core/pull/113229
+[#113231]: https://github.com/home-assistant/core/pull/113231
+[#113233]: https://github.com/home-assistant/core/pull/113233
+[#113236]: https://github.com/home-assistant/core/pull/113236
+[#113241]: https://github.com/home-assistant/core/pull/113241
+[#113242]: https://github.com/home-assistant/core/pull/113242
+[#113243]: https://github.com/home-assistant/core/pull/113243
+[#113245]: https://github.com/home-assistant/core/pull/113245
+[#113248]: https://github.com/home-assistant/core/pull/113248
+[#113252]: https://github.com/home-assistant/core/pull/113252
+[#113253]: https://github.com/home-assistant/core/pull/113253
+[#113256]: https://github.com/home-assistant/core/pull/113256
+[#113257]: https://github.com/home-assistant/core/pull/113257
+[#113258]: https://github.com/home-assistant/core/pull/113258
+[#113259]: https://github.com/home-assistant/core/pull/113259
+[#113260]: https://github.com/home-assistant/core/pull/113260
+[#113262]: https://github.com/home-assistant/core/pull/113262
+[#113263]: https://github.com/home-assistant/core/pull/113263
+[#113268]: https://github.com/home-assistant/core/pull/113268
+[#113269]: https://github.com/home-assistant/core/pull/113269
+[#113270]: https://github.com/home-assistant/core/pull/113270
+[#113271]: https://github.com/home-assistant/core/pull/113271
+[#113272]: https://github.com/home-assistant/core/pull/113272
+[#113273]: https://github.com/home-assistant/core/pull/113273
+[#113274]: https://github.com/home-assistant/core/pull/113274
+[#113276]: https://github.com/home-assistant/core/pull/113276
+[#113277]: https://github.com/home-assistant/core/pull/113277
+[#113278]: https://github.com/home-assistant/core/pull/113278
+[#113280]: https://github.com/home-assistant/core/pull/113280
+[#113281]: https://github.com/home-assistant/core/pull/113281
+[#113282]: https://github.com/home-assistant/core/pull/113282
+[#113283]: https://github.com/home-assistant/core/pull/113283
+[#113284]: https://github.com/home-assistant/core/pull/113284
+[#113285]: https://github.com/home-assistant/core/pull/113285
+[#113286]: https://github.com/home-assistant/core/pull/113286
+[#113287]: https://github.com/home-assistant/core/pull/113287
+[#113288]: https://github.com/home-assistant/core/pull/113288
+[#113289]: https://github.com/home-assistant/core/pull/113289
+[#113290]: https://github.com/home-assistant/core/pull/113290
+[#113291]: https://github.com/home-assistant/core/pull/113291
+[#113292]: https://github.com/home-assistant/core/pull/113292
+[#113293]: https://github.com/home-assistant/core/pull/113293
+[#113294]: https://github.com/home-assistant/core/pull/113294
+[#113295]: https://github.com/home-assistant/core/pull/113295
+[#113296]: https://github.com/home-assistant/core/pull/113296
+[#113297]: https://github.com/home-assistant/core/pull/113297
+[#113298]: https://github.com/home-assistant/core/pull/113298
+[#113299]: https://github.com/home-assistant/core/pull/113299
+[#113300]: https://github.com/home-assistant/core/pull/113300
+[#113301]: https://github.com/home-assistant/core/pull/113301
+[#113302]: https://github.com/home-assistant/core/pull/113302
+[#113303]: https://github.com/home-assistant/core/pull/113303
+[#113304]: https://github.com/home-assistant/core/pull/113304
+[#113305]: https://github.com/home-assistant/core/pull/113305
+[#113306]: https://github.com/home-assistant/core/pull/113306
+[#113307]: https://github.com/home-assistant/core/pull/113307
+[#113308]: https://github.com/home-assistant/core/pull/113308
+[#113309]: https://github.com/home-assistant/core/pull/113309
+[#113311]: https://github.com/home-assistant/core/pull/113311
+[#113312]: https://github.com/home-assistant/core/pull/113312
+[#113313]: https://github.com/home-assistant/core/pull/113313
+[#113314]: https://github.com/home-assistant/core/pull/113314
+[#113315]: https://github.com/home-assistant/core/pull/113315
+[#113316]: https://github.com/home-assistant/core/pull/113316
+[#113317]: https://github.com/home-assistant/core/pull/113317
+[#113318]: https://github.com/home-assistant/core/pull/113318
+[#113319]: https://github.com/home-assistant/core/pull/113319
+[#113320]: https://github.com/home-assistant/core/pull/113320
+[#113321]: https://github.com/home-assistant/core/pull/113321
+[#113322]: https://github.com/home-assistant/core/pull/113322
+[#113323]: https://github.com/home-assistant/core/pull/113323
+[#113324]: https://github.com/home-assistant/core/pull/113324
+[#113325]: https://github.com/home-assistant/core/pull/113325
+[#113326]: https://github.com/home-assistant/core/pull/113326
+[#113327]: https://github.com/home-assistant/core/pull/113327
+[#113328]: https://github.com/home-assistant/core/pull/113328
+[#113329]: https://github.com/home-assistant/core/pull/113329
+[#113330]: https://github.com/home-assistant/core/pull/113330
+[#113331]: https://github.com/home-assistant/core/pull/113331
+[#113332]: https://github.com/home-assistant/core/pull/113332
+[#113333]: https://github.com/home-assistant/core/pull/113333
+[#113335]: https://github.com/home-assistant/core/pull/113335
+[#113336]: https://github.com/home-assistant/core/pull/113336
+[#113337]: https://github.com/home-assistant/core/pull/113337
+[#113338]: https://github.com/home-assistant/core/pull/113338
+[#113339]: https://github.com/home-assistant/core/pull/113339
+[#113340]: https://github.com/home-assistant/core/pull/113340
+[#113341]: https://github.com/home-assistant/core/pull/113341
+[#113342]: https://github.com/home-assistant/core/pull/113342
+[#113343]: https://github.com/home-assistant/core/pull/113343
+[#113344]: https://github.com/home-assistant/core/pull/113344
+[#113345]: https://github.com/home-assistant/core/pull/113345
+[#113346]: https://github.com/home-assistant/core/pull/113346
+[#113347]: https://github.com/home-assistant/core/pull/113347
+[#113348]: https://github.com/home-assistant/core/pull/113348
+[#113349]: https://github.com/home-assistant/core/pull/113349
+[#113350]: https://github.com/home-assistant/core/pull/113350
+[#113351]: https://github.com/home-assistant/core/pull/113351
+[#113352]: https://github.com/home-assistant/core/pull/113352
+[#113353]: https://github.com/home-assistant/core/pull/113353
+[#113354]: https://github.com/home-assistant/core/pull/113354
+[#113355]: https://github.com/home-assistant/core/pull/113355
+[#113356]: https://github.com/home-assistant/core/pull/113356
+[#113357]: https://github.com/home-assistant/core/pull/113357
+[#113358]: https://github.com/home-assistant/core/pull/113358
+[#113359]: https://github.com/home-assistant/core/pull/113359
+[#113360]: https://github.com/home-assistant/core/pull/113360
+[#113361]: https://github.com/home-assistant/core/pull/113361
+[#113362]: https://github.com/home-assistant/core/pull/113362
+[#113363]: https://github.com/home-assistant/core/pull/113363
+[#113364]: https://github.com/home-assistant/core/pull/113364
+[#113365]: https://github.com/home-assistant/core/pull/113365
+[#113366]: https://github.com/home-assistant/core/pull/113366
+[#113367]: https://github.com/home-assistant/core/pull/113367
+[#113368]: https://github.com/home-assistant/core/pull/113368
+[#113369]: https://github.com/home-assistant/core/pull/113369
+[#113370]: https://github.com/home-assistant/core/pull/113370
+[#113371]: https://github.com/home-assistant/core/pull/113371
+[#113378]: https://github.com/home-assistant/core/pull/113378
+[#113382]: https://github.com/home-assistant/core/pull/113382
+[#113383]: https://github.com/home-assistant/core/pull/113383
+[#113384]: https://github.com/home-assistant/core/pull/113384
+[#113386]: https://github.com/home-assistant/core/pull/113386
+[#113387]: https://github.com/home-assistant/core/pull/113387
+[#113388]: https://github.com/home-assistant/core/pull/113388
+[#113389]: https://github.com/home-assistant/core/pull/113389
+[#113390]: https://github.com/home-assistant/core/pull/113390
+[#113391]: https://github.com/home-assistant/core/pull/113391
+[#113397]: https://github.com/home-assistant/core/pull/113397
+[#113401]: https://github.com/home-assistant/core/pull/113401
+[#113402]: https://github.com/home-assistant/core/pull/113402
+[#113404]: https://github.com/home-assistant/core/pull/113404
+[#113405]: https://github.com/home-assistant/core/pull/113405
+[#113406]: https://github.com/home-assistant/core/pull/113406
+[#113408]: https://github.com/home-assistant/core/pull/113408
+[#113409]: https://github.com/home-assistant/core/pull/113409
+[#113410]: https://github.com/home-assistant/core/pull/113410
+[#113411]: https://github.com/home-assistant/core/pull/113411
+[#113412]: https://github.com/home-assistant/core/pull/113412
+[#113413]: https://github.com/home-assistant/core/pull/113413
+[#113414]: https://github.com/home-assistant/core/pull/113414
+[#113415]: https://github.com/home-assistant/core/pull/113415
+[#113416]: https://github.com/home-assistant/core/pull/113416
+[#113417]: https://github.com/home-assistant/core/pull/113417
+[#113418]: https://github.com/home-assistant/core/pull/113418
+[#113419]: https://github.com/home-assistant/core/pull/113419
+[#113420]: https://github.com/home-assistant/core/pull/113420
+[#113422]: https://github.com/home-assistant/core/pull/113422
+[#113425]: https://github.com/home-assistant/core/pull/113425
+[#113431]: https://github.com/home-assistant/core/pull/113431
+[#113440]: https://github.com/home-assistant/core/pull/113440
+[#113441]: https://github.com/home-assistant/core/pull/113441
+[#113442]: https://github.com/home-assistant/core/pull/113442
+[#113446]: https://github.com/home-assistant/core/pull/113446
+[#113447]: https://github.com/home-assistant/core/pull/113447
+[#113450]: https://github.com/home-assistant/core/pull/113450
+[#113451]: https://github.com/home-assistant/core/pull/113451
+[#113453]: https://github.com/home-assistant/core/pull/113453
+[#113455]: https://github.com/home-assistant/core/pull/113455
+[#113462]: https://github.com/home-assistant/core/pull/113462
+[#113465]: https://github.com/home-assistant/core/pull/113465
+[#113467]: https://github.com/home-assistant/core/pull/113467
+[#113469]: https://github.com/home-assistant/core/pull/113469
+[#113471]: https://github.com/home-assistant/core/pull/113471
+[#113478]: https://github.com/home-assistant/core/pull/113478
+[#113480]: https://github.com/home-assistant/core/pull/113480
+[#113482]: https://github.com/home-assistant/core/pull/113482
+[#113485]: https://github.com/home-assistant/core/pull/113485
+[#113490]: https://github.com/home-assistant/core/pull/113490
+[#113493]: https://github.com/home-assistant/core/pull/113493
+[#113496]: https://github.com/home-assistant/core/pull/113496
+[#113501]: https://github.com/home-assistant/core/pull/113501
+[#113502]: https://github.com/home-assistant/core/pull/113502
+[#113504]: https://github.com/home-assistant/core/pull/113504
+[#113506]: https://github.com/home-assistant/core/pull/113506
+[#113508]: https://github.com/home-assistant/core/pull/113508
+[#113509]: https://github.com/home-assistant/core/pull/113509
+[#113510]: https://github.com/home-assistant/core/pull/113510
+[#113511]: https://github.com/home-assistant/core/pull/113511
+[#113514]: https://github.com/home-assistant/core/pull/113514
+[#113516]: https://github.com/home-assistant/core/pull/113516
+[#113524]: https://github.com/home-assistant/core/pull/113524
+[#113527]: https://github.com/home-assistant/core/pull/113527
+[#113528]: https://github.com/home-assistant/core/pull/113528
+[#113529]: https://github.com/home-assistant/core/pull/113529
+[#113530]: https://github.com/home-assistant/core/pull/113530
+[#113531]: https://github.com/home-assistant/core/pull/113531
+[#113533]: https://github.com/home-assistant/core/pull/113533
+[#113534]: https://github.com/home-assistant/core/pull/113534
+[#113535]: https://github.com/home-assistant/core/pull/113535
+[#113537]: https://github.com/home-assistant/core/pull/113537
+[#113540]: https://github.com/home-assistant/core/pull/113540
+[#113542]: https://github.com/home-assistant/core/pull/113542
+[#113543]: https://github.com/home-assistant/core/pull/113543
+[#113544]: https://github.com/home-assistant/core/pull/113544
+[#113549]: https://github.com/home-assistant/core/pull/113549
+[#113550]: https://github.com/home-assistant/core/pull/113550
+[#113553]: https://github.com/home-assistant/core/pull/113553
+[#113554]: https://github.com/home-assistant/core/pull/113554
+[#113555]: https://github.com/home-assistant/core/pull/113555
+[#113556]: https://github.com/home-assistant/core/pull/113556
+[#113557]: https://github.com/home-assistant/core/pull/113557
+[#113558]: https://github.com/home-assistant/core/pull/113558
+[#113562]: https://github.com/home-assistant/core/pull/113562
+[#113564]: https://github.com/home-assistant/core/pull/113564
+[#113569]: https://github.com/home-assistant/core/pull/113569
+[#113570]: https://github.com/home-assistant/core/pull/113570
+[#113573]: https://github.com/home-assistant/core/pull/113573
+[#113577]: https://github.com/home-assistant/core/pull/113577
+[#113578]: https://github.com/home-assistant/core/pull/113578
+[#113579]: https://github.com/home-assistant/core/pull/113579
+[#113580]: https://github.com/home-assistant/core/pull/113580
+[#113581]: https://github.com/home-assistant/core/pull/113581
+[#113582]: https://github.com/home-assistant/core/pull/113582
+[#113583]: https://github.com/home-assistant/core/pull/113583
+[#113584]: https://github.com/home-assistant/core/pull/113584
+[#113586]: https://github.com/home-assistant/core/pull/113586
+[#113588]: https://github.com/home-assistant/core/pull/113588
+[#113589]: https://github.com/home-assistant/core/pull/113589
+[#113595]: https://github.com/home-assistant/core/pull/113595
+[#113596]: https://github.com/home-assistant/core/pull/113596
+[#113597]: https://github.com/home-assistant/core/pull/113597
+[#113602]: https://github.com/home-assistant/core/pull/113602
+[#113604]: https://github.com/home-assistant/core/pull/113604
+[#113606]: https://github.com/home-assistant/core/pull/113606
+[#113607]: https://github.com/home-assistant/core/pull/113607
+[#113611]: https://github.com/home-assistant/core/pull/113611
+[#113612]: https://github.com/home-assistant/core/pull/113612
+[#113613]: https://github.com/home-assistant/core/pull/113613
+[#113615]: https://github.com/home-assistant/core/pull/113615
+[#113616]: https://github.com/home-assistant/core/pull/113616
+[#113617]: https://github.com/home-assistant/core/pull/113617
+[#113618]: https://github.com/home-assistant/core/pull/113618
+[#113619]: https://github.com/home-assistant/core/pull/113619
+[#113620]: https://github.com/home-assistant/core/pull/113620
+[#113621]: https://github.com/home-assistant/core/pull/113621
+[#113623]: https://github.com/home-assistant/core/pull/113623
+[#113624]: https://github.com/home-assistant/core/pull/113624
+[#113625]: https://github.com/home-assistant/core/pull/113625
+[#113626]: https://github.com/home-assistant/core/pull/113626
+[#113627]: https://github.com/home-assistant/core/pull/113627
+[#113629]: https://github.com/home-assistant/core/pull/113629
+[#113631]: https://github.com/home-assistant/core/pull/113631
+[#113632]: https://github.com/home-assistant/core/pull/113632
+[#113633]: https://github.com/home-assistant/core/pull/113633
+[#113634]: https://github.com/home-assistant/core/pull/113634
+[#113635]: https://github.com/home-assistant/core/pull/113635
+[#113636]: https://github.com/home-assistant/core/pull/113636
+[#113637]: https://github.com/home-assistant/core/pull/113637
+[#113638]: https://github.com/home-assistant/core/pull/113638
+[#113639]: https://github.com/home-assistant/core/pull/113639
+[#113644]: https://github.com/home-assistant/core/pull/113644
+[#113645]: https://github.com/home-assistant/core/pull/113645
+[#113646]: https://github.com/home-assistant/core/pull/113646
+[#113647]: https://github.com/home-assistant/core/pull/113647
+[#113648]: https://github.com/home-assistant/core/pull/113648
+[#113650]: https://github.com/home-assistant/core/pull/113650
+[#113652]: https://github.com/home-assistant/core/pull/113652
+[#113653]: https://github.com/home-assistant/core/pull/113653
+[#113654]: https://github.com/home-assistant/core/pull/113654
+[#113655]: https://github.com/home-assistant/core/pull/113655
+[#113657]: https://github.com/home-assistant/core/pull/113657
+[#113658]: https://github.com/home-assistant/core/pull/113658
+[#113659]: https://github.com/home-assistant/core/pull/113659
+[#113660]: https://github.com/home-assistant/core/pull/113660
+[#113661]: https://github.com/home-assistant/core/pull/113661
+[#113665]: https://github.com/home-assistant/core/pull/113665
+[#113667]: https://github.com/home-assistant/core/pull/113667
+[#113674]: https://github.com/home-assistant/core/pull/113674
+[#113675]: https://github.com/home-assistant/core/pull/113675
+[#113677]: https://github.com/home-assistant/core/pull/113677
+[#113683]: https://github.com/home-assistant/core/pull/113683
+[#113686]: https://github.com/home-assistant/core/pull/113686
+[#113687]: https://github.com/home-assistant/core/pull/113687
+[#113688]: https://github.com/home-assistant/core/pull/113688
+[#113691]: https://github.com/home-assistant/core/pull/113691
+[#113692]: https://github.com/home-assistant/core/pull/113692
+[#113693]: https://github.com/home-assistant/core/pull/113693
+[#113695]: https://github.com/home-assistant/core/pull/113695
+[#113702]: https://github.com/home-assistant/core/pull/113702
+[#113704]: https://github.com/home-assistant/core/pull/113704
+[#113705]: https://github.com/home-assistant/core/pull/113705
+[#113707]: https://github.com/home-assistant/core/pull/113707
+[#113715]: https://github.com/home-assistant/core/pull/113715
+[#113716]: https://github.com/home-assistant/core/pull/113716
+[#113717]: https://github.com/home-assistant/core/pull/113717
+[#113718]: https://github.com/home-assistant/core/pull/113718
+[#113720]: https://github.com/home-assistant/core/pull/113720
+[#113726]: https://github.com/home-assistant/core/pull/113726
+[#113727]: https://github.com/home-assistant/core/pull/113727
+[#113729]: https://github.com/home-assistant/core/pull/113729
+[#113740]: https://github.com/home-assistant/core/pull/113740
+[#113741]: https://github.com/home-assistant/core/pull/113741
+[#113744]: https://github.com/home-assistant/core/pull/113744
+[#113747]: https://github.com/home-assistant/core/pull/113747
+[#113750]: https://github.com/home-assistant/core/pull/113750
+[#113753]: https://github.com/home-assistant/core/pull/113753
+[#113755]: https://github.com/home-assistant/core/pull/113755
+[#113757]: https://github.com/home-assistant/core/pull/113757
+[#113758]: https://github.com/home-assistant/core/pull/113758
+[#113764]: https://github.com/home-assistant/core/pull/113764
+[#113765]: https://github.com/home-assistant/core/pull/113765
+[#113767]: https://github.com/home-assistant/core/pull/113767
+[#113773]: https://github.com/home-assistant/core/pull/113773
+[#113776]: https://github.com/home-assistant/core/pull/113776
+[#113777]: https://github.com/home-assistant/core/pull/113777
+[#113778]: https://github.com/home-assistant/core/pull/113778
+[#113779]: https://github.com/home-assistant/core/pull/113779
+[#113780]: https://github.com/home-assistant/core/pull/113780
+[#113781]: https://github.com/home-assistant/core/pull/113781
+[#113782]: https://github.com/home-assistant/core/pull/113782
+[#113783]: https://github.com/home-assistant/core/pull/113783
+[#113784]: https://github.com/home-assistant/core/pull/113784
+[#113785]: https://github.com/home-assistant/core/pull/113785
+[#113786]: https://github.com/home-assistant/core/pull/113786
+[#113788]: https://github.com/home-assistant/core/pull/113788
+[#113789]: https://github.com/home-assistant/core/pull/113789
+[#113791]: https://github.com/home-assistant/core/pull/113791
+[#113792]: https://github.com/home-assistant/core/pull/113792
+[#113797]: https://github.com/home-assistant/core/pull/113797
+[#113798]: https://github.com/home-assistant/core/pull/113798
+[#113800]: https://github.com/home-assistant/core/pull/113800
+[#113802]: https://github.com/home-assistant/core/pull/113802
+[#113803]: https://github.com/home-assistant/core/pull/113803
+[#113808]: https://github.com/home-assistant/core/pull/113808
+[#113811]: https://github.com/home-assistant/core/pull/113811
+[#113812]: https://github.com/home-assistant/core/pull/113812
+[#113814]: https://github.com/home-assistant/core/pull/113814
+[#113815]: https://github.com/home-assistant/core/pull/113815
+[#113816]: https://github.com/home-assistant/core/pull/113816
+[#113817]: https://github.com/home-assistant/core/pull/113817
+[#113819]: https://github.com/home-assistant/core/pull/113819
+[#113820]: https://github.com/home-assistant/core/pull/113820
+[#113821]: https://github.com/home-assistant/core/pull/113821
+[#113822]: https://github.com/home-assistant/core/pull/113822
+[#113823]: https://github.com/home-assistant/core/pull/113823
+[#113825]: https://github.com/home-assistant/core/pull/113825
+[#113826]: https://github.com/home-assistant/core/pull/113826
+[#113828]: https://github.com/home-assistant/core/pull/113828
+[#113834]: https://github.com/home-assistant/core/pull/113834
+[#113835]: https://github.com/home-assistant/core/pull/113835
+[#113836]: https://github.com/home-assistant/core/pull/113836
+[#113840]: https://github.com/home-assistant/core/pull/113840
+[#113842]: https://github.com/home-assistant/core/pull/113842
+[#113844]: https://github.com/home-assistant/core/pull/113844
+[#113845]: https://github.com/home-assistant/core/pull/113845
+[#113850]: https://github.com/home-assistant/core/pull/113850
+[#113852]: https://github.com/home-assistant/core/pull/113852
+[#113854]: https://github.com/home-assistant/core/pull/113854
+[#113858]: https://github.com/home-assistant/core/pull/113858
+[#113859]: https://github.com/home-assistant/core/pull/113859
+[#113862]: https://github.com/home-assistant/core/pull/113862
+[#113868]: https://github.com/home-assistant/core/pull/113868
+[#113870]: https://github.com/home-assistant/core/pull/113870
+[#113871]: https://github.com/home-assistant/core/pull/113871
+[#113872]: https://github.com/home-assistant/core/pull/113872
+[#113875]: https://github.com/home-assistant/core/pull/113875
+[#113878]: https://github.com/home-assistant/core/pull/113878
+[#113884]: https://github.com/home-assistant/core/pull/113884
+[#113886]: https://github.com/home-assistant/core/pull/113886
+[#113888]: https://github.com/home-assistant/core/pull/113888
+[#113889]: https://github.com/home-assistant/core/pull/113889
+[#113892]: https://github.com/home-assistant/core/pull/113892
+[#113893]: https://github.com/home-assistant/core/pull/113893
+[#113895]: https://github.com/home-assistant/core/pull/113895
+[#113896]: https://github.com/home-assistant/core/pull/113896
+[#113897]: https://github.com/home-assistant/core/pull/113897
+[#113898]: https://github.com/home-assistant/core/pull/113898
+[#113900]: https://github.com/home-assistant/core/pull/113900
+[#113901]: https://github.com/home-assistant/core/pull/113901
+[#113902]: https://github.com/home-assistant/core/pull/113902
+[#113903]: https://github.com/home-assistant/core/pull/113903
+[#113904]: https://github.com/home-assistant/core/pull/113904
+[#113910]: https://github.com/home-assistant/core/pull/113910
+[#113913]: https://github.com/home-assistant/core/pull/113913
+[#113915]: https://github.com/home-assistant/core/pull/113915
+[#113917]: https://github.com/home-assistant/core/pull/113917
+[#113919]: https://github.com/home-assistant/core/pull/113919
+[#113920]: https://github.com/home-assistant/core/pull/113920
+[#113921]: https://github.com/home-assistant/core/pull/113921
+[#113922]: https://github.com/home-assistant/core/pull/113922
+[#113923]: https://github.com/home-assistant/core/pull/113923
+[#113928]: https://github.com/home-assistant/core/pull/113928
+[#113929]: https://github.com/home-assistant/core/pull/113929
+[#113932]: https://github.com/home-assistant/core/pull/113932
+[#113934]: https://github.com/home-assistant/core/pull/113934
+[#113948]: https://github.com/home-assistant/core/pull/113948
+[#113951]: https://github.com/home-assistant/core/pull/113951
+[#113959]: https://github.com/home-assistant/core/pull/113959
+[#113962]: https://github.com/home-assistant/core/pull/113962
+[#113963]: https://github.com/home-assistant/core/pull/113963
+[#113964]: https://github.com/home-assistant/core/pull/113964
+[#113965]: https://github.com/home-assistant/core/pull/113965
+[#113966]: https://github.com/home-assistant/core/pull/113966
+[#113969]: https://github.com/home-assistant/core/pull/113969
+[#113972]: https://github.com/home-assistant/core/pull/113972
+[#113981]: https://github.com/home-assistant/core/pull/113981
+[#113984]: https://github.com/home-assistant/core/pull/113984
+[#113985]: https://github.com/home-assistant/core/pull/113985
+[#113987]: https://github.com/home-assistant/core/pull/113987
+[#113989]: https://github.com/home-assistant/core/pull/113989
+[#113991]: https://github.com/home-assistant/core/pull/113991
+[#113992]: https://github.com/home-assistant/core/pull/113992
+[#113994]: https://github.com/home-assistant/core/pull/113994
+[#113999]: https://github.com/home-assistant/core/pull/113999
+[#114004]: https://github.com/home-assistant/core/pull/114004
+[#114006]: https://github.com/home-assistant/core/pull/114006
+[#114007]: https://github.com/home-assistant/core/pull/114007
+[#114010]: https://github.com/home-assistant/core/pull/114010
+[#114011]: https://github.com/home-assistant/core/pull/114011
+[#114012]: https://github.com/home-assistant/core/pull/114012
+[#114013]: https://github.com/home-assistant/core/pull/114013
+[#114014]: https://github.com/home-assistant/core/pull/114014
+[#114015]: https://github.com/home-assistant/core/pull/114015
+[#114016]: https://github.com/home-assistant/core/pull/114016
+[#114017]: https://github.com/home-assistant/core/pull/114017
+[#114018]: https://github.com/home-assistant/core/pull/114018
+[#114021]: https://github.com/home-assistant/core/pull/114021
+[#114022]: https://github.com/home-assistant/core/pull/114022
+[#114024]: https://github.com/home-assistant/core/pull/114024
+[#114034]: https://github.com/home-assistant/core/pull/114034
+[#114035]: https://github.com/home-assistant/core/pull/114035
+[#114036]: https://github.com/home-assistant/core/pull/114036
+[#114038]: https://github.com/home-assistant/core/pull/114038
+[#114039]: https://github.com/home-assistant/core/pull/114039
+[#114040]: https://github.com/home-assistant/core/pull/114040
+[#114043]: https://github.com/home-assistant/core/pull/114043
+[#114044]: https://github.com/home-assistant/core/pull/114044
+[#114045]: https://github.com/home-assistant/core/pull/114045
+[#114046]: https://github.com/home-assistant/core/pull/114046
+[#114047]: https://github.com/home-assistant/core/pull/114047
+[#114050]: https://github.com/home-assistant/core/pull/114050
+[#114053]: https://github.com/home-assistant/core/pull/114053
+[#114054]: https://github.com/home-assistant/core/pull/114054
+[#114057]: https://github.com/home-assistant/core/pull/114057
+[#114058]: https://github.com/home-assistant/core/pull/114058
+[#114060]: https://github.com/home-assistant/core/pull/114060
+[#114062]: https://github.com/home-assistant/core/pull/114062
+[#114063]: https://github.com/home-assistant/core/pull/114063
+[#114065]: https://github.com/home-assistant/core/pull/114065
+[#114067]: https://github.com/home-assistant/core/pull/114067
+[#114068]: https://github.com/home-assistant/core/pull/114068
+[#114069]: https://github.com/home-assistant/core/pull/114069
+[#114071]: https://github.com/home-assistant/core/pull/114071
+[#114073]: https://github.com/home-assistant/core/pull/114073
+[#114074]: https://github.com/home-assistant/core/pull/114074
+[#114077]: https://github.com/home-assistant/core/pull/114077
+[#114078]: https://github.com/home-assistant/core/pull/114078
+[#114082]: https://github.com/home-assistant/core/pull/114082
+[#114083]: https://github.com/home-assistant/core/pull/114083
+[#114084]: https://github.com/home-assistant/core/pull/114084
+[#114085]: https://github.com/home-assistant/core/pull/114085
+[#114086]: https://github.com/home-assistant/core/pull/114086
+[#114088]: https://github.com/home-assistant/core/pull/114088
+[#114089]: https://github.com/home-assistant/core/pull/114089
+[#114093]: https://github.com/home-assistant/core/pull/114093
+[#114097]: https://github.com/home-assistant/core/pull/114097
+[#114101]: https://github.com/home-assistant/core/pull/114101
+[#114102]: https://github.com/home-assistant/core/pull/114102
+[#114105]: https://github.com/home-assistant/core/pull/114105
+[#114107]: https://github.com/home-assistant/core/pull/114107
+[#114109]: https://github.com/home-assistant/core/pull/114109
+[#114111]: https://github.com/home-assistant/core/pull/114111
+[#114114]: https://github.com/home-assistant/core/pull/114114
+[#114115]: https://github.com/home-assistant/core/pull/114115
+[#114116]: https://github.com/home-assistant/core/pull/114116
+[#114120]: https://github.com/home-assistant/core/pull/114120
+[#114122]: https://github.com/home-assistant/core/pull/114122
+[#114124]: https://github.com/home-assistant/core/pull/114124
+[#114125]: https://github.com/home-assistant/core/pull/114125
+[#114127]: https://github.com/home-assistant/core/pull/114127
+[#114131]: https://github.com/home-assistant/core/pull/114131
+[#114132]: https://github.com/home-assistant/core/pull/114132
+[#114138]: https://github.com/home-assistant/core/pull/114138
+[#114142]: https://github.com/home-assistant/core/pull/114142
+[#114143]: https://github.com/home-assistant/core/pull/114143
+[#114144]: https://github.com/home-assistant/core/pull/114144
+[#114145]: https://github.com/home-assistant/core/pull/114145
+[#114148]: https://github.com/home-assistant/core/pull/114148
+[#114149]: https://github.com/home-assistant/core/pull/114149
+[#114150]: https://github.com/home-assistant/core/pull/114150
+[#114151]: https://github.com/home-assistant/core/pull/114151
+[#114153]: https://github.com/home-assistant/core/pull/114153
+[#114154]: https://github.com/home-assistant/core/pull/114154
+[#114155]: https://github.com/home-assistant/core/pull/114155
+[#114158]: https://github.com/home-assistant/core/pull/114158
+[#114159]: https://github.com/home-assistant/core/pull/114159
+[#114160]: https://github.com/home-assistant/core/pull/114160
+[#114161]: https://github.com/home-assistant/core/pull/114161
+[#114162]: https://github.com/home-assistant/core/pull/114162
+[#114163]: https://github.com/home-assistant/core/pull/114163
+[#114164]: https://github.com/home-assistant/core/pull/114164
+[#114165]: https://github.com/home-assistant/core/pull/114165
+[#114166]: https://github.com/home-assistant/core/pull/114166
+[#114167]: https://github.com/home-assistant/core/pull/114167
+[#114168]: https://github.com/home-assistant/core/pull/114168
+[#114169]: https://github.com/home-assistant/core/pull/114169
+[#114174]: https://github.com/home-assistant/core/pull/114174
+[#114180]: https://github.com/home-assistant/core/pull/114180
+[#114181]: https://github.com/home-assistant/core/pull/114181
+[#114182]: https://github.com/home-assistant/core/pull/114182
+[#114183]: https://github.com/home-assistant/core/pull/114183
+[#114184]: https://github.com/home-assistant/core/pull/114184
+[#114185]: https://github.com/home-assistant/core/pull/114185
+[#114186]: https://github.com/home-assistant/core/pull/114186
+[#114188]: https://github.com/home-assistant/core/pull/114188
+[#114191]: https://github.com/home-assistant/core/pull/114191
+[#114192]: https://github.com/home-assistant/core/pull/114192
+[#114198]: https://github.com/home-assistant/core/pull/114198
+[#114200]: https://github.com/home-assistant/core/pull/114200
+[#114201]: https://github.com/home-assistant/core/pull/114201
+[#114203]: https://github.com/home-assistant/core/pull/114203
+[#114206]: https://github.com/home-assistant/core/pull/114206
+[#114207]: https://github.com/home-assistant/core/pull/114207
+[#114208]: https://github.com/home-assistant/core/pull/114208
+[#114210]: https://github.com/home-assistant/core/pull/114210
+[#114212]: https://github.com/home-assistant/core/pull/114212
+[#114213]: https://github.com/home-assistant/core/pull/114213
+[#114216]: https://github.com/home-assistant/core/pull/114216
+[#114218]: https://github.com/home-assistant/core/pull/114218
+[#114219]: https://github.com/home-assistant/core/pull/114219
+[#114220]: https://github.com/home-assistant/core/pull/114220
+[#114221]: https://github.com/home-assistant/core/pull/114221
+[#114222]: https://github.com/home-assistant/core/pull/114222
+[#114227]: https://github.com/home-assistant/core/pull/114227
+[#114228]: https://github.com/home-assistant/core/pull/114228
+[#114229]: https://github.com/home-assistant/core/pull/114229
+[#114231]: https://github.com/home-assistant/core/pull/114231
+[#114232]: https://github.com/home-assistant/core/pull/114232
+[#114235]: https://github.com/home-assistant/core/pull/114235
+[#114236]: https://github.com/home-assistant/core/pull/114236
+[#114243]: https://github.com/home-assistant/core/pull/114243
+[#114246]: https://github.com/home-assistant/core/pull/114246
+[#114249]: https://github.com/home-assistant/core/pull/114249
+[#114252]: https://github.com/home-assistant/core/pull/114252
+[#114253]: https://github.com/home-assistant/core/pull/114253
+[#114260]: https://github.com/home-assistant/core/pull/114260
+[#114261]: https://github.com/home-assistant/core/pull/114261
+[#114263]: https://github.com/home-assistant/core/pull/114263
+[#114271]: https://github.com/home-assistant/core/pull/114271
+[#114276]: https://github.com/home-assistant/core/pull/114276
+[#114277]: https://github.com/home-assistant/core/pull/114277
+[#114278]: https://github.com/home-assistant/core/pull/114278
+[#114281]: https://github.com/home-assistant/core/pull/114281
+[#114283]: https://github.com/home-assistant/core/pull/114283
+[#114285]: https://github.com/home-assistant/core/pull/114285
+[#114288]: https://github.com/home-assistant/core/pull/114288
+[#114289]: https://github.com/home-assistant/core/pull/114289
+[#114292]: https://github.com/home-assistant/core/pull/114292
+[#114293]: https://github.com/home-assistant/core/pull/114293
+[#114295]: https://github.com/home-assistant/core/pull/114295
+[#114296]: https://github.com/home-assistant/core/pull/114296
+[#114297]: https://github.com/home-assistant/core/pull/114297
+[#114298]: https://github.com/home-assistant/core/pull/114298
+[#114300]: https://github.com/home-assistant/core/pull/114300
+[#114301]: https://github.com/home-assistant/core/pull/114301
+[#114302]: https://github.com/home-assistant/core/pull/114302
+[#114303]: https://github.com/home-assistant/core/pull/114303
+[#114304]: https://github.com/home-assistant/core/pull/114304
+[#114306]: https://github.com/home-assistant/core/pull/114306
+[#114308]: https://github.com/home-assistant/core/pull/114308
+[#114309]: https://github.com/home-assistant/core/pull/114309
+[#114311]: https://github.com/home-assistant/core/pull/114311
+[#114312]: https://github.com/home-assistant/core/pull/114312
+[#114315]: https://github.com/home-assistant/core/pull/114315
+[#114316]: https://github.com/home-assistant/core/pull/114316
+[#114317]: https://github.com/home-assistant/core/pull/114317
+[#114320]: https://github.com/home-assistant/core/pull/114320
+[#114321]: https://github.com/home-assistant/core/pull/114321
+[#114322]: https://github.com/home-assistant/core/pull/114322
+[#114326]: https://github.com/home-assistant/core/pull/114326
+[#114332]: https://github.com/home-assistant/core/pull/114332
+[#114333]: https://github.com/home-assistant/core/pull/114333
+[#114335]: https://github.com/home-assistant/core/pull/114335
+[#114336]: https://github.com/home-assistant/core/pull/114336
+[#114337]: https://github.com/home-assistant/core/pull/114337
+[#114339]: https://github.com/home-assistant/core/pull/114339
+[#114344]: https://github.com/home-assistant/core/pull/114344
+[#114346]: https://github.com/home-assistant/core/pull/114346
+[#114348]: https://github.com/home-assistant/core/pull/114348
+[#114354]: https://github.com/home-assistant/core/pull/114354
+[#114356]: https://github.com/home-assistant/core/pull/114356
+[#114368]: https://github.com/home-assistant/core/pull/114368
+[#114370]: https://github.com/home-assistant/core/pull/114370
+[#114371]: https://github.com/home-assistant/core/pull/114371
+[#114372]: https://github.com/home-assistant/core/pull/114372
+[#114373]: https://github.com/home-assistant/core/pull/114373
+[#114374]: https://github.com/home-assistant/core/pull/114374
+[#114380]: https://github.com/home-assistant/core/pull/114380
+[#114389]: https://github.com/home-assistant/core/pull/114389
+[#114392]: https://github.com/home-assistant/core/pull/114392
+[#114394]: https://github.com/home-assistant/core/pull/114394
+[#114396]: https://github.com/home-assistant/core/pull/114396
+[#114397]: https://github.com/home-assistant/core/pull/114397
+[#114399]: https://github.com/home-assistant/core/pull/114399
+[#114410]: https://github.com/home-assistant/core/pull/114410
+[#114418]: https://github.com/home-assistant/core/pull/114418
+[#114431]: https://github.com/home-assistant/core/pull/114431
+[#114442]: https://github.com/home-assistant/core/pull/114442
+[#114445]: https://github.com/home-assistant/core/pull/114445
+[#114447]: https://github.com/home-assistant/core/pull/114447
+[#114450]: https://github.com/home-assistant/core/pull/114450
+[#114452]: https://github.com/home-assistant/core/pull/114452
+[#114453]: https://github.com/home-assistant/core/pull/114453
+[#114456]: https://github.com/home-assistant/core/pull/114456
+[#114459]: https://github.com/home-assistant/core/pull/114459
+[#114468]: https://github.com/home-assistant/core/pull/114468
+[#114478]: https://github.com/home-assistant/core/pull/114478
+[#114487]: https://github.com/home-assistant/core/pull/114487
+[#114491]: https://github.com/home-assistant/core/pull/114491
+[#114492]: https://github.com/home-assistant/core/pull/114492
+[#114524]: https://github.com/home-assistant/core/pull/114524
+[#114544]: https://github.com/home-assistant/core/pull/114544
+[#114566]: https://github.com/home-assistant/core/pull/114566
+[#114567]: https://github.com/home-assistant/core/pull/114567
+[#114568]: https://github.com/home-assistant/core/pull/114568
+[#114569]: https://github.com/home-assistant/core/pull/114569
+[#114570]: https://github.com/home-assistant/core/pull/114570
+[#114574]: https://github.com/home-assistant/core/pull/114574
+[#114578]: https://github.com/home-assistant/core/pull/114578
+[#114581]: https://github.com/home-assistant/core/pull/114581
+[#114584]: https://github.com/home-assistant/core/pull/114584
+[#114591]: https://github.com/home-assistant/core/pull/114591
+[#114593]: https://github.com/home-assistant/core/pull/114593
+[#114596]: https://github.com/home-assistant/core/pull/114596
+[#114600]: https://github.com/home-assistant/core/pull/114600
+[#114602]: https://github.com/home-assistant/core/pull/114602
+[#114603]: https://github.com/home-assistant/core/pull/114603
+[#114606]: https://github.com/home-assistant/core/pull/114606
+[#114607]: https://github.com/home-assistant/core/pull/114607
+[#114608]: https://github.com/home-assistant/core/pull/114608
+[#114611]: https://github.com/home-assistant/core/pull/114611
+[#114614]: https://github.com/home-assistant/core/pull/114614
+[#114615]: https://github.com/home-assistant/core/pull/114615
+[#114627]: https://github.com/home-assistant/core/pull/114627
+[#114631]: https://github.com/home-assistant/core/pull/114631
+[#114641]: https://github.com/home-assistant/core/pull/114641
+[#114646]: https://github.com/home-assistant/core/pull/114646
+[#114649]: https://github.com/home-assistant/core/pull/114649
+[#114654]: https://github.com/home-assistant/core/pull/114654
+[#114657]: https://github.com/home-assistant/core/pull/114657
+[#114659]: https://github.com/home-assistant/core/pull/114659
+[#114683]: https://github.com/home-assistant/core/pull/114683
+[#114685]: https://github.com/home-assistant/core/pull/114685
+[#114718]: https://github.com/home-assistant/core/pull/114718
+[#114741]: https://github.com/home-assistant/core/pull/114741
+[#114747]: https://github.com/home-assistant/core/pull/114747
+[#114748]: https://github.com/home-assistant/core/pull/114748
+[#114755]: https://github.com/home-assistant/core/pull/114755
+[#114756]: https://github.com/home-assistant/core/pull/114756
+[#114757]: https://github.com/home-assistant/core/pull/114757
+[#87821]: https://github.com/home-assistant/core/pull/87821
+[#94392]: https://github.com/home-assistant/core/pull/94392
+[#95206]: https://github.com/home-assistant/core/pull/95206
+[#98722]: https://github.com/home-assistant/core/pull/98722
+[#99495]: https://github.com/home-assistant/core/pull/99495
+[@343max]: https://github.com/343max
+[@ALERTua]: https://github.com/ALERTua
+[@AngellusMortis]: https://github.com/AngellusMortis
+[@Antoni-Czaplicki]: https://github.com/Antoni-Czaplicki
+[@Bre77]: https://github.com/Bre77
+[@CFenner]: https://github.com/CFenner
+[@Cereal2nd]: https://github.com/Cereal2nd
+[@DCSBL]: https://github.com/DCSBL
+[@DarkFox]: https://github.com/DarkFox
+[@Ernst79]: https://github.com/Ernst79
+[@FedDam]: https://github.com/FedDam
+[@Fexiven]: https://github.com/Fexiven
+[@Floris272]: https://github.com/Floris272
+[@GidoHakvoort]: https://github.com/GidoHakvoort
+[@IngoK1]: https://github.com/IngoK1
+[@IsakNyberg]: https://github.com/IsakNyberg
+[@JeromeHXP]: https://github.com/JeromeHXP
+[@Kane610]: https://github.com/Kane610
+[@LaStrada]: https://github.com/LaStrada
+[@LarsStegman]: https://github.com/LarsStegman
+[@Lash-L]: https://github.com/Lash-L
+[@LennP]: https://github.com/LennP
+[@ManneW]: https://github.com/ManneW
+[@MarkGodwin]: https://github.com/MarkGodwin
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[@MatthiasLohr]: https://github.com/MatthiasLohr
+[@MrXANA91]: https://github.com/MrXANA91
+[@NodeJSmith]: https://github.com/NodeJSmith
+[@Noltari]: https://github.com/Noltari
+[@OnFreund]: https://github.com/OnFreund
+[@OndraM]: https://github.com/OndraM
+[@PeteRager]: https://github.com/PeteRager
+[@RoboMagus]: https://github.com/RoboMagus
+[@Shutgun]: https://github.com/Shutgun
+[@StevenLooman]: https://github.com/StevenLooman
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@Thomas55555]: https://github.com/Thomas55555
+[@Tronix117]: https://github.com/Tronix117
+[@Xiretza]: https://github.com/Xiretza
+[@Xitee1]: https://github.com/Xitee1
+[@YogevBokobza]: https://github.com/YogevBokobza
+[@abjorck]: https://github.com/abjorck
+[@agoode]: https://github.com/agoode
+[@akx]: https://github.com/akx
+[@albertogeniola]: https://github.com/albertogeniola
+[@alexsydell]: https://github.com/alexsydell
+[@alinbalutoiu]: https://github.com/alinbalutoiu
+[@allenporter]: https://github.com/allenporter
+[@astrandb]: https://github.com/astrandb
+[@autinerd]: https://github.com/autinerd
+[@bachya]: https://github.com/bachya
+[@balloob]: https://github.com/balloob
+[@bdraco]: https://github.com/bdraco
+[@belangp]: https://github.com/belangp
+[@bieniu]: https://github.com/bieniu
+[@boswelja]: https://github.com/boswelja
+[@bouwew]: https://github.com/bouwew
+[@bramkragten]: https://github.com/bramkragten
+[@brg468]: https://github.com/brg468
+[@briglx]: https://github.com/briglx
+[@caronc]: https://github.com/caronc
+[@catsmanac]: https://github.com/catsmanac
+[@cdce8p]: https://github.com/cdce8p
+[@chemelli74]: https://github.com/chemelli74
+[@clssn]: https://github.com/clssn
+[@cosimomeli]: https://github.com/cosimomeli
+[@cottsay]: https://github.com/cottsay
+[@ctalkington]: https://github.com/ctalkington
+[@danielperna84]: https://github.com/danielperna84
+[@davet2001]: https://github.com/davet2001
+[@definitio]: https://github.com/definitio
+[@dgomes]: https://github.com/dgomes
+[@dmulcahey]: https://github.com/dmulcahey
+[@dontinelli]: https://github.com/dontinelli
+[@dotvav]: https://github.com/dotvav
+[@dougiteixeira]: https://github.com/dougiteixeira
+[@drewclauson]: https://github.com/drewclauson
+[@dshokouhi]: https://github.com/dshokouhi
+[@edenhaus]: https://github.com/edenhaus
+[@eifinger]: https://github.com/eifinger
+[@elupus]: https://github.com/elupus
+[@emontnemery]: https://github.com/emontnemery
+[@epenet]: https://github.com/epenet
+[@erwindouna]: https://github.com/erwindouna
+[@esciara]: https://github.com/esciara
+[@farmio]: https://github.com/farmio
+[@frenck]: https://github.com/frenck
+[@fwestenberg]: https://github.com/fwestenberg
+[@gibwar]: https://github.com/gibwar
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@hopkins-tk]: https://github.com/hopkins-tk
+[@iMicknl]: https://github.com/iMicknl
+[@idelsink]: https://github.com/idelsink
+[@janiversen]: https://github.com/janiversen
+[@jbouwh]: https://github.com/jbouwh
+[@jeeftor]: https://github.com/jeeftor
+[@jesserockz]: https://github.com/jesserockz
+[@jjlawren]: https://github.com/jjlawren
+[@joostlek]: https://github.com/joostlek
+[@jpbede]: https://github.com/jpbede
+[@jwillemsen]: https://github.com/jwillemsen
+[@kingy444]: https://github.com/kingy444
+[@lellky]: https://github.com/lellky
+[@lextm]: https://github.com/lextm
+[@luar123]: https://github.com/luar123
+[@ludeeus]: https://github.com/ludeeus
+[@malkstar]: https://github.com/malkstar
+[@marcelveldt]: https://github.com/marcelveldt
+[@matrixd2]: https://github.com/matrixd2
+[@max2697]: https://github.com/max2697
+[@mdegat01]: https://github.com/mdegat01
+[@miaucl]: https://github.com/miaucl
+[@mib1185]: https://github.com/mib1185
+[@mjh1]: https://github.com/mjh1
+[@mkmer]: https://github.com/mkmer
+[@msavazzi]: https://github.com/msavazzi
+[@nalin29]: https://github.com/nalin29
+[@niro1987]: https://github.com/niro1987
+[@oyvindwe]: https://github.com/oyvindwe
+[@pavoni]: https://github.com/pavoni
+[@piitaya]: https://github.com/piitaya
+[@puddly]: https://github.com/puddly
+[@rokam]: https://github.com/rokam
+[@ronweikamp]: https://github.com/ronweikamp
+[@scop]: https://github.com/scop
+[@sdb9696]: https://github.com/sdb9696
+[@shaiu]: https://github.com/shaiu
+[@slyoldfox]: https://github.com/slyoldfox
+[@snoack]: https://github.com/snoack
+[@soonsouth]: https://github.com/soonsouth
+[@starkillerOG]: https://github.com/starkillerOG
+[@steffenrapp]: https://github.com/steffenrapp
+[@synesthesiam]: https://github.com/synesthesiam
+[@the-ress]: https://github.com/the-ress
+[@thecode]: https://github.com/thecode
+[@thejeffreystone]: https://github.com/thejeffreystone
+[@timmo001]: https://github.com/timmo001
+[@tr4nt0r]: https://github.com/tr4nt0r
+[@tronikos]: https://github.com/tronikos
+[@tuday2]: https://github.com/tuday2
+[@uchagani]: https://github.com/uchagani
+[@wilburCforce]: https://github.com/wilburCforce
+[@wujiaqi]: https://github.com/wujiaqi
+[@xeniter]: https://github.com/xeniter
+[@yozik04]: https://github.com/yozik04
+[@yuxincs]: https://github.com/yuxincs
+[@zweckj]: https://github.com/zweckj
diff --git a/source/common-tasks/container.markdown b/source/common-tasks/container.markdown
index 18464daa94c6..bba727053b66 100644
--- a/source/common-tasks/container.markdown
+++ b/source/common-tasks/container.markdown
@@ -3,6 +3,9 @@ title: "Common tasks - Container"
description: "Common tasks for Home Assistant Container"
installation: container
---
+
+## Update
+
{% include common-tasks/update.md %}
{% include common-tasks/specific_version.md %}
{% include common-tasks/beta_version.md %}
diff --git a/source/common-tasks/core.markdown b/source/common-tasks/core.markdown
index 04066e649f21..60ea197ac7e1 100644
--- a/source/common-tasks/core.markdown
+++ b/source/common-tasks/core.markdown
@@ -3,6 +3,9 @@ title: "Common tasks - Core"
description: "Common tasks for Home Assistant Core"
installation: core
---
+
+## Update
+
{% include common-tasks/update.md %}
{% include common-tasks/specific_version.md %}
{% include common-tasks/beta_version.md %}
diff --git a/source/common-tasks/os.markdown b/source/common-tasks/os.markdown
index f8303d895339..24ee35d502ff 100644
--- a/source/common-tasks/os.markdown
+++ b/source/common-tasks/os.markdown
@@ -6,6 +6,71 @@ installation_name: "Operating System"
---
This section will provide guides to some common tasks and information which you will need in order to run, maintain, and edit your Home Assistant OS system. For further details on any particular subject, make sure to refer to the documentation for specific add-ons or topics listed here.
+## Updating Home Assistant
+
+If you have the {% term "Home Assistant Operating System" %} installed, you receive update notifications from different components:
+
+- {% term "Home Assistant Operating System" %}
+- {% term "Home Assistant Supervisor" %}
+- {% term "Home Assistant Core" %}
+- Add-ons, if you have any installed
+
+### Updating the Home Assistant Operating System
+
+Updates of the {% term "Home Assistant Operating System" %} are independent of other updates. They do not trigger repair issues and are usually backward-compatible.
+
+#### Prerequisites
+
+- [Backup](/common-tasks/os/#backups) your installation.
+ - Make sure the backup is downloaded and stored outside of the system.
+ - So that you can restore from that backup in case there is an issue with the system.
+
+#### To update the Home Assistant Operating System
+
+{% tabbed_block %}
+
+- title: Using the UI
+ content: |
+
+ 1. Open the **Settings** panel.
+ 2. On the top you will be presented with an update notification.
+
+ _If you do not see that notification, in the top right, select the three dots menu and select **Check for updates**"._
+
+- title: Using the CLI
+ content: |
+
+ ```bash
+ ha os update
+ ```
+
+ _This updates to the latest version. If you want to update to a specific version instead, use `ha os update --version 12.0`._
+
+{% endtabbed_block %}
+
+#### About boot slots used during the update
+
+The {% term "Home Assistant Operating System" %} uses two boot slots. On first installation, boot slot A is used. After that, on each Operating System update, the other boot slot is updated and reboot is triggered. On that reboot, the system boots from the other boot slot (A ➝ B ➝ A,...). When booting fails, the system automatically uses the previous boot slot, so that it boots from the last working operating system.
+
+#### Changing the boot slot used
+
+You can manually define that the previous boot slot is used. This can be useful in cases where the system boots but something still seems wrong. For example, when the device is no longer correctly detected or you see another issue that might be related to the latest update of the operating system.
+
+1. To check which boot slot is currently in use and what OS versions are installed in the individual slots, in the Home Assistant command line, enter the following command:
+
+ ```bash
+ ha os info
+ ```
+
+2. To change the boot slot, enter the following command:
+ - This will boot into the other (previous) OS version.
+
+ ```bash
+ ha os boot-slot other
+ ```
+
+### Updating Home Assistant Core
+
{% include common-tasks/update.md %}
{% include common-tasks/specific_version.md %}
{% include common-tasks/beta_version.md %}
@@ -18,7 +83,3 @@ This section will provide guides to some common tasks and information which you
{% include common-tasks/lost_password.md %}
{% include common-tasks/third-party-addons.md %}
{% include common-tasks/data_disk.md %}
-{% include common-tasks/flashing_n2_otg.md %}
-{% include common-tasks/flashing_m1s_otg.md %}
-{% include common-tasks/enable_i2c.md %}
-
diff --git a/source/common-tasks/supervised.markdown b/source/common-tasks/supervised.markdown
index 23adfe856039..d3dc28b5d619 100644
--- a/source/common-tasks/supervised.markdown
+++ b/source/common-tasks/supervised.markdown
@@ -4,6 +4,9 @@ description: "Common tasks for Home Assistant Supervised"
installation: supervised
installation_name: Supervised
---
+
+## Update
+
{% include common-tasks/update.md %}
{% include common-tasks/specific_version.md %}
{% include common-tasks/beta_version.md %}
diff --git a/source/dashboards/actions.markdown b/source/dashboards/actions.markdown
index 1010ea4f4a89..a22d473b0388 100644
--- a/source/dashboards/actions.markdown
+++ b/source/dashboards/actions.markdown
@@ -1,6 +1,23 @@
---
title: "Actions"
description: "Define what an object does when interacted with."
+related:
+ - docs: /dashboards/button/
+ title: Button card
+ - docs: /dashboards/entities/
+ title: Entities card
+ - docs: /dashboards/glance/
+ title: Glance card
+ - docs: /dashboards/light/
+ title: Light card
+ - docs: /dashboards/picture/
+ title: Picture card
+ - docs: /dashboards/picture-elements/
+ title: Picture element card
+ - docs: /dashboards/picture-entity/
+ title: Picture entity card
+ - docs: /dashboards/picture-glance/
+ title: Picture glance card
---
Some cards have support for tap actions. These actions define what will happen when you tap or hold on an object within a card.
@@ -264,14 +281,3 @@ 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/badges.markdown b/source/dashboards/badges.markdown
index 56821d176240..198b11f4105a 100644
--- a/source/dashboards/badges.markdown
+++ b/source/dashboards/badges.markdown
@@ -19,7 +19,7 @@ type: state-label
entity: light.living_room
```
-{% configuration state_label %}
+{% configuration state_badge %}
type:
required: true
description: "`state-label`"
@@ -62,12 +62,18 @@ entities:
required: true
description: A list of entity IDs or `entity` objects, see below.
type: list
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).*
+ type: list
state_filter:
- required: true
- description: List of strings representing states or `filter` objects, see below.
+ required: false
+ description: (legacy) List of strings representing states or filters to check. See [available legacy filters](#legacy-state-filters).*
type: list
{% endconfiguration %}
+*one is required (`conditions` or `state_filter`)
+
### Options for entities
If you define entities as objects instead of strings (by adding `entity:` before entity ID), you can add more customization and configurations:
@@ -93,34 +99,227 @@ image:
required: false
description: The URL of an image.
type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).*
+ type: list
state_filter:
required: false
- description: List of strings representing states or `filter` objects, see below.
+ description: (legacy) List of strings representing states or filters to check. See [available legacy filters](#legacy-state-filters).*
type: list
{% endconfiguration %}
-### Options for state filter
+*only one filter will be applied: `conditions` or `state_filter` if `conditions` is not present
-If you define state_filter as objects instead of strings (by adding `value:` before your state value), you can add more customization to your filter:
+## Conditions options
-{% configuration state_filter %}
-value:
+You can specify multiple `conditions`, in which case the entity will be displayed if it matches any condition.
+
+### State
+
+Tests if an entity has a specified state.
+
+```yaml
+type: entity-filter
+entities:
+ - climate.thermostat_living_room
+ - climate.thermostat_bed_room
+conditions:
+ - condition: state
+ state: heat
+```
+
+```yaml
+type: entity-filter
+entities:
+ - climate.thermostat_living_room
+ - climate.thermostat_bed_room
+conditions:
+ - condition: state
+ state_not: "off"
+```
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.gas_station_1
+ - sensor.gas_station_2
+ - sensor.gas_station_3
+conditions:
+ - condition: state
+ state: sensor.gas_station_lowest_price
+```
+
+{% configuration condition_state %}
+condition:
required: true
- description: String representing the state.
+ description: "`state`"
type: string
-operator:
+state:
+ required: false
+ description: Entity state or ID to be equal to this value. Can contain an array of states.*
+ type: [list, string]
+state_not:
required: false
- description: Operator to use in the comparison. Can be `==`, `<=`, `<`, `>=`, `>`, `!=` or `regex`.
+ description: Entity state or ID to not be equal to this value. Can contain an array of states.*
+ type: [list, string]
+{% endconfiguration %}
+
+*one is required (`state` or `state_not`)
+
+### Numeric state
+
+Tests if an entity state matches the thresholds.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: numeric_state
+ above: 10
+ below: 20
+```
+
+{% configuration condition_numeric_state %}
+condition:
+ required: true
+ description: "`numeric_state`"
type: string
-attribute:
+above:
required: false
- description: Attribute of the entity to use instead of the state.
+ description: Entity state or ID to be above this value.*
+ type: string
+below:
+ required: false
+ description: Entity state or ID to be below this value.*
+ type: string
+{% endconfiguration %}
+
+*at least one is required (`above` or `below`), both are also possible for values between.
+
+### Screen
+
+Specify the visibility of the entity per screen size. Some screen size presets are available in the UI but you can use any CSS media query you want in YAML.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: screen
+ media_query: "(min-width: 1280px)"
+```
+
+{% configuration condition_screen %}
+condition:
+ required: true
+ description: "`screen`"
+ type: string
+media_query:
+ required: true
+ description: Media query to check which screen size are allowed to display the entity.
+ type: string
+{% endconfiguration %}
+
+### User
+
+Specify the visibility of the entity per user.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration condition_user %}
+condition:
+ required: true
+ description: "`user`"
type: string
+users:
+ required: true
+ description: User ID that can see the entity (unique hex value found on the Users configuration page).
+ type: list
{% endconfiguration %}
-### Examples
+### And
+
+Specify that both conditions must be met.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: and
+ conditions:
+ - condition: numeric_state
+ above: 0
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration condition_and %}
+condition:
+ required: true
+ description: "`and`"
+ type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).
+ type: list
+{% endconfiguration %}
+
+### Or
+
+Specify that at least one of the conditions must be met.
+
+```yaml
+type: entity-filter
+entities:
+ - sensor.outside_temperature
+ - sensor.living_room_temperature
+ - sensor.bed_room_temperature
+conditions:
+ - condition: or
+ conditions:
+ - condition: numeric_state
+ above: 0
+ - condition: user
+ users:
+ - 581fca7fdc014b8b894519cc531f9a04
+```
+
+{% configuration condition_or %}
+condition:
+ required: true
+ description: "`or`"
+ type: string
+conditions:
+ required: false
+ description: List of conditions to check. See [available conditions](#conditions-options).
+ type: list
+{% endconfiguration %}
+
+## Legacy state filters
+
+### String filter
-Show only active switches or lights in the house
+Show only active switches or lights in the house.
```yaml
type: entity-filter
@@ -133,7 +332,47 @@ state_filter:
- "on"
```
-Specify filter for a single entity
+You can also specify multiple `state_filter` conditions, in which case the entity will be displayed if it matches any condition.
+
+If you define `state_filter` as objects instead of strings, you can add more customization to your filter, as described below.
+
+### Operator filter
+
+Tests if an entity state correspond to the applied `operator`.
+
+{% configuration condition_operator %}
+value:
+ required: true
+ description: String representing the state.
+ type: string
+operator:
+ required: true
+ description: Operator to use in the comparison. Can be `==`, `<=`, `<`, `>=`, `>`, `!=`, `in`, `not in`, or `regex`.
+ type: string
+attribute:
+ required: false
+ description: Attribute of the entity to use instead of the state.
+ type: string
+{% endconfiguration %}
+
+#### Examples
+
+Displays everyone who is at home or at work.
+
+```yaml
+type: entity-filter
+entities:
+ - device_tracker.demo_paulus
+ - device_tracker.demo_anne_therese
+ - device_tracker.demo_home_boy
+state_filter:
+ - operator: "=="
+ value: home
+ - operator: "=="
+ value: work
+```
+
+Specify filter for a single entity.
```yaml
type: entity-filter
@@ -150,3 +389,20 @@ entities:
value: 50
attribute: humidity
```
+
+Use a regex filter against entity attributes. This regex filter below looks for expressions that are 1 digit in length and where the number is between 0-7 (so show holidays today or in the next 7 days) and displays those holidays as entities in the Entity Filter badge.
+
+```yaml
+type: entity-filter
+state_filter:
+ - operator: regex
+ value: "^([0-7]{1})$"
+ attribute: eta
+entities:
+ - entity: sensor.upcoming_ical_holidays_0
+ - entity: sensor.upcoming_ical_holidays_1
+ - entity: sensor.upcoming_ical_holidays_2
+ - entity: sensor.upcoming_ical_holidays_3
+ - entity: sensor.upcoming_ical_holidays_4
+show_empty: false
+```
diff --git a/source/dashboards/cards.markdown b/source/dashboards/cards.markdown
index ae3936ff1f3d..8d707a46dbf8 100644
--- a/source/dashboards/cards.markdown
+++ b/source/dashboards/cards.markdown
@@ -1,6 +1,19 @@
---
title: "Cards"
description: "Introduction to the role of cards on the dashboard and how to add a card."
+related:
+ - docs: /dashboards/actions/
+ title: Card tap actions
+ - docs: /dashboards/features/
+ title: Card features
+ - docs: /dashboards/header-footer/
+ title: Card header and footer widgets
+ - docs: /dashboards/views/
+ title: Views
+ - docs: /dashboards/
+ title: Introduction to dashboards
+ - docs: /dashboards/#get-started-with-your-own-dashboard/
+ title: Take control of the default dashboard
---
Each dashboard is made up of cards.
@@ -25,7 +38,7 @@ There are several different card types, each with their own configuration option
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.
+Some cards have support for [features](/dashboards/features/). 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.
@@ -75,16 +88,3 @@ Another way to add entities to a dashboard is to use the **Device** page.
![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 abcb82ff328a..bb40bb191abc 100644
--- a/source/dashboards/dashboards.markdown
+++ b/source/dashboards/dashboards.markdown
@@ -1,6 +1,17 @@
---
title: "Multiple dashboards"
description: "Multiple powerful and configurable dashboards in Home Assistant."
+related:
+ - docs: /integrations/logbook/
+ title: Logbook integration
+ - docs: /integrations/history/
+ title: History integration
+ - docs: /integrations/todo/
+ title: To-do list integration
+ - docs: /dashboards/views/
+ title: Views
+ - docs: /dashboards/iframe/
+ title: Webpage card
---
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.
@@ -18,16 +29,20 @@ Home Assistant ships with some dashboards out of the box:
- Overview
- Energy
-- Map
+- [Map](#map-dashboard)
- Logbook
- History
- To-do lists
-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.
+Not all of the predefined dashboards are listed under {% my lovelace_dashboards title="**Settings** > **Dashboards**" %}. The **Logbook** and **History** dashboards are powered by their respective integrations.
### Map dashboard
-The predefined **Map** dashboard is powered by the [Map integration](/integrations/map/). If you see a [person](/integrations/person/) on the map, it means you have connected a device that allows [presence detection](/integrations/#presence-detection). This is the case for example if you have the [Home Assistant Companion App](https://companion.home-assistant.io/) on your phone and allowed location tracking.
+The predefined **Map** dashboard is populated by the [Map card](/dashboards/map/). You can edit this dashboard like any other dashboard. For example, you can edit the [view](/dashboards/views/) to use the **Sidebar** instead of the default **Panel** view type if you like.
+
+#### Maps and presence detection
+
+If you see a [person](/integrations/person/) on the map, it means you have connected a device that allows [presence detection](/integrations/#presence-detection). This is the case for example if you have the [Home Assistant Companion App](https://companion.home-assistant.io/) on your phone and allowed location tracking.
### Logbook dashboard
@@ -41,6 +56,24 @@ The predefined **History** dashboard is powered by the [History integration](/in
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.
+## Webpage dashboard
+
+Another available (but not default) dashboard is the webpage dashboard. The webpage dashboard allows you to add and embed a webpage to your dashboard.
+This could be a web page from the internet or a local web page from a local
+machine or device like your router or NAS. The webpage dashboard uses the [webpage card](/dashboards/iframe/).
+
+
+
+This dashboard replaces the old iFrame panel (`iframe_panel`). If you have
+existing panels configured in your YAML configuration, Home Assistant will
+automatically migrate them to the new webpage dashboard on upgrade.
+
+
+
+Note that not every webpage can be embedded due to security restrictions that
+some sites have in place. These restrictions are enforced by your browser and prevent
+embedding them into a Home Assistant dashboard.
+
## 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.
@@ -66,6 +99,15 @@ This will leave the default dashboard intact.
- 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).
+## Deleting a dashboard
+
+If you do not use one of the predefined dashboards, or created a dashboard you no longer need, you can delete that dashboard. It will then no longer show in the sidebar.
+
+1. Go to {% my lovelace_dashboards title="**Settings** > **Dashboards**" %}.
+2. From the list of dashboards, select the dashboard you want to delete.
+3. In the dialog, select **Delete**.
+ ![Deleting a dashboard](/images/dashboards/delete_dashboard.png)
+
## Using YAML for the Overview dashboard
To change the **Overview** dashboard, create a new file `ui-lovelace.yaml` in your configuration directory and add the following section to your `configuration.yaml` and restart Home Assistant:
@@ -251,10 +293,3 @@ views:
content: >
Welcome to your **dashboard**.
```
-
-## Related topics
-
-- [Logbook integration](/integrations/logbook/)
-- [Map integration](/integrations/map/)
-- [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 fcdcf3826b12..b61bfcfbc83f 100644
--- a/source/dashboards/features.markdown
+++ b/source/dashboards/features.markdown
@@ -1,6 +1,13 @@
---
title: "Features for dashboard cards"
description: "Decorate your dashboard cards with quick controls."
+related:
+ - docs: /dashboards/humidifier/
+ title: Humidifier card
+ - docs: /dashboards/thermostat/
+ title: Thermostat card
+ - docs: /dashboards/tile/
+ title: Tile card
---
Some dashboard cards have support for features. 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.
@@ -239,6 +246,42 @@ type:
type: string
{% endconfiguration %}
+## Fan preset modes
+
+Widget that displays buttons or icons to control the preset mode for a [fan](/integrations/fan).
+
+
+
+ Screenshot of the tile card with the fan preset modes feature
+
+
+```yaml
+features:
+ - type: "fan-preset-modes"
+ style: "icons"
+ preset_modes:
+ - auto
+ - smart
+ - sleep
+ - 'on'
+```
+
+{% configuration features %}
+type:
+ required: true
+ description: "`fan-preset-modes`"
+ type: string
+style:
+ required: false
+ description: "How the preset modes should be displayed. It can be either `dropdown` or `icons`."
+ type: string
+ default: dropdown
+preset_modes:
+ required: true
+ description: List of preset modes to show on the card. The list can contain any supported preset modes.
+ type: list
+{% endconfiguration %}
+
## Fan speed
Widget that displays speed controls for a [fan](/integrations/fan).
@@ -545,8 +588,3 @@ operation_modes:
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 b48a122e903e..2b80e0720eb4 100644
--- a/source/dashboards/header-footer.markdown
+++ b/source/dashboards/header-footer.markdown
@@ -1,6 +1,15 @@
---
title: "Headers & Footers for dashboard cards"
description: "Decorate your dashboard cards with header and footer widgets."
+related:
+ - docs: /integrations/entity/
+ title: Entity
+ - docs: /integrations/entities/
+ title: Entities
+ - docs: /integrations/statistics/
+ title: Statistics
+ - docs: /integrations/actions/
+ title: Card actions
---
Some dashboard cards have support for header and footer widgets. These widgets fill up the whole available space in a card.
@@ -13,7 +22,7 @@ Header and footer can be used on the following cards:
- [Entity](/dashboards/entity/)
- [Entities](/dashboards/entities/)
-- [Statictis](/dashboards/statistics/)
+- [Statistics](/dashboards/statistics/)
## Picture header & footer
@@ -146,10 +155,3 @@ 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 ba52d11d0508..b0248d37ab86 100644
--- a/source/dashboards/index.markdown
+++ b/source/dashboards/index.markdown
@@ -1,6 +1,19 @@
---
title: "Dashboards"
description: "Powerful and configurable dashboards for Home Assistant."
+related:
+ - docs: /integrations/entity/
+ title: Dashboard themes
+ - docs: /dashboards/dashboards/#creating-a-new-dashboard
+ title: Creating a new dashboard
+ - docs: /dashboards/cards/
+ title: About cards
+ - url: https://demo.home-assistant.io
+ title: Interactive dashboard demo
+ - url: https://home-assistant-cards.bessarabov.com/
+ title: Home Assistant cards
+ - url: https://github.com/custom-cards
+ title: Community custom cards
---
Home Assistant dashboards allow you to display information about your smart home. Dashboards are customizable and provide a powerful way to manage your home from your mobile or desktop.
@@ -29,16 +42,3 @@ To create your own dashboard, follow the steps on [creating a new dashboard](/da
- Suggestions are welcome in the [frontend repository](https://github.com/home-assistant/frontend/)
- For help with dashboards, join the `#frontend` channel on [our chat](/join-chat/) or [our forums](https://community.home-assistant.io/c/projects/frontend)
-
-## Related topics
-
-- [Dashboard themes](/integrations/frontend/#defining-themes)
-- [Interactive dashboard demo](https://demo.home-assistant.io)
-- [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 22d10a1badda..7ca8f3ef4e07 100644
--- a/source/dashboards/views.markdown
+++ b/source/dashboards/views.markdown
@@ -1,6 +1,19 @@
---
title: "Views"
description: "A view is a tab inside a dashboard."
+related:
+ - docs: /dashboards/masonry/
+ title: Masonry view
+ - docs: /dashboards/panel/
+ title: Panel view
+ - docs: /dashboards/sidebar/
+ title: Sidebar view
+ - docs: /dashboards/sections/
+ title: Sections view
+ - docs: /dashboards/
+ title: About dashboards
+ - docs: /dashboards/cards/#adding-cards-to-your-dashboard
+ title: Adding cards to a view
---
A view is a tab inside a dashboard. For example, the screenshot below shows a separate view for lights on the Overview dashboard.
@@ -267,12 +280,3 @@ Subview configuration:
entities:
- sensor.today_avg_price
```
-
-## Related topics
-
-- [Masonry view](/dashboards/masonry/)
-- [Panel view](/dashboards/panel/)
-- [Sidebar view](/dashboards/sidebar/)
-- [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/concepts-terminology.markdown b/source/getting-started/concepts-terminology.markdown
index 9ee8e81dc4e2..a53e51760532 100644
--- a/source/getting-started/concepts-terminology.markdown
+++ b/source/getting-started/concepts-terminology.markdown
@@ -32,6 +32,12 @@ Devices and entities are used throughout Home Assistant. To name a few examples:
![Home Assistant device](/images/getting-started/home-assistant-device_02.png)
+## Areas
+
+An area in Home Assistant is a logical grouping of {% term devices %} and {% term entities %} that are meant to match areas (or rooms) in the physical world: your home. For example, the `living room` area groups devices and entities in your living room. Areas allow you to target service calls at an entire group of devices. For example, turning off all the lights in the living room.
+Locations within your home such as living room, dance floor, etc. Areas can be assigned to {% term floors %}.
+Areas can also be used for automatically generated cards, such as the [Area card](/dashboards/area/).
+
## Automations
A set of repeatable {% term actions %} that can be set up to run automatically. Automations are made of three key components:
diff --git a/source/getting-started/presence-detection.markdown b/source/getting-started/presence-detection.markdown
index 71eac4875eba..3d1f98eb8e65 100644
--- a/source/getting-started/presence-detection.markdown
+++ b/source/getting-started/presence-detection.markdown
@@ -18,14 +18,14 @@ It's also possible to run an app on your phone to provide detailed location info
During the setup of Home Assistant Companion on your mobile device, the app will ask for permission to allow the device's location to be provided to Home Assistant. Allowing this will create a `device_tracker` entity for that device which can be used in automations and conditions.
-
### Zones
+
![Map with zones](/images/screenshots/badges-zone.png)
{% term Zones %} allow you to name areas on a map. These areas can then be used to name the location a tracked user is, or use entering/leaving a zone as an automation {% term trigger %} or {% term condition %}. See [Zones integration](/integrations/zone/) page for more details like creating zones.
-The map view will hide all devices that are home.
+The
map dashboard will hide all devices that are home.
[routers]: /integrations/#presence-detection
@@ -40,7 +40,6 @@ The map view will hide all devices that are home.
[zone]: /integrations/zone/
[trigger]: /getting-started/automation-trigger/#zone-trigger
[condition]: /getting-started/automation-condition/#zone-condition
-[ha-map]: /integrations/map/
[companion]: https://companion.home-assistant.io/
{% include getting-started/next_step.html step="Join the Community" link="/getting-started/join-the-community/" %}
diff --git a/source/images/blog/2024-04-24-state-of-the-open-home-2024/banner.jpg b/source/images/blog/2024-04-24-state-of-the-open-home-2024/banner.jpg
new file mode 100644
index 000000000000..3102c8cc76a1
Binary files /dev/null and b/source/images/blog/2024-04-24-state-of-the-open-home-2024/banner.jpg differ
diff --git a/source/images/blog/2024-04/add-matter-device-from-another-controller.png b/source/images/blog/2024-04/add-matter-device-from-another-controller.png
new file mode 100644
index 000000000000..3e7714d90505
Binary files /dev/null and b/source/images/blog/2024-04/add-matter-device-from-another-controller.png differ
diff --git a/source/images/blog/2024-04/add-matter-device.png b/source/images/blog/2024-04/add-matter-device.png
new file mode 100644
index 000000000000..bfa816101b98
Binary files /dev/null and b/source/images/blog/2024-04/add-matter-device.png differ
diff --git a/source/images/blog/2024-04/bulk-actions.png b/source/images/blog/2024-04/bulk-actions.png
new file mode 100644
index 000000000000..db5dc131710e
Binary files /dev/null and b/source/images/blog/2024-04/bulk-actions.png differ
diff --git a/source/images/blog/2024-04/categories.png b/source/images/blog/2024-04/categories.png
new file mode 100644
index 000000000000..aab4aa74bf5c
Binary files /dev/null and b/source/images/blog/2024-04/categories.png differ
diff --git a/source/images/blog/2024-04/dashboard-map.png b/source/images/blog/2024-04/dashboard-map.png
new file mode 100644
index 000000000000..1de5d9c8322f
Binary files /dev/null and b/source/images/blog/2024-04/dashboard-map.png differ
diff --git a/source/images/blog/2024-04/dashboard-webpage.png b/source/images/blog/2024-04/dashboard-webpage.png
new file mode 100644
index 000000000000..3aa75c5f225b
Binary files /dev/null and b/source/images/blog/2024-04/dashboard-webpage.png differ
diff --git a/source/images/blog/2024-04/embedded-home-assistant-website.png b/source/images/blog/2024-04/embedded-home-assistant-website.png
new file mode 100644
index 000000000000..02fb5eae2dbe
Binary files /dev/null and b/source/images/blog/2024-04/embedded-home-assistant-website.png differ
diff --git a/source/images/blog/2024-04/enable-selection-mode.png b/source/images/blog/2024-04/enable-selection-mode.png
new file mode 100644
index 000000000000..2665d48a7441
Binary files /dev/null and b/source/images/blog/2024-04/enable-selection-mode.png differ
diff --git a/source/images/blog/2024-04/filter-panel.png b/source/images/blog/2024-04/filter-panel.png
new file mode 100644
index 000000000000..849df41edbf1
Binary files /dev/null and b/source/images/blog/2024-04/filter-panel.png differ
diff --git a/source/images/blog/2024-04/floors.png b/source/images/blog/2024-04/floors.png
new file mode 100644
index 000000000000..749ceb77a667
Binary files /dev/null and b/source/images/blog/2024-04/floors.png differ
diff --git a/source/images/blog/2024-04/group-items-by-manufacturer.png b/source/images/blog/2024-04/group-items-by-manufacturer.png
new file mode 100644
index 000000000000..e161047d213a
Binary files /dev/null and b/source/images/blog/2024-04/group-items-by-manufacturer.png differ
diff --git a/source/images/blog/2024-04/item-grouping.png b/source/images/blog/2024-04/item-grouping.png
new file mode 100644
index 000000000000..9d30d4ef3db3
Binary files /dev/null and b/source/images/blog/2024-04/item-grouping.png differ
diff --git a/source/images/blog/2024-04/labels.png b/source/images/blog/2024-04/labels.png
new file mode 100644
index 000000000000..e6dd867ec0e5
Binary files /dev/null and b/source/images/blog/2024-04/labels.png differ
diff --git a/source/images/blog/2024-04/lock-unlatch-confirmation.gif b/source/images/blog/2024-04/lock-unlatch-confirmation.gif
new file mode 100644
index 000000000000..93fdb2252983
Binary files /dev/null and b/source/images/blog/2024-04/lock-unlatch-confirmation.gif differ
diff --git a/source/images/blog/2024-04/new-toolbar.png b/source/images/blog/2024-04/new-toolbar.png
new file mode 100644
index 000000000000..9b3992d606c6
Binary files /dev/null and b/source/images/blog/2024-04/new-toolbar.png differ
diff --git a/source/images/blog/2024-04/sections-dashboard-limit-columns.png b/source/images/blog/2024-04/sections-dashboard-limit-columns.png
new file mode 100644
index 000000000000..5a1f5567bd36
Binary files /dev/null and b/source/images/blog/2024-04/sections-dashboard-limit-columns.png differ
diff --git a/source/images/blog/2024-04/social.png b/source/images/blog/2024-04/social.png
new file mode 100644
index 000000000000..ddd0a5cbc46a
Binary files /dev/null and b/source/images/blog/2024-04/social.png differ
diff --git a/source/images/blueprints/selector-floor.png b/source/images/blueprints/selector-floor.png
new file mode 100644
index 000000000000..7c345440b0df
Binary files /dev/null and b/source/images/blueprints/selector-floor.png differ
diff --git a/source/images/blueprints/selector-label.png b/source/images/blueprints/selector-label.png
new file mode 100644
index 000000000000..9c4e255e8856
Binary files /dev/null and b/source/images/blueprints/selector-label.png differ
diff --git a/source/images/dashboards/cards-todo.png b/source/images/dashboards/cards-todo.png
new file mode 100644
index 000000000000..b7d40840db80
Binary files /dev/null and b/source/images/dashboards/cards-todo.png differ
diff --git a/source/images/dashboards/dashboard-manage-01.png b/source/images/dashboards/dashboard-manage-01.png
index bfd486c364fa..55f693582c48 100644
Binary files a/source/images/dashboards/dashboard-manage-01.png and b/source/images/dashboards/dashboard-manage-01.png differ
diff --git a/source/images/dashboards/delete_dashboard.png b/source/images/dashboards/delete_dashboard.png
new file mode 100644
index 000000000000..9b05ffc4e2e4
Binary files /dev/null and b/source/images/dashboards/delete_dashboard.png differ
diff --git a/source/images/dashboards/features/fan_preset_modes.png b/source/images/dashboards/features/fan_preset_modes.png
new file mode 100644
index 000000000000..25179dd76178
Binary files /dev/null and b/source/images/dashboards/features/fan_preset_modes.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 34e221758d84..000000000000
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 000000000000..041014783b76
Binary files /dev/null and b/source/images/dashboards/todo-list_card_shopping-list.png differ
diff --git a/source/images/docs/authentication/profile.png b/source/images/docs/authentication/profile.png
index a6b88e17cbc7..deac23c20c79 100644
Binary files a/source/images/docs/authentication/profile.png and b/source/images/docs/authentication/profile.png differ
diff --git a/source/images/docs/configuration/config-yaml_via-file-editor.png b/source/images/docs/configuration/config-yaml_via-file-editor.png
new file mode 100644
index 000000000000..4591106da7d5
Binary files /dev/null and b/source/images/docs/configuration/config-yaml_via-file-editor.png differ
diff --git a/source/images/docs/configuration/config-yaml_via-vscode.png b/source/images/docs/configuration/config-yaml_via-vscode.png
new file mode 100644
index 000000000000..cf85a40a014d
Binary files /dev/null and b/source/images/docs/configuration/config-yaml_via-vscode.png differ
diff --git a/source/images/docs/configuration/coordinates-defined-in-yaml.png b/source/images/docs/configuration/coordinates-defined-in-yaml.png
new file mode 100644
index 000000000000..f0dbffe8a578
Binary files /dev/null and b/source/images/docs/configuration/coordinates-defined-in-yaml.png differ
diff --git a/source/images/docs/configuration/customizing-entity-dialog.png b/source/images/docs/configuration/customizing-entity-dialog.png
index 0526735d7c82..5dda10ee232e 100644
Binary files a/source/images/docs/configuration/customizing-entity-dialog.png and b/source/images/docs/configuration/customizing-entity-dialog.png differ
diff --git a/source/images/docs/configuration/customizing-entity.png b/source/images/docs/configuration/customizing-entity.png
index 85244081353d..e1ccaa269cce 100644
Binary files a/source/images/docs/configuration/customizing-entity.png and b/source/images/docs/configuration/customizing-entity.png differ
diff --git a/source/images/docs/configuration/edit_entity-id_in_automation.png b/source/images/docs/configuration/edit_entity-id_in_automation.png
new file mode 100644
index 000000000000..1b20b856cf9e
Binary files /dev/null and b/source/images/docs/configuration/edit_entity-id_in_automation.png differ
diff --git a/source/images/docs/configuration/general-settings-stored-in-config-yaml.png b/source/images/docs/configuration/general-settings-stored-in-config-yaml.png
new file mode 100644
index 000000000000..f3c5eee1c51c
Binary files /dev/null and b/source/images/docs/configuration/general-settings-stored-in-config-yaml.png differ
diff --git a/source/images/docs/configuration/general-settings.png b/source/images/docs/configuration/general-settings.png
new file mode 100644
index 000000000000..ed0a5fd75f42
Binary files /dev/null and b/source/images/docs/configuration/general-settings.png differ
diff --git a/source/images/docs/configuration/reload_restart.png b/source/images/docs/configuration/reload_restart.png
new file mode 100644
index 000000000000..662ed31d2612
Binary files /dev/null and b/source/images/docs/configuration/reload_restart.png differ
diff --git a/source/images/docs/configuration/reloading_config.png b/source/images/docs/configuration/reloading_config.png
new file mode 100644
index 000000000000..11aba2afd900
Binary files /dev/null and b/source/images/docs/configuration/reloading_config.png differ
diff --git a/source/images/docs/configuration/settings_restart_ha.png b/source/images/docs/configuration/settings_restart_ha.png
new file mode 100644
index 000000000000..693773950c57
Binary files /dev/null and b/source/images/docs/configuration/settings_restart_ha.png differ
diff --git a/source/images/hassio/screenshots/ssh-upgrade.png b/source/images/hassio/screenshots/ssh-upgrade.png
deleted file mode 100644
index 64d80f9943b8..000000000000
Binary files a/source/images/hassio/screenshots/ssh-upgrade.png and /dev/null differ
diff --git a/source/images/integrations/matter/matter_android_connect_new.webp b/source/images/integrations/matter/matter_android_connect_new.webp
new file mode 100644
index 000000000000..154d6d0e80f2
Binary files /dev/null and b/source/images/integrations/matter/matter_android_connect_new.webp differ
diff --git a/source/images/integrations/matter/matter_share_from_apple.webp b/source/images/integrations/matter/matter_share_from_apple.webp
new file mode 100644
index 000000000000..3ddf4e294585
Binary files /dev/null and b/source/images/integrations/matter/matter_share_from_apple.webp differ
diff --git a/source/images/organizing/categories.png b/source/images/organizing/categories.png
new file mode 100644
index 000000000000..aab4aa74bf5c
Binary files /dev/null and b/source/images/organizing/categories.png differ
diff --git a/source/images/organizing/category_02.png b/source/images/organizing/category_02.png
new file mode 100644
index 000000000000..80bb66aa8453
Binary files /dev/null and b/source/images/organizing/category_02.png differ
diff --git a/source/images/organizing/create_area_01.png b/source/images/organizing/create_area_01.png
new file mode 100644
index 000000000000..f7a6748a53f3
Binary files /dev/null and b/source/images/organizing/create_area_01.png differ
diff --git a/source/images/organizing/create_floor_01.png b/source/images/organizing/create_floor_01.png
new file mode 100644
index 000000000000..32ac564f27c5
Binary files /dev/null and b/source/images/organizing/create_floor_01.png differ
diff --git a/source/images/organizing/create_floor_02.png b/source/images/organizing/create_floor_02.png
new file mode 100644
index 000000000000..63ccb7aef96e
Binary files /dev/null and b/source/images/organizing/create_floor_02.png differ
diff --git a/source/images/organizing/create_label_01.png b/source/images/organizing/create_label_01.png
new file mode 100644
index 000000000000..ccefd7712fa2
Binary files /dev/null and b/source/images/organizing/create_label_01.png differ
diff --git a/source/images/organizing/edit-delete-category.png b/source/images/organizing/edit-delete-category.png
new file mode 100644
index 000000000000..9de0b6111de1
Binary files /dev/null and b/source/images/organizing/edit-delete-category.png differ
diff --git a/source/images/organizing/enable_disable.png b/source/images/organizing/enable_disable.png
new file mode 100644
index 000000000000..ed4ed655f54a
Binary files /dev/null and b/source/images/organizing/enable_disable.png differ
diff --git a/source/images/organizing/filter-panel.png b/source/images/organizing/filter-panel.png
new file mode 100644
index 000000000000..67e69d67d942
Binary files /dev/null and b/source/images/organizing/filter-panel.png differ
diff --git a/source/images/organizing/filters_01.png b/source/images/organizing/filters_01.png
new file mode 100644
index 000000000000..952318d7e4e2
Binary files /dev/null and b/source/images/organizing/filters_01.png differ
diff --git a/source/images/organizing/floors.png b/source/images/organizing/floors.png
new file mode 100644
index 000000000000..749ceb77a667
Binary files /dev/null and b/source/images/organizing/floors.png differ
diff --git a/source/images/organizing/labels.png b/source/images/organizing/labels.png
new file mode 100644
index 000000000000..e6dd867ec0e5
Binary files /dev/null and b/source/images/organizing/labels.png differ
diff --git a/source/images/organizing/labels_add_05.png b/source/images/organizing/labels_add_05.png
new file mode 100644
index 000000000000..ba04319eaa26
Binary files /dev/null and b/source/images/organizing/labels_add_05.png differ
diff --git a/source/images/organizing/multiselect_01.png b/source/images/organizing/multiselect_01.png
new file mode 100644
index 000000000000..415c83778f23
Binary files /dev/null and b/source/images/organizing/multiselect_01.png differ
diff --git a/source/images/organizing/multiselect_icon.png b/source/images/organizing/multiselect_icon.png
new file mode 100644
index 000000000000..09497d7c6a7c
Binary files /dev/null and b/source/images/organizing/multiselect_icon.png differ
diff --git a/source/images/organizing/table_group_01.png b/source/images/organizing/table_group_01.png
new file mode 100644
index 000000000000..616be9ccd41f
Binary files /dev/null and b/source/images/organizing/table_group_01.png differ
diff --git a/source/images/screenshots/System_information.png b/source/images/screenshots/System_information.png
deleted file mode 100644
index bb35d602f277..000000000000
Binary files a/source/images/screenshots/System_information.png and /dev/null differ
diff --git a/source/images/screenshots/system_information.png b/source/images/screenshots/system_information.png
new file mode 100644
index 000000000000..d972ee831ca0
Binary files /dev/null and b/source/images/screenshots/system_information.png differ
diff --git a/source/index.html b/source/index.html
index 7d6cec1c915e..89ebda6e4e17 100644
--- a/source/index.html
+++ b/source/index.html
@@ -107,7 +107,7 @@ Ok Google, turn on the AC
+{% include common-tasks/enable_i2c.md %}
\ No newline at end of file
diff --git a/source/more-info/unsupported/systemd_journal.markdown b/source/more-info/unsupported/systemd_journal.markdown
index 137d880ec35c..b53ed907949c 100644
--- a/source/more-info/unsupported/systemd_journal.markdown
+++ b/source/more-info/unsupported/systemd_journal.markdown
@@ -5,9 +5,9 @@ description: "More information on why systemd journal marks the installation as
## The issue
-The Supervisor needs access to the systemd journal for logging features
-such as the `/host/logs` API. These features don't work if the journal
-is not accessible.
+The Supervisor needs access to the systemd journal to access logs of
+individual system components and add-ons. These logs are limited or
+not available at all if the journal is not accessible.
## The solution
diff --git a/source/more-info/unsupported/virtualization_image.markdown b/source/more-info/unsupported/virtualization_image.markdown
new file mode 100644
index 000000000000..8a88c2cb81f5
--- /dev/null
+++ b/source/more-info/unsupported/virtualization_image.markdown
@@ -0,0 +1,18 @@
+---
+title: "Incorrect image for virtualization"
+description: "More information on why virtualization image marks the installation as unsupported."
+---
+
+## The issue
+
+Your Home Assistant OS installation appears to run in a virtualized environment using
+a disk image which is not meant to run in a virtualized environment.
+
+Home Assistant OS publishes specific images which support being run on a virtualized
+system. These are optimized to run in virtual environments, e.g. have guest tools installed
+and para-virtualization drivers enabled.
+
+## The solution
+
+You need to reinstall Home Assistant OS using an image which supports being run
+on a virtualized system, [see instructions here](/installation/alternative).
diff --git a/source/voice_control/about_wake_word.markdown b/source/voice_control/about_wake_word.markdown
index 4a15afc98164..687faacc6f4a 100644
--- a/source/voice_control/about_wake_word.markdown
+++ b/source/voice_control/about_wake_word.markdown
@@ -1,5 +1,14 @@
---
title: "About wake words"
+related:
+ - docs: /voice_control/thirteen-usd-voice-remote/
+ title: Create a $13 voice assistant
+ - docs: /voice_control/install_wake_word_add_on/
+ title: Enable wake words
+ - docs: /voice_control/create_wake_word/
+ title: Create your own wake words
+ - docs: /voice_control/voice_remote_cloud_assistant/)
+ title: Create a cloud assistant
---
Wake words are special words or phrases that tell a voice assistant that a command is about to be spoken. The device then switches from passive to active listening. Examples are: *Hey Google*, *Hey Siri*, or *Alexa*. Home Assistant supports its own wake words, such as *Hey Nabu*.
@@ -101,13 +110,6 @@ Right now, there are two easy options to get started with wake words:
- Follow the guide to the [$13 voice assistant][13-tutorial]. This tutorial is using the tiny ATOM Echo, detecting wake words with openWakeWord.
- Follow the guide to set up an [ESP32-S3-BOX-3 voice assistant](/voice_control/s3_box_voice_assistant/). This tutorial is using the bigger S3-BOX-3 device which features a display. It can detect wake words using openWakeWord. But it can also do on-device wake word detection using microWakeWord.
-## Related topics
-
-- [Create a $13 voice assistant](/voice_control/thirteen-usd-voice-remote/)
-- [Enable wake words](/voice_control/install_wake_word_add_on/)
-- [Create your own wake words](/voice_control/create_wake_word/)
-- [Create a cloud assistant](/voice_control/voice_remote_cloud_assistant/)
-
[13-tutorial]: /voice_control/thirteen-usd-voice-remote/
[openWakeWord]: https://github.com/dscripka/openWakeWord
[own-wake-word]: /voice_control/create_wake_word/
diff --git a/source/voice_control/aliases.markdown b/source/voice_control/aliases.markdown
index 73d8bface7d8..813f430e2816 100644
--- a/source/voice_control/aliases.markdown
+++ b/source/voice_control/aliases.markdown
@@ -1,8 +1,15 @@
---
-title: "Assist - entity and area aliases"
+title: "Assist - entity, area, and floor aliases"
+related:
+ - docs: /docs/organizing/areas/
+ title: Areas
+ - docs: /docs/organizing/floors/
+ title: Floors
+ - docs: /voice_control/custom_sentences/
+ title: Assist - custom sentences
---
-Assist will use the names of your entities and areas, as well as any aliases you've configured. The configured aliases are not only used by Assist, but can also be used by Google Assistant, if you have set that up.
+Assist will use the names of your entities, areas and floors, as well as any aliases you've configured. The configured aliases are not only used by Assist, but can also be used by Google Assistant, if you have set that up.
These aliases are helpful in case you call the same device by multiple names
or when using a voice assistant in multiple languages at the same time.
@@ -18,7 +25,14 @@ There are multliple ways to add an alias of an entity:
## Adding an alias of an area
-1. To add an alias for an area, go to **Settings** > **Areas & zones**.
-2. Select the area of interest.
-3. In the three-dot menu, select **Area settings**.
-4. Select **Add alias** and enter the alias you want to use for that area.
\ No newline at end of file
+1. To add an alias for an area, go to **Settings** > **Areas, labels & zones**.
+2. On the area card of interest, select the pencil button.
+3. Select **Add alias** and enter the alias you want to use for that area.
+4. **Save** your changes.
+
+## Adding an alias of a floor
+
+1. To add an alias for a floor, go to **Settings** > **Areas, labels & zones**.
+2. Next to the floor of interest, select the three-dot menu, then select **Edit floor**.
+3. Select **Add alias** and enter the alias you want to use for that floor.
+4. **Save** your changes.
diff --git a/source/voice_control/android.markdown b/source/voice_control/android.markdown
index 5bf8e6753973..d5b7e7039eec 100644
--- a/source/voice_control/android.markdown
+++ b/source/voice_control/android.markdown
@@ -1,5 +1,12 @@
---
title: "Assist on Android"
+related:
+ - docs: /voice_control/voice_remote_expose_devices/
+ title: Exposing devices to Assist
+ - docs: /voice_control/start_assist_from_dashboard/
+ title: Starting Assist from your dashboard
+ - url: https://companion.home-assistant.io/docs/getting_started/
+ title: Home Assistant Companion App
---
## Assist on Android phones
@@ -134,9 +141,3 @@ Depending on your watch, you can assign Assist to a button so that you can start
![List of assistants](/images/assist/android_watch_7.png)
3. Now, use your key and speak a command.
-
-## Related topics
-
-- [Home Assistant Companion App](https://companion.home-assistant.io/docs/getting_started/)
-- [Exposing devices to Assist](/voice_control/voice_remote_expose_devices/)
-- [Starting Assist from your dashboard](/voice_control/start_assist_from_dashboard/)
diff --git a/source/voice_control/assist_create_open_ai_personality.markdown b/source/voice_control/assist_create_open_ai_personality.markdown
index 685e06f084b7..348392cc1616 100644
--- a/source/voice_control/assist_create_open_ai_personality.markdown
+++ b/source/voice_control/assist_create_open_ai_personality.markdown
@@ -1,5 +1,12 @@
---
title: "Create a personality with OpenAI"
+related:
+ - docs: /voice_control/voice_remote_cloud_assistant/
+ title: Cloud assistant pipeline
+ - docs: /voice_control/voice_remote_local_assistant/
+ title: Local assistant pipeline
+ - url: https://www.nabucasa.com
+ title: Home Assistant Cloud
---
You can give your voice assistant personality by using OpenAI. This requires an OpenAI account. For what we do in this tutorial, the free trial option is sufficient. No need to leave your credit card information.
@@ -36,9 +43,3 @@ Using OpenAI requires an OpenAI account. For this tutorial, the free trial optio
- Leave the other settings unchanged and select **Create**.
4. You can repeat this with other OpenAI personalities. You can add as many OpenAI Conversation integrations as you would like.
- To add a new personality, you need to create a new API key. Then, add a new OpenAI Conversation integration with that API key.
-
-## Related topics
-
-- [Home Assistant Cloud](https://www.nabucasa.com)
-- [Cloud assistant pipeline](/voice_control/voice_remote_cloud_assistant/)
-- [Local assistant pipeline](/voice_control/voice_remote_local_assistant/)
diff --git a/source/voice_control/assist_daily_summary.markdown b/source/voice_control/assist_daily_summary.markdown
index 6a11c2036697..b63a6c20e1fa 100644
--- a/source/voice_control/assist_daily_summary.markdown
+++ b/source/voice_control/assist_daily_summary.markdown
@@ -1,5 +1,16 @@
---
title: "Daily summary by Assist"
+related:
+ - docs: /voice_control/voice_remote_local_assistant/
+ title: Local assistant pipeline
+ - docs: /integrations/local_calendar/
+ title: Local calendar
+ - docs: /integrations/telegram/#setup-example
+ title: Telegram notification
+ - docs: /voice_control/assist_create_open_ai_personality/
+ title: Telegram notification
+ - url: https://www.nabucasa.com
+ title: Home Assistant Cloud
---
In this tutorial, we are creating an automation that has Assist send you a daily summary. Assist will tell you about the weather and your calendar events today. It will also send you the summary to your messenger.
@@ -84,11 +95,3 @@ We are using a blueprint (courtesy of [@allenporter]) that polls calendar events
- You should now receive a notification from Assist in your messenger app.
[@allenporter]: https://github.com/allenporter
-
-## Related topics
-
-- [Home Assistant Cloud](https://www.nabucasa.com)
-- [Local assistant pipeline](/voice_control/voice_remote_local_assistant/)
-- [Local calendar](/integrations/local_calendar/)
-- [Telegram notification](/integrations/telegram/#setup-example)
-- [Create a Mario personality](/voice_control/assist_create_open_ai_personality/)
\ No newline at end of file
diff --git a/source/voice_control/builtin_sentences.markdown b/source/voice_control/builtin_sentences.markdown
index 695115b9fad6..c7fc58551652 100644
--- a/source/voice_control/builtin_sentences.markdown
+++ b/source/voice_control/builtin_sentences.markdown
@@ -1,5 +1,20 @@
---
title: "Assist - default sentences"
+related:
+ - docs: /voice_control/aliases/
+ title: Create aliases
+ - docs: /voice_control/custom_sentences/
+ title: Create your own sentences
+ - docs: /voice_control/troubleshooting/
+ title: Sentence troubleshooting
+ - url: https://github.com/home-assistant/intents/tree/main/sentences
+ title: Built-in sentence definitions
+ - url: https://github.com/home-assistant/intents/tree/main/responses
+ title: Built-in response definitions
+ - url: https://developers.home-assistant.io/docs/voice/intent-recognition/template-sentence-syntax/
+ title: Template sentence syntax documentation
+ - url: https://github.com/home-assistant/intents/tree/main/sentences
+ title: Sentence test cases
---
Home Assistant comes with [built-in sentences](https://github.com/home-assistant/intents/tree/main/sentences) contributed by the community for [dozens of languages](https://developers.home-assistant.io/docs/voice/intent-recognition/supported-languages).
@@ -103,12 +118,3 @@ The list of supported sentences is constantly being updated for each language. T
3. View the [sentence definition](https://github.com/home-assistant/intents/tree/main/sentences) for your language.
4. View the [response definition](https://github.com/home-assistant/intents/tree/main/responses)
-## Related topics
-
-- [Create aliases](/voice_control/aliases/)
-- [Create your own sentences](/voice_control/custom_sentences/)
-- [Built-in sentence definitions](https://github.com/home-assistant/intents/tree/main/sentences)
-- [Built-in response definitions](https://github.com/home-assistant/intents/tree/main/responses)
-- [Template sentence syntax documentation](https://developers.home-assistant.io/docs/voice/intent-recognition/template-sentence-syntax/)
-- [Sentence test cases](https://github.com/home-assistant/intents/tree/main/sentences)
-- [Sentence troubleshooting](/voice_control/troubleshooting/)
diff --git a/source/voice_control/create_wake_word.markdown b/source/voice_control/create_wake_word.markdown
index 1655e89847aa..cd04b3bf05ae 100644
--- a/source/voice_control/create_wake_word.markdown
+++ b/source/voice_control/create_wake_word.markdown
@@ -1,5 +1,16 @@
---
title: "Create your own wake word"
+related:
+ - docs: /voice_control/thirteen-usd-voice-remote/
+ title: $13 voice assistant for Home Assistant
+ - docs: /voice_control/custom_sentences/
+ title: Installing the Samba add-on
+ - docs: /voice_control/about_wake_word/
+ title: About wake words
+ - url: https://colab.research.google.com/drive/1q1oe2zOyZp7UsB3jJiQ1IFn8z5YfjwEb?usp=sharing#scrollTo=1cbqBebHXjFD
+ title: Wake word training environment
+ - url: https://github.com/dscripka/openWakeWord
+ title: Wake word training environment
---
You can now create your own wake word to use with Home Assistant. The procedure below will guide you to train a model. The model is trained using voice clips generated by our local neural text-to-speech system [Piper](https://github.com/rhasspy/piper).
@@ -93,11 +104,3 @@ Things you can try if the execution is very slow:
- Select the link to **Upgrade to Colab Pro**.
- Select your price plan and follow the instructions on screen.
![Connect to hosted runtime](/images/assist/wake_word_upgrade_to_colab.png)
-
-## Related topics
-
-- [$13 voice assistant for Home Assistant](/voice_control/thirteen-usd-voice-remote/)
-- [Wake word training environment](https://colab.research.google.com/drive/1q1oe2zOyZp7UsB3jJiQ1IFn8z5YfjwEb?usp=sharing#scrollTo=1cbqBebHXjFD)
-- [Installing the Samba add-on](/common-tasks/os/#configuring-access-to-files)
-- [openWakeWord add-on](https://github.com/dscripka/openWakeWord)
-- [About wake words](/voice_control/about_wake_word/)
diff --git a/source/voice_control/custom_sentences.markdown b/source/voice_control/custom_sentences.markdown
index 2b4755384460..e348a65b27b0 100644
--- a/source/voice_control/custom_sentences.markdown
+++ b/source/voice_control/custom_sentences.markdown
@@ -1,5 +1,16 @@
---
title: "Assist - custom sentences"
+related:
+ - docs: /voice_control/aliases/
+ title: Create aliases
+ - docs: /docs/scripts/#respond-to-a-conversation/
+ title: Conversation response script action
+ - docs: /docs/automation/trigger/#sentence-trigger
+ title: Sentence triggers
+ - docs: /docs/automation/trigger/#sentence-wildcards
+ title: Sentence wildcards
+ - url: https://developers.home-assistant.io/docs/intent_builtin/
+ title: View existing intents
---
You may add your own sentences to the intent recognizer by either extending an [existing intent](https://developers.home-assistant.io/docs/intent_builtin/) or creating a new one. You may also [customize responses](#customizing-responses) for existing intents.
@@ -165,15 +176,7 @@ responses:
{% endraw %}
-## Related topics
-
-- [View existing intents](https://developers.home-assistant.io/docs/intent_builtin/)
-- [Create aliases](/voice_control/aliases/)
-- [Conversation response script action](/docs/scripts/#respond-to-a-conversation)
-- [Sentence triggers](/docs/automation/trigger/#sentence-trigger)
-- [Sentence wildcards](/docs/automation/trigger/#sentence-wildcards)
-
-### Related devices and installation tutorials
+## Related devices and installation tutorials
- [$13 voice assistant for Home Assistant](/voice_control/thirteen-usd-voice-remote/)
- [S3-BOX-3 voice assistant](/voice_control/s3_box_voice_assistant/)
diff --git a/source/voice_control/index.markdown b/source/voice_control/index.markdown
index 46de3a826fc3..fb41ac16f9e1 100644
--- a/source/voice_control/index.markdown
+++ b/source/voice_control/index.markdown
@@ -1,5 +1,24 @@
---
title: Assist - Talking to Home Assistant
+related:
+ - docs: /voice_control/android
+ title: Assist on Android
+ - docs: /voice_control/android/#assist-on-wear-os
+ title: Assist on Wear OS
+ - docs: /voice_control/apple
+ title: Siri and Assist shortcuts
+ - docs: /voice_control/start_assist_from_dashboard/
+ title: Assist dashboard button
+ - docs: /voice_control/thirteen-usd-voice-remote/
+ title: Build a 13$ voice remote using an ESPHome device
+ - docs: /voice_control/install_wake_word_add_on
+ title: Enable a wake word
+ - docs: /voice_control/create_wake_word/
+ title: Create your own wake words
+ - docs: /voice_control/builtin_sentences
+ title: Built-in sentences
+ - url: https://www.nabucasa.com/config/
+ title: Home Assistant Cloud
---
@@ -62,15 +81,3 @@ Use the [built-in sentences](/voice_control/builtin_sentences) to control entiti
Did Assist not understand your sentence? [Contribute them](https://developers.home-assistant.io/docs/voice/intent-recognition/).
_Assist was introduced in Home Assistant 2023.2._
-
-## Related topics
-
-- [Home Assistant Cloud](https://www.nabucasa.com/config/)
-- [Assist on Android](/voice_control/android)
-- [Assist on Wear OS](/voice_control/android/#assist-on-wear-os)
-- [Siri and Assist shortcuts](/voice_control/apple)
-- [Assist dashboard button](/voice_control/start_assist_from_dashboard/)
-- [Build a 13$ voice remote using an ESPHome device](/voice_control/thirteen-usd-voice-remote/)
-- [Enable a wake word](/voice_control/install_wake_word_add_on)
-- [Create your own wake words](/voice_control/create_wake_word/)
-- [Built-in sentences](/voice_control/builtin_sentences)
diff --git a/source/voice_control/s3-box-customize.markdown b/source/voice_control/s3-box-customize.markdown
index a800d3c266db..d873af398cb2 100644
--- a/source/voice_control/s3-box-customize.markdown
+++ b/source/voice_control/s3-box-customize.markdown
@@ -2,6 +2,23 @@
title: "Customize the S3-BOX-3"
product_name: ESP32-S3-BOX-3
device_name_entry: ESP32-S3-BOX-3
+related:
+ - docs: /voice_control/voice_remote_cloud_assistant/
+ title: Home Assistant Cloud
+ - docs: /voice_control/voice_remote_local_assistant
+ title: Assist Pipeline
+ - docs: /voice_control/s3_box_voice_assistant/
+ title: ESP32-S3-BOX-3 voice assistant
+ - docs: /voice_control/troubleshooting/
+ title: General troubleshooting section for Assist
+ - docs: /voice_control/troubleshooting_the_s3_box/
+ title: Troubleshooting the ESP32-S3-BOX-3
+ - docs: /common-tasks/os/#configuring-access-to-files
+ title: Access to your configuration files
+ - url: https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/tree/main
+ title: Community image repository
+ - url: https://github.com/kahrendt/microWakeWord
+ title: microWakeWord
---
## Customize the S3-BOX-3 with your own illustrations
@@ -222,16 +239,5 @@ You can change the on-device wake word (microWakeWord) that is used on your S3-B
7. Now, speak a command to test the new setting. For example, *Hey Jarvis, turn on the light*.
-## Related topics
-
-- [Community image repository](https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/tree/main)
-- [Home Assistant Cloud](/voice_control/voice_remote_cloud_assistant/)
-- [Assist Pipeline](/voice_control/voice_remote_local_assistant)
-- [ESP32-S3-BOX-3 voice assistant](/voice_control/s3_box_voice_assistant/)
-- [General troubleshooting section for Assist](/voice_control/troubleshooting/)
-- [Troubleshooting the ESP32-S3-BOX-3](/voice_control/troubleshooting_the_s3_box/)
-- [Access to your configuration files](/common-tasks/os/#configuring-access-to-files)
-- [microWakeWord](https://github.com/kahrendt/microWakeWord)
-
[microWakeWord]: https://github.com/kahrendt/microWakeWord
[Kevin Ahrendt]: https://www.kevinahrendt.com/
\ No newline at end of file
diff --git a/source/voice_control/s3_box_voice_assistant.markdown b/source/voice_control/s3_box_voice_assistant.markdown
index 07865fb59307..9e76a272b29e 100644
--- a/source/voice_control/s3_box_voice_assistant.markdown
+++ b/source/voice_control/s3_box_voice_assistant.markdown
@@ -3,6 +3,17 @@ title: "ESP32-S3-BOX voice assistant"
product_name: ESP32-S3-BOX
device_name_entry: ESP32-S3-BOX
config_link: /voice_control/s3_box_voice_assistant/#to-delete-the-configuration-from-esphome
+related:
+ - docs: /voice_control/troubleshooting/
+ title: General troubleshooting section for Assist
+ - docs: /voice_control/troubleshooting_the_s3_box/
+ title: Troubleshooting the ESP32-S3-BOX-3
+ - docs: /common-tasks/os/#configuring-access-to-files
+ title: Access to your configuration files
+ - docs: /voice_control/s3-box-customize/#customizing-on-device-wake-words-microwakeword
+ title: Customizing the S3-BOX with on-device wake words
+ - url: https://esphome.io/projects/index.html
+ title: ESPHome projects page
---
This tutorial will guide you to turn an ESP32-S3-BOX, ESP32-S3-BOX-3, or an ESP32-S3-BOX-Light into a Home Assistant voice assistant. Note, the term ESP32-S3-BOX is used to refer to any of the 3 product variants.
@@ -84,11 +95,3 @@ Before you can use this device with Home Assistant, you need to install a bit of
- Disable **LCD Backlight**.
![Toggle to enable/disable wake word](/images/assist/s3-box-disable-screen.png)
-
-## Related topics
-
-- [General troubleshooting section for Assist](/voice_control/troubleshooting/)
-- [Troubleshooting the ESP32-S3-BOX-3](/voice_control/troubleshooting_the_s3_box/)
-- [ESPHome projects page](https://esphome.io/projects/index.html)
-- [Access to your configuration files](/common-tasks/os/#configuring-access-to-files)
-- [Customizing the S3-BOX with on-device wake words](/voice_control/s3-box-customize/#customizing-on-device-wake-words-microwakeword)
diff --git a/source/voice_control/start_assist_from_dashboard.markdown b/source/voice_control/start_assist_from_dashboard.markdown
index ec79fbe26f2a..92db86f84426 100644
--- a/source/voice_control/start_assist_from_dashboard.markdown
+++ b/source/voice_control/start_assist_from_dashboard.markdown
@@ -1,5 +1,14 @@
---
title: "Starting Assist from your dashboard"
+related:
+ - docs: /voice_control/android/
+ title: Assist for Android
+ - docs: /voice_control/voice_remote_local_assistant/
+ title: Creating a local assistant
+ - docs: /voice_control/voice_remote_cloud_assistant/
+ title: Creating a Cloud assistant
+ - docs: /voice_control/voice_remote_expose_devices/
+ title: Exposing devices to Assist
---
If you are using Home Assistant in kiosk mode, for example if you have a tablet mounted on the wall, the Assist icon in the top right corner is not accessible. In this case, use a dashboard button to start Assist.
@@ -21,10 +30,3 @@ If you are using Home Assistant in kiosk mode, for example if you have a tablet
6. If you are using Assist with your voice, enable **Start listening**.
- If you don't want to use voice but just want to type, you do not need to enable listening.
7. **Save** your new button card.
-
-## Related topics
-
-- [Assist for Android](/voice_control/android/)
-- [Creating a local assistant](/voice_control/voice_remote_local_assistant/)
-- [Creating a Cloud assistant](/voice_control/voice_remote_cloud_assistant/)
-- [Exposing devices to Assist](/voice_control/voice_remote_expose_devices/)
diff --git a/source/voice_control/thirteen-usd-voice-remote.markdown b/source/voice_control/thirteen-usd-voice-remote.markdown
index 2d090c30a248..51dd02077192 100644
--- a/source/voice_control/thirteen-usd-voice-remote.markdown
+++ b/source/voice_control/thirteen-usd-voice-remote.markdown
@@ -3,6 +3,21 @@ title: "$13 voice assistant for Home Assistant"
product_name: ATOM Echo
device_name_entry: M5Stack Atom Echo a61920
config_link: /voice_control/thirteen-usd-voice-remote/#to-delete-the-atom-echo-configuration-from-esphome
+related:
+ - docs: /voice_control/install_wake_word_add_on/
+ title: Enable a wake word
+ - docs: /voice_control/create_wake_word/
+ title: Create your own wake words
+ - docs: /voice_control/voice_remote_cloud_assistant/
+ title: Creating a Cloud assistant
+ - docs: /voice_control/troubleshooting/
+ title: General troubleshooting section for Assist
+ - docs: /voice_control/voice_remote_local_assistant
+ title: Manually configured Assist pipeline
+ - docs: /voice_control/custom_sentences/
+ title: Using a sentence trigger
+ - docs: /common-tasks/os/#configuring-access-to-files
+ title: Access to your configuration files
---
This tutorial will guide you to turn an ATOM Echo into the
@@ -76,13 +91,3 @@ Before you can use this device with Home Assistant, you need to install a bit of
Are things not working as expected?
- Checkout the [general troubleshooting section for Assist](/voice_control/troubleshooting/).
-
-## Related topics
-
-- [Enable a wake word](/voice_control/install_wake_word_add_on/)
-- [Create your own wake words](/voice_control/create_wake_word/)
-- [General troubleshooting section for Assist](/voice_control/troubleshooting/)
-- [Access to your configuration files](/common-tasks/os/#configuring-access-to-files)
-- [Using a sentence trigger](/voice_control/custom_sentences/)
-- [Home Assistant Cloud](/voice_control/voice_remote_cloud_assistant/)
-- [Manually configured Assist pipeline](/voice_control/voice_remote_local_assistant)
diff --git a/source/voice_control/troubleshooting_the_s3_box.markdown b/source/voice_control/troubleshooting_the_s3_box.markdown
index 2c3b59e061f5..470be2efe391 100644
--- a/source/voice_control/troubleshooting_the_s3_box.markdown
+++ b/source/voice_control/troubleshooting_the_s3_box.markdown
@@ -1,5 +1,10 @@
---
title: "Troubleshooting the ESP32-S3-BOX-3"
+related:
+ - docs: /voice_control/s3_box_voice_assistant/
+ title: Creating a ESP32-S3-BOX-3 voice assistant
+ - url: https://esphome.io/projects/index.html
+ title: ESPHome projects website
---
This section provides troubleshooting steps for the ESP32-S3-BOX-3 by Espressif.
@@ -77,8 +82,3 @@ This message indicates that the device could connect to the Wi-Fi, but is unable
![ESP32-S3-BOX-3 open config file](/images/assist/esp32-s3-box-not-discovered.png)
- Go to your router, find the IP address or hostname of your device, and enter it.
-
-## Related topics
-
-- [Creating a ESP32-S3-BOX-3 voice assistant](/voice_control/s3_box_voice_assistant/)
-- [ESPHome projects website](https://esphome.io/projects/index.html)
\ No newline at end of file
diff --git a/source/voice_control/voice_remote_cloud_assistant.markdown b/source/voice_control/voice_remote_cloud_assistant.markdown
index 8b3691e29cf1..0a5f4b76bf9e 100644
--- a/source/voice_control/voice_remote_cloud_assistant.markdown
+++ b/source/voice_control/voice_remote_cloud_assistant.markdown
@@ -1,5 +1,14 @@
---
title: "Creating a cloud Assist pipeline"
+related:
+ - docs: /voice_control/install_wake_word_add_on/
+ title: Enabling a wake word
+ - docs: /voice_control/create_wake_word/
+ title: Create your own wake word
+ - docs: /voice_control/voice_remote_cloud_assistant/
+ title: Creating a Cloud assistant
+ - docs: /voice_control/voice_remote_expose_devices/
+ title: Exposing devices to Assist
---
In Home Assistant, the Assist pipelines are made up of various components that together form a voice assistant.
@@ -42,10 +51,3 @@ To have the fastest processing voice assistant experience, follow these steps:
6. That's it. You can now speak to your device, and the device can answer in the language you defined.
7. If you haven't done so yet, [expose your devices to Assist](/voice_control/voice_remote_expose_devices/#exposing-your-devices).
- Otherwise you won't be able to control them by voice.
-
-## Related topics
-
-- [Enable Home Assistant Cloud](https://www.nabucasa.com/config/)
-- [Enabling a wake word](/voice_control/install_wake_word_add_on/)
-- [Create your own wake word](/voice_control/create_wake_word/)
-- [Expose your devices to Assist](/voice_control/voice_remote_expose_devices/#exposing-your-devices)
diff --git a/source/voice_control/voice_remote_expose_devices.markdown b/source/voice_control/voice_remote_expose_devices.markdown
index 41c7db07351e..30b9b3b38ffc 100644
--- a/source/voice_control/voice_remote_expose_devices.markdown
+++ b/source/voice_control/voice_remote_expose_devices.markdown
@@ -1,5 +1,10 @@
---
title: "Exposing devices"
+related:
+ - docs: /voice_control/voice_remote_cloud_assistant/
+ title: Creating a Cloud assistant
+ - docs: /voice_control/voice_remote_local_assistant/
+ title: Creating a local assistant
---
To be able to control your devices over a voice command, you must expose your entities to Assist.
@@ -13,9 +18,3 @@ This is to avoid that sensitive devices, such as locks and garage doors, can ina
3. Select **Expose entities**.
1. Select all entities you want to be able to control by voice.
![Expose entities tab](/images/assist/assistant-expose-02.png)
-
-
-## Related topics
-
-- [Local assistant pipeline](/voice_control/voice_remote_local_assistant/)
-- [Cloud assistant pipeline](/voice_control/voice_remote_cloud_assistant/)
\ No newline at end of file
diff --git a/source/voice_control/voice_remote_local_assistant.markdown b/source/voice_control/voice_remote_local_assistant.markdown
index caadd0f74a42..8112568c8b26 100644
--- a/source/voice_control/voice_remote_local_assistant.markdown
+++ b/source/voice_control/voice_remote_local_assistant.markdown
@@ -1,5 +1,14 @@
---
title: "Installing a local Assist pipeline"
+related:
+ - docs: /voice_control/voice_remote_expose_devices/#exposing-your-devices
+ title: Expose your devices to Assist
+ - docs: /voice_control/create_wake_word/
+ title: Create your own wake words
+ - url: https://github.com/openai/whisper
+ title: Whisper for speech-to-text
+ - url: https://github.com/rhasspy/piper
+ title: Piper for text-to-speech
---
In Home Assistant, the Assist pipelines are made up of various components that together form a voice assistant.
@@ -69,9 +78,3 @@ View some of the options in the video below. Explained by Mike Hansen, creator o
The options are also documented in the add-on itself. Go to the {% my supervisor_addon addon="core_whisper" title="**Whisper**" %} or the {% my supervisor_addon addon="core_piper" title="**Piper**" %} add-on and open the **Documentation** page.
-## Related topics
-
-- [Create your own wake word](/voice_control/create_wake_word/)
-- [Expose your devices to Assist](/voice_control/voice_remote_expose_devices/#exposing-your-devices)
-- [Whisper for speech-to-text](https://github.com/openai/whisper)
-- [Piper for text-to-speech](https://github.com/rhasspy/piper)
diff --git a/source/voice_control/worlds-most-private-voice-assistant.markdown b/source/voice_control/worlds-most-private-voice-assistant.markdown
index ac77ccc0b669..a98b79de126f 100644
--- a/source/voice_control/worlds-most-private-voice-assistant.markdown
+++ b/source/voice_control/worlds-most-private-voice-assistant.markdown
@@ -1,5 +1,14 @@
---
title: "World's most private voice assistant"
+related:
+ - docs: /voice_control/voice_remote_cloud_assistant/
+ title: Creating a Cloud assistant
+ - docs: /voice_control/voice_remote_local_assistant/
+ title: Creating a local assistant
+ - url: https://amzn.to/40k7mRa
+ title: Grandstream HT801
+ - url: https://www.nabucasa.com
+ title: Home Assistant Cloud
---
This tutorial will guide you to turn your old landline phone into the
@@ -125,10 +134,3 @@ The phone shown in the video by TheFes is a *Heemaf type 1955*, which was used b
The phone used during creation of this tutorial is a 1953 [*Tischstation Mod.29 HF-TR* by Autophon AG](https://www.radiomuseum.org/r/autophon_tischstation_mod29_hf_tr.html).
![Analog phone Tischstation Mod.29 by Autophon AG](/images/assist/autophon-mod-29.jpg)
-
-## Related topics
-
-- [Grandstream HT801](https://amzn.to/40k7mRa)
-- [Home Assistant Cloud](https://www.nabucasa.com)
-- [Cloud assistant pipeline](/voice_control/voice_remote_cloud_assistant/)
-- [Local assistant pipeline](/voice_control/voice_remote_local_assistant/)
\ No newline at end of file