diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 820d6727a5a..c43bc84fc7f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,7 +10,7 @@ jobs: - name: Check out files from GitHub uses: actions/checkout@v4.2.2 - name: Setting up Node.js - uses: actions/setup-node@v4.2.0 + uses: actions/setup-node@v4.3.0 with: node-version: 20 cache: "npm" @@ -27,7 +27,7 @@ jobs: - name: Check out files from GitHub uses: actions/checkout@v4.2.2 - name: Setting up Node.js - uses: actions/setup-node@v4.2.0 + uses: actions/setup-node@v4.3.0 with: node-version: 20 cache: "npm" diff --git a/CODEOWNERS b/CODEOWNERS index 5e07d46def0..95d57ed61b2 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -95,6 +95,7 @@ source/_integrations/azure_data_explorer.markdown @kaareseras source/_integrations/azure_devops.markdown @timmo001 source/_integrations/azure_event_hub.markdown @eavanvalkenburg source/_integrations/azure_service_bus.markdown @hfurubotten +source/_integrations/azure_storage.markdown @zweckj source/_integrations/backup.markdown @home-assistant/core source/_integrations/baf.markdown @bdraco @jfroy source/_integrations/balboa.markdown @garbled1 @natekspencer @@ -133,6 +134,7 @@ source/_integrations/bthome.markdown @Ernst79 @thecode source/_integrations/bticino.markdown @cgtobi source/_integrations/bubendorff.markdown @cgtobi source/_integrations/buienradar.markdown @mjj4791 @ties @Robbie1221 +source/_integrations/burbank_water_and_power.markdown @tronikos source/_integrations/button.markdown @home-assistant/core source/_integrations/calendar.markdown @home-assistant/core source/_integrations/cambridge_audio.markdown @noahhusby @@ -348,6 +350,7 @@ source/_integrations/hassio.markdown @home-assistant/supervisor source/_integrations/havana_shade.markdown @starkillerOG source/_integrations/hdmi_cec.markdown @inytar source/_integrations/heatmiser.markdown @andylockran +source/_integrations/heicko.markdown @starkillerOG source/_integrations/heiwa.markdown @cmroche source/_integrations/heos.markdown @andrewsayre source/_integrations/here_travel_time.markdown @eifinger @@ -361,7 +364,7 @@ source/_integrations/hive.markdown @Rendili @KJonline source/_integrations/hko.markdown @MisterCommand source/_integrations/hlk_sw16.markdown @jameshilliard source/_integrations/holiday.markdown @jrieger @gjohansson-ST -source/_integrations/home_connect.markdown @DavidMStraub @Diegorro98 +source/_integrations/home_connect.markdown @DavidMStraub @Diegorro98 @MartinHjelmare source/_integrations/home_plus_control.markdown @cgtobi source/_integrations/homeassistant.markdown @home-assistant/core source/_integrations/homeassistant_alerts.markdown @home-assistant/core @@ -418,6 +421,7 @@ source/_integrations/insteon.markdown @teharris1 source/_integrations/integration.markdown @dgomes source/_integrations/intellifire.markdown @jeeftor source/_integrations/intesishome.markdown @jnimmo +source/_integrations/iometer.markdown @MaestroOnICe source/_integrations/ios.markdown @robbiet480 source/_integrations/iotawatt.markdown @gtdiehl @jyavenard source/_integrations/iotty.markdown @shapournemati-iotty @@ -436,7 +440,7 @@ source/_integrations/ista_ecotrend.markdown @tr4nt0r source/_integrations/isy994.markdown @bdraco @shbatm source/_integrations/ituran.markdown @shmuelzon source/_integrations/izone.markdown @Swamp-Ig -source/_integrations/jellyfin.markdown @j-stienstra @ctalkington +source/_integrations/jellyfin.markdown @RunC0deRun @ctalkington source/_integrations/jewish_calendar.markdown @tsvi source/_integrations/juicenet.markdown @jesserockz source/_integrations/justnimbus.markdown @kvanzuijlen @@ -485,6 +489,7 @@ source/_integrations/light.template.markdown @home-assistant/core source/_integrations/linak.markdown @abmantis source/_integrations/linear_garage_door.markdown @IceBotYT source/_integrations/linux_battery.markdown @fabaff +source/_integrations/linx.markdown @starkillerOG source/_integrations/litejet.markdown @joncar source/_integrations/litterrobot.markdown @natekspencer @tkdrob source/_integrations/livisi.markdown @StefanIacobLivisi @planbnet @@ -552,6 +557,7 @@ 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/motionblinds_matter.markdown @home-assistant/matter source/_integrations/motioneye.markdown @dermotduffy source/_integrations/mqtt.markdown @emontnemery @jbouwh @bdraco source/_integrations/msteams.markdown @peroyvind @@ -598,7 +604,7 @@ source/_integrations/nuheat.markdown @tstabrawa source/_integrations/nuki.markdown @pschmitt @pvizeli @pree source/_integrations/numato.markdown @clssn source/_integrations/number.markdown @home-assistant/core @Shulyaka -source/_integrations/nut.markdown @bdraco @ollo69 @pestevez +source/_integrations/nut.markdown @bdraco @ollo69 @pestevez @tdfountain source/_integrations/nutrichef.markdown @bdraco source/_integrations/nws.markdown @MatthewFlamm @kamiyo source/_integrations/nyt_games.markdown @joostlek @@ -649,9 +655,10 @@ source/_integrations/pepco.markdown @tronikos source/_integrations/permobil.markdown @IsakNyberg source/_integrations/persistent_notification.markdown @home-assistant/core source/_integrations/pge.markdown @tronikos +source/_integrations/pglab.markdown @pglab-electronics source/_integrations/philips_js.markdown @elupus source/_integrations/pi_hole.markdown @shenxn -source/_integrations/picnic.markdown @corneyl +source/_integrations/picnic.markdown @corneyl @codesalatdev source/_integrations/pinecil.markdown @tr4nt0r source/_integrations/ping.markdown @jpbede source/_integrations/piper.markdown @balloob @synesthesiam @@ -800,6 +807,7 @@ source/_integrations/smappee.markdown @bsmappee source/_integrations/smart_blinds.markdown @starkillerOG source/_integrations/smart_home.markdown @starkillerOG source/_integrations/smart_meter_texas.markdown @grahamwetzler +source/_integrations/smart_rollos.markdown @starkillerOG source/_integrations/smarther.markdown @cgtobi source/_integrations/smarttub.markdown @mdz source/_integrations/smarty.markdown @z0mbieprocess @@ -809,6 +817,7 @@ source/_integrations/sms.markdown @ocalvo source/_integrations/smud.markdown @tronikos source/_integrations/snapcast.markdown @luar123 source/_integrations/snmp.markdown @nmaggioni +source/_integrations/snoo.markdown @Lash-L source/_integrations/snooz.markdown @AustinBrunkhorst source/_integrations/solaredge.markdown @frenck @bdraco source/_integrations/solaredge_local.markdown @drobtravels @scheric @@ -915,6 +924,7 @@ source/_integrations/twentemilieu.markdown @frenck source/_integrations/twinkly.markdown @dr1rrb @Robbie1221 @Olen source/_integrations/twitch.markdown @joostlek source/_integrations/ubiwizz.markdown @imicknl +source/_integrations/ublockout.markdown @starkillerOG source/_integrations/ukraine_alarm.markdown @PaulAnnekov source/_integrations/unifi.markdown @Kane610 source/_integrations/unifi_direct.markdown @tofuSCHNITZEL @@ -968,6 +978,7 @@ source/_integrations/weather.template.markdown @home-assistant/core source/_integrations/weatherflow.markdown @natekspencer @jeeftor source/_integrations/weatherflow_cloud.markdown @jeeftor source/_integrations/weatherkit.markdown @tjhorner +source/_integrations/webdav.markdown @jpbede source/_integrations/webhook.markdown @home-assistant/core source/_integrations/webmin.markdown @autinerd source/_integrations/webostv.markdown @thecode diff --git a/Gemfile b/Gemfile index 0a47dbe1fbd..d90f032ef33 100644 --- a/Gemfile +++ b/Gemfile @@ -10,9 +10,9 @@ group :development do gem 'stringex', '2.8.6' # > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189 gem 'sassc', '2.1.0' - gem 'sass-embedded', '1.85.1' - gem 'rubocop', '1.72.2' - gem 'ruby-lsp', '0.23.11' + gem 'sass-embedded', '1.86.0' + gem 'rubocop', '1.74.0' + gem 'ruby-lsp', '0.23.12' gem 'rackup', '2.2.1' end @@ -24,7 +24,7 @@ group :jekyll_plugins do end gem 'sinatra', '4.1.1' -gem 'nokogiri', '1.18.3' +gem 'nokogiri', '1.18.6' # 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 c713dafde37..b81e9ca59e0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,7 +3,7 @@ GEM specs: addressable (2.8.7) public_suffix (>= 2.0.2, < 7.0) - ast (2.4.2) + ast (2.4.3) base64 (0.2.0) bigdecimal (3.1.9) chunky_png (1.4.0) @@ -22,7 +22,7 @@ GEM compass-import-once (1.0.5) sass (>= 3.2, < 3.5) concurrent-ruby (1.3.5) - csv (3.3.2) + csv (3.3.3) em-websocket (0.5.3) eventmachine (>= 0.12.9) http_parser.rb (~> 0) @@ -30,10 +30,10 @@ GEM ffi (1.17.1-arm64-darwin) ffi (1.17.1-x86_64-linux-gnu) forwardable-extended (2.6.0) - google-protobuf (4.29.3-arm64-darwin) + google-protobuf (4.30.1-arm64-darwin) bigdecimal rake (>= 13) - google-protobuf (4.29.3-x86_64-linux) + google-protobuf (4.30.1-x86_64-linux) bigdecimal rake (>= 13) http_parser.rb (0.8.0) @@ -70,7 +70,7 @@ GEM nokogiri (~> 1.12) jekyll-watch (2.2.1) listen (~> 3.0) - json (2.10.1) + json (2.10.2) kramdown (2.5.1) rexml (>= 3.3.9) kramdown-parser-gfm (1.1.0) @@ -86,20 +86,20 @@ GEM multi_json (1.15.0) mustermann (3.0.3) ruby2_keywords (~> 0.0.1) - nokogiri (1.18.3-arm64-darwin) + nokogiri (1.18.6-arm64-darwin) racc (~> 1.4) - nokogiri (1.18.3-x86_64-linux-gnu) + nokogiri (1.18.6-x86_64-linux-gnu) racc (~> 1.4) parallel (1.26.3) - parser (3.3.7.1) + parser (3.3.7.2) ast (~> 2.4.1) racc pathutil (0.16.2) forwardable-extended (~> 2.6) - prism (1.3.0) + prism (1.4.0) public_suffix (6.0.1) racc (1.8.1) - rack (3.1.10) + rack (3.1.12) rack-protection (4.1.1) base64 (>= 0.1.0) logger (>= 1.6.0) @@ -114,12 +114,12 @@ GEM rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) - rbs (3.8.1) + rbs (3.9.1) logger regexp_parser (2.10.0) rexml (3.4.1) rouge (4.5.1) - rubocop (1.72.2) + rubocop (1.74.0) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) @@ -130,9 +130,9 @@ GEM rubocop-ast (>= 1.38.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.38.0) - parser (>= 3.3.1.0) - ruby-lsp (0.23.11) + rubocop-ast (1.41.0) + parser (>= 3.3.7.2) + ruby-lsp (0.23.12) language_server-protocol (~> 3.17.0) prism (>= 1.2, < 2.0) rbs (>= 3, < 4) @@ -141,10 +141,10 @@ GEM ruby2_keywords (0.0.5) safe_yaml (1.0.5) sass (3.4.25) - sass-embedded (1.85.1-arm64-darwin) - google-protobuf (~> 4.29) - sass-embedded (1.85.1-x86_64-linux-gnu) - google-protobuf (~> 4.29) + sass-embedded (1.86.0-arm64-darwin) + google-protobuf (~> 4.30) + sass-embedded (1.86.0-x86_64-linux-gnu) + google-protobuf (~> 4.30) sass-globbing (1.1.5) sass (>= 3.1) sassc (2.1.0) @@ -158,14 +158,14 @@ GEM rack-protection (= 4.1.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - sorbet-runtime (0.5.11856) + sorbet-runtime (0.5.11954) stringex (2.8.6) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) tilt (2.6.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - tzinfo-data (1.2025.1) + tzinfo-data (1.2025.2) tzinfo (>= 1.0.0) unicode-display_width (2.6.0) webrick (1.9.1) @@ -181,12 +181,12 @@ DEPENDENCIES jekyll-paginate (= 1.1.0) jekyll-sitemap (= 1.4.0) jekyll-toc (= 0.19.0) - nokogiri (= 1.18.3) + nokogiri (= 1.18.6) rackup (= 2.2.1) rake (= 13.2.1) - rubocop (= 1.72.2) - ruby-lsp (= 0.23.11) - sass-embedded (= 1.85.1) + rubocop (= 1.74.0) + ruby-lsp (= 0.23.12) + sass-embedded (= 1.86.0) sass-globbing (= 1.1.5) sassc (= 2.1.0) sinatra (= 4.1.1) @@ -198,4 +198,4 @@ RUBY VERSION ruby 2.6.2p47 BUNDLED WITH - 2.5.3 + 2.5.3 \ No newline at end of file diff --git a/_config.yml b/_config.yml index 2d5cf608759..a41aa1244f4 100644 --- a/_config.yml +++ b/_config.yml @@ -107,9 +107,9 @@ social: # Home Assistant release details current_major_version: 2025 -current_minor_version: 2 -current_patch_version: 5 -date_released: 2025-02-21 +current_minor_version: 3 +current_patch_version: 4 +date_released: 2025-03-21 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/package-lock.json b/package-lock.json index 7072f0fb0d0..412647a80e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "remark-lint-prohibited-strings": "^4.0.0", "remark-lint-unordered-list-marker-style": "^4.0.1", "remark-stringify": "^11.0.0", - "textlint": "^14.4.2", + "textlint": "^14.5.0", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^5.0.13" @@ -39,13 +39,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.2.tgz", "integrity": "sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@azu/style-format": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.1.tgz", "integrity": "sha512-AHcTojlNBdD/3/KxIKlg8sxIWHfOtQszLvOpagLTO+bjC3u7SAszu1lf//u7JJC50aUSH+BVWDD/KvaA6Gfn5g==", "dev": true, + "license": "WTFPL", "dependencies": { "@azu/format-text": "^1.0.1" } @@ -425,66 +427,73 @@ "dev": true }, "node_modules/@textlint/ast-tester": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.4.2.tgz", - "integrity": "sha512-w1MlGa9DsJgp2W+ifNZ57vIWDoRVRExy0rXek7/voxBmSpTo76zHq74ggwjOrmoZpX8ADkvDc0tUWWWyiUVskQ==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.5.0.tgz", + "integrity": "sha512-biwtMuv+B1A5tqDLYSwMSjEr24l4zji69Ttg9ZxAEkr5sGre2W5ojEZRA79edDxcAASDF35XgHkWR+tvMsVAdg==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.4.2", + "@textlint/ast-node-types": "^14.5.0", "debug": "^4.4.0" } }, "node_modules/@textlint/ast-tester/node_modules/@textlint/ast-node-types": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.2.tgz", - "integrity": "sha512-e8/drNznaZHS/qGDC83k6Ht1wDWNHzGQ0RHcXD+72YMFercEFvp6WVfW5XbCbxGbSITEO5NBCOCTyeccS9lxEA==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", + "integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/ast-traverse": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.4.2.tgz", - "integrity": "sha512-HQp1iatBiLn9Qg8wqN3WxYWoiHJnkcv+30MdVPe5d0CmnBBXXRqFO1eSUHUlYarGNc3LyE0GFEkS72D7lefyNg==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.5.0.tgz", + "integrity": "sha512-K83si1a2s1LdIVPmzrtuI+SdKjNp2A5jmOcoyXAVNLv3qlJc4DTCyKO7Qn/xTq00zQrhLrZXJSaooBSXi4HXvQ==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.4.2" + "@textlint/ast-node-types": "^14.5.0" } }, "node_modules/@textlint/ast-traverse/node_modules/@textlint/ast-node-types": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.2.tgz", - "integrity": "sha512-e8/drNznaZHS/qGDC83k6Ht1wDWNHzGQ0RHcXD+72YMFercEFvp6WVfW5XbCbxGbSITEO5NBCOCTyeccS9lxEA==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", + "integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/config-loader": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.4.2.tgz", - "integrity": "sha512-qaR38dkGURC5XED5wR8OnJtPrK9Or76Do1P11rvRGgVu0Tn3n6UYQclbh8em8xnWWMuvJUzbTUSg2XE1h1uu3A==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.5.0.tgz", + "integrity": "sha512-kTFF+Sx3lxH1GSBbk2mEslu0VzyHj9DNy1wiwnPuHrQRVv6fsFZXr35mfLWnfBT40s6aEOrtPh1323jfLduHBg==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/kernel": "^14.4.2", - "@textlint/module-interop": "^14.4.2", - "@textlint/resolver": "^14.4.2", - "@textlint/types": "^14.4.2", - "@textlint/utils": "^14.4.2", + "@textlint/kernel": "^14.5.0", + "@textlint/module-interop": "^14.5.0", + "@textlint/resolver": "^14.5.0", + "@textlint/types": "^14.5.0", + "@textlint/utils": "^14.5.0", "debug": "^4.4.0", "rc-config-loader": "^4.1.3" } }, "node_modules/@textlint/feature-flag": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.4.2.tgz", - "integrity": "sha512-jeK7FuaYVr+gqgvjZazYHLCA+0oJybXa26kgF7P0qJ4yWq9qoENnjZtHF1VCi40euIS60z+/VJ8SlQj3LfnaoQ==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.5.0.tgz", + "integrity": "sha512-fM0W1JRbEkO4IuJhDLDAam50usW+z7B1wA8Y6PciJeojzpTXUiV29MtUISTCfSVkjrDo54aIRgTPn8HogkUGPQ==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/fixer-formatter": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.4.2.tgz", - "integrity": "sha512-zmpM3FXEFAQy6F35nGnsFUV7jIfcrJNBHuu/Vh5TgfvCw9n2h7+KwEzx34bEce4vBhmKTqebHKSzM+2PlZG3NA==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.5.0.tgz", + "integrity": "sha512-vdnrm4tAcJ/KtSiN6szt0MZSWFW8/WKl8kr1owgpQ0NKuxbP1b9dFc+k/V/mq+RnFcuwnbb/r2+7z8oH7HYHEQ==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/module-interop": "^14.4.2", - "@textlint/resolver": "^14.4.2", - "@textlint/types": "^14.4.2", + "@textlint/module-interop": "^14.5.0", + "@textlint/resolver": "^14.5.0", + "@textlint/types": "^14.5.0", "chalk": "^4.1.2", "debug": "^4.4.0", "diff": "^5.2.0", @@ -494,40 +503,43 @@ } }, "node_modules/@textlint/kernel": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.4.2.tgz", - "integrity": "sha512-nwUpdOl/whw8Cq9ELYRatmxEUEGApzKRAFJQpdIB/Ex0gKG1S/ctzSYbqSBUZ/Xctnn93yBDgOngDFdgoHbfWg==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.5.0.tgz", + "integrity": "sha512-hgq0b7eUJxEwCf1jNx/DCZeU2SJXXRH+qycvyrGVEOWgLYmtizlCm6GQ+ejDgUdcoNpQhzCkiwV2HF0z9UbmMw==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.4.2", - "@textlint/ast-tester": "^14.4.2", - "@textlint/ast-traverse": "^14.4.2", - "@textlint/feature-flag": "^14.4.2", - "@textlint/source-code-fixer": "^14.4.2", - "@textlint/types": "^14.4.2", - "@textlint/utils": "^14.4.2", + "@textlint/ast-node-types": "^14.5.0", + "@textlint/ast-tester": "^14.5.0", + "@textlint/ast-traverse": "^14.5.0", + "@textlint/feature-flag": "^14.5.0", + "@textlint/source-code-fixer": "^14.5.0", + "@textlint/types": "^14.5.0", + "@textlint/utils": "^14.5.0", "debug": "^4.4.0", "fast-equals": "^4.0.3", "structured-source": "^4.0.0" } }, "node_modules/@textlint/kernel/node_modules/@textlint/ast-node-types": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.2.tgz", - "integrity": "sha512-e8/drNznaZHS/qGDC83k6Ht1wDWNHzGQ0RHcXD+72YMFercEFvp6WVfW5XbCbxGbSITEO5NBCOCTyeccS9lxEA==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", + "integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/linter-formatter": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.4.2.tgz", - "integrity": "sha512-gBd+DDFzymFCjv5vcoH23IbQujjib//lH5lvHz61ImtXzVI6SBBL0jnRjER52IFYRE0tll7VlMURvxWiAVlOzw==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.5.0.tgz", + "integrity": "sha512-5QQsdnsuUBscCq1IX10ynYtsfLmctdoc4GZtJA7L//QFYAAgTrBzpXjfhyWZs7C5VJho9FzfljyuuA7jbhRrFw==", "dev": true, + "license": "MIT", "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "^14.4.2", - "@textlint/resolver": "^14.4.2", - "@textlint/types": "^14.4.2", + "@textlint/module-interop": "^14.5.0", + "@textlint/resolver": "^14.5.0", + "@textlint/types": "^14.5.0", "chalk": "^4.1.2", "debug": "^4.4.0", "js-yaml": "^3.14.1", @@ -540,12 +552,13 @@ } }, "node_modules/@textlint/markdown-to-ast": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.4.2.tgz", - "integrity": "sha512-hj2xR9hz5/Tu7Hlrn6VORJgdAfUhAd5j6cBkEVpnKAU4LaERkNyVCgK/da2JHK2w84YHmaDjER4D6zUUkllwag==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.5.0.tgz", + "integrity": "sha512-qftHkBnyWEy2PmAhmhrmTemCKMJCpPKtFZt0woaa0yZkMwXo/RN66elnjAEJZenkRntQgphlKJJZ0I/NA2hH4g==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.4.2", + "@textlint/ast-node-types": "^14.5.0", "debug": "^4.4.0", "mdast-util-gfm-autolink-literal": "^0.1.3", "neotraverse": "^0.6.15", @@ -557,16 +570,18 @@ } }, "node_modules/@textlint/markdown-to-ast/node_modules/@textlint/ast-node-types": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.2.tgz", - "integrity": "sha512-e8/drNznaZHS/qGDC83k6Ht1wDWNHzGQ0RHcXD+72YMFercEFvp6WVfW5XbCbxGbSITEO5NBCOCTyeccS9lxEA==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", + "integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/markdown-to-ast/node_modules/bail": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -577,6 +592,7 @@ "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", "dev": true, + "license": "MIT", "dependencies": { "format": "^0.2.0" }, @@ -604,6 +620,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "engines": { "node": ">=4" } @@ -613,6 +630,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -622,6 +640,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^2.0.0", @@ -639,6 +658,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz", "integrity": "sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==", "dev": true, + "license": "MIT", "dependencies": { "micromark-extension-frontmatter": "^0.2.0" }, @@ -652,6 +672,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -672,6 +693,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -682,6 +704,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", "dev": true, + "license": "MIT", "dependencies": { "fault": "^1.0.0" }, @@ -695,6 +718,7 @@ "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz", "integrity": "sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==", "dev": true, + "license": "MIT", "dependencies": { "mdast-util-frontmatter": "^0.2.0", "micromark-extension-frontmatter": "^0.2.0" @@ -709,6 +733,7 @@ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", "dev": true, + "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^0.8.0" }, @@ -722,6 +747,7 @@ "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -732,6 +758,7 @@ "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "dev": true, + "license": "MIT", "dependencies": { "bail": "^1.0.0", "extend": "^3.0.0", @@ -750,6 +777,7 @@ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.2" }, @@ -763,6 +791,7 @@ "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", @@ -779,6 +808,7 @@ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" @@ -789,80 +819,90 @@ } }, "node_modules/@textlint/module-interop": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.4.2.tgz", - "integrity": "sha512-PQqUgLcTnCTJ8qpYxLP6p98VzTP/Ju8QIDwTWYRpH00KHdmH9cR1/9O+l6YaWsJSGDtSL2zkMKIQLezpvBZ4cw==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.5.0.tgz", + "integrity": "sha512-nlFwHSYZJgSwXyF9PuHV3DcvRnObf64Mm4QWt9LaTr5zQB2MwEluaL8ROYL+sLJ4JhqNKpuqBT1EkTixPsN3cQ==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/resolver": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-14.4.2.tgz", - "integrity": "sha512-P/tdGDpNvxyNGHtHGZJmvwina5bfE92OqiKk1rRJk/B6oIiDolJSPwtVBEJyAeG6N5vtsjqfVnVHnsWnS9/tgw==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-14.5.0.tgz", + "integrity": "sha512-yvC8gQHKsl/rR3x+884tA9BzVn6naILmHRmOP3FEQogr+ixOW4rL9OgdS6IoMjG8cVh8o4kI40xJfh1l6oX6vQ==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/source-code-fixer": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.4.2.tgz", - "integrity": "sha512-8AFoRL0uQPiu7hlszM1jlido+PdL3/3Ddp8sz1XxOpFgnjuTKnlRLYjziaL8X4JCpXQjUy4Q9am8NI6M1Y18lw==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.5.0.tgz", + "integrity": "sha512-zcokW+MBTppOzGumeB1SZvjDitCnO2sAZrWpmw849L6P11RdxS/iQXakg4jkRTTlWYR1AtzyAa9j0lLCdxsfuQ==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/types": "^14.4.2", + "@textlint/types": "^14.5.0", "debug": "^4.4.0" } }, "node_modules/@textlint/text-to-ast": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.4.2.tgz", - "integrity": "sha512-fLyNHMczXZOP/jkKqBbjntszJR0ytsdQOPg9E8fnnbcX6eBMw3q924+M/vkYno/9ArSnUMPbdfhKBc/lWTXvcQ==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.5.0.tgz", + "integrity": "sha512-e6SrPeCScmxxfTDpXo+nBh4tt6sbqySX/fE65sYVYupLwpJsCtxTEnYft2jEqifvgaM4JjgzETSQMG799HBTPw==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.4.2" + "@textlint/ast-node-types": "^14.5.0" } }, "node_modules/@textlint/text-to-ast/node_modules/@textlint/ast-node-types": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.2.tgz", - "integrity": "sha512-e8/drNznaZHS/qGDC83k6Ht1wDWNHzGQ0RHcXD+72YMFercEFvp6WVfW5XbCbxGbSITEO5NBCOCTyeccS9lxEA==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", + "integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/textlint-plugin-markdown": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.4.2.tgz", - "integrity": "sha512-qtUta0iHEn843Hzhq7VnYPRp5rsYLnaZC5fOGOMh8DIpUlnuNXI1ANs9TkL5LsgexyYyMuPtFbvwr7S4JNu6ig==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.5.0.tgz", + "integrity": "sha512-riMcW6Sj/IvTnIAA4W0O5pxJxdqth+MUe2li7wg8yCq3jilS0EYIlolNXvX414v/9swsLu8Tztwugrh0E6HJDw==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/markdown-to-ast": "^14.4.2" + "@textlint/markdown-to-ast": "^14.5.0" } }, "node_modules/@textlint/textlint-plugin-text": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.4.2.tgz", - "integrity": "sha512-cg7J6qTgAsV7ms2fP2KpEBIaI+3GQAbQtjNTF4Zu5d8Kn07wNqFqZIpTnsKUC/b64Fn/ujo+HYse76nSU+5EZg==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.5.0.tgz", + "integrity": "sha512-aASQwkRnupRlY9w168SBjrsDbO1wtg2EYx8JSnt/YboUnhszQD8Zys178Zu/00ECtpxwpjQYowoYNq0BoP9aig==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/text-to-ast": "^14.4.2" + "@textlint/text-to-ast": "^14.5.0" } }, "node_modules/@textlint/types": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.4.2.tgz", - "integrity": "sha512-s2UbCeYY8TQNdSusPs0n+g57g6fwx8Vz6nDZLD7vIXMEW10zIwkQnQf9IpxDwvKnstBWYTJ24Kx9nzddpBS9oQ==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.5.0.tgz", + "integrity": "sha512-z+oJS5GHK5KiV87ZNCYAQnZTgq1MRGl9g301GOV6Zq4RjH75JVQPNa4hUlwzG2sF6jks+wLhMjxwaQaG6cKCpA==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.4.2" + "@textlint/ast-node-types": "^14.5.0" } }, "node_modules/@textlint/types/node_modules/@textlint/ast-node-types": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.2.tgz", - "integrity": "sha512-e8/drNznaZHS/qGDC83k6Ht1wDWNHzGQ0RHcXD+72YMFercEFvp6WVfW5XbCbxGbSITEO5NBCOCTyeccS9lxEA==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", + "integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/utils": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.4.2.tgz", - "integrity": "sha512-bhns1Cws+4dERz6KGFVLLGf0vFK6r5LiKKeg7N3Hnh0QNbzy7TYO+HTfZsgcqBvZSJeAeowzKyDQ8nSsflPbJw==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.5.0.tgz", + "integrity": "sha512-gAKZh1woc0IZGoVjQ8G8Og10dsBJ6UxaCFXofeHveWsZhJAdVzjw49/tJLVu/39t8GTdZQ4BAHuNxHNFgLN57w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/concat-stream": { "version": "2.0.0", @@ -917,6 +957,7 @@ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2" } @@ -971,6 +1012,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -1024,6 +1066,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -1033,6 +1076,7 @@ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1145,6 +1189,7 @@ "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1155,6 +1200,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1191,6 +1237,7 @@ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1201,6 +1248,7 @@ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1396,6 +1444,7 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -1426,6 +1475,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1438,6 +1488,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -1456,13 +1507,15 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-equals": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-4.0.3.tgz", "integrity": "sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -1471,10 +1524,21 @@ "dev": true }, "node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", - "dev": true + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, "node_modules/fault": { "version": "2.0.1", @@ -1628,6 +1692,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1703,6 +1768,7 @@ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1713,6 +1779,7 @@ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, + "license": "MIT", "dependencies": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" @@ -1763,6 +1830,7 @@ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1809,6 +1877,7 @@ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1876,6 +1945,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -1903,7 +1973,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", @@ -2011,7 +2082,8 @@ "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/longest-streak": { "version": "3.1.0", @@ -2052,6 +2124,7 @@ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", "dev": true, + "license": "MIT", "dependencies": { "repeat-string": "^1.0.0" }, @@ -2099,6 +2172,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz", "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^4.0.0", "unist-util-is": "^4.0.0", @@ -2114,6 +2188,7 @@ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -2124,6 +2199,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-footnote/-/mdast-util-footnote-0.1.7.tgz", "integrity": "sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w==", "dev": true, + "license": "MIT", "dependencies": { "mdast-util-to-markdown": "^0.6.0", "micromark": "~2.11.0" @@ -2138,6 +2214,7 @@ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2148,6 +2225,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "longest-streak": "^2.0.0", @@ -2166,6 +2244,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -2186,6 +2265,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -2196,6 +2276,7 @@ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2303,6 +2384,7 @@ "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, + "license": "MIT", "dependencies": { "mdast-util-gfm-autolink-literal": "^0.1.0", "mdast-util-gfm-strikethrough": "^0.2.0", @@ -2320,6 +2402,7 @@ "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, + "license": "MIT", "dependencies": { "ccount": "^1.0.0", "mdast-util-find-and-replace": "^1.1.0", @@ -2345,6 +2428,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -2355,6 +2439,7 @@ "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, + "license": "MIT", "dependencies": { "mdast-util-to-markdown": "^0.6.0" }, @@ -2368,6 +2453,7 @@ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2378,6 +2464,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "longest-streak": "^2.0.0", @@ -2396,6 +2483,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -2406,6 +2494,7 @@ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2416,6 +2505,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", "dev": true, + "license": "MIT", "dependencies": { "markdown-table": "^2.0.0", "mdast-util-to-markdown": "~0.6.0" @@ -2430,6 +2520,7 @@ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2440,6 +2531,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "longest-streak": "^2.0.0", @@ -2458,6 +2550,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -2468,6 +2561,7 @@ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2478,6 +2572,7 @@ "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, + "license": "MIT", "dependencies": { "mdast-util-to-markdown": "~0.6.0" }, @@ -2491,6 +2586,7 @@ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2501,6 +2597,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "longest-streak": "^2.0.0", @@ -2519,6 +2616,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -2529,6 +2627,7 @@ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2539,6 +2638,7 @@ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2549,6 +2649,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "longest-streak": "^2.0.0", @@ -2567,6 +2668,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -2577,6 +2679,7 @@ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -3031,6 +3134,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-footnote/-/micromark-extension-footnote-0.3.2.tgz", "integrity": "sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==", "dev": true, + "license": "MIT", "dependencies": { "micromark": "~2.11.0" }, @@ -3054,6 +3158,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -3080,6 +3185,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz", "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==", "dev": true, + "license": "MIT", "dependencies": { "micromark": "~2.11.0", "micromark-extension-gfm-autolink-literal": "~0.5.0", @@ -3098,6 +3204,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz", "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==", "dev": true, + "license": "MIT", "dependencies": { "micromark": "~2.11.3" }, @@ -3121,6 +3228,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -3131,6 +3239,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz", "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==", "dev": true, + "license": "MIT", "dependencies": { "micromark": "~2.11.0" }, @@ -3154,6 +3263,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -3164,6 +3274,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz", "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==", "dev": true, + "license": "MIT", "dependencies": { "micromark": "~2.11.0" }, @@ -3187,6 +3298,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -3197,6 +3309,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -3207,6 +3320,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", "dev": true, + "license": "MIT", "dependencies": { "micromark": "~2.11.0" }, @@ -3230,6 +3344,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -3250,6 +3365,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -3675,6 +3791,7 @@ "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -3785,6 +3902,7 @@ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dev": true, + "license": "MIT", "dependencies": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", @@ -3803,6 +3921,7 @@ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -3932,7 +4051,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", "integrity": "sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prelude-ls": { "version": "1.2.1", @@ -3967,6 +4087,7 @@ "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", "integrity": "sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4", "js-yaml": "^4.1.0", @@ -3978,13 +4099,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/rc-config-loader/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -4170,6 +4293,7 @@ "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-3.0.0.tgz", "integrity": "sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg==", "dev": true, + "license": "MIT", "dependencies": { "mdast-util-footnote": "^0.1.0", "micromark-extension-footnote": "^0.3.0" @@ -4276,6 +4400,7 @@ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", "dev": true, + "license": "MIT", "dependencies": { "mdast-util-gfm": "^0.1.0", "micromark-extension-gfm": "^0.3.0" @@ -5652,6 +5777,7 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -5661,6 +5787,7 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5749,6 +5876,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -5807,7 +5935,8 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/string_decoder": { "version": "1.3.0", @@ -5934,6 +6063,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5958,6 +6088,7 @@ "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -5976,24 +6107,25 @@ "dev": true }, "node_modules/textlint": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.4.2.tgz", - "integrity": "sha512-4bHQY0ndqMBrZyLKqkca3dq8d1psBd1Nb6CznPjEZSFQV5WMAs7l8qZTgFsCwbkhSpbDSAxSTvBF/WZlHT71WA==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.5.0.tgz", + "integrity": "sha512-+C5zYpEv0HsQAuz6crm4BjuMXaHi6gKTSwqZZttHI2Jm/WGtpza2SbZxct+STdMgN1XbINcsP58gZ4juQwokcw==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.4.2", - "@textlint/ast-traverse": "^14.4.2", - "@textlint/config-loader": "^14.4.2", - "@textlint/feature-flag": "^14.4.2", - "@textlint/fixer-formatter": "^14.4.2", - "@textlint/kernel": "^14.4.2", - "@textlint/linter-formatter": "^14.4.2", - "@textlint/module-interop": "^14.4.2", - "@textlint/resolver": "^14.4.2", - "@textlint/textlint-plugin-markdown": "^14.4.2", - "@textlint/textlint-plugin-text": "^14.4.2", - "@textlint/types": "^14.4.2", - "@textlint/utils": "^14.4.2", + "@textlint/ast-node-types": "^14.5.0", + "@textlint/ast-traverse": "^14.5.0", + "@textlint/config-loader": "^14.5.0", + "@textlint/feature-flag": "^14.5.0", + "@textlint/fixer-formatter": "^14.5.0", + "@textlint/kernel": "^14.5.0", + "@textlint/linter-formatter": "^14.5.0", + "@textlint/module-interop": "^14.5.0", + "@textlint/resolver": "^14.5.0", + "@textlint/textlint-plugin-markdown": "^14.5.0", + "@textlint/textlint-plugin-text": "^14.5.0", + "@textlint/types": "^14.5.0", + "@textlint/utils": "^14.5.0", "debug": "^4.4.0", "file-entry-cache": "^10.0.5", "get-stdin": "^5.0.1", @@ -6118,10 +6250,11 @@ } }, "node_modules/textlint/node_modules/@textlint/ast-node-types": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.2.tgz", - "integrity": "sha512-e8/drNznaZHS/qGDC83k6Ht1wDWNHzGQ0RHcXD+72YMFercEFvp6WVfW5XbCbxGbSITEO5NBCOCTyeccS9lxEA==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", + "integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", + "dev": true, + "license": "MIT" }, "node_modules/textlint/node_modules/brace-expansion": { "version": "2.0.1", diff --git a/package.json b/package.json index bfdc9878acc..bc92d01c6cb 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "remark-lint-prohibited-strings": "^4.0.0", "remark-lint-unordered-list-marker-style": "^4.0.1", "remark-stringify": "^11.0.0", - "textlint": "^14.4.2", + "textlint": "^14.5.0", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^5.0.13" diff --git a/plugins/filters.rb b/plugins/filters.rb index 696f9b53199..62013ec3b42 100644 --- a/plugins/filters.rb +++ b/plugins/filters.rb @@ -124,6 +124,11 @@ module Jekyll end end end + + def case_insensitive_sort(input, key) + return input unless input.is_a?(Array) + input.sort_by { |item| item[key].to_s.downcase } + end end end diff --git a/sass/homeassistant/pages/_component_page.scss b/sass/homeassistant/pages/_component_page.scss index 610f8420522..91ee4fca71a 100644 --- a/sass/homeassistant/pages/_component_page.scss +++ b/sass/homeassistant/pages/_component_page.scss @@ -5,22 +5,156 @@ font-weight: 500; letter-spacing: .005em; color: $gray; + padding-top: 8px; text-transform: uppercase; } } + .component-search { margin-bottom: 24px; + min-height: 80px; input { width: 100%; padding: 10px; - background-color: #fefefe; border-radius: 8px; border: 1px solid; border-color: #7c7c7c #c3c3c3 #ddd; } } + + .grid-filters { + @media only screen and (min-width: $desk-start) { + display: flex; + } + } + + .integration-filter-radio { + display: flex; + border: none; + padding: 0; + grid-gap: 10px; + } + + .filter-button { + display: flex; + align-items: center; + margin-bottom: 0; + width: fit-content; + font-size: 1rem; + box-shadow: none; + background-color: $blueDark; + color: white; + border-radius: 24px; + + input { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + padding-left: 16px; + display: block; + margin-left: 10px; + flex-shrink: 0; + height: 1rem; + width: 1rem; + border-radius: 100%; + border-color: transparent; + background-color: white; + + &:checked { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22%23007fa8%22%20transform%3D%22rotate(90)%22%3E%3Ccircle%20cx%3D%228%22%20cy%3D%228%22%20r%3D%223%22%2F%3E%3C%2Fsvg%3E"); + } + } + + label { + display: block; + width: 100%; + padding: 4px 16px 4px 10px; + } + } + + .integration-filter.integration-filter-select { + position: relative; + + &::after { + content: " "; + position: absolute; + top: 50%; + margin-top: 2px; + right: 8px; + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid black; + } + + .ha_category { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + color: #222; + width: 100%; + margin-bottom: 15px; + text-align-last: center; + font-size: 16px; + line-height: 24px; + border: 2px solid $blueDark; + border-top-right-radius: 0px; + border-top-left-radius: 0px; + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; + border-top: 0; + position: relative; + top: -2px; + padding: 5px 5px 2px; + + &:focus-visible { + outline: none; + } + } + } + + .filter-title { + background: $blueDark; + color: white; + text-align: center; + border-top-right-radius: 5px; + border-top-left-radius: 5px; + padding: 5px; + margin-top: 0; + margin-bottom: -2px; + text-transform: capitalize; + font-size: 18px; + position: relative; + z-index: 1; + } + + .active-filter { + margin: 10px 5px 0px 0px; + padding: 5px 10px; + min-width: 100px; + background-color: $blueDark; + border-radius: 28px; + border: none; + color: white; + font-size: 14px; + letter-spacing: 0.5px; + text-transform: capitalize; + line-height: 18px; + + span { + display: flex; + align-items: center; + } + + iconify-icon { + display: inline-block; + margin-left: 5px; + } + } + select { font-family: $sans-serif; border: 0; @@ -44,6 +178,10 @@ width: 100%; } + div.alert { + text-align: center; + } + .option-card { flex: 0 0 auto; aspect-ratio: 1; @@ -147,7 +285,7 @@ a.option-card:hover { img { max-width: 48px; max-height: 48px; - } + } } .title { @@ -201,7 +339,7 @@ a.option-card:hover { } .category_select { display: block; - } + } .category_list { display: none; } @@ -330,4 +468,4 @@ a.option-card:hover { to { opacity: 0; } -} +} \ No newline at end of file diff --git a/source/_dashboards/energy.markdown b/source/_dashboards/energy.markdown index d0ce5b5fc86..411d6611fc2 100644 --- a/source/_dashboards/energy.markdown +++ b/source/_dashboards/energy.markdown @@ -235,6 +235,28 @@ type: energy-devices-detail-graph max_devices: 5 ``` +## Sankey energy graph + +

+ Screenshot of the sankey energy graph card + Screenshot of the sankey energy graph card. +

+ +The sankey energy graph shows the flow of energy in your home. It starts with sources and flows into the various consumers. Devices are grouped into floors and areas if these are configured. + +### Examples + +```yaml +type: energy-sankey +``` + +The following example orients the flow from top to bottom: + +```yaml +type: energy-sankey +layout: vertical +``` + ## Using Multiple Collections By default, all energy cards are linked to any `energy-date-selection` card on the view, and all `energy-date-selection` cards are linked to the same period. To enable multiple different date selections on the same view, it is necessary to link them to different collections. This is done by adding the variable `collection_key` to the card YAML, and giving this a value of any custom string that begins with `energy_`. (strings that do not start with `energy_` will generate an error). diff --git a/source/_dashboards/entity-filter.markdown b/source/_dashboards/entity-filter.markdown index cbee335116c..d63460e9326 100644 --- a/source/_dashboards/entity-filter.markdown +++ b/source/_dashboards/entity-filter.markdown @@ -145,6 +145,10 @@ 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] +entity: + required: false + description: An optional entity ID to be used for testing the state condition. If not provided, the state of the entity being displayed is tested. + type: string {% endconfiguration %} *one is required (`state` or `state_not`) @@ -178,6 +182,10 @@ below: required: false description: Entity state or ID to be below this value.* type: string +entity: + required: false + description: An optional entity ID to be used for testing the numeric state condition. If not provided, the numeric state of the entity being displayed is tested. + type: string {% endconfiguration %} *at least one is required (`above` or `below`), both are also possible for values between. diff --git a/source/_dashboards/heading.markdown b/source/_dashboards/heading.markdown index 3c325d36a6f..9a444048546 100644 --- a/source/_dashboards/heading.markdown +++ b/source/_dashboards/heading.markdown @@ -60,7 +60,7 @@ badges: ## Heading badges -In addition to the heading text, each heading card can show small badges. They are smaller than regular [badges](/dashboards/badges/) and don't have a background. The heading badges can display sensor information in a compact and minimal style. +In addition to the heading text, each heading card can show small badges. They are smaller than regular [badges](/dashboards/badges/) and don't have a background. The heading badges can display sensor information in a compact and minimal style. Heading badges also support [actions](/dashboards/actions/). ```yaml type: entity @@ -108,4 +108,12 @@ tap_action: required: false description: Action taken on card tap. See [action documentation](/dashboards/actions/#tap-action). By default, it will do nothing. type: map +hold_action: + required: false + description: Action taken on card hold. See [action documentation](/dashboards/actions/#hold-action). By default, it will do nothing. + type: map +double_tap_action: + required: false + description: Action taken on card double tap. See [action documentation](/dashboards/actions/#double-tap-action). By default, it will do nothing. + type: map {% endconfiguration %} diff --git a/source/_dashboards/iframe.markdown b/source/_dashboards/iframe.markdown index 089db8e9bb2..0bd7daf027b 100644 --- a/source/_dashboards/iframe.markdown +++ b/source/_dashboards/iframe.markdown @@ -61,6 +61,11 @@ allow: description: The [Permissions Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Permissions-Policy#iframes) of the iframe, that is, the value of the [`allow`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#allow) attribute. type: string default: "fullscreen" +disable_sandbox: + required: false + description: Disables the [sandbox](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox) attribute of the iframe, e.g. required for Chrome when viewing PDFs. This is less secure and should only be used if you trust the content of the iframe. + type: boolean + default: false {% endconfiguration %} ### Examples diff --git a/source/_dashboards/map.markdown b/source/_dashboards/map.markdown index 3588acf9540..e16e352197a 100644 --- a/source/_dashboards/map.markdown +++ b/source/_dashboards/map.markdown @@ -19,7 +19,7 @@ related: The map card allows you to display your home zone, entities, and other predefined zones on a map. This card is used on the [Map dashboard](/dashboards/dashboards/#map-dashboard), which is one of the default dashboards.

-Screenshot of the map card +Screenshot of the map card Screenshot of the map card.

@@ -130,7 +130,11 @@ name: label_mode: required: false default: name - description: When set to `icon`, renders the entity's icon in the marker instead of text. When set to `state`, renders the entity's state as the label for the map marker instead of the entity's name. This option doesn't apply to [zone](/integrations/zone/) entities because they don't use a label but an icon. + description: When set to `icon`, renders the entity's icon in the marker instead of text. When set to `state` or `attribute`, renders the entity's state or attribute as the label for the map marker instead of the entity's name. This option doesn't apply to [zone](/integrations/zone/) entities because they don't use a label but an icon. + type: string +attribute: + required: false + description: An entity's attribute when `label_mode` set to `attribute`. type: string focus: required: false @@ -151,8 +155,12 @@ source: label_mode: required: false default: name - description: When set to `icon`, renders the geolocation entity's icon in the marker instead of text. When set to `state`, renders the entity's state as the label for the map marker instead of the entity's name. - type: string + description: When set to `icon`, renders the entity's icon in the marker instead of text. When set to `state` or `attribute`, renders the entity's state or attribute as the label for the map marker instead of the entity's name. This option doesn't apply to [zone](/integrations/zone/) entities because they don't use a label but an icon. + type: string +attribute: + required: false + description: An entity's attribute when `label_mode` set to `attribute`. + type: string focus: required: false default: true diff --git a/source/_dashboards/sections.markdown b/source/_dashboards/sections.markdown index 9e8b8c621f9..cfbd52353de 100644 --- a/source/_dashboards/sections.markdown +++ b/source/_dashboards/sections.markdown @@ -39,10 +39,27 @@ You can group cards without using horizontal or vertical stack cards. 5. When you are done, select **Save**. - You are now presented with a new, empty view. - If you chose a background image, the page is filled with that image. +6. Once you have created a sections view, you can start curating it: + - [Add sections and cards](#adding-sections-and-cards-to-a-sections-view). + - [Rearrange](#rearranging-sections-and-cards) and [show or hide sections conditionally](#show-or-hide-section-conditionally). + - [Add a dashboard header with a title and badges](#editing-the-header). + +## Editing the header + +

+ Editing the header + Editing the header +

+ +1. To add a title, select the **Add title** button. The title supports [Markdown](https://commonmark.org/help/) and [templating](/docs/configuration/templating/). +2. To add badges, elect the **Add badge** button. Follow [steps on adding badges](/dashboards/badges) to see the different possible options. +3. To change the title and badges disposition, select the edit {% icon "mdi:edit" %} button to access header settings. + +![Edit view heading section button](/images/dashboards/sections_view_header_editor.png) ## Adding sections and cards to a sections view -Once you have created a sections view, you can populate it with sections and cards. The new section comes with one section to which you can directly add a card. +The view comes with one section to which you can directly add a card. 1. To add a card, select the **Add card** button. - Follow the [steps on adding cards](/dashboards/cards/#adding-cards-to-your-dashboard). @@ -109,3 +126,22 @@ type: description: "`sections`" type: string {% endconfiguration %} + +## Header YAML configuration + +{% configuration %} +layout: + required: false + description: Layout of the different elements. Can be `start`, `center`, or `responsive`. `responsive` is the same as `start` on mobile devices. It places badges and title side by side on desktop. + type: string + default: center +badges_position: + required: false + description: Badges position. Can be `bottom` or `top`. + type: string + default: bottom +card: + required: true + description: Card to be used as title. If you are configuring the view using the visual editor, the configuration of the [Markdown card](/dashboards/markdown) is used. + type: map +{% endconfiguration %} diff --git a/source/_dashboards/tile.markdown b/source/_dashboards/tile.markdown index 0ccdb9c8f85..f64909d7e11 100644 --- a/source/_dashboards/tile.markdown +++ b/source/_dashboards/tile.markdown @@ -12,11 +12,12 @@ related: 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 %}. +The tile card gives you a quick overview of your {% term entity %}. The card allows you to add tap actions, and features to control the entity. You can also select the {% term entity %} to open the more info dialog. A badge is shown for some {% term entities %} like the [climate](/integrations/climate) or [person](/integrations/person) {% term entities %}.

- Screenshot of tile cards - Screenshot of tile cards. + Screenshot of tile cards + The circular background behind an icon indicates that there is a tap action. + The "Downstairs" and "Upstairs" climate entities have a badge and a feature that is bottom-aligned.

{% include dashboard/edit_dashboard.md %} @@ -151,15 +152,4 @@ 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`. -## Reordering features -Some features of the tile card, such as the presets or the HVAC modes of a -thermostat, can show many buttons. While you can limit the buttons you’d -like to see, they may not be in the desired order. - -For your thermostat, that means you can reorder the HVAC modes or presets. - -

-  Screen recording showing how you can now reorder the HVAC modes on the thermostat shown in a tile card. - You can now reorder the features of the tile card. -

diff --git a/source/_data/glossary.yml b/source/_data/glossary.yml index f0a4b417633..9a294ae2935 100644 --- a/source/_data/glossary.yml +++ b/source/_data/glossary.yml @@ -532,7 +532,6 @@ 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. - link: /docs/scripts/perform-actions/ aliases: - services - term: State diff --git a/source/_data/people.yml b/source/_data/people.yml index 120f86f5ecb..16043925a3d 100644 --- a/source/_data/people.yml +++ b/source/_data/people.yml @@ -92,4 +92,8 @@ Missy Quarry: Annika Schulz: name: Annika Schulz - github: anakinsbrna \ No newline at end of file + github: anakinsbrna + +Miranda Bishop: + name: Miranda Bishop + github: miranda-gb \ No newline at end of file diff --git a/source/_data/products.yml b/source/_data/products.yml index 4eafcce2285..8ba4a091548 100644 --- a/source/_data/products.yml +++ b/source/_data/products.yml @@ -17,6 +17,11 @@ green: ship_to: America url: https://cloudfree.shop/product/home-assistant-green/ logo: /images/distributors/cloudfree.webp + - name: Seeed Studio + ship_from: US + ship_to: America + url: https://www.seeedstudio.com/Home-Assistant-Green-p-5792.html + logo: /images/distributors/seeed-studio.webp # Asia - name: Seeed Studio ship_from: China @@ -217,6 +222,11 @@ yellow: ship_to: Europe url: https://thepihut.com/products/home-assistant-yellow logo: /images/distributors/pi-hut.webp + - name: Domadoo + ship_from: France + ship_to: Europe + url: https://www.domadoo.fr/en/smart-home-hub/7113-nabu-casa-home-assistant-yellow-kit-with-power-supply.html + logo: /images/distributors/domadoo.jpg zbt-1: name: "Home Assistant Connect ZBT-1" distributors: @@ -411,7 +421,7 @@ voice-pe: ship_to: Europe url: https://www.domadoo.fr/fr/box-domotique/7558-nabu-casa-home-assistant-voice-preview-edition-0860011789727.html logo: /images/distributors/domadoo.jpg - - name: Mediarath + - name: mediarath ship_from: Germany ship_to: Europe url: https://mediarath.de/products/home-assistant-voice-preview-edition-open-source-privacy-focused-voice-assistant-with-esphome diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index 4b0267e80db..a51b2870e3a 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -797,6 +797,8 @@ automation: It's also possible to use [limited templates](/docs/configuration/templating/#limited-templates) for times. +{% raw %} + ```yaml blueprint: input: @@ -821,6 +823,8 @@ blueprint: - "{{ my_hour }}:30:00" ``` +{% endraw %} + ## Time pattern trigger With the time pattern trigger, you can match if the hour, minute or second of the current time matches a specific value. You can prefix the value with a `/` to match whenever the value is divisible by that number. You can specify `*` to match any value (when using the web interface this is required, the fields cannot be left empty). diff --git a/source/_docs/blueprint.markdown b/source/_docs/blueprint.markdown index 177da2b68f2..436b4eae550 100644 --- a/source/_docs/blueprint.markdown +++ b/source/_docs/blueprint.markdown @@ -18,7 +18,7 @@ This section gives a high-level introduction to blueprints. To view a descriptio ## What is a blueprint? -A blueprint is a {% term script %}, {% term automation %} or [template entity](/docs/integrations/template/) configuration with certain parts marked as configurable. This allows you to create different scripts, automations or template entities based on the same blueprint. +A blueprint is a {% term script %}, {% term automation %} or [template entity](/integrations/template/) configuration with certain parts marked as configurable. This allows you to create different scripts, automations or template entities based on the same blueprint. Imagine you want to control lights based on motion. A blueprint provides the generic {% term automation %} framework, while letting you select one specific motion sensor as a {% term trigger %}, and the exact light to control. This blueprint makes it possible to create two automations. Each automation has their own configuration and act completely independently. Yet, they share some basic automation configuration so that you do not have to set this up every time. diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown index ea5d7f82503..822ded95bb0 100644 --- a/source/_docs/blueprint/selectors.markdown +++ b/source/_docs/blueprint/selectors.markdown @@ -150,6 +150,12 @@ device: the set model. type: string required: false + model_id: + description: > + When set, the list of areas is limited to areas with devices that have + the set model ID. + type: string + required: false entity: description: > When entity options are provided, the list of areas is filtered by areas @@ -485,7 +491,7 @@ devices based on the selector configuration. The value of the input will contain the device ID or a list of device IDs, based on if `multiple` is set to `true`. A device selector can filter the list of devices, based on things like the -manufacturer or model of the device, the entities the device provides or based +manufacturer, model, or model ID of the device, the entities the device provides or based on the domain that provided the device. ![Screenshot of a device selector](/images/blueprints/selector-device.png) @@ -561,6 +567,11 @@ filter: When set, it limits the list of devices to devices that have the set model. type: string required: false + model_id: + description: > + When set, the list of devices is limited to devices that have the set model ID. + type: string + required: false multiple: description: > Allows selecting multiple devices. If set to `true`, the resulting value of @@ -792,6 +803,12 @@ device: the set model. type: string required: false + model_id: + description: > + When set, the list only includes floors with devices that have + the set model ID. + type: string + required: false entity: description: > When entity options are provided, the list only includes floors @@ -1342,6 +1359,10 @@ device: description: When set, it limits the targets to devices by the set model. type: string required: false + model_id: + description: When set, the targets are limited to devices that have the set model ID. + type: string + required: false entity: description: > When entity options are provided, the targets are limited by entities diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 0ee7d7c73f1..42f9b68c86d 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -473,6 +473,7 @@ The same thing can also be expressed as a test: - `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. +- `floor_entities(floor_name_or_id)` returns the list of entity IDs tied to a given floor ID or name. Can also be used as a filter. #### Floors examples @@ -1173,6 +1174,31 @@ Some examples: +### Hashing + +The template engine contains a few filters and functions to hash a string of +data. A few very common hashing algorithms are supported: `md5`, `sha1`, +`sha256`, and `sha512`. + +Some examples: + +{% raw %} + +- `{{ md5("Home Assistant") }}` - renders as `f3f2b8b3b40084aa87e92b7ffb02ed13885fea2d07` +- `{{ "Home Assistant" | md5 }}` - renders as `f3f2b8b3b40084aa87e92b7ffb02ed13885fea2d07` + +- `{{ sha1("Home Assistant") }}` - renders as `14bffd017c73917bfda2372aaf287570597b8e82` +- `{{ "Home Assistant" | sha1 }}` - renders as `14bffd017c73917bfda2372aaf287570597b8e82` + +- `{{ sha256("Home Assistant") }}` - renders as `a18f473c9d3ed968a598f996dcf0b9de84de4ee04c950d041b61297a25bcea49` +- `{{ "Home Assistant" | sha256 }}` - renders as `a18f473c9d3ed968a598f996dcf0b9de84de4ee04c950d041b61297a25bcea49` + +- `{{ sha512("Home Assistant") }}` - renders as `f251e06eb7d3439e1a86d6497d6a4531c3e8c809f538be62f89babf147d7d63aca4e77ae475b94c654fd38d8f543f778ce80007d6afef379d8a0e5d3ddf7349d` +- `{{ "Home Assistant" | sha512 }}` - renders as `f251e06eb7d3439e1a86d6497d6a4531c3e8c809f538be62f89babf147d7d63aca4e77ae475b94c654fd38d8f543f778ce80007d6afef379d8a0e5d3ddf7349d` + +{% endraw %} + + ### Regular expressions For more information on regular expressions @@ -1184,6 +1210,72 @@ See: [Python regular expression operations](https://docs.python.org/3/library/re - Filter `value | regex_findall(find='', ignorecase=False)` will find all regex matches of the find expression in `value` and return the array of matches. - Filter `value | regex_findall_index(find='', index=0, ignorecase=False)` will do the same as `regex_findall` and return the match at index. +### Shuffling + +The template engine contains a filter and function to shuffle a list. + +Shuffling can happen randomly or reproducibly using a seed. When using a seed +it will always return the same shuffled list for the same seed. + +Some examples: + +{% raw %} + +- `{{ [1, 2, 3] | shuffle }}` - renders as `[3, 1, 2]` (_random_) +- `{{ shuffle([1, 2, 3]) }}` - renders as `[3, 1, 2]` (_random_) +- `{{ shuffle(1, 2, 3) }}` - renders as `[3, 1, 2]` (_random_) + +- `{{ [1, 2, 3] | shuffle("random seed") }}` - renders as `[2, 3, 1] (_reproducible_) +- `{{ shuffle([1, 2, 3], seed="random seed") }}` - renders as `[2, 3, 1] (_reproducible_) +- `{{ shuffle([1, 2, 3], "random seed") }}`- renders as `[2, 3, 1] (_reproducible_) +- `{{ shuffle(1, 2, 3, seed="random seed") }}` - renders as `[2, 3, 1] (_reproducible_) + +{% endraw %} + +### Flatten a list of lists + +The template engine provides a filter to flatten a list of lists: `flatten`. + +It will take a list of lists and return a single list with all the elements. +The depth of the flattening can be controlled using the `levels` parameter. +The flattening process is recursive, so it will flatten all nested lists, until +the number of levels (if specified) is reached. + +Some examples: + +{% raw %} + +- `{{ flatten([1, [2, [3]], 4, [5 , 6]]) }}` - renders as `[1, 2, 3, 4, 5, 6]` +- `{{ [1, [2, [3]], 4, [5 , 6]] | flatten }}` - renders as `[1, 2, 3, 4, 5, 6]` + +- `{{ flatten([1, [2, [3]]], levels=1) }}` - renders as `[1, 2, [3]]` +- `{{ [1, [2, [3]]], flatten(levels=1) }}` - renders as `[1, 2, [3]]` + +- `{{ flatten([1, [2, [3]]], 1) }}` - renders as `[1, 2, [3]]` +- `{{ [1, [2, [3]]], flatten(1) }}` - renders as `[1, 2, [3]]` + +{% endraw %} + +### Combining dictionaries + +The template engine provides a function and filter to merge multiple dictionaries: `combine`. + +It will take multiple dictionaries and merge them into a single dictionary. When used as a filter, +the filter value is used as the first dictionary. The optional `recursive` parameter determines +whether nested dictionaries should be merged (defaults to `False`). + +Some examples: + +{% raw %} + +- `{{ {'a': 1, 'b': 2} | combine({'b': 3, 'c': 4}) }}` - renders as `{'a': 1, 'b': 3, 'c': 4}` +- `{{ combine({'a': 1, 'b': 2}, {'b': 3, 'c': 4}) }}` - renders as `{'a': 1, 'b': 3, 'c': 4}` + +- `{{ combine({'a': 1, 'b': {'x': 1}}, {'b': {'y': 2}, 'c': 4}, recursive=True) }}` - renders as `{'a': 1, 'b': {'x': 1, 'y': 2}, 'c': 4}` +- `{{ combine({'a': 1, 'b': {'x': 1}}, {'b': {'y': 2}, 'c': 4}) }}` - renders as `{'a': 1, 'b': {'y': 2}, 'c': 4}` + +{% endraw %} + ## Merge action responses Using action responses we can collect information from various entities at the same time. @@ -1514,6 +1606,44 @@ When a command template renders to a valid `bytes` literal, then MQTT will publi - Template {% raw %}`{{ 16 }}`{% endraw %} renders to payload encoded string `"16"`. - Template {% raw %}`{{ pack(0x10, ">B") }}`{% endraw %} renders to a raw 1 byte payload `0x10`. +### Determining types + +When working with templates, it can be useful to determine the type of +the returned value from a method or the type of a variable at times. + +For this, Home Assistant provides the `typeof()` template function and filter, +which is inspired by the [JavaScript](https://en.wikipedia.org/wiki/JavaScript) +`typeof` operator. It reveals the type of the given value. + +This is mostly useful when you are debugging or playing with templates in +the developer tools of Home Assistant. However, it might be useful in some +other cases as well. + +Some examples: + +{% raw %} + +- `{{ typeof(42) }}` - renders as `int` +- `{{ typeof(42.0) }}` - renders as `float` +- `{{ typeof("42") }}` - renders as `str` +- `{{ typeof([1, 2, 3]) }}` - renders as `list` +- `{{ typeof({"key": "value"}) }}` - renders as `dict` +- `{{ typeof(True) }}` - renders as `bool` +- `{{ typeof(None) }}` - renders as `NoneType` + +- `{{ 42 | typeof }}` - renders as `int` +- `{{ 42.0 | typeof }}` - renders as `float` +- `{{ "42" | typeof }}` - renders as `str` +- `{{ [1, 2, 3] | typeof }}` - renders as `list` +- `{{ {"key": "value"} | typeof }}` - renders as `dict` +- `{{ True | typeof }}` - renders as `bool` +- `{{ None | typeof }}` - renders as `NoneType` + +- `{{ some_variable | typeof }}` - renders the type of `some_variable` +- `{{ states("sensor.living_room") | typeof }}` - renders the type of the result of `states()` function + +{% endraw %} + ## Some more things to keep in mind ### `entity_id` that begins with a number diff --git a/source/_docs/energy/water.markdown b/source/_docs/energy/water.markdown index 1db39015429..e26f36e6519 100644 --- a/source/_docs/energy/water.markdown +++ b/source/_docs/energy/water.markdown @@ -35,7 +35,7 @@ There are also products for water usage monitoring that are based on existing co - [Z-Wave](/integrations/zwave_js) - [Zigbee](/integrations/zha) -- [Matter (BETA)](/integrations/matter) +- [Matter](/integrations/matter) ## Community-made sensors diff --git a/source/_docs/glossary.html b/source/_docs/glossary.html deleted file mode 100644 index 112024e72b0..00000000000 --- a/source/_docs/glossary.html +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "Glossary" -description: "Home Assistant's Glossary." ---- - -{% assign entries = site.data.glossary | sort: 'term' %} - -The glossary covers terms which are used around Home Assistant. - -
- -{% for entry in entries %} - -
-
- - {{ entry.term }} -
-
- - {{ entry.definition | markdownify | newline_to_br }} - {%- if entry.link -%} - Read more about: {{ entry.term }} - {%- endif -%} - -
-
- -{% endfor %} - -
diff --git a/source/_docs/glossary.markdown b/source/_docs/glossary.markdown new file mode 100644 index 00000000000..cdd270c7081 --- /dev/null +++ b/source/_docs/glossary.markdown @@ -0,0 +1,33 @@ +--- +title: "Glossary" +description: "Home Assistant's Glossary." +--- + +The glossary covers terms which are used around Home Assistant. + +{% assign entries = site.data.glossary | sort: 'term' %} +{% assign current_letter = '' %} + +{% for entry in entries %} + +{% assign first_letter = entry.term | slice: 0 %} +{% if first_letter != current_letter %} +{% assign current_letter = first_letter | upcase %} + +## {{ current_letter }} + +--- + +{% endif %} + +### {{ entry.term }} + +{{ entry.definition | markdownify }} + +{%- if entry.link -%} + +{{ "[Read more about " | append: "_" | append: entry.term | append: "_](" | append: entry.link | append: ")" | markdownify }} + +{%- endif -%} + +{% endfor %} diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 7025cf68675..43727ded7df 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -62,7 +62,7 @@ The variables {% term action %} allows you to set/override variables that will b ```yaml - alias: "Set variables" variables: - entities: + entities: - light.kitchen - light.living_room brightness: 100 @@ -94,9 +94,7 @@ Variables can be templated. ### Scope of variables -Variables have local scope. This means that if a variable is changed in a nested sequence block, that change will not be visible in an outer sequence block. - -Inside the `if` sequence the `variables` {% term action %} will only alter the `people` variable for that sequence. +The `variables` {% term action %} assigns the values to previously defined variables with the same name. If a variable was not previously defined, it is assigned in the top-level (script run) scope. {% raw %} @@ -111,17 +109,17 @@ sequence: entity_id: device_tracker.paulus state: "home" then: - # At this scope and this point of the sequence, people == 0 - variables: people: "{{ people + 1 }}" - # At this scope, people will now be 1 ... + paulus_home: true - action: notify.notify data: message: "There are {{ people }} people home" # "There are 1 people home" - # ... but at this scope it will still be 0 + # Variable value is now updated - action: notify.notify data: - message: "There are {{ people }} people home" # "There are 0 people home" + message: "There are {{ people }} people home {% if paulus_home is defined %}(including Paulus){% endif %}" + # "There are 1 people home (including Paulus)" ``` {% endraw %} @@ -213,8 +211,8 @@ This {% term action %} evaluates the template, and if true, the script will cont The template is re-evaluated whenever an entity ID that it references changes state. If you use non-deterministic functions like `now()` in the template it will not be continuously re-evaluated, but only when an entity ID that is referenced is changed. If you need to periodically re-evaluate the template, reference a sensor from the [Time and Date](/integrations/time_date/) integration that will update minutely or daily. {% raw %} -```yaml +```yaml # Wait until media player is stopped - alias: "Wait until media player is stopped" wait_template: "{{ is_state('media_player.floor', 'stop') }}" @@ -258,8 +256,8 @@ With both types of waits it is possible to set a timeout after which the script You can also get the script to abort after the timeout by using optional `continue_on_timeout: false`. {% raw %} -```yaml +```yaml # Wait for IFTTT event or abort after specified timeout. - wait_for_trigger: - trigger: event @@ -322,6 +320,7 @@ This can be used to take different actions based on whether or not the condition target: entity_id: switch.some_light ``` + {% endraw %} ## Fire an event @@ -453,7 +452,7 @@ repeat: {% endraw %} Other types are accepted as list items, for example, each item can be a -template, or even an mapping of key/value pairs. +template, or even an mapping of key/value pairs. {% raw %} @@ -509,7 +508,7 @@ For example: - repeat: while: "{{ is_state('sensor.mode', 'Home') and repeat.index < 10 }}" sequence: - - ... + - ... ``` {% endraw %} @@ -559,8 +558,9 @@ For example: - repeat: until: "{{ is_state('device_tracker.iphone', 'home') }}" sequence: - - ... + - ... ``` + {% endraw %} ### Repeat loop variable @@ -691,7 +691,6 @@ automation: {% endraw %} - More `choose` can be used together. This is the case of an IF-IF. The following example shows how a single {% term automation %} can control entities that aren't related to each other but have in common the same trigger. @@ -856,8 +855,8 @@ Some of the caveats of running {% term actions %} in parallel: there is no guarantee that they will be completed in the same order. - If one {% term action %} fails or errors, the other {% term actions %} will keep running until they too have finished or errored. -- Variables created/modified in one parallelized {% term action %} are not available - in another parallelized {% term action %}. Each step in a parallelized has its own scope. +- Variables created/modified in one parallelized {% term action %} can conflict with variables + from another parallelized {% term action %}. Make sure to give them distinct names to prevent that. ## Stopping a script sequence @@ -961,7 +960,7 @@ blueprint: input: input_boolean: name: Boolean - selector: + selector: boolean: actions: diff --git a/source/_docs/tools/dev-tools.markdown b/source/_docs/tools/dev-tools.markdown index c83eb0534ab..bc2000d9149 100644 --- a/source/_docs/tools/dev-tools.markdown +++ b/source/_docs/tools/dev-tools.markdown @@ -149,7 +149,7 @@ Another use of the {% my developer_statistics title="statistics developer tool" icon. Use date & time to search for the incorrect data point and adjust the value. -![Screenshot showing adjusting the long-term statistic history value](/images/blog/2022-04/adjust-statistics.png) +![Screenshot showing adjusting the long-term statistic history value](/images/docs/developer-tools/adjust-statistics.png) ## Assist tab diff --git a/source/_docs/z-wave/controllers.markdown b/source/_docs/z-wave/controllers.markdown index bb21087bc5b..ce183118ca0 100644 --- a/source/_docs/z-wave/controllers.markdown +++ b/source/_docs/z-wave/controllers.markdown @@ -12,13 +12,14 @@ You need to have a compatible Z-Wave stick or module installed. The following de The firmwares of 700 and 800 series Z-Wave controllers have several bugs which impact the stability of the mesh and can cause the controller to become unresponsive. Because there is no known firmware version that is completely fixed, it is recommended to choose a firmware based on the following criteria: - 700 series: - - prefer SDK versions 7.17.2 to 7.18.x + - prefer SDK versions 7.17.2 to 7.18.x or 7.21.6 and newer - SDK versions 7.19.x are okay - avoid SDK versions before 7.17.2 - - avoid SDK versions 7.20 to 7.21.3 + - avoid SDK versions 7.20 to 7.21.5 - 800 series - - prefer SDK versions 7.22.x + - prefer SDK versions 7.23.x and newer + - SDK versions 7.22.x are okay - SDK versions 7.17.2 to 7.19.x are okay - avoid SDK versions before 7.17.2 - avoid SDK versions 7.20 to 7.21.3 diff --git a/source/_includes/asides/component_navigation.html b/source/_includes/asides/component_navigation.html index 316971e2dc9..b9af18dbe20 100644 --- a/source/_includes/asides/component_navigation.html +++ b/source/_includes/asides/component_navigation.html @@ -3,7 +3,7 @@ {% assign percentage = 100.0 | times: active_installations | divided_by: site.data.analytics_data.reports_integrations | round: 1 %}
- + {%- if page.ha_config_flow and domain -%} {% my config_flow_start badge domain=domain %} diff --git a/source/_includes/custom/buy-dialog.html b/source/_includes/custom/buy-dialog.html index b23bd14a2f5..8bbc5bbbfdb 100644 --- a/source/_includes/custom/buy-dialog.html +++ b/source/_includes/custom/buy-dialog.html @@ -29,10 +29,10 @@
{% for distributor_region in distributor_regions %}
- {% assign az_ship_distributors = distributor_region.items | sort: 'name' | sort: 'ship_from'%} + {% assign az_ship_distributors = distributor_region.items | case_insensitive_sort: 'name' | sort: 'ship_from' %}
{% for distributor in az_ship_distributors %} - + {% if distributor.logo %} {% else %} diff --git a/source/_includes/dashboard/edit_dashboard.md b/source/_includes/dashboard/edit_dashboard.md index 6052ea71aaf..678e02333b8 100644 --- a/source/_includes/dashboard/edit_dashboard.md +++ b/source/_includes/dashboard/edit_dashboard.md @@ -10,4 +10,4 @@ To add the {{ title | downcase }} to your user interface: - This means that it is no longer automatically updated when new dashboard elements become available. - Once you've taken control, you can't get this specific dashboard back to update automatically. However, you can create a new default dashboard. - To continue, in the dialog, select the three dots {% icon "mdi:dots-vertical" %} menu, then select **Take control**. -2. [Add a card](/dashboards/cards/#adding-cards-to-your-dashboard) to your dashboard. +2. [Add a card and customize actions and features](/dashboards/cards/#adding-cards-to-your-dashboard) to your dashboard. diff --git a/source/_includes/installation/operating_system.md b/source/_includes/installation/operating_system.md index 16fa5cb8575..6fb6ce909d8 100644 --- a/source/_includes/installation/operating_system.md +++ b/source/_includes/installation/operating_system.md @@ -462,7 +462,7 @@ Minimum recommended assignments: 1. Start the virtual machine. 2. Observe the boot process of the Home Assistant Operating System. -3. Once completed, you will be able to reach Home Assistant on homeassistant.local:8123. If you are running an older Windows version or have a stricter network configuration, you might need to access Home Assistant at homeassistant:8123 or `http://X.X.X.X:8123` (replace X.X.X.X with your {{site.installation.types[page.installation_type].board}}’s IP address). +3. Once completed, you will be able to reach Home Assistant on homeassistant.local:8123. If you are running an older Windows version or have a stricter network configuration, you might need to access Home Assistant at homeassistant:8123 or `http://X.X.X.X:8123` (replace X.X.X.X with your virtual machine’s IP address). {% endif %} diff --git a/source/_integrations/_integration_docs_template.markdown b/source/_integrations/_integration_docs_template.markdown new file mode 100644 index 00000000000..f8b33a17150 --- /dev/null +++ b/source/_integrations/_integration_docs_template.markdown @@ -0,0 +1,208 @@ +--- +title: My integration +description: Example document structure and text blocks for integration documentation. +ha_release: 2025.3 +ha_iot_class: Local Push +ha_codeowners: + - '@home-assistant/core' +ha_domain: my_integration +ha_integration_type: integration +related: + - url: https://developers.home-assistant.io/docs/documenting/standards + title: Documentation standard + - url: https://developers.home-assistant.io/docs/core/integration-quality-scale/rules/ + title: Integration Quality Scale - Rules + - docs: /docs/glossary/ + title: Glossary + - docs: /docs/tools/quick-bar/#my-links + title: My link +--- + + + + + +The **My integration** {% term integration %} is used to integrate with the devices of [MyCompany](https://www.mycompany.com). MyCompany creates various smart home appliances and devices and are known for their MyProduct. +Use case: When you combine it with their other device you can do x. + +## Supported devices + +The following devices are known to be supported by the integration: + +- Device 1 +- Device 2 +- Every appliance that runs MyOS + +## Unsupported devices + +The following devices are not supported by the integration: + +- Device 3 +- Appliances built before 2010 + +## Prerequisites + +1. Open the app store and install the **MyProduct** app. +2. Create an account. +3. Add a device to the app. +4. Open the app and go to the **Settings** page. +5. Select **Expose API**. + +{% include integrations/config_flow.md %} + + + + + +{% configuration_basic %} +Host: + description: "The IP address of your bridge. You can find it in your router or in the Integration app under **Bridge Settings** > **Local API**." +Local access token: + description: "The local access token for your bridge. You can find it in the Integration app under **Bridge Settings** > **Local API**." +{% endconfiguration_basic %} + + + +{% configuration %} +Host: + description: "The IP address of your bridge. You can find it in your router or in the Integration app under **Bridge Settings** > **Local API**." + required: false + type: string +Local access token: + description: "The local access token for your bridge. You can find it in the Integration app under **Bridge Settings** > **Local API**." + required: false + type: string +{% endconfiguration %} + +## Configuration options + +The integration provides the following configuration options: + +{% configuration_basic %} +Country code: + description: You can specify the country code (NL or BE) of the country to display on the camera. +Timeframe: + description: Minutes to look ahead for precipitation forecast sensors (minimum 5, maximum 120). +{% endconfiguration_basic %} + +## Supported functionality + +### Entities + +The **My integration** integration provides the following entities. + +#### Buttons + +- **Start backflush** + - **Description**: Starts the backflush process on your machine. You got 15 seconds to turn the paddle after activation. + - **Available for machines**: all + +#### Numbers + +- **Dose** + - **Description**: Dosage (in ticks) for each key + - **Available for machines**: GS3 AV, Linea Mini. + - **Remarks**: GS3 has this multiple times, one for each physical key (1-4), and the entities are disabled by default. + +#### Sensors + +- **Current coffee temperature** + - **Description**: Current temperature of the coffee boiler. + - **Available for machines**: all + - **Remarks**: When the machine reaches temperature, this will be approximately 3 degrees higher than the `Coffee target temperature`, due to different measurement points. + +- **Current steam temperature** + - **Description**: Current temperature of the steam boiler. + - **Available for machines**: Linea Micra, GS3 AV, GS3 MP. + - **Remarks**: - + +#### Selects + +- **Prebrew/-infusion mode** + - **Description**: Whether to use prebrew, preinfusion, or neither. + - **Options**: Disabled, Prebrew, Preinfusion + - **Available for machines**: Linea Micra, Linea Mini, GS3 AV + +- **Steam level** + - **Description**: The level your steam boiler should run at. + - **Options**: 1, 2, 3 + - **Available for machines**: Linea Micra + +#### Updates + +- **Gateway firmware** + - **Description**: Firmware status of the gateway. + - **Available for machines**: all + +## Actions + +The integration provides the following actions. + +### Action: Get schedule + +The `my_integration.get_schedule` action is used to fetch a schedule from the integration. + +- **Data attribute**: `config_entry_id` + - **Description**: The ID of the config entry to get the schedule from. + - **Optional**: No + +## Examples + +### Turning off the LEDs during the night + +The status LEDs on the device can be quite bright. +To tackle this, you can use this blueprint to easily automate the LEDs turning off when the sun goes down. + +link to the blueprint on the [blueprints + exchange](https://community.home-assistant.io/c/blueprints-exchange/53) + +## Data updates + +The **My integration** integration fetches data from the device every 5 minutes by default. +Newer devices (the ones running MyOS) have the possibility to push data. +In this case, pushing data is enabled when the integration is started. If enabling data push fails, the integration uses data {% term polling %}. + +## Known limitations + +The integration does not provide the ability to reboot, which can instead be done via the manufacturer's app. + +## Troubleshooting + +### Can’t set up the device + +#### Symptom: “This device can’t be reached” + +When trying to set up the integration, the form shows the message “This device can’t be reached”. + +##### Description + +This means the settings on the device are incorrect, since the device needs to be enabled for local communication. + +##### Resolution + +To resolve this issue, try the following steps: + +1. Make sure your device is powered up (LEDs are on). +2. Make sure your device is connected to the internet: + - Make sure the app of the manufacturer can see the device. +3. Make sure the device has the local communication enabled: + - Check the device’s settings. + - Check the device’s manual. +... + +### I can't see my devices + +Make sure the devices are visible and controllable via the manufacturer's app. +If they are not, check the device's power and network connection. + +### The device goes unavailable after a day + +Make sure you turned off the device's power-saving mode. + +## Removing the integration + +This integration follows standard integration removal. + +{% include integrations/remove_device_service.md %} + +After deleting the integration, go to the app of the manufacturer and remove the Home Assistant integration from there as well. diff --git a/source/_integrations/advantage_air.markdown b/source/_integrations/advantage_air.markdown index 45ec2fb5538..b3abacc71e6 100644 --- a/source/_integrations/advantage_air.markdown +++ b/source/_integrations/advantage_air.markdown @@ -68,7 +68,7 @@ The integration will create a binary sensor for each zone that has a motion sens ### Switch -The integration will create switch entities to toggle the MyFan/ezFan setting, and to toggle air conditioning fresh air mode, if they are supported by your hardware. +The integration will create switch entities to toggle the MyFan/ezFan setting, to toggle air conditioning fresh air mode, and to toggle MySleep$aver, if they are supported by your hardware. With MyPlace, any relays will be created as switch entities. diff --git a/source/_integrations/airgradient.markdown b/source/_integrations/airgradient.markdown index 10e6e9eecff..706f5f75cfc 100644 --- a/source/_integrations/airgradient.markdown +++ b/source/_integrations/airgradient.markdown @@ -25,6 +25,7 @@ ha_zeroconf: true --- The AirGradient integration will fetch data from your [AirGradient devices](https://www.airgradient.com/). +AirGradient creates indoor and outdoor air quality monitors that enable you know if the air quality is healthy or not. They measure metrics such as PM2.5, CO2, TVOCs, and NOx. Both the software and hardware are open-source, allowing you to customize or extend the device functionality. {% important %} In order for the device to be set up or discovered by Home Assistant, the [firmware](https://www.airgradient.com/documentation/firmwares) version should be at least 3.1.1. @@ -32,6 +33,11 @@ In order for the device to be set up or discovered by Home Assistant, the [firmw {% include integrations/config_flow.md %} +{% configuration_basic %} +Host: + description: "The IP address or hostname for your AirGradient device." +{% endconfiguration_basic %} + ## Available sensors The integration will fetch data from each device. The following sensors are supported: @@ -61,3 +67,9 @@ The following entities are supported: - Requesting CO2 calibration - Requesting LED bar test - Toggling sharing metrics with AirGradient + +## Remove integration + +This integration follows standard integration removal, no extra steps are required. + +{% include integrations/remove_device_service.md %} \ No newline at end of file diff --git a/source/_integrations/alarm_control_panel.mqtt.markdown b/source/_integrations/alarm_control_panel.mqtt.markdown index ca3da05d9d2..10a55d74967 100644 --- a/source/_integrations/alarm_control_panel.mqtt.markdown +++ b/source/_integrations/alarm_control_panel.mqtt.markdown @@ -62,7 +62,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -71,7 +71,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -98,7 +98,7 @@ code_trigger_required: type: boolean default: true command_template: - description: "The [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) used for the command payload. Available variables: `action` and `code`." + description: "The [template](/docs/configuration/templating/#using-command-templates-with-mqtt) used for the command payload. Available variables: `action` and `code`." required: false type: template default: action @@ -182,7 +182,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -271,7 +271,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/anthropic.markdown b/source/_integrations/anthropic.markdown index cdc18254cdf..3bb8c935176 100644 --- a/source/_integrations/anthropic.markdown +++ b/source/_integrations/anthropic.markdown @@ -67,5 +67,7 @@ Model: Maximum Tokens to Return in Response: description: The maximum number of tokens to generate before stopping. Note that our models may stop _before_ reaching this maximum. This parameter only specifies the absolute maximum number of tokens to generate. Different models have different maximum values for this parameter. See [models](https://docs.anthropic.com/en/docs/models-overview) for details. Temperature: - description: Amount of randomness injected into the response. Use `temperature` closer to `0.0` for analytical / multiple choice, and closer to `1.0` for creative and generative tasks. Note that even with `temperature` of `0.0`, the results will not be fully deterministic. + description: Amount of randomness injected into the response. Use `temperature` closer to `0.0` for analytical / multiple choice, and closer to `1.0` for creative and generative tasks. Note that even with `temperature` of `0.0`, the results will not be fully deterministic. This parameter is ignored if extended thinking is enabled (see below). +Thinking budget: + description: For models with [extending thinking](https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking) support, such as Claude 3.7 Sonnet, this parameter determines the maximum number of tokens Claude is allowed use for its internal reasoning process. Larger budgets can improve response quality by enabling more thorough analysis for complex problems, although Claude may not use the entire budget allocated, especially at ranges above 32K. Anthropic suggests starting at the minimum and increasing the thinking budget incrementally to find the optimal range for Claude to perform well for your use case. Higher token counts may allow you to achieve more comprehensive and nuanced reasoning, but there may also be diminishing returns depending on the task. Be prepared for potentially longer response times due to the additional processing required for the reasoning process. The value must always be less than the `Maximum Tokens` specified. If the value is below `1024`, then extended thinking is disabled. This parameter is ignored if the model does not support extended thinking. {% endconfiguration_basic %} diff --git a/source/_integrations/apollo_automation.markdown b/source/_integrations/apollo_automation.markdown new file mode 100644 index 00000000000..5024f83245f --- /dev/null +++ b/source/_integrations/apollo_automation.markdown @@ -0,0 +1,31 @@ +--- +title: Apollo Automation +description: Connect and control your Apollo Automation ESPHome devices using the ESPHome integration +ha_release: '2025.3' +ha_iot_class: Local Push +ha_category: + - Sensor + - Presence detection +ha_domain: apollo_automation +ha_integration_type: brand +ha_supporting_domain: esphome +ha_supporting_integration: ESPHome +ha_platforms: + - sensor +works_with: + - local +--- + +[Apollo automation](https://apolloautomation.com/) is a member of the Made for ESPHome program. + +Apollo Automation devices work locally and integrate seamlessly with the [ESPHome](/integrations/esphome/) {% term integration %} in Home Assistant. As all connectivity is done locally, status updates and device control from Home Assistant happen instantly. + +{% include integrations/supported_brand.md %} + +## Supported devices + +The following devices are known to be supported by the integration. They are certified under the [Works with Home Assistant](https://partner.home-assistant.io/) program. + +- [MTR-1 Multi-Target Radar Multisensor For Home Assistant (LD2450)](https://apolloautomation.com/products/mtr-1) - A tiny, but powerful radar-based (mmWave) presence sensor that can pack in many other sensors. +- [MSR-2 mmWave Multisensor For Home Assistant (LD2410B)](https://apolloautomation.com/products/msr-2) - An even smaller multisensor that is the successor of the initial community feedback-driven design. +- [AIR-1 Air Quality Sensor For Home Assistant](https://apolloautomation.com/products/air-1) - A small air quality multisensor that can be extended to incorporate a huge variety of sensors. diff --git a/source/_integrations/azure_storage.markdown b/source/_integrations/azure_storage.markdown index 094d5304f75..8e16bb27a83 100644 --- a/source/_integrations/azure_storage.markdown +++ b/source/_integrations/azure_storage.markdown @@ -10,6 +10,7 @@ ha_domain: azure_storage ha_codeowners: - '@zweckj' ha_integration_type: service +ha_quality_scale: bronze --- This integration allows you to use [Azure storage accounts](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-overview) for use with Home Assistant Backups. diff --git a/source/_integrations/backup.markdown b/source/_integrations/backup.markdown index d814d9e57c2..59b82a5b5f9 100644 --- a/source/_integrations/backup.markdown +++ b/source/_integrations/backup.markdown @@ -3,12 +3,15 @@ title: Backup description: Allow creating backups of container and core installations. ha_category: - Other + - Sensor ha_release: 2022.4 ha_quality_scale: internal ha_domain: backup ha_codeowners: - '@home-assistant/core' ha_iot_class: Calculated +ha_platforms: + - sensor ha_integration_type: system related: - docs: /common-tasks/general/#backups @@ -80,3 +83,24 @@ automation: ## Restoring a backup To restore a backup, follow the steps described in [Restoring a backup](/common-tasks/general/#restoring-a-backup). + +## Sensors + +The **Backup** {% term integration %} provides several sensors. + +### Backup Manager State + +The current state of the backup system. Possible states are: + +- Idle +- Creating a backup +- Receiving a backup +- Restoring a backup + +### Next scheduled automatic backup + +The timestamp of the next scheduled automatic backup. + +### Last successful automatic backup + +The timestamp of the last successful automatic backup. diff --git a/source/_integrations/baf.markdown b/source/_integrations/baf.markdown index fda65b81485..963619a8f0a 100644 --- a/source/_integrations/baf.markdown +++ b/source/_integrations/baf.markdown @@ -46,6 +46,10 @@ For devices that support Auto Comfort and are running firmware 3.1 or later, an For devices that support Auto Comfort, a climate {% term entity %} allows adjusting the target temperature. +{% note %} +**Climate and Climate Sensors Become Unavailable:** Climate and some sensors like temperature are provided by the remote, not the fan itself on certain models. When the fan loses connection to the remote, these entities may become unavailable while the fan remains available. Consult vendor documentation on how to re-establish connectivity between the fan and remote and reload the integration to restore entities availability. +{% endnote %} + ### Number Adjusting the minimum and maximum speed for devices that support Auto Comfort is available. diff --git a/source/_integrations/balboa.markdown b/source/_integrations/balboa.markdown index 584eaf61077..a5f3624f350 100644 --- a/source/_integrations/balboa.markdown +++ b/source/_integrations/balboa.markdown @@ -13,6 +13,7 @@ ha_domain: balboa ha_platforms: - binary_sensor - climate + - event - fan - light - select @@ -32,6 +33,7 @@ There is currently support for the following device types within Home Assistant: - Binary sensor (Filter cycles and circulation pumps) - Climate +- Event (Last known fault, if any) - Fan (Pumps/Jets) - Light - Select (Low/high temperature range) diff --git a/source/_integrations/binary_sensor.mqtt.markdown b/source/_integrations/binary_sensor.mqtt.markdown index 67870e33c85..5b7f8a1be0f 100644 --- a/source/_integrations/binary_sensor.mqtt.markdown +++ b/source/_integrations/binary_sensor.mqtt.markdown @@ -51,7 +51,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -60,7 +60,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -156,7 +156,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -214,7 +214,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that returns a string to be compared to `payload_on`/`payload_off` or an empty string, in which case the MQTT message will be removed. Remove this option when `payload_on` and `payload_off` are sufficient to match your payloads (i.e no preprocessing of original message is required)." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that returns a string to be compared to `payload_on`/`payload_off` or an empty string, in which case the MQTT message will be removed. Remove this option when `payload_on` and `payload_off` are sufficient to match your payloads (i.e no preprocessing of original message is required)." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/bring.markdown b/source/_integrations/bring.markdown index 8ae2d84dfec..ca5e6f26095 100644 --- a/source/_integrations/bring.markdown +++ b/source/_integrations/bring.markdown @@ -13,9 +13,9 @@ ha_domain: bring ha_integration_type: service ha_platforms: - diagnostics + - event - sensor - todo - - event related: - docs: /integrations/todo title: To-do list integration documentation @@ -25,6 +25,7 @@ related: title: To-do list card - url: https://www.getbring.com/ title: Bring! +ha_quality_scale: platinum --- The **Bring!** integration allows you to sync your [Bring!](https://www.getbring.com/) shopping lists with Home Assistant. diff --git a/source/_integrations/burbank_water_and_power.markdown b/source/_integrations/burbank_water_and_power.markdown index 7c14281b751..01208f5b406 100644 --- a/source/_integrations/burbank_water_and_power.markdown +++ b/source/_integrations/burbank_water_and_power.markdown @@ -4,7 +4,7 @@ description: Get energy usage from Burbank Water and Power (BWP) using the Opowe ha_category: - Energy - Sensor -ha_release: 2025.3 +ha_release: 2023.8 ha_domain: burbank_water_and_power ha_integration_type: virtual ha_supporting_domain: opower diff --git a/source/_integrations/button.mqtt.markdown b/source/_integrations/button.mqtt.markdown index 98eeb6fa466..8cda3240c31 100644 --- a/source/_integrations/button.mqtt.markdown +++ b/source/_integrations/button.mqtt.markdown @@ -40,7 +40,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -49,7 +49,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -57,7 +57,7 @@ availability_topic: required: false type: string command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -144,7 +144,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: diff --git a/source/_integrations/camera.mqtt.markdown b/source/_integrations/camera.mqtt.markdown index ff672f202b9..32b8827f32a 100644 --- a/source/_integrations/camera.mqtt.markdown +++ b/source/_integrations/camera.mqtt.markdown @@ -50,7 +50,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -59,7 +59,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -146,7 +146,7 @@ image_encoding: required: false type: string json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false type: template json_attributes_topic: diff --git a/source/_integrations/cast.markdown b/source/_integrations/cast.markdown index 447b11597d9..01c52c8c31e 100644 --- a/source/_integrations/cast.markdown +++ b/source/_integrations/cast.markdown @@ -54,9 +54,11 @@ Home Assistant Cast requires your Home Assistant installation to be accessible v {% note %} -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. +Chromecasts generally don't resolve hosts through mDNS and also ignore DNS servers from DHCP, they instead use Google's public DNS servers, 8.8.8.8 and 8.8.4.4. -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. +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` using Google's DNS servers. 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 local Home Assistant URL, which can be configured by navigating to **{% my network title="Settings > System > Network" %}** or by configuring an [`internal_url`](/integrations/homeassistant/#editing-the-general-settings-in-yaml). {% endnote %} diff --git a/source/_integrations/climate.mqtt.markdown b/source/_integrations/climate.mqtt.markdown index f0149f75f5a..6d13385fa05 100644 --- a/source/_integrations/climate.mqtt.markdown +++ b/source/_integrations/climate.mqtt.markdown @@ -54,7 +54,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -63,7 +63,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -187,7 +187,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -281,7 +281,7 @@ precision: type: float default: 0.1 for Celsius and 1.0 for Fahrenheit. preset_mode_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `preset_mode_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `preset_mode_command_topic`. required: false type: template preset_mode_command_topic: @@ -293,7 +293,7 @@ preset_mode_state_topic: required: false type: string preset_mode_value_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the `preset_mode` value from the payload received on `preset_mode_state_topic`. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the `preset_mode` value from the payload received on `preset_mode_state_topic`. required: false type: template preset_modes: @@ -311,6 +311,27 @@ retain: required: false type: boolean default: false +swing_horizontal_mode_command_template: + description: A template to render the value sent to the `swing_horizontal_mode_command_topic` with. + required: false + type: template +swing_horizontal_mode_command_topic: + description: The MQTT topic to publish commands to change the swing horizontal mode. + required: false + type: string +swing_horizontal_mode_state_template: + description: A template to render the value received on the `swing_horizontal_mode_state_topic` with. + required: false + type: template +swing_horizontal_mode_state_topic: + description: The MQTT topic to subscribe for changes of the HVAC swing horizontal mode. If this is not set, the swing horizontal mode works in optimistic mode (see below). + required: false + type: string +swing_horizontal_modes: + description: A list of supported swing horizontal modes. + required: false + default: ['on', 'off'] + type: list swing_mode_command_template: description: A template to render the value sent to the `swing_mode_command_topic` with. required: false @@ -333,7 +354,7 @@ swing_modes: default: ['on', 'off'] type: list target_humidity_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `target_humidity_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `target_humidity_command_topic`. required: false type: template target_humidity_command_topic: @@ -345,7 +366,7 @@ target_humidity_state_topic: required: false type: string target_humidity_state_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value for the climate `target_humidity` state. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value for the climate `target_humidity` state. required: false type: template temperature_command_template: @@ -461,6 +482,9 @@ mqtt: - "off" - "cool" - "fan_only" + swing_horizontal_modes: + - "on" + - "off" swing_modes: - "on" - "off" @@ -478,6 +502,7 @@ mqtt: mode_command_template: "{{ value if value=="off" else "on" }}" temperature_command_topic: "study/ac/temperature/set" fan_mode_command_topic: "study/ac/fan/set" + swing_horizontal_mode_command_topic: "study/ac/swingH/set" swing_mode_command_topic: "study/ac/swing/set" precision: 1.0 ``` diff --git a/source/_integrations/comelit.markdown b/source/_integrations/comelit.markdown index d4791c03906..cf1c4ae93a6 100644 --- a/source/_integrations/comelit.markdown +++ b/source/_integrations/comelit.markdown @@ -28,7 +28,9 @@ ha_platforms: ha_integration_type: hub --- -The Comelit SimpleHome integration allows you to control your [Comelit home automation devices](https://comelitgroup.it/installatore/offerta/domotica-e-smart-home). +The **Comelit SimpleHome** {% term integration %} allows you to control your [Comelit home automation devices](https://comelitgroup.it/installatore/offerta/home-building-automation/). + +## Supported devices There is support for the following platform types within Home Assistant: @@ -37,6 +39,36 @@ There is support for the following platform types within Home Assistant: {% include integrations/config_flow.md %} -## Alarm control panel +{% configuration_basic %} + host: + description: The IP address of the Comelit SmartHome device. + port: + description: The TCP port of the Comelit SmartHome device. The default is port 80 (standard for HTTP). + pin: + description: The PIN of the Comelit SmartHome device. + type: + description: The type of Comelit SmartHome device. + keys: + bridge: + description: Comelit Serial Bridge. + vedo: + description: Comelit VEDO System. +{% endconfiguration_basic %} + +## Data updates + +This integration {% term polling polls %} data from the device every 5 seconds by default. + +## Supported functionality + +The **Comelit SimpleHome** {% term integration %} provides the following entities: + +### Alarm control panel The integration will create an alarm entity for each area. Additionally, it will create a sensor and a presence detection binary sensor for each zone, enhancing monitoring capabilities. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/cover.mqtt.markdown b/source/_integrations/cover.mqtt.markdown index f847fd28ad5..83a7eb46647 100644 --- a/source/_integrations/cover.mqtt.markdown +++ b/source/_integrations/cover.mqtt.markdown @@ -57,7 +57,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -66,7 +66,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -131,7 +131,7 @@ device: required: false type: string device_class: - description: Sets the [class of the device](/integrations/cover/), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`. + description: Sets the [class of the device](/integrations/cover/#device_class), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`. required: false type: string enabled_by_default: @@ -157,7 +157,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -203,6 +203,11 @@ payload_stop: required: false type: string default: STOP +payload_stop_tilt: + description: The command payload that stops the tilt. + required: false + type: string + default: stop platform: description: Must be `cover`. Only allowed and required in [MQTT auto discovery device messages](/integrations/mqtt/#device-discovery-payload). required: true @@ -218,7 +223,7 @@ position_open: type: integer default: 100 position_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `position_topic` topic. Within the template the following variables are available: `entity_id`, `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that can be used to extract the payload for the `position_topic` topic. Within the template the following variables are available: `entity_id`, `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" required: false type: template position_topic: @@ -236,7 +241,7 @@ retain: type: boolean default: false set_position_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define the position to be sent to the `set_position_topic` topic. Incoming position value is available for use in the template `{% raw %}{{ position }}{% endraw %}`. Within the template the following variables are available: `entity_id`, `position`, the target position in percent; `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to define the position to be sent to the `set_position_topic` topic. Incoming position value is available for use in the template `{% raw %}{{ position }}{% endraw %}`. Within the template the following variables are available: `entity_id`, `position`, the target position in percent; `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" required: false type: template set_position_topic: @@ -278,7 +283,7 @@ tilt_closed_value: type: integer default: 0 tilt_command_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `tilt_command_topic` topic. Within the template the following variables are available: `entity_id`, `tilt_position`, the target tilt position in percent; `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) that can be used to extract the payload for the `tilt_command_topic` topic. Within the template the following variables are available: `entity_id`, `tilt_position`, the target tilt position in percent; `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" required: false type: template tilt_command_topic: @@ -306,7 +311,7 @@ tilt_optimistic: type: boolean default: "`true` if `tilt_status_topic` is not defined, else `false`" tilt_status_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `tilt_status_topic` topic. Within the template the following variables are available: `entity_id`, `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that can be used to extract the payload for the `tilt_status_topic` topic. Within the template the following variables are available: `entity_id`, `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" required: false type: template tilt_status_topic: @@ -318,7 +323,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `state_topic` topic." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that can be used to extract the payload for the `state_topic` topic." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/demo.markdown b/source/_integrations/demo.markdown index 51220503363..0e40663f820 100644 --- a/source/_integrations/demo.markdown +++ b/source/_integrations/demo.markdown @@ -42,6 +42,7 @@ ha_platforms: - tts - update - vacuum + - valve - water_heater - weather ha_integration_type: integration @@ -81,6 +82,7 @@ Available demo platforms: - [Text-to-speech](/integrations/tts/) (`tts`) - [Update](/integrations/update/) (`update`) - [Vacuum](/integrations/vacuum/) (`vacuum`) +- [Valve](/integrations/valve/) (`valve`) - [Water heater](/integrations/water_heater/) (`water_heater`) - [Weather](/integrations/weather/) (`weather`) diff --git a/source/_integrations/device_tracker.markdown b/source/_integrations/device_tracker.markdown index 4695ebd93c4..0d8a4841115 100644 --- a/source/_integrations/device_tracker.markdown +++ b/source/_integrations/device_tracker.markdown @@ -55,6 +55,7 @@ device_tracker: - platform: netgear host: IP_ADDRESS username: YOUR_USERNAME + password: YOUR_PASSWORD interval_seconds: 10 consider_home: 180 new_device_defaults: diff --git a/source/_integrations/device_tracker.mqtt.markdown b/source/_integrations/device_tracker.mqtt.markdown index b6f5ae80915..5efd902efbf 100644 --- a/source/_integrations/device_tracker.mqtt.markdown +++ b/source/_integrations/device_tracker.mqtt.markdown @@ -50,7 +50,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -59,7 +59,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -120,7 +120,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -189,7 +189,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that returns a device tracker state." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that returns a device tracker state." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/device_trigger.mqtt.markdown b/source/_integrations/device_trigger.mqtt.markdown index 82fad046f0e..174807d66fa 100644 --- a/source/_integrations/device_trigger.mqtt.markdown +++ b/source/_integrations/device_trigger.mqtt.markdown @@ -97,7 +97,7 @@ device: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/ecobee.markdown b/source/_integrations/ecobee.markdown index d7baa7c6a61..d90c107318c 100644 --- a/source/_integrations/ecobee.markdown +++ b/source/_integrations/ecobee.markdown @@ -10,7 +10,6 @@ ha_category: - Sensor - Switch - Weather -featured: true ha_release: 0.9 ha_iot_class: Cloud Polling ha_config_flow: true diff --git a/source/_integrations/electric_kiwi.markdown b/source/_integrations/electric_kiwi.markdown index 9a11d784679..bb1b7ce081a 100644 --- a/source/_integrations/electric_kiwi.markdown +++ b/source/_integrations/electric_kiwi.markdown @@ -13,6 +13,7 @@ ha_platforms: - select - sensor ha_integration_type: hub +ha_quality_scale: bronze --- [Electric Kiwi](https://www.electrickiwi.co.nz/) is an independent power and broadband company in New Zealand, offering variable rates for peak, shoulder, and off-peak pricing with a selectable hour of free power. diff --git a/source/_integrations/enphase_envoy.markdown b/source/_integrations/enphase_envoy.markdown index 098b90bba20..d8d840873f1 100644 --- a/source/_integrations/enphase_envoy.markdown +++ b/source/_integrations/enphase_envoy.markdown @@ -42,7 +42,7 @@ This integration does not work with: ## Prerequisites - The Envoy must be configured and commissioned. -- The Envoy must be on your local network with IPV4 connectivity from Home Assistant. (Also See troubleshooting, [single network](#single-network)) +- The Envoy must be on your local network with IPV4 connectivity from Home Assistant. (Also See troubleshooting, [periodic network connection issues](#periodic-network-connection-issues)) - Envoy firmware version 3.9 or newer. - With Envoy firmware 7 and greater: - an Enlighten cloud username and password. @@ -142,8 +142,8 @@ House consumption data requires an Envoy Metered equipped and configured with at - **Envoy SN Current power consumption**: Current power consumption in W. - **Envoy SN Lifetime energy consumption**: Lifetime energy consumption in Wh, default display scaled to MWh. -- **Envoy SN Energy production last seven days**: Energy consumption in previous 7 days, not including today's, in Wh, display scaled to kWh. This entity is not logged in statistics. -- **Envoy SN Energy consumption today**: Energy consumption since midnight in Wh, default display scaled to kWh. +- **Envoy SN Energy consumption last seven days**: Energy consumption in previous 7 days, not including today's, in Wh, display scaled to kWh. (See known limitations [Energy Incorrect](#energy-incorrect)) This entity is not logged in statistics. +- **Envoy SN Energy consumption today**: Energy consumption since midnight in Wh, default display scaled to kWh. (See known limitations [Energy Incorrect](#energy-incorrect))
consumption entities @@ -193,7 +193,7 @@ CT measure multiple properties of the energy exchange which are available as Env - **Envoy SN Production CT current**: Current in A. - **Envoy SN Powerfactor production CT**: Powerfactor, ratio of active to apparent power. - **Envoy SN Metering status production CT**: Status of the metering process: `normal`, `not-metering`, `check-wiring`. -- **Envoy SN Meter status flags active production CT**: Count of CT status flags active. See troubleshooting [CT Active flag count](#ct-active-flag-count) when non-zero. +- **Envoy SN Meter status flags active production CT**: Count of CT status flags active. See troubleshooting [CT Active flag count is non-zero](#ct-active-flag-count-is-non-zero) when non-zero. ##### Net-consumption CT sensor entities @@ -202,7 +202,7 @@ CT measure multiple properties of the energy exchange which are available as Env - **Envoy SN net consumption CT current**: Current in A. - **Envoy SN Powerfactor net consumption CT**: Power factor, ratio of active to apparent power. - **Envoy SN Metering status net consumption CT**: Status of the metering process: `normal`, `not-metering`, `check-wiring`. -- **Envoy SN Meter status flags active net consumption CT**: Count of CT status flags active. See troubleshooting [CT Active flag count](#ct-active-flag-count) when non-zero. +- **Envoy SN Meter status flags active net consumption CT**: Count of CT status flags active. See troubleshooting [CT Active flag count is non-zero](#ct-active-flag-count-is-non-zero) when non-zero. ##### Storage CT sensor entities @@ -211,7 +211,7 @@ CT measure multiple properties of the energy exchange which are available as Env - **Envoy SN storage CT current**: Current in A. - **Envoy SN Powerfactor storage CT**: Power factor, ratio of active to apparent power. - **Envoy SN Metering status storage CT**: Status of the metering process: `normal`, `not-metering`, `check-wiring`. -- **Envoy SN Meter status flags active storage CT**: Count of CT status flags active. See troubleshooting [CT Active flag count](#ct-active-flag-count) when non-zero. +- **Envoy SN Meter status flags active storage CT**: Count of CT status flags active. See troubleshooting [CT Active flag count is non-zero](#ct-active-flag-count-is-non-zero) when non-zero. For storage CT energy entities refer to [battery sensor](#aggregated-iq-battery-sensor-entities) description. @@ -403,7 +403,7 @@ With installed CT, data granularity in This integration supports updating the Envoy configuration through a `reconfigure` menu option. The reconfiguration allows for changing the Envoy IP address, username, and/or password. Use this menu option if your Enlighten credentials or the device's IP address has changed and needs to be manually updated. The latter is typically automatically detected and updated. -Use this menu option also when an Envoy firmware upgrade requires a switch from local Envoy username/password to token-based authentication with Enlighten username/password (refer to [authentication requirements](#envoy-authentication-requirements)). +Use this menu option also when an Envoy firmware upgrade requires a switch from local Envoy username/password to token-based authentication with Enlighten username/password (refer to [required manual input](#required-manual-input)). ## Firmware updates @@ -683,8 +683,22 @@ When using Envoy Metered with CT, not When using Envoy Metered with CT -- not all firmware versions report `Energy production today` correctly. Zero data and unexpected spikes have been reported. In this case, best use a utility meter with the `Lifetime energy production` entity for daily reporting. -- not all firmware versions report `Energy production last seven days` correctly. Zero and unexpected values have been reported. +- not all firmware versions report `Energy production today` and/or `Energy consumption today` correctly. Zero data and unexpected spikes have been reported. In this case, best use a utility meter with the `Lifetime energy production` or `Lifetime energy consumption` entity for daily reporting. +- not all firmware versions report `Energy production last seven days` and/or `Energy consumption last seven days` correctly. Zero and unexpected values have been reported. +- `Energy production today` has been reported not to reset to zero at the start of the day. Instead, it resets to a non-zero value that gradually increases over time. This issue has also been reported as starting suddenly overnight. For daily reporting, it is recommended to use a utility meter with the `Lifetime energy production` entity. + +{% details "History examples for Today's energy production value not resetting to zero" %} + +
+ envoy today non zero reset +
Envoy Today's energy production value exhibits a daily reset to an ever increasing non-zero value.
+
+ +
+ envoy today step change +
Envoy Today's energy production value exhibits a sudden onset of non-zero resets.
+
+{% enddetails %} ### Lifetime reset diff --git a/source/_integrations/environment_canada.markdown b/source/_integrations/environment_canada.markdown index 906692d07e8..6e28177f92b 100644 --- a/source/_integrations/environment_canada.markdown +++ b/source/_integrations/environment_canada.markdown @@ -36,8 +36,7 @@ The integration will create the entities listed below. Some of the entities are ### Weather -- Current conditions and daily forecast -- Current conditions and hourly forecast (disabled by default) +- Current conditions, daily forecast, and hourly forecast ### Camera @@ -108,9 +107,13 @@ Not all weather stations provide a complete set of weather/sensor data. The data ## Template sensors -The configuration snippet below adds a useful [template sensors](/integrations/template/) showing the current "feels like" temperature among air temperature, humidex, and wind chill. +The configuration snippets below add [template sensors](/integrations/template/). See the [weather integration](/integrations/weather/) for additional examples. -Replace `NAME` with the name used to configure your integration. +Replace `NAME` with the weather entity used in your configuration. + +### Feels Like + +A sensor that takes into account the humidex or wind chill for what the temperature feels like. {% raw %} @@ -132,6 +135,8 @@ template: {% endraw %} +### Additional Forecast Data + The configuration snippet below adds a template sensor containing the current forecast information as attributes and the text summary of the forecast for the current day. {% raw %} @@ -152,12 +157,12 @@ The configuration snippet below adds a template sensor containing the current fo sensor: - name: Weather Forecast Daily unique_id: weather_forecast_daily - state: "{{ states('weather.ottawa_kanata_orleans_forecast') }}" + state: "{{ states('weather.NAME') }}" attributes: - daily: "{{ forecasts['weather.ottawa_kanata_orleans_forecast']['daily_forecast'] }}" - hourly: "{{ forecasts['weather.ottawa_kanata_orleans_forecast']['hourly_forecast'] }}" - summary: "{{ forecasts['weather.ottawa_kanata_orleans_forecast']['daily_forecast'][0]['text_summary'] }}" - temperature_unit: "{{ state_attr('weather.ottawa_kanata_orleans_forecast', 'temperature_unit') }}" + daily: "{{ forecasts['weather.NAME']['daily_forecast'] }}" + hourly: "{{ forecasts['weather.NAME']['hourly_forecast'] }}" + summary: "{{ forecasts['weather.NAME']['daily_forecast'][0]['text_summary'] }}" + temperature_unit: "{{ state_attr('weather.NAME', 'temperature_unit') }}" ``` {% endraw %} diff --git a/source/_integrations/esera_onewire.markdown b/source/_integrations/esera_onewire.markdown index 884e107f628..a765ea23837 100644 --- a/source/_integrations/esera_onewire.markdown +++ b/source/_integrations/esera_onewire.markdown @@ -19,6 +19,7 @@ ha_platforms: - sensor - switch ha_iot_class: Local Polling +ha_zeroconf: true --- {% include integrations/supported_brand.md %} diff --git a/source/_integrations/esphome.markdown b/source/_integrations/esphome.markdown index 0eef4080528..11c0552bdc1 100644 --- a/source/_integrations/esphome.markdown +++ b/source/_integrations/esphome.markdown @@ -95,3 +95,18 @@ sensor: ``` The entity will be named `Temperature` and will default to having an entity_id of `sensor.temperature`. + +## Obtaining logs from the device + +1. To have the device send logs to Home Assistant, in the [options flow](#options), enable `Subscribe to logs from the device`. + - They are logged under the `homeassistant.components.esphome` logger at the equivalent level. + +2. To adjust the logging level, there are two options: + - enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), + - or use the [Developer Tools](/docs/tools/dev-tools/#actions-tab) to call the [`logger.set_level`](/integrations/logger/#action-set_level) action to specify the desired level: + + ```yaml + action: logger.set_level + data: + homeassistant.components.esphome: debug + ``` diff --git a/source/_integrations/event.mqtt.markdown b/source/_integrations/event.mqtt.markdown index 7393e23030c..07f0ae45700 100644 --- a/source/_integrations/event.mqtt.markdown +++ b/source/_integrations/event.mqtt.markdown @@ -42,7 +42,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -51,7 +51,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -142,7 +142,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -186,7 +186,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value and render it to a valid JSON event payload. If the template throws an error, the current state will be used instead." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value and render it to a valid JSON event payload. If the template throws an error, the current state will be used instead." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/fan.mqtt.markdown b/source/_integrations/fan.mqtt.markdown index 8832c7c3461..29b117987ca 100644 --- a/source/_integrations/fan.mqtt.markdown +++ b/source/_integrations/fan.mqtt.markdown @@ -49,7 +49,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -58,7 +58,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -66,7 +66,7 @@ availability_topic: required: false type: string command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -149,7 +149,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -171,7 +171,7 @@ optimistic: type: boolean default: "`true` if no state topic defined, else `false`." direction_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `direction_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `direction_command_topic`. required: false type: template direction_command_topic: @@ -183,11 +183,11 @@ direction_state_topic: required: false type: string direction_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the direction." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value from the direction." required: false type: template oscillation_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `oscillation_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `oscillation_command_topic`. required: false type: template oscillation_command_topic: @@ -199,7 +199,7 @@ oscillation_state_topic: required: false type: string oscillation_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the oscillation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value from the oscillation." required: false type: template payload_available: @@ -243,7 +243,7 @@ payload_reset_preset_mode: type: string default: '"None"' percentage_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `percentage_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `percentage_command_topic`. required: false type: template percentage_command_topic: @@ -255,7 +255,7 @@ percentage_state_topic: required: false type: string percentage_value_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the `percentage` value from the payload received on `percentage_state_topic`. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the `percentage` value from the payload received on `percentage_state_topic`. required: false type: template platform: @@ -263,7 +263,7 @@ platform: required: true type: string preset_mode_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `preset_mode_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `preset_mode_command_topic`. required: false type: template preset_mode_command_topic: @@ -275,7 +275,7 @@ preset_mode_state_topic: required: false type: string preset_mode_value_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the `preset_mode` value from the payload received on `preset_mode_state_topic`. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the `preset_mode` value from the payload received on `preset_mode_state_topic`. required: false type: template preset_modes: @@ -308,7 +308,7 @@ state_topic: required: false type: string state_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the state." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value from the state." required: false type: template unique_id: diff --git a/source/_integrations/frankever.markdown b/source/_integrations/frankever.markdown new file mode 100644 index 00000000000..4da40a21c3e --- /dev/null +++ b/source/_integrations/frankever.markdown @@ -0,0 +1,49 @@ +--- +title: FrankEver +description: Integrate FrankEver (Powered by Shelly) devices +ha_category: + - Binary sensor + - Climate + - Cover + - Energy + - Event + - Light + - Number + - Select + - Sensor + - Switch + - Text + - Update + - Valve +ha_release: '0.115' +ha_codeowners: + - '@balloob' + - '@bieniu' + - '@thecode' + - '@chemelli74' + - '@bdraco' +ha_iot_class: Local Push +ha_domain: frankever +ha_config_flow: true +ha_zeroconf: true +ha_platforms: + - binary_sensor + - button + - climate + - cover + - diagnostics + - event + - light + - number + - select + - sensor + - switch + - text + - update + - valve +ha_integration_type: virtual +ha_supporting_domain: shelly +ha_supporting_integration: Shelly +--- + +{% include integrations/supported_brand.md %} diff --git a/source/_integrations/gios.markdown b/source/_integrations/gios.markdown index 789f8f9720a..fe712f2b20d 100644 --- a/source/_integrations/gios.markdown +++ b/source/_integrations/gios.markdown @@ -17,8 +17,11 @@ ha_integration_type: service The `gios` integration uses the [GIOŚ](http://powietrze.gios.gov.pl/pjp/current) web service as a source for air quality data for your location. -## Setup - -To obtain ID of the measuring station, go to [GIOŚ](http://powietrze.gios.gov.pl/pjp/current) page, select the measuring station on the map and click the "More Info" link. The address of the opened page will look like this: `http://powietrze.gios.gov.pl/pjp/current/station_details/chart/291` and `291` will be ID of the measuring station. - {% include integrations/config_flow.md %} + +{% configuration_basic %} +Measuring station: + description: "Select a measuring station from the list." +Name: + description: "Service name in Home Assistant, by default, this is the name of your Home Assistant instance. For example `Home`." +{% endconfiguration_basic %} diff --git a/source/_integrations/google_assistant.markdown b/source/_integrations/google_assistant.markdown index 876c71e4b48..fc3cda1d2c1 100644 --- a/source/_integrations/google_assistant.markdown +++ b/source/_integrations/google_assistant.markdown @@ -259,6 +259,7 @@ Currently, the following domains are available to be used with Google Assistant, - input_button - input_select (option/setting/mode/value) - light (on/off/brightness/rgb color/color temp) +- lawn_mower (dock/start/pause) - lock - media_player (on/off/set volume (via set volume)/source (via set input source)/control playback) - scene (on) diff --git a/source/_integrations/google_drive.markdown b/source/_integrations/google_drive.markdown index 82f259dd48d..e2cc4715a47 100644 --- a/source/_integrations/google_drive.markdown +++ b/source/_integrations/google_drive.markdown @@ -25,6 +25,8 @@ related: This {% term integration %} allows you to connect your [Google Drive](https://drive.google.com) with Home Assistant Backups. When you set up this integration, your Google Drive will have a new folder called Home Assistant where all the backups will be stored. You can rename this folder to whatever you like in Google Drive at any point in time. If you delete the folder, it will automatically be re-created as long as you have the {% term integration %} enabled. +For a video walkthrough of the setup instructions, see this video from 13:50 to 19:20 + ## Prerequisites diff --git a/source/_integrations/google_generative_ai_conversation.markdown b/source/_integrations/google_generative_ai_conversation.markdown index d0330bdef3b..77313d10c43 100644 --- a/source/_integrations/google_generative_ai_conversation.markdown +++ b/source/_integrations/google_generative_ai_conversation.markdown @@ -144,5 +144,6 @@ This video tutorial explains how Google Generative AI can be set up, how you can logger: logs: homeassistant.components.conversation: debug + homeassistant.components.conversation.chat_log: debug homeassistant.components.google_generative_ai_conversation: debug ``` diff --git a/source/_integrations/govee_light_local.markdown b/source/_integrations/govee_light_local.markdown index aeaf27f7cc5..183270944d6 100644 --- a/source/_integrations/govee_light_local.markdown +++ b/source/_integrations/govee_light_local.markdown @@ -22,13 +22,17 @@ To enable local control on your Govee device, refer to the instructions availabl ## Supported devices +H6008, H600D, +H6022, +H6042, H6046, H6047, H6051, H6052, H6056, H6059, +H605D, H6061, H6062, H6065, @@ -53,6 +57,7 @@ H610B, H6110, H6117, H612A, +H612B, H612F, H6144, H6159, @@ -62,6 +67,7 @@ H615C, H615D, H615E, H6163, +H6167, H6168, H6172, H6173, @@ -84,10 +90,12 @@ H61A3, H61A5, H61A8, H61B2, +H61B3, H61B5, H61BA, H61BC, H61BE, +H61C2, H61C3, H61C5, H61D3, @@ -97,6 +105,7 @@ H61E1, H61E5, H61E6, H61F5, +H6609, H6640, H6641, H7012, @@ -141,7 +150,8 @@ H70C2, H70C4, H70C5, H70D1, -H805C +H805C, +H8072 {% note %} Some scenes may not be supported from all devices. If you find a scene that's not working with a specific model, please open an issue at the [underling library](https://github.com/Galorhallen/govee-local-api/issues) diff --git a/source/_integrations/group.markdown b/source/_integrations/group.markdown index 3930bb47ed8..0e73ffb8cf4 100644 --- a/source/_integrations/group.markdown +++ b/source/_integrations/group.markdown @@ -118,10 +118,12 @@ In short, when any group member entity is `unlocked`, the group will also be `un - The group state is `unavailable` if all group members are `unavailable`. - Otherwise, the group state is `unknown` if all group members are `unknown` or `unavailable`. - Otherwise, the group state is `jammed` if at least one group member is `jammed`. +- Otherwise, the group state is `opening` if at least one group member is `opening`. - Otherwise, the group state is `locking` if at least one group member is `locking`. +- Otherwise, the group state is `open` if at least one group member is `open`. - Otherwise, the group state is `unlocking` if at least one group member is `unlocking`. -- Otherwise, the group state is `unlocked` if at least one group member is `unlocked`. -- Otherwise, the group state is `locked`. +- Otherwise, the group state is `locked` if all group members are `locked`. +- Otherwise, the group state is `unlocked`. ### Notify entity groups diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown index db20615549f..237adde36af 100644 --- a/source/_integrations/habitica.markdown +++ b/source/_integrations/habitica.markdown @@ -31,6 +31,7 @@ related: title: To-do list card - url: https://habitica.com/ title: Habitica +ha_quality_scale: platinum --- The Habitica {% term integration %} enables you to monitor your adventurer's progress and stats from [Habitica](https://habitica.com/) in Home Assistant and seamlessly integrates your to-do's, daily tasks, and many more things. @@ -296,6 +297,141 @@ Updates a specific reward for the selected Habitica character. | `remove_tag` | yes | Remove tags from the Habitica reward. | | `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | +### Action `habitica.create_reward` + +Creates a reward for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to create a reward. | +| `name` | no | The title for the Habitica reward. | +| `notes` | yes | The notes for the Habitica reward. | +| `cost` | no | The cost of the reward. | +| `tag` | yes | Add tags to the Habitica reward. If a tag does not already exist, a new one will be created. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + +### Action `habitica.update_habit` + +Updates a specific habit for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to update a habit. | +| `task` | no | The name (or task ID) of the habit you want to update. | +| `rename` | yes | The new title for the Habitica habit. | +| `notes` | yes | The new notes for the Habitica habit. | +| `up_down` | yes | Update if the habit is good and rewarding (positive), bad and penalizing (negative) or both. Valid values: `up`, `down`, or `[up, down]` | +| `priority` | yes | Update the difficulty of a habit. Valid values: `trivial`, `easy`, `medium`, `hard` | +| `frequency` | yes | Update when a habit's counter resets. Valid values: `daily`, `weekly`, `monthly` | +| `tag` | yes | Add tags to the Habitica habit. If a tag does not already exist, a new one will be created. | +| `remove_tag` | yes | Remove tags from the Habitica habit. | +| `counter_up` | yes | Update the up counter of a positive habit. | +| `counter_down` | yes | Update the down counter of a negative habit. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + +### Action `habitica.create_habit` + +Creates a habit for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to create a habit. | +| `name` | no | The title for the Habitica habit. | +| `notes` | yes | The notes for the Habitica habit. | +| `up_down` | yes | Defines if the habit is good and rewarding (positive), bad and penalizing (negative) or both. Valid values: `up`, `down`, or `[up, down]` | +| `priority` | yes | Sets the difficulty of the habit. Valid values: `trivial`, `easy`, `medium`, `hard`. Default: `easy` | +| `frequency` | yes | Defines when the habit's counter resets. Valid values: `daily`, `weekly`, `monthly`. Default: `daily` | +| `tag` | yes | Add tags to the Habitica habit. If a tag does not already exist, a new one will be created. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + +### Action `habitica.update_todo` + +Updates a specific to-do for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to update a to-do. | +| `task` | no | The name (or task ID) of the to-do you want to update. | +| `rename` | yes | The new title for the Habitica to-do. | +| `notes` | yes | The new notes for the Habitica to-do. | +| `add_checklist_item` | yes | The items to add to the to-do's checklist. | +| `remove_checklist_item` | yes | Remove items from a to-do's checklist. | +| `score_checklist_item` | yes | Mark items from a to-do's checklist as completed. | +| `unscore_checklist_item` | yes | Undo completion of items of a to-do's checklist. | +| `priority` | yes | Update the difficulty of a to-do. Valid values: `trivial`, `easy`, `medium`, `hard` | +| `date` | yes | The to-do's due date. | +| `clear_date` | yes | Remove the due date from a to-do. | +| `reminder` | yes | Add reminders to a Habitica to-do. | +| `remove_reminder` | yes | Remove specific reminders from a Habitica to-do. | +| `clear_reminder` | yes | Remove all reminders from a Habitica to-do. | +| `tag` | yes | Add tags to the Habitica to-do. If a tag does not already exist, a new one will be created. | +| `remove_tag` | yes | Remove tags from the Habitica to-do. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + +### Action `habitica.create_todo` + +Creates a to-do for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to create a to-do. | +| `name` | no | The title for the Habitica to-do. | +| `notes` | yes | The notes for the Habitica to-do. | +| `add_checklist_item` | yes | The items to add to the to-do's checklist. | +| `priority` | yes | The difficulty of the to-do. Valid values: `trivial`, `easy`, `medium`, `hard` | +| `date` | yes | The to-do's due date. | +| `reminder` | yes | Add reminders to a Habitica to-do. | +| `tag` | yes | Add tags to the Habitica to-do. If a tag does not already exist, a new one will be created. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + +### Action `habitica.update_daily` + +Updates a specific daily for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to update a daily. | +| `task` | no | The name (or task ID) of the daily you want to update. | +| `rename` | yes | The new title for the Habitica daily. | +| `notes` | yes | The new notes for the Habitica daily. | +| `add_checklist_item` | yes | The items to add to the daily's checklist. | +| `remove_checklist_item` | yes | Remove items from a daily's checklist. | +| `score_checklist_item` | yes | Mark items from a daily's checklist as completed. | +| `unscore_checklist_item` | yes | Undo completion of items of a daily's checklist. | +| `priority` | yes | Update the difficulty of a daily. Valid values: `trivial`, `easy`, `medium`, `hard` | +| `start_date` | yes | Defines when the daily task becomes active and specifies the exact weekday or day of the month it repeats on. | +| `frequency` | yes | The repetition interval of a daily. Valid values: `daily`, `weekly`, `monthly`, `yearly`. | +| `every_x` | yes | The number of intervals (`days`, `weeks`, `months`, or `years`) after which the daily repeats, based on the chosen repetition interval. A value of 0 makes the daily inactive (a *Gray Daily*). | +| `repeat` | yes | The days of the week the daily repeats. Applicable when the repetition interval is set to weekly. | +| `repeat_monthly` | yes | Whether a monthly recurring task repeats on the same calendar day each month (`day_of_month`), or on the same weekday and week of the month (`day_of_week`), based on the start date. Applicable when the repetition interval is set to monthly. | +| `reminder` | yes | Add reminders to a Habitica daily. | +| `remove_reminder` | yes | Remove specific reminders from a Habitica daily. | +| `clear_reminder` | yes | Remove all reminders from a Habitica daily. | +| `tag` | yes | Add tags to the Habitica daily. If a tag does not already exist, a new one will be created. | +| `remove_tag` | yes | Remove tags from the Habitica daily. | +| `streak` | yes | Adjust or reset the streak counter of the daily. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + +### Action `habitica.create_daily` + +Creates a daily for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to create a daily. | +| `name` | no | The title for the Habitica daily. | +| `notes` | yes | The new notes for the Habitica daily. | +| `add_checklist_item` | yes | The items to add to the daily's checklist. | +| `priority` | yes | The difficulty of a daily. Valid values: `trivial`, `easy`, `medium`, `hard` | +| `start_date` | yes | The date when the daily becomes active and specifies the exact weekday or day of the month it repeats on. | +| `frequency` | yes | The repetition interval of a daily. Valid values: `daily`, `weekly`, `monthly`, `yearly`. | +| `every_x` | yes | The number of intervals (`days`, `weeks`, `months`, or `years`) after which the daily repeats, based on the chosen repetition interval. A value of 0 makes the daily inactive (a *Gray Daily*). | +| `repeat` | yes | The days of the week the daily repeats. Applicable when the repetition interval is set to weekly. | +| `repeat_monthly` | yes | Whether a monthly recurring task repeats on the same calendar day each month (`day_of_month`), or on the same weekday and week of the month (`day_of_week`), based on the start date. Applicable when the repetition interval is set to monthly. | +| `reminder` | yes | Add reminders to a Habitica daily. | +| `tag` | yes | Add tags to the Habitica daily. If a tag does not already exist, a new one will be created. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + ## Automations Get started with these automation examples for Habitica, each featuring ready-to-use blueprints! diff --git a/source/_integrations/heicko.markdown b/source/_integrations/heicko.markdown index d2ae71585bb..3adac1eea53 100644 --- a/source/_integrations/heicko.markdown +++ b/source/_integrations/heicko.markdown @@ -7,7 +7,7 @@ ha_domain: heicko ha_integration_type: virtual ha_supporting_domain: motion_blinds ha_supporting_integration: Motionblinds -ha_release: 2025.3 +ha_release: 2020.12 ha_codeowners: - '@starkillerOG' ha_config_flow: true diff --git a/source/_integrations/heos.markdown b/source/_integrations/heos.markdown index 609fb8325a6..4c358912588 100644 --- a/source/_integrations/heos.markdown +++ b/source/_integrations/heos.markdown @@ -29,6 +29,7 @@ Add this integration to automate playback and group configuration of HEOS-capabl - Controlling play mode (e.g., play/pause), volume, mute, and shuffle - Playing HEOS favorites, playlists, quick selects, URLs - Setting the source to physical inputs (e.g., `AUX1`) +- Browsing HEOS music services (for example, **Tidal**) and sources (such as **Favorites**) - Grouping and ungrouping HEOS devices - Clearing playlists @@ -40,12 +41,12 @@ Add this integration to automate playback and group configuration of HEOS-capabl {% include integrations/config_flow.md %} {% note %} -Only a single instance of the integration is needed to access the entire HEOS system on the network. It will only connect to a single {% term host %}. +A single instance of the integration adds all devices in the HEOS system to Home Assistant. When setup through discovery, it will automatically select the best {% term host %}. The integration will automatically reconnect and fail over to other hosts in the HEOS system if the configured host goes offline. {% endnote %} {% configuration_basic %} Host: - description: "The host name or IP address (e.g., \"192.168.1.2\") of your HEOS-capable product. If you have more than one device, select, or enter a host, that is connected to the LAN via wire or has the strongest wireless signal." + description: "The host name or IP address (e.g., \"192.168.1.2\") of your HEOS-capable product. If you have more than one device, enter a host that is connected to the LAN via wire and is always powered on." {% endconfiguration_basic %} ## Configuration options @@ -218,6 +219,11 @@ data: | `entity_id` | yes | Remove this media player from any player groups. | +{% note %} + +Actions may fail if they cannot be processed by the HEOS device. For example, attempting to call `media_player.clear_playlist` when the queue is empty will result in an error. To prevent this from halting a script or automation, set [`continue_on_error: true`](/docs/scripts/#continuing-on-error) in the action call. +{% endnote %} + ## Supported devices Denon and Marantz do not currently publish an inventory of HEOS-enabled devices, however, many receiver and hi-fi products began including HEOS since 2013. Consult your product model to confirm support: diff --git a/source/_integrations/here_travel_time.markdown b/source/_integrations/here_travel_time.markdown index 22f420aaa82..145df81eef8 100644 --- a/source/_integrations/here_travel_time.markdown +++ b/source/_integrations/here_travel_time.markdown @@ -20,7 +20,9 @@ The `here_travel_time` sensor provides travel time from the [HERE Routing API](h You need to register for an API key by following the instructions in the [API Developer Guide](https://www.here.com/docs/bundle/routing-api-developer-guide-v8/page/topics/send-request.html). -HERE offers a Limited Plan which includes 1000 free transactions per day. If you are not [updating sensors on demand](#updating-sensors-on-demand-using-automation), you can track 3 routes without exceeding the limit. You can provide payment details to increase this to 5000 free transactions per day. More information can be found [on the pricing page](https://www.here.com/get-started/pricing) +HERE offers a Limited Plan which includes 1000 free transactions per day. If you are not [updating sensors on demand](#updating-sensors-on-demand-using-automation), you can track 3 routes without exceeding the limit. + +You can provide payment details if you want to pay for unlimited transactions. Be aware that the amount of transactions included for free in the paid plan might be _less_ than the 1000 transactions per day in the free plan. More information can be found [on the pricing page](https://www.here.com/get-started/pricing) {% include integrations/config_flow.md %} diff --git a/source/_integrations/home_connect.markdown b/source/_integrations/home_connect.markdown index e490197c65b..5fdae6f55f1 100644 --- a/source/_integrations/home_connect.markdown +++ b/source/_integrations/home_connect.markdown @@ -17,6 +17,7 @@ ha_domain: home_connect ha_codeowners: - '@DavidMStraub' - '@Diegorro98' + - '@MartinHjelmare' ha_config_flow: true ha_platforms: - binary_sensor @@ -41,31 +42,10 @@ The Home Connect integration allows users to integrate their home appliances sup - Control the light of your appliances. - Adjust the appliance settings. -The integration will add one Home Assistant device for each connected home appliance which will have the following entities: - -- A power switch -- If the device has programs: - - Two select entities that will allow you to select and start a program between the available ones. - - A timestamp sensor for remaining time and a numeric sensor for the progress percentage. -- Light: - - Hoods: - - Functional light: on/off and brightness - - Ambient light: on/off, brightness, HSV and RGB - - Dishwasher: on/off, brightness, HS and RGB - - Cooling appliances: Both, external and internal lights, on/off and brightness -- Numbers that set the temperature of cooling appliances. -- Time for alarm clock for cooktops and ovens. -- Multiple sensors that report the different states and events reported by the appliance. -- Binary sensors that show binary states of the appliance. - {% note %} Note that it depends on the appliance and on API permissions which of the features are supported. {% endnote %} -{% note %} -Some devices only have the state `on` and turn off is not supported by the appliance, check [power state availability at Home Connect API documentation](https://api-docs.home-connect.com/settings/#power-state) for more information. -{% endnote %} - ## Supported devices You can find information about supported devices on the [Home Connect website](https://www.home-connect.com/global/smart-home-appliances). @@ -110,14 +90,6 @@ Internal examples: `http://192.168.0.2:8123/auth/external/callback`, `http://hom The integration configuration will ask for the *Client ID* and *Client Secret* created above. See [Application Credentials](/integrations/application_credentials) for more details. -## Removing the integration - -This integration follows standard integration removal. No extra steps are required. - -{% include integrations/remove_device_service.md %} - -After deleting the integration, go to [your applications at the Home Connect Developer portal](https://developer.home-connect.com/applications), find the application that you were using for Home Assistant, click on details and click on "Delete Application". - ## Supported functionality {% note %} @@ -145,9 +117,18 @@ After deleting the integration, go to [your applications at the Home Connect Dev - **Bottle cooler door**: - **Description**: Indicates if the bottle cooler door is open. - **Availability**: Fridge freezer, Refrigerator +- **Common chiller door**: + - **Description**: Indicates if the common chiller door is open. + - **Availability**: Fridge freezer, Refrigerator - **Chiller door**: - **Description**: Indicates if the chiller door is open. - **Availability**: Fridge freezer, Refrigerator +- **Left chiller door**: + - **Description**: Indicates if the left chiller door is open. + - **Availability**: Fridge freezer, Refrigerator +- **Right chiller door**: + - **Description**: Indicates if the right chiller door is open. + - **Availability**: Fridge freezer, Refrigerator - **Flex compartment door**: - **Description**: Indicates if the flex compartment door is open. - **Availability**: Fridge freezer @@ -651,11 +632,11 @@ Both entities can use these options, but the availability of these will depend o Options: (click to view) - **Fan off** `cooking_hood_enum_type_stage_fan_off` - - **Fan stage 1** `cooking_hood_enum_type_stage_fan_stage01` - - **Fan stage 2** `cooking_hood_enum_type_stage_fan_stage02` - - **Fan stage 3** `cooking_hood_enum_type_stage_fan_stage03` - - **Fan stage 4** `cooking_hood_enum_type_stage_fan_stage04` - - **Fan stage 5** `cooking_hood_enum_type_stage_fan_stage05` + - **Fan stage 1** `cooking_hood_enum_type_stage_fan_stage_01` + - **Fan stage 2** `cooking_hood_enum_type_stage_fan_stage_02` + - **Fan stage 3** `cooking_hood_enum_type_stage_fan_stage_03` + - **Fan stage 4** `cooking_hood_enum_type_stage_fan_stage_04` + - **Fan stage 5** `cooking_hood_enum_type_stage_fan_stage_05` - **Intensive level**: @@ -687,14 +668,14 @@ Both entities can use these options, but the availability of these will depend o Options: (click to view) - **Cold**: `laundry_care_washer_enum_type_temperature_cold` - - **20ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c20` - - **30ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c30` - - **40ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c40` - - **50ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c50` - - **60ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c60` - - **70ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c70` - - **80ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c80` - - **90ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c90` + - **20ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_20` + - **30ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_30` + - **40ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_40` + - **50ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_50` + - **60ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_60` + - **70ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_70` + - **80ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_80` + - **90ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_90` - **Cold**: `laundry_care_washer_enum_type_temperature_ul_cold` - **Warm**: `laundry_care_washer_enum_type_temperature_ul_warm` - **Hot**: `laundry_care_washer_enum_type_temperature_ul_hot` @@ -708,13 +689,15 @@ Both entities can use these options, but the availability of these will depend o Options: (click to view) - **Off**: `laundry_care_washer_enum_type_spin_speed_off` - - **400 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m400` - - **600 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m600` - - **800 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m800` - - **1000 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m1000` - - **1200 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m1200` - - **1400 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m1400` - - **1600 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m1600` + - **400 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_400` + - **600 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_600` + - **700 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_700` + - **800 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_800` + - **900 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_900` + - **1000 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_1000` + - **1200 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_1200` + - **1400 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_1400` + - **1600 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_1600` - **Off**: `laundry_care_washer_enum_type_spin_speed_ul_off` - **Low**: `laundry_care_washer_enum_type_spin_speed_ul_low` - **Medium**: `laundry_care_washer_enum_type_spin_speed_ul_medium` @@ -859,30 +842,120 @@ All the event sensors will have the following possible values: {% enddetails %} -- **Freezer door alarm**: - - **Description**: Represents the alarm state of the freezer door. - - **Availability**: Freezer, Fridge freezer -- **Refrigerator door alarm**: - - **Description**: Represents the alarm state of the refrigerator door. - - **Availability**: Fridge freezer, Refrigerator -- **Freezer temperature alarm**: - - **Description**: Represents the alarm state of the freezer temperature. - - **Availability**: Freezer, Fridge freezer -- **Bean container empty**: - - **Description**: Indicates whether the bean container is empty. - - **Availability**: Coffee maker -- **Water tank empty**: - - **Description**: Indicates whether the water tank is empty. - - **Availability**: Coffee maker -- **Drip tray full**: - - **Description**: Indicates whether the drip tray is full. - - **Availability**: Coffee maker +- **Program aborted**: + - **Description**: Event triggered each time a program is successfully canceled. + - **Availability**: Cook processor, Cleaning robot, Dishwasher +- **Program finished**: + - **Description**: Event triggered each time a program run is successfully finished. + - **Availability**: Cook processor, Cooktop, Hood, Oven, Cleaning robot, Dishwasher, Washer, Washer dryer +- **Alarm clock elapsed**: + - **Description**: Event triggered when the alarm clock has elapsed. + - **Availability**: Cooktop, Oven +- **Pre-heat finished**: + - **Description**: Event triggered when **Fast pre-heat** program option is active and the preheating phase is finished. + - **Availability**: Cooktop, Oven +- **Regular pre-heat finished**: + - **Description**: Event triggered when the preheating phase is finished (and the **Fast pre-heat** option is not active nor supported). + - **Availability**: Oven +- **Drying process finished**: + - **Description**: Event triggered when the drying process is finished. + - **Availability**: Dryer - **Salt nearly empty**: - - **Description**: Indicates whether the salt is nearly empty. + - **Description**: Event triggered when the salt supply is running low. - **Availability**: Dishwasher - **Rinse aid nearly empty**: - - **Description**: Indicates whether the rinse aid is nearly empty. + - **Description**: Event triggered when the rinse aid supply is running low. - **Availability**: Dishwasher +- **Bean container empty**: + - **Description**: Event triggered when the bean container is empty. + - **Availability**: Coffee maker +- **Water tank empty**: + - **Description**: Event triggered when the water tank is empty. + - **Availability**: Coffee maker +- **Drip tray full**: + - **Description**: Event triggered when the drip tray is full. + - **Availability**: Coffee maker +- **Keep milk tank cool**: + - **Description**: Event triggered when the user should remove the milk container and put it in a cool place so that the milk stays fresh. + - **Availability**: Coffee maker +- **Descaling in 20 cups**: + - **Description**: Event triggered when there are 20 cups left before the descaling process is required. + - **Availability**: Coffee maker +- **Descaling in 15 cups**: + - **Description**: Event triggered when there are 15 cups left before the descaling process is required. + - **Availability**: Coffee maker +- **Descaling in 10 cups**: + - **Description**: Event triggered when there are 10 cups left before the descaling process is required. + - **Availability**: Coffee maker +- **Descaling in 5 cups**: + - **Description**: Event triggered when there are 5 cups left before the descaling process is required. + - **Availability**: Coffee maker +- **Device should be descaled**: + - **Description**: Event triggered when the device should be descaled. + - **Availability**: Coffee maker +- **Device descaling overdue**: + - **Description**: Event triggered when the device descaling is overdue. + - **Availability**: Coffee maker +- **Device descaling blockage**: + - **Description**: Event triggered when the device descaling is blocked. + - **Availability**: Coffee maker +- **Device should be cleaned**: + - **Description**: Event triggered when the device should be cleaned. + - **Availability**: Coffee maker +- **Device cleaning overdue**: + - **Description**: Event triggered when the device cleaning is overdue. + - **Availability**: Coffee maker +- **Calc'N'Clean in 20 cups**: + - **Description**: Event triggered when there are 20 cups left before the Calc'N'Clean process is required. + - **Availability**: Coffee maker +- **Calc'N'Clean in 15 cups**: + - **Description**: Event triggered when there are 15 cups left before the Calc'N'Clean process is required. + - **Availability**: Coffee maker +- **Calc'N'Clean in 10 cups**: + - **Description**: Event triggered when there are 10 cups left before the Calc'N'Clean process is required. + - **Availability**: Coffee maker +- **Calc'N'Clean in 5 cups**: + - **Description**: Event triggered when there are 5 cups left before the Calc'N'Clean process is required. + - **Availability**: Coffee maker +- **Device should be Calc'N'Cleaned**: + - **Description**: Event triggered when the device should be Calc'N'Cleaned. + - **Availability**: Coffee maker +- **Device Calc'N'Clean overdue**: + - **Description**: Event triggered when the device Calc'N'Clean is overdue. + - **Availability**: Coffee maker +- **Device Calc'N'Clean blockage**: + - **Description**: Event triggered when the device Calc'N'Clean is blocked. + - **Availability**: Coffee maker +- **Freezer door alarm**: + - **Description**: Event triggered when the freezer door was left open too long. + - **Availability**: Freezer, Fridge freezer +- **Refrigerator door alarm**: + - **Description**: Event triggered when the refrigerator door was left open too long. + - **Availability**: Fridge freezer, Refrigerator +- **Freezer temperature alarm**: + - **Description**: Event triggered when the freezer temperature is too high. + - **Availability**: Freezer, Fridge freezer +- **Empty dust box and clean filter**: + - **Description**: Event triggered when the user has to empty the dust box and clean the filter. + - **Availability**: Cleaning robot +- **Cleaning robot is stuck**: + - **Description**: Event triggered when the cleaning robot is stuck and isn't able to continue its run. + - **Availability**: Cleaning robot +- **Docking station not found**: + - **Description**: Event triggered when the cleaning robot wasn't able to find the charging station. + - **Availability**: Cleaning robot +- **Poor i-Dos 1 fill level**: + - **Description**: Event triggered when i-Dos content 1 is poor. + - **Availability**: Washer +- **Poor i-Dos 2 fill level**: + - **Description**: Event triggered when i-Dos content 2 is poor. + - **Availability**: Washer +- **Grease filter max saturation nearly reached**: + - **Description**: Event triggered when the grease filters need to be cleaned soon + - **Availability**: Hood +- **Grease filter max saturation reached**: + - **Description**: Event triggered when the grease filters are saturated + - **Availability**: Hood {% enddetails %} @@ -1002,7 +1075,6 @@ Changes a setting. | `key` | no | Key of the setting. | | `value` | no | Value of the setting. | - ## Automation examples Get started with these automation examples @@ -1077,6 +1149,12 @@ actions: This integration uses server-sent events from the Home Connect API to receive live updates from the appliances. When the configuration entry is loaded or after a streaming error (for example after disconnection), the integration will request all data (such as appliance info, available commands, programs, settings, and status) for all appliances. If a new appliance is added to the account, the integration will request data for the new appliance and expose the related entities automatically. + +## Known limitations + +- The Home Connect API does not fully match the Home Connect app. Some programs, options, or settings available in the app may not be accessible or usable via the API. +- This integration supports only one integration entry, as the Home Connect API does not allow for the unique identification of an account. + ## Troubleshooting ### I could not configure the Home Connect integration @@ -1100,6 +1178,35 @@ To solve the above issue, follow these steps: 3. Select the three dots {% icon "mdi:dots-vertical" %} menu from the application credentials you created for the Home Connect integration and select **Delete**. 4. Add the Home Connect integration again under {% my integrations title="**Settings** > **Devices & services**" %} +### Missing options at the "active program" and "selected program" entities + +#### Symptom: "Although I have options, some programs that are available on the app are not in the list of options at the "active program" and "selected program" entities" + +Some programs that are available to select on the app, on the physical device or in the diagnostics file from the device are missing at the "active program" and "selected program" entities. + +##### Description + +If you see programs in the app or the physical device that are missing in the integration, first check if they are available in the [diagnostics file](https://www.home-assistant.io/docs/configuration/troubleshooting/#download-diagnostics). If they are in the diagnostics file, it means the API can send them to the integration, but the integration can't recognize them. + +##### Solution + +The program key needs to be added to the integration. To help with that, you can open an issue at [aiohomeconnect](https://github.com/MartinHjelmare/aiohomeconnect) about the missing program key. + +#### Symptom: "No programs available at the "active program" and "selected program" entities nor in the diagnostics file" + +There are no programs available to select at the "active program" and "selected program" entities, and the downloaded device diagnostics file does not list any programs. + +##### Description + +The Home Connect API is not sending any programs to the integration. + +##### Solution + +There's no solution for this issue. The only thing that can be done is reporting the issue to Home Connect through these channels: + +- [Home Connect service and contact](https://www.home-connect.com/us/en/support/contact-and-service) +- [Home Connect developer Help & Support](https://developer.home-connect.com/support) + ### Unavailable entities for a device #### Symptom: "The entities related to an appliance were available but no longer are" @@ -1143,8 +1250,10 @@ To try to solve the above issues, follow these steps: - [Home Connect service and contact](https://www.home-connect.com/us/en/support/contact-and-service) - [Home Connect developer Help & Support](https://developer.home-connect.com/support) -## Known limitations +## Removing the integration -- The Home Connect API does not fully match the Home Connect app. Some programs, options, or settings available in the app may not be accessible or usable via the API. -- This integration supports only one integration entry, as the Home Connect API does not allow for the unique identification of an account. +This integration follows standard integration removal. No extra steps are required. +{% include integrations/remove_device_service.md %} + +After deleting the integration, go to [your applications at the Home Connect Developer portal](https://developer.home-connect.com/applications), find the application that you were using for Home Assistant, click on details and click on "Delete Application". diff --git a/source/_integrations/homeassistant.markdown b/source/_integrations/homeassistant.markdown index e468fdf2ff5..c6022b62da3 100644 --- a/source/_integrations/homeassistant.markdown +++ b/source/_integrations/homeassistant.markdown @@ -47,8 +47,6 @@ To get started with the general settings in YAML, follow these steps: 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" @@ -101,11 +99,11 @@ currency: 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." + 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. This can also be configured by navigating to **{% my network title="Settings > System > Network" %}**." 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." + description: "The URL that Home Assistant is available on from your local network. For example: `http://192.168.0.10:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported. This can also be configured by navigating to **{% my network title="Settings > System > Network" %}**." required: false type: string customize: diff --git a/source/_integrations/homee.markdown b/source/_integrations/homee.markdown index d1fcbcb2c09..3ec752e1fda 100644 --- a/source/_integrations/homee.markdown +++ b/source/_integrations/homee.markdown @@ -10,10 +10,12 @@ ha_codeowners: - '@Taraman17' ha_domain: homee ha_platforms: + - binary_sensor - button - cover - light - number + - select - sensor - switch - valve @@ -25,11 +27,13 @@ ha_quality_scale: bronze There is currently support for the following device types in Home Assistant: +- binary sensor - button - cover - light - number - sensor +- select - switch - valve diff --git a/source/_integrations/homekit.markdown b/source/_integrations/homekit.markdown index 0d8c72b7bf3..e04c82fe4a0 100644 --- a/source/_integrations/homekit.markdown +++ b/source/_integrations/homekit.markdown @@ -406,7 +406,7 @@ The following integrations are currently supported: | Integration | Type Name | Description | | ------------------------------------------------------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | alarm_control_panel | SecuritySystem | All security systems. | -| automation / input_boolean / remote / scene / script / vacuum | Switch | All represented as switches. | +| automation / input_boolean / lawn_mower / remote / scene / script / vacuum | Switch | All represented as switches. | | input_select / select | Switch | Represented as a power strip with buttons for each option. | | binary_sensor | Sensor | Support for `co2`, `door`, `garage_door`, `gas`, `moisture`, `motion`, `occupancy`, `opening`, `smoke` and `window` device classes. Defaults to the `occupancy` device class for everything else. | | camera | Camera | All camera devices. **HomeKit Secure Video is not supported at this time.** | diff --git a/source/_integrations/homematicip_cloud.markdown b/source/_integrations/homematicip_cloud.markdown index f78d2a88f1d..79957aa0a26 100644 --- a/source/_integrations/homematicip_cloud.markdown +++ b/source/_integrations/homematicip_cloud.markdown @@ -7,6 +7,7 @@ ha_category: - Button - Climate - Cover + - Event - Hub - Light - Lock @@ -42,6 +43,7 @@ There is currently support for the following device types within Home Assistant: - Button - Climate - Cover +- Event - Light - Lock - Sensor @@ -150,6 +152,9 @@ Within this delay the device registration should be completed in the App, otherw - Module for Hoermann drives (*HMIP-MOD-HO*) - Hunter Douglas & erfal window blinds (*HMIP-HDM1*) +- homematicip_cloud.event + - Doorbell Event for devices *HmIP-DSD-PCB* and others where ChannelRole equals DOOR_BELL_INPUT + - homematicip_cloud.light - Switch actuator and meter for brand switches (*HmIP-BSM*) - Dimming actuator for brand switches (*HmIP-BDT*) diff --git a/source/_integrations/humidifier.mqtt.markdown b/source/_integrations/humidifier.mqtt.markdown index 26039efe1c0..e82c0821ec6 100644 --- a/source/_integrations/humidifier.mqtt.markdown +++ b/source/_integrations/humidifier.mqtt.markdown @@ -59,7 +59,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -68,7 +68,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -84,7 +84,7 @@ current_humidity_topic: required: false type: string command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -145,7 +145,7 @@ device: required: false type: string device_class: - description: The device class of the MQTT device. Must be either `humidifier`, `dehumidifier` or `null`. + description: The [device class](/integrations/humidifier/#device-class) of the MQTT device. Must be either `humidifier`, `dehumidifier` or `null`. required: false type: string default: humidifier @@ -172,7 +172,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -234,7 +234,7 @@ payload_reset_mode: type: string default: '"None"' target_humidity_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `target_humidity_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `target_humidity_command_topic`. required: false type: template target_humidity_command_topic: @@ -246,11 +246,11 @@ target_humidity_state_topic: required: false type: string target_humidity_state_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value for the humidifier `target_humidity` state. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value for the humidifier `target_humidity` state. required: false type: template mode_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `mode_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `mode_command_topic`. required: false type: template mode_command_topic: @@ -262,7 +262,7 @@ mode_state_topic: required: false type: string mode_state_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value for the humidifier `mode` state. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value for the humidifier `mode` state. required: false type: template modes: @@ -289,7 +289,7 @@ state_topic: required: false type: string state_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the state." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value from the state." required: false type: template unique_id: diff --git a/source/_integrations/husqvarna_automower.markdown b/source/_integrations/husqvarna_automower.markdown index 35f2baed41b..90b2695470c 100644 --- a/source/_integrations/husqvarna_automower.markdown +++ b/source/_integrations/husqvarna_automower.markdown @@ -148,6 +148,7 @@ The integration will create the following sensors: - Battery level - Cutting blade usage time (if available) - Error. For example: *Mower tilted*, *outside geofence*. +- Downtime (if available) - Restricted reason. For example: *Week schedule*, *frost*, or *daily limit*. - Mode - Next start @@ -158,6 +159,7 @@ The integration will create the following sensors: - Total drive distance - Total running time - Total searching time +- Uptime (if available) - Work area (if available). For example: *My lawn*, *Front lawn*, *Back lawn* For each work area with activated systematic mowing these sensors are created: diff --git a/source/_integrations/igloohome.markdown b/source/_integrations/igloohome.markdown index e82d39cf611..9a606b4a7e8 100644 --- a/source/_integrations/igloohome.markdown +++ b/source/_integrations/igloohome.markdown @@ -15,9 +15,10 @@ ha_integration_type: integration ha_quality_scale: bronze --- -The **igloohome** {% term integration %} grants Home Assistant access to paired [smart access device\(s\)](https://www.igloohome.co/#products). The features of this integration includes: +The **igloohome** {% term integration %} grants Home Assistant access to paired [smart access device\(s\)](https://www.igloohome.co/#products) via the [igloodeveloper API](https://igloocompany.stoplight.io/docs/igloohome-api/1w1cuv56ge5xq-overview). The features of this integration include: - For [Bridge](https://www.igloohome.co/products/bridge) owners: + - Lock/Unlock/Open locks that are linked to a bridge. - Regular updates of all linked devices' battery level. - For non-bridge owners: @@ -76,3 +77,11 @@ Some generic troubleshooting steps: - Verify that your [API credentials](https://access.igloocompany.co/api-access) are correctly filled in. - Ensure your API credentials have not expired or been revoked. + +### Unable to lock/unlock/open lock + +- Verify that the bridge is: + - powered on + - has an active internet connection + - and is within Bluetooth range of the lock +- If you've changed the link between the bridge and the lock, reload the config entry. diff --git a/source/_integrations/image.mqtt.markdown b/source/_integrations/image.mqtt.markdown index 9186abdae55..7ff40d7cb14 100644 --- a/source/_integrations/image.mqtt.markdown +++ b/source/_integrations/image.mqtt.markdown @@ -48,7 +48,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -57,7 +57,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -153,7 +153,7 @@ image_topic: required: exclusive type: string json_attributes_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. required: false type: template json_attributes_topic: @@ -173,7 +173,7 @@ unique_id: required: false type: string url_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the image URL from a message received at `url_topic`. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the image URL from a message received at `url_topic`. required: false type: template url_topic: diff --git a/source/_integrations/inkbird.markdown b/source/_integrations/inkbird.markdown index 2dacbd1c3ef..867e3b68454 100644 --- a/source/_integrations/inkbird.markdown +++ b/source/_integrations/inkbird.markdown @@ -26,6 +26,9 @@ Integrates [INKBIRD](https://www.inkbird.com/) devices into Home Assistant. - [INKBIRD Bluetooth BBQ Thermometer IBT-6XS](https://inkbird.com/products/bluetooth-bbq-thermometer-ibt-6xs) - [INKBIRD Bluetooth Grill Thermometer IBT-4XS](https://inkbird.com/products/bluetooth-grill-thermometer-ibt-4xs) - [INKBIRD Bluetooth Grill Thermometer IBT-2X](https://inkbird.com/products/bluetooth-grill-thermometer-ibt-2x) +- [INKBIRD Bluetooth Hygrometer Thermometer ITH-11-B](https://inkbird.com/products/bluetooth-hygrometer-thermometer-ith-11-b) +- [INKBIRD Bluetooth Hygrometer Thermometer ITH-13-B](https://inkbird.com/products/bluetooth-hygrometer-thermometer-ith-13-b) +- [INKBIRD Bluetooth Hygrometer Thermometer ITH-21-B](https://inkbird.com/products/bluetooth-hygrometer-thermometer-ith-21-b) - [Nutrichef Smart Wireless Grill Thermometer](https://nutrichefkitchen.com/products/pwirbbq40) - [Nutrichef Smart Bluetooth BBQ Grill Thermometer](https://nutrichefkitchen.com/products/pwirbbq80-1) diff --git a/source/_integrations/iometer.markdown b/source/_integrations/iometer.markdown index ea05a12897a..19159751bd8 100644 --- a/source/_integrations/iometer.markdown +++ b/source/_integrations/iometer.markdown @@ -3,17 +3,18 @@ title: IOmeter description: Instructions on how to integrate IOmeter within Home Assistant. ha_release: 2025.3 ha_category: - - Sensor - Energy + - Sensor ha_codeowners: - '@MaestroOnICe' - - '@iometer-gmbh' ha_quality_scale: bronze ha_domain: iometer -ha_integration_type: integration +ha_integration_type: device ha_iot_class: Local Polling ha_config_flow: true ha_zeroconf: true +ha_platforms: + - sensor --- The **IOmeter** {% term integration %} fetches data from your [IOmeter](https://iometer.de/produkt/) device, by using the local HTTP API. @@ -50,6 +51,8 @@ The following sensors are supported: - Core power status: Battery or USB-C power for the IOmeter Core - Signal strength WiFi: WiFi connection strength of the Bridge - Signal strength Core/Bridge: Sub-GHz connection strength between Core and Bridge +- Core/Bridge connection status: If Core and Bridge are connected +- Core attachment status: If the IOmeter Core is attached to the electricity meter ## Troubleshooting diff --git a/source/_integrations/ipp.md b/source/_integrations/ipp.md index ffbcdb21318..6f0cb9a41c3 100644 --- a/source/_integrations/ipp.md +++ b/source/_integrations/ipp.md @@ -6,7 +6,6 @@ ha_category: ha_release: 0.108 ha_iot_class: Local Polling ha_config_flow: true -ha_quality_scale: platinum ha_codeowners: - '@ctalkington' ha_domain: ipp diff --git a/source/_integrations/iron_os.markdown b/source/_integrations/iron_os.markdown index b6ac0a69b78..ff8129f796c 100644 --- a/source/_integrations/iron_os.markdown +++ b/source/_integrations/iron_os.markdown @@ -102,6 +102,8 @@ The following controls allow you to customize the settings and options for your - **Button locking mode:** Configures whether buttons can be locked to prevent accidental presses, with options for disabled, full locking, or boost only. - **Display orientation mode:** Sets the display orientation with options for left-handed, right-handed, or automatic adjustment. - **Startup behavior:** Defines the mode the device enters on power-up: disabled, sleeping mode, idle mode (heat-off until moved), or soldering mode. +- **Soldering tip type:** Select the type of soldering tip in use: TS100 long/Hakko T12, Pinecil short, or PTS200 short. The auto-sense option enables automatic detection of the tip type. This feature requires IronOS v2.23 or higher. +- **Hall effect sleep timeout:** Specifies the duration of inactivity after which the device enters sleep mode when a hall effect sensor (if present) detects proximity to a magnet. This feature requires IronOS v2.23 or higher. ### User interface settings @@ -126,7 +128,7 @@ The following controls allow you to customize the settings and options for your - **Power Delivery timeout:** Defines how long the firmware will attempt to negotiate USB-PD before switching to Quick Charge. Lower values are recommended for faster PD negotiation. - **Power limit:** Sets a custom wattage cap for the device to maintain the **average** power below this value. Note: Peak power cannot be controlled. When using USB-PD, the limit will be the lower of this setting and the power supply's advertised wattage. - **Quick Charge voltage:** Adjusts the maximum voltage for Quick Charge negotiation. Does not affect USB-PD. Ensure the setting aligns with the current rating of your power supply for safety. -- **Power Delivery 3.1 EPR (Extended Power Range):** Enables EPR mode, allowing input voltages up to 28V with a [compatible USB-C power supply](https://wiki.pine64.org/wiki/Pinecil_Power_Supplies#EPR_PD3.1,_140W_Chargers) +- **Power Delivery 3.1 EPR (Extended Power Range):** Enables EPR mode, allowing input voltages up to 28V with a [compatible USB-C power supply](https://wiki.pine64.org/wiki/Pinecil_Power_Supplies#EPR_PD3.1,_140W_Chargers). Options are *on*, *off*, and *safe* (does not dynamically request more power). The *safe* option requires IronOS v2.23 or higher. ### Advanced settings @@ -149,7 +151,7 @@ Get started with this automation example for IronOS with a ready-to-use blueprin Automatically activate the fume extractor when soldering begins and deactivate it when the soldering iron is idle. -{% my blueprint_import badge blueprint_url="https://community.home-assistant.io/t/ironos-soldering-fume-extractor-automation-pinecil-v2/802156" %} +{% my blueprint_import badge blueprint_url="" %} {% details "Example YAML configuration" %} diff --git a/source/_integrations/islamic_prayer_times.markdown b/source/_integrations/islamic_prayer_times.markdown index 60d98d36281..74081d68936 100644 --- a/source/_integrations/islamic_prayer_times.markdown +++ b/source/_integrations/islamic_prayer_times.markdown @@ -58,7 +58,7 @@ Default: Islamic Society of North America A prayer times calculation method. Methods identify various schools of thought about how to compute the timings. If not specified, it defaults to Islamic Society of North America. -### Latatude Adjustment Method +### Latitude Adjustment Method Default: Middle of the night diff --git a/source/_integrations/jellyfin.markdown b/source/_integrations/jellyfin.markdown index 378ceed096a..439852d6149 100644 --- a/source/_integrations/jellyfin.markdown +++ b/source/_integrations/jellyfin.markdown @@ -9,7 +9,7 @@ ha_category: ha_release: '2021.12' ha_iot_class: Local Polling ha_codeowners: - - '@j-stienstra' + - '@RunC0deRun' - '@ctalkington' ha_config_flow: true ha_domain: jellyfin diff --git a/source/_integrations/jewish_calendar.markdown b/source/_integrations/jewish_calendar.markdown index 4fcfd3116d9..80cd540a228 100644 --- a/source/_integrations/jewish_calendar.markdown +++ b/source/_integrations/jewish_calendar.markdown @@ -84,53 +84,56 @@ Time sensor states are represented as ISO8601 formatted *UTC time*. ### Holiday sensor -The holiday sensor includes 3 attributes: *type*, *type_id*, and *id*. -The *type_id* is useful for cases to condition automations based on a range of types. +The holiday sensor includes 2 attributes: *type*, and *id*. + +The *id* is useful for automations so they're not language-dependent. On Rosh Chodesh Tevet, which always falls on Chanukah, the sensor will report both values: "Rosh Chodesh, Chanukah". +In Israel, on the 30th of Shvat, the sensor will report: "Rosh Chodesh, Family day". On the 22nd of Tishrei it will report: "Shmini Atzeret, Simchat Torah". + The following is the list of holidays the sensor knows about with their selected type: -| ID | English | Hebrew | Type | Type_ID | -|----------------------|----------------------------|-----------------------|---------------------------|:-------:| -| erev_rosh_hashana | Erev Rosh Hashana | ערב ראש השנה | EREV_YOM_TOV | 2 | -| rosh_hashana_i | Rosh Hashana I | א' ראש השנה | YOM_TOV | 1 | -| rosh_hashana_ii | Rosh Hashana II | ב' ראש השנה | YOM_TOV | 1 | -| tzom_gedaliah | Tzom Gedaliah | צום גדליה | FAST_DAY | 5 | -| erev_yom_kippur | Erev Yom Kippur | עיוה"כ | EREV_YOM_TOV | 2 | -| yom_kippur | Yom Kippur | יום הכפורים | YOM_TOV | 1 | -| erev_sukkot | Erev Sukkot | ערב סוכות | EREV_YOM_TOV | 2 | -| sukkot | Sukkot | סוכות | YOM_TOV | 1 | -| sukkot_ii | Sukkot II | שני של סוכות | YOM_TOV | 1 | -| hol_hamoed_sukkot | Hol hamoed Sukkot | חול המועד סוכות | HOL_HAMOED | 3 | -| hoshana_raba | Hoshana Raba | הושענא רבה | EREV_YOM_TOV | 2 | -| shmini_atzeret | Shmini Atzeret | שמיני עצרת | YOM_TOV | 1 | -| simchat_torah | Simchat Torah | שמחת תורה | YOM_TOV | 1 | -| chanukah | Chanukah | חנוכה | MELACHA_PERMITTED_HOLIDAY | 4 | -| rabin_memorial_day | Yitzhak Rabin memorial day | יום הזכרון ליצחק רבין | MEMORIAL_DAY | 8 | -| asara_btevet | Asara B'Tevet | צום עשרה בטבת | FAST_DAY | 5 | -| tu_bshvat | Tu B'Shvat | ט"ו בשבט | MINOR_HOLIDAY | 7 | -| family_day | Family Day | יום המשפחה | ISRAEL_NATIONAL_HOLIDAY | 9 | -| memorial_day_unknown | Memorial day for fallen whose place of burial is unknown | יום הזיכרון לחללי מערכות ישראל שמקום קבורתם לא נודע | MEMORIAL_DAY | 8 | -| taanit_esther | Ta'anit Esther | תענית אסתר | FAST_DAY | 5 | -| purim | Purim | פורים | MELACHA_PERMITTED_HOLIDAY | 4 | -| shushan_purim | Shushan Purim | שושן פורים | MELACHA_PERMITTED_HOLIDAY | 4 | -| erev_pesach | Erev Pesach | ערב פסח | EREV_YOM_TOV | 2 | -| pesach | Pesach | פסח | YOM_TOV | 1 | -| pesach_ii | Pesach II | שני של פסח | YOM_TOV | 1 | -| hol_hamoed_pesach | Hol hamoed Pesach | חול המועד פסח | HOL_HAMOED | 3 | -| pesach_vii | Pesach VII | שביעי פסח | YOM_TOV | 1 | -| pesach_viii | Pesach VIII | אחרון של פסח | YOM_TOV | 1 | -| yom_hashoah | Yom HaShoah | יום השואה | MEMORIAL_DAY | 8 | -| yom_hazikaron | Yom HaZikaron | יום הזכרון | MEMORIAL_DAY | 8 | -| yom_haatzmaut | Yom HaAtzma'ut | יום העצמאות | MODERN_HOLIDAY | 6 | -| lag_bomer | Lag B'Omer | ל"ג בעומר | MINOR_HOLIDAY | 7 | -| yom_yerushalayim | Yom Yerushalayim | יום ירושלים | MODERN_HOLIDAY | 6 | -| erev_shavuot | Erev Shavuot | ערב שבועות | EREV_YOM_TOV | 2 | -| shavuot | Shavuot | שבועות | YOM_TOV | 1 | -| shavuot_ii | Shavuot II | שני של שבועות | YOM_TOV | 1 | -| tzom_tammuz | Tzom Tammuz | צום שבעה עשר בתמוז | FAST_DAY | 5 | -| zeev_zhabotinsky_day | Zeev Zhabotinsky day | יום זאב ז'בוטינסקי | MEMORIAL_DAY | 8 | -| tisha_bav | Tish'a B'Av | תשעה באב | FAST_DAY | 5 | -| tu_bav | Tu B'Av | ט"ו באב | MINOR_HOLIDAY | 7 | -| rosh_chodesh | Rosh Chodesh | ראש חודש | ROSH_CHODESH | 10 | +| ID | English | Hebrew | Type | +|----------------------|----------------------------|-----------------------|---------------------------| +| erev_rosh_hashana | Erev Rosh Hashana | ערב ראש השנה | EREV_YOM_TOV | +| rosh_hashana_i | Rosh Hashana I | א' ראש השנה | YOM_TOV | +| rosh_hashana_ii | Rosh Hashana II | ב' ראש השנה | YOM_TOV | +| tzom_gedaliah | Tzom Gedaliah | צום גדליה | FAST_DAY | +| erev_yom_kippur | Erev Yom Kippur | עיוה"כ | EREV_YOM_TOV | +| yom_kippur | Yom Kippur | יום הכפורים | YOM_TOV | +| erev_sukkot | Erev Sukkot | ערב סוכות | EREV_YOM_TOV | +| sukkot | Sukkot | סוכות | YOM_TOV | +| sukkot_ii | Sukkot II | שני של סוכות | YOM_TOV | +| hol_hamoed_sukkot | Hol hamoed Sukkot | חול המועד סוכות | HOL_HAMOED | +| hoshana_raba | Hoshana Raba | הושענא רבה | EREV_YOM_TOV | +| shmini_atzeret | Shmini Atzeret | שמיני עצרת | YOM_TOV | +| simchat_torah | Simchat Torah | שמחת תורה | YOM_TOV | +| chanukah | Chanukah | חנוכה | MELACHA_PERMITTED_HOLIDAY | +| rabin_memorial_day | Yitzhak Rabin memorial day | יום הזכרון ליצחק רבין | MEMORIAL_DAY | +| asara_btevet | Asara B'Tevet | צום עשרה בטבת | FAST_DAY | +| tu_bshvat | Tu B'Shvat | ט"ו בשבט | MINOR_HOLIDAY | +| family_day | Family Day | יום המשפחה | ISRAEL_NATIONAL_HOLIDAY | +| memorial_day_unknown | Memorial day for fallen whose place of burial is unknown | יום הזיכרון לחללי מערכות ישראל שמקום קבורתם לא נודע | MEMORIAL_DAY | +| taanit_esther | Ta'anit Esther | תענית אסתר | FAST_DAY | +| purim | Purim | פורים | MELACHA_PERMITTED_HOLIDAY | +| shushan_purim | Shushan Purim | שושן פורים | MELACHA_PERMITTED_HOLIDAY | +| erev_pesach | Erev Pesach | ערב פסח | EREV_YOM_TOV | +| pesach | Pesach | פסח | YOM_TOV | +| pesach_ii | Pesach II | שני של פסח | YOM_TOV | +| hol_hamoed_pesach | Hol hamoed Pesach | חול המועד פסח | HOL_HAMOED | +| pesach_vii | Pesach VII | שביעי פסח | YOM_TOV | +| pesach_viii | Pesach VIII | אחרון של פסח | YOM_TOV | +| yom_hashoah | Yom HaShoah | יום השואה | MEMORIAL_DAY | +| yom_hazikaron | Yom HaZikaron | יום הזכרון | MEMORIAL_DAY | +| yom_haatzmaut | Yom HaAtzma'ut | יום העצמאות | MODERN_HOLIDAY | +| lag_bomer | Lag B'Omer | ל"ג בעומר | MINOR_HOLIDAY | +| yom_yerushalayim | Yom Yerushalayim | יום ירושלים | MODERN_HOLIDAY | +| erev_shavuot | Erev Shavuot | ערב שבועות | EREV_YOM_TOV | +| shavuot | Shavuot | שבועות | YOM_TOV | +| shavuot_ii | Shavuot II | שני של שבועות | YOM_TOV | +| tzom_tammuz | Tzom Tammuz | צום שבעה עשר בתמוז | FAST_DAY | +| zeev_zhabotinsky_day | Zeev Zhabotinsky day | יום זאב ז'בוטינסקי | MEMORIAL_DAY | +| tisha_bav | Tish'a B'Av | תשעה באב | FAST_DAY | +| tu_bav | Tu B'Av | ט"ו באב | MINOR_HOLIDAY | +| rosh_chodesh | Rosh Chodesh | ראש חודש | ROSH_CHODESH | diff --git a/source/_integrations/lawn_mower.mqtt.markdown b/source/_integrations/lawn_mower.mqtt.markdown index af41a8f0fb2..e75bb881fcc 100644 --- a/source/_integrations/lawn_mower.mqtt.markdown +++ b/source/_integrations/lawn_mower.mqtt.markdown @@ -28,7 +28,7 @@ activity_state_topic: required: false type: string activity_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value." required: false type: template availability: @@ -51,7 +51,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -64,7 +64,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template device: @@ -121,7 +121,7 @@ device: required: false type: string dock_command_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-command-templates-with-mqtt) to generate the payload to send to `dock_command_topic`. The `value` parameter in the template will be set to `dock`. required: false type: template dock_command_topic: @@ -151,7 +151,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false type: template json_attributes_topic: @@ -172,7 +172,7 @@ optimistic: type: boolean default: "`true` if no `activity_state_topic` defined, else `false`." pause_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `pause_command_topic`. The `value` parameter in the template will be set to `pause`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `pause_command_topic`. The `value` parameter in the template will be set to `pause`. required: false type: template pause_command_topic: @@ -189,7 +189,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 `start_mowing_command_topic`. The `value` parameter in the template will be set to `start_mowing`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) 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: diff --git a/source/_integrations/lg_thinq.markdown b/source/_integrations/lg_thinq.markdown index ca0b16d2e00..4986fbceb64 100644 --- a/source/_integrations/lg_thinq.markdown +++ b/source/_integrations/lg_thinq.markdown @@ -127,29 +127,30 @@ The properties for controlling both the temperature and wind strength of the app | Device | Property | | ------ | -------- | -| Air Conditioner | Current temperature
Fan mode
HVAC mode
Preset mode
Temperature
Temperature cool
Temperature heat
Unit | +| Air Conditioner | Current temperature
Fan mode
Swing mode
Swing horizontal mode
HVAC mode
Preset mode
Temperature
Temperature cool
Temperature heat
Unit | | System Boiler | Current temperature
HVAC mode
Temperature
Temperature cool
Temperature heat
Unit | ### Event -A notification message pushed from the server is represented as an event platform. +A notification message pushed from the server is represented as an event platform. The **Notification codes** shows the full support range, and you can check the range of your device through the developer tools. -| Device | Property | -| ------ | -------- | -| Air Conditioner | Notification | -| Air Purifier| Notification | -| Air Purifier Fan | Notification | -| Dehumidifier | Notification | -| Dish Washer | Error
Notification | -| Humidifier | Notification | -| Kimchi Refrigerator | Notification | -| Microwave Oven | Notification | -| Oven | Notification | -| Refrigerator | Notification | -| Robot Cleaner | Error
Notification | -| Stick Cleaner | Notification | -| Dryer
Styler
Washer
Washcombo Main
Washcombo Mini
Washtower
Washtower Dryer
Washtower Washer | Error
Notification | -| Wine Cellar | Notification | +| Device | Property | Notification codes | +| ------ | -------- | ---------- | +| Air Conditioner | Notification | water_is_full | +| Air Purifier| Notification | lack_of_water, time_to_clean_filter, pollution_is_high, time_to_change_filter | +| Air Purifier Fan | Notification | time_to_change_filter | +| Dehumidifier | Notification | water_is_full | +| Dish Washer | Error
Notification | cleaning_is_complete, error_during_cleaning, water_leak_has_occurred, rinse_is_not_enough, salt_refill_is_needed | +| Humidifier | Notification | time_to_change_filter, lack_of_water | +| Kimchi Refrigerator | Notification | door_is_open | +| Microwave Oven | Notification | none | +| Oven | Notification | preheating_is_complete, cooking_is_complete, time_to_clean, error_has_occurred | +| Refrigerator | Notification | time_to_change_filter, time_to_change_water_filter, frozen_is_complete, door_is_open | +| Robot Cleaner | Error
Notification | - | +| Stick Cleaner | Notification | charging_is_complete, time_to_clean_filter | +| Washer
Dryer
Washcombo Main
Washcombo Mini
Washtower
Washtower Dryer
Washtower Washer | Error
Notification | washing_is_complete, error_during_washing, drying_is_complete, drying_failed | +| Styler | Error
Notification | styling_is_complete, error_has_occurred | +| Wine Cellar | Notification | door_is_open | ### Fan @@ -172,7 +173,7 @@ A read-write property which has a numeric value is represented as a number platf | Microwave Oven | Fan
Light | | Oven | Temperature | | Refrigerator | Temperature | -| Dryer
Styler
Washer
Washcombo Main
Washcombo Mini
Washtower
Washtower Dryer
Washtower Washer | Delay ends in | +| Dryer
Styler
Washer
Washcombo Main
Washcombo Mini
Washtower
Washtower Dryer
Washtower Washer | Delayed start/end | | Water Heater | Temperature | | Wine Cellar | Light
Temperature | @@ -200,13 +201,13 @@ A read-write property which has only two states that can be toggled is represent | Device | Property | | ------ | -------- | -| Air Conditioner | Energy saving | +| Air Conditioner | Power
Lighting
Energy saving | | Air Purifier | Power | | Air Purifier Fan | Heating
Power
UVnano | | Dehumidifier | Power | | Humidifier | Auto mode
Heating
Mood light
Power
Sleep mode | -| Refrigerator | Ice plus
Quick freeze | -| System Boiler | Hot water | +| Refrigerator | Express mode
Express cool
Quick freeze | +| System Boiler | Power
Hot water | | Wine Cellar | Ventilation | ### Vacuum @@ -217,6 +218,14 @@ The properties for controlling the clean operations of the appliance are represe | ------ | -------- | | Robot Cleaner | Battery
Current status
Operation | +### Water heater + +The properties for controlling the operating mode and temperature are represented as a water_heater platform. + +| Device | Property | +| ------ | -------- | +| Water heater | Mode
Current temperature
Temperature | + ### Sensor A read-only property which has states is represented as a sensor platform. @@ -228,8 +237,8 @@ A read-only property which has states is represented as a sensor platform. | Air Purifier Fan | Air quality sensor
Humidity
Odor
Overall air quality
PM1
PM10
PM2.5
Sleep timer
Temperature
Schedule turn-off
Schedule turn-on | | Cooktop | Current status
Power level | | Dehumidifier | Humidity
Operating mode | -| Dish Washer | Current cycle
Current status
Rinse aid dispenser level
Softening level
Delay in
Remaining time
Total time | -| Home Brew| Brewing duration
Brewing period
Current status
Flavor
Homebrew recipe
Hops
Recipe progress
Wort
Yeast | +| Dish Washer | Current cycle
Current status
Rinse aid dispenser level
Softening level
Delayed start
Remaining time
Total time | +| Home Brew| Brewing duration
Brewing period
Current status
First flavor
Second flavor
Homebrew recipe
First hop
Second hop
Recipe progress
Wort
Yeast | | Humidifier | Air quality sensor
Humidity
Overall air quality
PM1
PM10
PM2.5
Schedule turn-off
Schedule turn-on
Sleep timer
Temperature | | Kimchi Refrigerator | Fresh air filter
Temperature | | Microwave Oven | Current status | @@ -238,16 +247,16 @@ A read-only property which has states is represented as a sensor platform. | Refrigerator | Fresh air filter
Water filter used | | Robot Cleaner | Current status
Operating mode
Running time | | Stick Cleaner | Battery
Current status
Operating mode | -| Water Heater | Temperature | +| System Boiler | Indoor temperature
Inlet temperature
Outlet temperature | | Water Purifier | High-temp sterilization
Type
UVnano| -| Dryer
Styler
Washer
Washcombo Main
Washcombo Mini
Washtower
Washtower Dryer
Washtower Washer | Current status
Delay in
Remaining time
Total time | +| Dryer
Styler
Washer
Washcombo Main
Washcombo Mini
Washtower
Washtower Dryer
Washtower Washer | Current status
Delayed start/end
Remaining time
Total time
Cycles | -### Custom card configuration +## User guide +### 1. Custom card configuration (HACS) -#### Timer Bar Card - -- Supported devices: Washer, Dryer, Styler, Dish washer -- Entities: sensor.washer_current_status, sensor.washer_remaining_time, sensor.washer_total_time +**- Timer Bar Card** +> - Supported devices: Washer, Dryer, Styler, Dish washer +> - Used entities: sensor.washer_**current_status**, sensor.washer_**remaining_time**, sensor.washer_**total_time** ```yaml type: custom:timer-bar-card @@ -274,6 +283,130 @@ entities: invert: true ``` +### 2. Automation + +#### 1) Air conditioner, climate + +> - Currently the Climate's set_hvac_mode, set_temperature service is not working properly. Each control must operate sequentially, but conditional wait for this has not yet been implemented in ThinQ integration. +> - We provide a script that can do turn_on, set_hvac_mode, and set_temperature at once, so please use it for automation. +> - Create a new script in 'CREATE SCRIPT' using the code below, then select the script in the 'Action' field. +> - This conditional wait is scheduled to be implemented in core 2025.4. + +{% raw %} + +```yaml +alias: LG ThinQ climate +description: "Action turn_on, set_hvac_mode, set_temperature" +fields: + input_device: + selector: + device: + filter: + - integration: lg_thinq + name: Device + required: true + input_entity: + selector: + entity: + filter: + - integration: lg_thinq + domain: climate + name: Entity + required: true + input_hvac: + selector: + select: + options: + - label: Off + value: off + - label: Auto + value: auto + - label: Cool + value: cool + - label: Dry + value: dry + - label: Fan only + value: fan_only + - label: Heat/cool + value: heat_cool + - label: Heat + value: heat + name: HVAC mode + required: true + default: cool + input_temperature: + selector: + number: + min: 1 + max: 100 + name: Target temperature + required: true + default: 18 +sequence: + - sequence: + - variables: + entity_name: "{{ input_entity.split('.')[1] }}" + - if: + - condition: template + value_template: >- + {{ input_hvac != 'off' and states('climate.'+ entity_name) == 'off' }} + then: + - action: climate.turn_on + target: + device_id: "{{ input_device }}" + data: {} + - wait_template: "{{ states('climate.'+ entity_name) != 'off' }}" + - if: + - condition: template + value_template: "{{ states('climate.'+ entity_name) != input_hvac }}" + then: + - action: climate.set_hvac_mode + data: + hvac_mode: "{{ input_hvac }}" + target: + device_id: "{{ input_device }}" + - wait_template: "{{ states('climate.'+ entity_name) == input_hvac }}" + - if: + - condition: template + value_template: "{{ input_hvac != 'off' }}" + then: + - action: climate.set_temperature + data: + temperature: "{{ input_temperature }}" + target: + device_id: "{{ input_device }}" +``` + +{% endraw %} + +#### 2) Notification, error event + +> - Guide: [Automating on event](https://www.home-assistant.io/integrations/event/#automating-on-a-button-press) +> - Important: guide's step 3, 4 +> - You can select the state change you want to act as trigger in step 4 + +{% raw %} + +```yaml +alias: lack of water example +description: Toggle switch when air purifier's lack_of_water +triggers: + - trigger: state + entity_id: + - event.purifier_notification +actions: + - condition: state + entity_id: event.purifier_notification + attribute: event_type + state: lack_of_water + - type: toggle + device_id: xxxxxxxx + entity_id: xxxxxxxx + domain: switch +``` + +{% endraw %} + ## Troubleshooting ### Setup @@ -293,5 +426,9 @@ The LG ThinQ integration will work properly after some time. ## Debugging / Issue report The LG ThinQ integration will show additional information by enabling log configuration. -1. Enable debug logging in /config/integrations/integration/lg_thinq, -2. Please report your device info (screenshot including name, device type, entities) and logs. +1. [Enable debug logging](/docs/configuration/troubleshooting/#enabling-debug-logging). + - If you change **Enable** to **Disable**, the log will be saved to the download folder. +2. When reporting an issue: + - Provide screenshots of your device configuration (including device name, type, and entities). + - Include the debug logs. + - Describe the expected behavior and what's not working. diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown index adc2a7ea6e1..c8276c611eb 100644 --- a/source/_integrations/light.mqtt.markdown +++ b/source/_integrations/light.mqtt.markdown @@ -70,7 +70,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -79,7 +79,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -91,7 +91,7 @@ brightness_command_topic: required: false type: string brightness_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `brightness_command_topic`. Available variables: `value`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `brightness_command_topic`. Available variables: `value`." required: false type: template brightness_scale: @@ -104,7 +104,7 @@ brightness_state_topic: required: false type: string brightness_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the brightness value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the brightness value." required: false type: template color_mode_state_topic: @@ -112,11 +112,11 @@ color_mode_state_topic: required: false type: string color_mode_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the color mode." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the color mode." required: false type: template color_temp_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `color_temp_command_topic`. Available variables: `value`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `color_temp_command_topic`. Available variables: `value`." required: false type: template color_temp_command_topic: @@ -133,7 +133,7 @@ color_temp_state_topic: required: false type: string color_temp_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the color temperature value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the color temperature value." required: false type: template command_topic: @@ -216,7 +216,7 @@ effect_command_topic: required: false type: string effect_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `effect_command_topic`. Available variables: `value`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `effect_command_topic`. Available variables: `value`." required: false type: template effect_list: @@ -228,11 +228,11 @@ effect_state_topic: required: false type: string effect_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the effect value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the effect value." required: false type: template hs_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `hs_command_topic`. Available variables: `hue` and `sat`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `hs_command_topic`. Available variables: `hue` and `sat`." required: false type: template hs_command_topic: @@ -247,7 +247,7 @@ hs_state_topic: required: false type: string hs_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the HS value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the HS value." required: false type: template icon: @@ -255,7 +255,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -309,12 +309,12 @@ payload_not_available: type: string default: offline payload_off: - description: The payload that represents disabled state. + description: The payload that represents the off state. required: false type: string default: "OFF" payload_on: - description: The payload that represents enabled state. + description: The payload that represents the on state. required: false type: string default: "ON" @@ -333,7 +333,7 @@ retain: type: boolean default: false rgb_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `rgb_command_topic`. Available variables: `red`, `green` and `blue`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `rgb_command_topic`. Available variables: `red`, `green` and `blue`." required: false type: template rgb_command_topic: @@ -345,11 +345,11 @@ rgb_state_topic: required: false type: string rgb_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the RGB value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the RGB value." required: false type: template rgbw_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `rgbw_command_topic`. Available variables: `red`, `green`, `blue` and `white`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `rgbw_command_topic`. Available variables: `red`, `green`, `blue` and `white`." required: false type: template rgbw_command_topic: @@ -361,11 +361,11 @@ rgbw_state_topic: required: false type: string rgbw_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the RGBW value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the RGBW value." required: false type: template rgbww_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `rgbww_command_topic`. Available variables: `red`, `green`, `blue`, `cold_white` and `warm_white`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `rgbww_command_topic`. Available variables: `red`, `green`, `blue`, `cold_white` and `warm_white`." required: false type: template rgbww_command_topic: @@ -377,20 +377,20 @@ rgbww_state_topic: required: false type: string rgbww_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the RGBWW value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the RGBWW value." required: false type: template schema: - description: The schema to use. Must be `default` or omitted to select the default schema. + description: The schema to use. Must be `basic` or omitted to select the default schema. required: false type: string - default: default + default: basic state_topic: description: "The MQTT topic subscribed to receive state updates. A \"None\" payload resets to an `unknown` state. An empty payload is ignored. By default, valid state payloads are `OFF` and `ON`. The accepted payloads can be overridden with the `payload_off` and `payload_on` config options." required: false type: string state_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the state value. The template should return the `payload_on` and `payload_off` values, so if your light uses `power on` to turn on, your `state_value_template` string should return `power on` when the switch is on. For example, if the message is just `on`, your `state_value_template` should be `power {{ value }}`. When your `payload_on = 27` and `payload_off = 'off'`, then this template might be `'off' if value_json.my_custom_brightness_field <= 0 else 27`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the state value. The template should return the values defined by `payload_on` (defaults to \"ON\") and `payload_off` (defaults to \"OFF\") settings, or \"None\"." required: false type: template unique_id: @@ -407,7 +407,7 @@ white_scale: type: integer default: 255 xy_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `xy_command_topic`. Available variables: `x` and `y`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `xy_command_topic`. Available variables: `x` and `y`." required: false type: template xy_command_topic: @@ -419,7 +419,7 @@ xy_state_topic: required: false type: string xy_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the XY value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the XY value." required: false type: template {% endconfiguration %} @@ -571,7 +571,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -580,7 +580,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -681,7 +681,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -748,7 +748,7 @@ schema: description: The schema to use. Must be `json` to select the JSON schema. required: false type: string - default: default + default: basic state_topic: description: 'The MQTT topic subscribed to receive state updates in a JSON-format. The JSON payload may contain the elements: `"state"`: `"ON"` the light is on, `"OFF"` the light is off, `null` the state is `unknown`; `"color_mode"`: one of the `supported_color_modes`; `"color"`: A dict with the color attributes*; `"brightness"`: The brightness; `"color_temp"`: The color temperature; `"effect"`: The effect of the light.' required: false @@ -969,7 +969,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -978,7 +978,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -986,11 +986,11 @@ availability_topic: required: false type: string blue_template: - description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract blue color from the state payload value. Expected result of the template is an integer from 0-255 range." + description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract blue color from the state payload value. Expected result of the template is an integer from 0-255 range." required: false type: template brightness_template: - description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract brightness from the state payload value. Expected result of the template is an integer from 0-255 range." + description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract brightness from the state payload value. Expected result of the template is an integer from 0-255 range." required: false type: template color_temp_kelvin: @@ -999,15 +999,15 @@ color_temp_kelvin: type: boolean default: false color_temp_template: - description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract color temperature from the state payload value. Expected result of the template is an integer. If `color_temp_kelvin` is `true` the expected value is in Kelvin else mireds are expected." + description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract color temperature from the state payload value. Expected result of the template is an integer. If `color_temp_kelvin` is `true` the expected value is in Kelvin else mireds are expected." required: false type: template command_off_template: - description: "The [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) for *off* state changes. Available variables: `state` and `transition`." + description: "The [template](/docs/configuration/templating/#using-command-templates-with-mqtt) for *off* state changes. Available variables: `state` and `transition`." required: true type: template command_on_template: - description: "The [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) for *on* state changes. Available variables: `state`, `brightness`, `color_temp`, `red`, `green`, `blue`, `hue`, `sat`, `flash`, `transition` and `effect`. Values `red`, `green`, `blue`, `brightness` are provided as integers from range 0-255. Value of `hue` is provided as float from range 0-360. Value of `sat` is provided as float from range 0-100. Value of `color_temp` is provided as integer representing mired or Kelvin units if `color_temp_kelvin` is `true`." + description: "The [template](/docs/configuration/templating/#using-command-templates-with-mqtt) for *on* state changes. Available variables: `state`, `brightness`, `color_temp`, `red`, `green`, `blue`, `hue`, `sat`, `flash`, `transition` and `effect`. Values `red`, `green`, `blue`, `brightness` are provided as integers from range 0-255. Value of `hue` is provided as float from range 0-360. Value of `sat` is provided as float from range 0-100. Value of `color_temp` is provided as integer representing mired or Kelvin units if `color_temp_kelvin` is `true`." required: true type: template command_topic: @@ -1070,11 +1070,11 @@ effect_list: required: false type: [string, list] effect_template: - description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract effect from the state payload value." + description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract effect from the state payload value." required: false type: template green_template: - description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract green color from the state payload value. Expected result of the template is an integer from 0-255 range." + description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract green color from the state payload value. Expected result of the template is an integer from 0-255 range." required: false type: template icon: @@ -1082,7 +1082,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -1141,16 +1141,16 @@ qos: type: integer default: 0 red_template: - description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract red color from the state payload value. Expected result of the template is an integer from 0-255 range." + description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract red color from the state payload value. Expected result of the template is an integer from 0-255 range." required: false type: template schema: description: The schema to use. Must be `template` to select the template schema. required: false type: string - default: default + default: basic state_template: - description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract state from the state payload value." + description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract state from the state payload value." required: false type: template state_topic: diff --git a/source/_integrations/linak.markdown b/source/_integrations/linak.markdown index fbf77cbb16d..516ca4beb38 100644 --- a/source/_integrations/linak.markdown +++ b/source/_integrations/linak.markdown @@ -1,22 +1,22 @@ --- title: LINAK -description: Connect and control your LINAK motorized desks the IKEA Idåsen Desk integration +description: Connect and control your LINAK devices using the IKEA Idasen Desk integration ha_category: - Cover ha_domain: linak -ha_iot_class: Local Push ha_integration_type: virtual ha_supporting_domain: idasen_desk ha_supporting_integration: IKEA Idåsen Desk -ha_release: '2025.03' +ha_release: '2023.10' ha_codeowners: - '@abmantis' ha_config_flow: true -ha_quality_scale: bronze ha_platforms: - button - cover - sensor +ha_iot_class: Local Push +ha_bluetooth: true --- {% include integrations/supported_brand.md %} diff --git a/source/_integrations/linkedgo.markdown b/source/_integrations/linkedgo.markdown new file mode 100644 index 00000000000..96243799b2c --- /dev/null +++ b/source/_integrations/linkedgo.markdown @@ -0,0 +1,49 @@ +--- +title: LinkedGo +description: Integrate LinkedGo (Powered by Shelly) devices +ha_category: + - Binary sensor + - Climate + - Cover + - Energy + - Event + - Light + - Number + - Select + - Sensor + - Switch + - Text + - Update + - Valve +ha_release: '0.115' +ha_codeowners: + - '@balloob' + - '@bieniu' + - '@thecode' + - '@chemelli74' + - '@bdraco' +ha_iot_class: Local Push +ha_domain: linkedgo +ha_config_flow: true +ha_zeroconf: true +ha_platforms: + - binary_sensor + - button + - climate + - cover + - diagnostics + - event + - light + - number + - select + - sensor + - switch + - text + - update + - valve +ha_integration_type: virtual +ha_supporting_domain: shelly +ha_supporting_integration: Shelly +--- + +{% include integrations/supported_brand.md %} diff --git a/source/_integrations/linx.markdown b/source/_integrations/linx.markdown index 07b455bbb5d..8fa842f9bf3 100644 --- a/source/_integrations/linx.markdown +++ b/source/_integrations/linx.markdown @@ -7,7 +7,7 @@ ha_domain: linx ha_integration_type: virtual ha_supporting_domain: motion_blinds ha_supporting_integration: Motionblinds -ha_release: 2025.2 +ha_release: 2020.12 ha_codeowners: - '@starkillerOG' ha_config_flow: true diff --git a/source/_integrations/lock.markdown b/source/_integrations/lock.markdown index 7116ff7c587..bbe95579d75 100644 --- a/source/_integrations/lock.markdown +++ b/source/_integrations/lock.markdown @@ -27,6 +27,7 @@ A lock entity can have the following states: - **Opening**: Indication of whether the lock is currently opening. - **Locked**: The lock is currently locked. - **Locking**: The lock is in the process of being locked. +- **Unlocked**: The lock is currently unlocked. - **Unlocking**: The lock is in the process of being unlocked. - **Unavailable**: The entity is currently unavailable. - **Unknown**: The state is not yet known. diff --git a/source/_integrations/lock.mqtt.markdown b/source/_integrations/lock.mqtt.markdown index 69fa475d9f0..1611a73e3fe 100644 --- a/source/_integrations/lock.mqtt.markdown +++ b/source/_integrations/lock.mqtt.markdown @@ -51,7 +51,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -60,7 +60,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -72,7 +72,7 @@ code_format: required: false type: string command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. The lock command template accepts the parameters `value` and `code`. The `value` parameter will contain the configured value for either `payload_open`, `payload_lock` or `payload_unlock`. The `code` parameter is set during the action to `open`, `lock` or `unlock` the MQTT lock and will be set `None` if no code was passed. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. The lock command template accepts the parameters `value` and `code`. The `value` parameter will contain the configured value for either `payload_open`, `payload_lock` or `payload_unlock`. The `code` parameter is set during the action to `open`, `lock` or `unlock` the MQTT lock and will be set `None` if no code was passed. required: false type: template command_topic: @@ -155,7 +155,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -253,7 +253,7 @@ unique_id: required: false type: string value_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a state value from the payload. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a state value from the payload. required: false type: template {% endconfiguration %} diff --git a/source/_integrations/mastodon.markdown b/source/_integrations/mastodon.markdown index 5fcd3a49ad7..f606ec06e26 100644 --- a/source/_integrations/mastodon.markdown +++ b/source/_integrations/mastodon.markdown @@ -12,6 +12,7 @@ ha_domain: mastodon ha_iot_class: Cloud Polling ha_platforms: - diagnostics + - notify - sensor ha_integration_type: service ha_config_flow: true diff --git a/source/_integrations/matter.markdown b/source/_integrations/matter.markdown index 58237d17116..676bc5e097f 100644 --- a/source/_integrations/matter.markdown +++ b/source/_integrations/matter.markdown @@ -1,5 +1,5 @@ --- -title: Matter (BETA) +title: Matter description: Instructions on how to integrate Matter with Home Assistant. ha_category: - Binary sensor @@ -16,6 +16,7 @@ ha_category: - Update - Vacuum - Valve +featured: true ha_release: '2022.12' ha_iot_class: Local Push ha_config_flow: true @@ -54,10 +55,6 @@ The Matter integration allows you to control Matter devices on your local Wi-Fi For communicating with Matter devices, the Home Assistant integration runs its own "Matter controller" as add-on. This Matter Server add-on runs the controller software as a separate process and connects your Matter network (called Fabric in technical terms) and Home Assistant. The Home Assistant Matter integration connects to this server via a WebSocket connection. -{% warning %} -The integration is marked BETA: Both the Matter standard itself and its implementation within Home Assistant are in an early stage. You may run into compatibility issues and/or other bugs. -{% endwarning %} - # Introduction - What is Matter? Matter is a new smart home connectivity standard for home automation products and IoT (Internet of Things) devices, see its [Wikipedia article](https://en.wikipedia.org/wiki/Matter_(standard)). @@ -125,7 +122,7 @@ Make sure you have all these components ready before trying to add a Matter devi - Make sure you have the latest version of Home Assistant [installed](/installation/). - In Home Assistant, have the Matter integration installed. - Go to {% my integrations title="**Settings** > **Devices & services**" %}. - - Add the **Matter (BETA)** integration. + - Add the **Matter** integration. - When prompted to **Select the connection method**: - If you run Home Assistant OS in a regular setup: select **Submit**. - This will install the official Matter server add-on. @@ -250,7 +247,7 @@ Use one of these methods if your Matter device was added to Apple Home or Google - Have the Matter device integrated to Apple Home or Google Home respectively - In Home Assistant, have the Matter integration installed. - Go to {% my integrations title="**Settings** > **Devices & services**" %}. - - Add the **Matter (BETA)** integration. + - Add the **Matter** integration. - When prompted to **Select the connection method**: - If you run Home Assistant OS in a regular setup: select **Submit**. - This will install the official Matter server add-on. @@ -297,7 +294,7 @@ In some cases, bridging devices into Home Assistant via Matter might not bring y Follow these steps if you have added a Matter device to Home Assistant and you want to make it available in an other platform, such as Google Home or Apple Home. -1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter (BETA)** integration card, select **Devices**. +1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter** integration card, select **Devices**. 2. From the list of devices, select the device you want to share. 3. Select **Share device**, then in the dialog, select **Share device** again. - There is no need to press a hardware button on the device to set it to commissioning mode. @@ -312,7 +309,7 @@ Follow these steps if you have added a Matter device to Home Assistant and you w Follow these steps if you want to remove a device from a particular Matter controller. -1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter (BETA)** integration card, select **Devices**. +1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter** integration card, select **Devices**. 2. From the list of devices, select the device you want to remove from a controller. 3. In the **Device info** section, next to **Share device**, select the three-dot menu. Then, select **Manage fabrics**. 4. From the list, remove the controller of interest. @@ -324,7 +321,7 @@ Follow these steps if you want to remove a device from a particular Matter contr The device information section provides some diagnostic information of a device. -1. To view the device details, go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter (BETA)** integration card, select **Devices**. +1. To view the device details, go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter** integration card, select **Devices**. 2. From the list of devices, select the device you want to look at.

diff --git a/source/_integrations/mcp_server.markdown b/source/_integrations/mcp_server.markdown index 95d031b5e83..d5ff3723b2e 100644 --- a/source/_integrations/mcp_server.markdown +++ b/source/_integrations/mcp_server.markdown @@ -35,10 +35,8 @@ The integration provides the following configuration options: {% configuration_basic %} Control Home Assistant: - description: The API to use to expose tools over the Model Context Protocol. It is recommended - to use **Stateless Assist** which is a version of the **Assist** API where the - prompt does not contain any state information. Clients can only control or - provide information about entities that are [exposed](/voice_control/voice_remote_expose_devices/) to it. + description: If MCP clients are allowed to control Home Assistant. Clients can only + control or provide information about entities that are [exposed](/voice_control/voice_remote_expose_devices/) to it. {% endconfiguration_basic %} ## Architecture overview @@ -132,11 +130,6 @@ The [MCP Prompts](https://modelcontextprotocol.io/docs/concepts/prompts) provide inform LLMs how to call the tools. The tools used by the configured LLM API are exposed. -It is recommended to use the **Stateless Assist** API since the prompt does -not contain any state information, which will be incorrect after any actions -are performed. - - ## Known Limitations The Home Assistant Model Context Protocol integration currently only supports a diff --git a/source/_integrations/microsoft.markdown b/source/_integrations/microsoft.markdown index 97d0d433112..60849da6e5f 100644 --- a/source/_integrations/microsoft.markdown +++ b/source/_integrations/microsoft.markdown @@ -65,7 +65,7 @@ pitch: type: string default: "`default`" contour: - description: "Change the contour of the output in percentages. This overrides the pitch setting. See the [W3 SSML specification](https://www.w3.org/TR/speech-synthesis/#pitch_contour) for what it does. Example value: `(0,0) (100,100)`." + description: "Change the contour of the output in percentages. This overrides the pitch setting. See the [W3 SSML specification](https://www.w3.org/TR/speech-synthesis/#pitch_contour) for what it does. Example value: `(0%, -1st) (100%, +10st)`." required: false type: string region: @@ -100,6 +100,6 @@ tts: rate: 20 volume: -50 pitch: high - contour: (0, 0) (100, 100) + contour: (0%, -1st) (100%, +10st) region: eastus ``` diff --git a/source/_integrations/minecraft_server.markdown b/source/_integrations/minecraft_server.markdown index 919101e81a5..292ee3eacb3 100644 --- a/source/_integrations/minecraft_server.markdown +++ b/source/_integrations/minecraft_server.markdown @@ -15,6 +15,7 @@ ha_platforms: - diagnostics - sensor ha_integration_type: integration +ha_quality_scale: silver --- [Minecraft](https://www.minecraft.net/en-us) is a sandbox video game developed by Mojang Studios. Minecraft servers allow players to play the game online or via a local area network with other players. The **Minecraft Server** integration lets you retrieve information from a Minecraft server within Home Assistant. Both **Java Edition** and **Bedrock Edition** servers are supported. diff --git a/source/_integrations/modbus.markdown b/source/_integrations/modbus.markdown index 417dbd730a9..bcf7bf9c2af 100644 --- a/source/_integrations/modbus.markdown +++ b/source/_integrations/modbus.markdown @@ -527,7 +527,7 @@ The master configuration like device_class are automatically copied to the slave ## Configuring climate entities -The Modbus climate platform allows you to monitor a thermostat or heaters as well as set a target temperature, HVAC mode, swing mode, and fan state. +The Modbus climate platform allows you to monitor a thermostat or heaters as well as set a target temperature, HVAC action, HVAC mode, swing mode, and fan state. Please refer to [Parameter usage](#parameters-usage-matrix) for conflicting parameters. @@ -652,6 +652,57 @@ climates: description: "Swap word ABCD -> CDAB, **not valid with data types: `int16`, `uint16`**" word_byte: description: "Swap word ABCD -> DCBA, **not valid with data types: `int16`, `uint16`**" + hvac_action_register: + description: "Configuration of register for HVAC action" + required: false + type: map + keys: + address: + description: "Address of HVAC action register." + required: true + type: integer + input_type: + description: "Type of register, either `holding` or `input`" + required: false + default: holding + type: string + values: + description: "Mapping between the register values and HVAC actions" + required: true + type: map + keys: + action_off: + description: "Value corresponding to HVAC Off action." + required: false + type: [integer, list] + action_cooling: + description: "Value corresponding to HVAC Cooling action." + required: false + type: [integer, list] + action_defrosting: + description: "Value corresponding to HVAC Defrosting action." + required: false + type: [integer, list] + action_drying: + description: "Value corresponding to HVAC Drying action." + required: false + type: [integer, list] + action_fan: + description: "Value corresponding to HVAC Fan action." + required: false + type: [integer, list] + action_heating: + description: "Value corresponding to HVAC Heating action." + required: false + type: [integer, list] + action_idle: + description: "Value corresponding to HVAC Idle action." + required: false + type: [integer, list] + action_preheating: + description: "Value corresponding to HVAC Preheating action." + required: false + type: [integer, list] hvac_mode_register: description: "Configuration of register for HVAC mode" required: false diff --git a/source/_integrations/motionblinds_matter.markdown b/source/_integrations/motionblinds_matter.markdown new file mode 100644 index 00000000000..5415db4f82d --- /dev/null +++ b/source/_integrations/motionblinds_matter.markdown @@ -0,0 +1,51 @@ +--- +title: Motionblinds Matter +description: Control your Motionblinds Matter devices using the Matter integration. +ha_category: + - Cover +ha_brand: true +ha_domain: motionblinds +ha_release: '2025.4' +ha_codeowners: + - '@home-assistant/matter' +ha_config_flow: true +ha_platforms: + - cover +ha_iot_class: Local Push +ha_integration_type: virtual +works_with: + - matter +ha_iot_standard: + - matter +--- + +[Motionblinds](https://motionblinds.com) is a member of the Works with Home Assistant partner program for their Matter products. Motionblinds is committed to making sure their products are up-to-date and ready to use in Home Assistant. + +Motionblinds Matter devices work locally and integrate seamlessly with the Matter integration in Home Assistant. As all connectivity is happening locally, status updates and controlling your devices happen instantly in Home Assistant. + +{% my add_matter_device badge domain=page.ha_domain %} + +[Learn more about Matter in Home Assistant.](/integrations/matter/) + +## Supported devices + +The following devices are known to be supported by the integration: +- CMD-02 +- CMD-02-P +- CMD-03 +- CM-03 +- CM-04 +- CM-05 +- CM-06 +- CM-07 +- CM-07V2 +- CM-08 +- CM-09 +- CM-10 +- CM-34 +- CM-35 +- CM-36 +- CM-40 +- CM-45 +- CM-52 +- CM-57 diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown index b00d3ac5dfe..389a7776e82 100644 --- a/source/_integrations/mqtt.markdown +++ b/source/_integrations/mqtt.markdown @@ -51,19 +51,7 @@ MQTT (aka MQ Telemetry Transport) is a machine-to-machine or "Internet of Things {% include integrations/config_flow.md %} -### Removing the MQTT integration - -The MQTT integration and its entities can be removed by following these steps: - -1. Navigate to **Settings** > **Devices & Services** -2. Find the MQTT integration and click on it -3. Click the delete button to remove the MQTT config entry - -Note: This action does not remove the [MQTT broker](#setting-up-a-broker) or its data. If you want to completely remove MQTT: - -1. Check your `configuration.yaml` and other YAML files for MQTT-related configurations and remove them -2. Review your automations and scripts for any MQTT dependencies -3. Consider backing up your configuration before making these changes +MQTT Devices and entities can be set up through [MQTT -discovery](#mqtt-discovery) or [added manually](#manual-configured-mqtt-items) via YAML or subentries. {% details "Configuration of MQTT components via MQTT discovery" %} @@ -131,6 +119,21 @@ Note: This action does not remove the [MQTT broker](#setting-up-a-broker) or its {% enddetails %} + +{% details "Configuration of MQTT components via Subentries" %} + +- [Notify](/integrations/notify.mqtt/) + +To add an MQTT device via a Subentry, follow these steps: + +1. Go to **{% my integrations title="Settings > Devices & services" %}**. +2. Select the MQTT integration. +3. Add a subentry via {% my integrations title="**Settings** > **Devices & services**" %}, click {% icon "mdi:dots-vertical" %} and select **Add MQTT device**. + +A device context and one or more entities can be added to the subentry. + +{% enddetails %} + Your first step to get MQTT and Home Assistant working is to choose a broker. The easiest option is to install the official Mosquitto Broker add-on. You can choose to set up and configure this add-on automatically when you set up the MQTT integration. Home Assistant will automatically generate and assign a safe username and password, and no further attention is required. This also works if you have already set up this add-on yourself in advance. @@ -163,6 +166,8 @@ Add the MQTT integration, then provide your broker's hostname (or IP address) an 2. Select the MQTT integration. 3. Reconfigure the MQTT broker settings via {% my integrations title="**Settings** > **Devices & services**" %}, click {% icon "mdi:dots-vertical" %} and select **Reconfigure**. +MQTT subentries can also be reconfigured. Additional entities can be added, or an entity can bve removed from the sub entry. Each MQTT subentry holds one MQTT device. The MQTT device must have at least one entity. + {% important %} 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`. {% endimportant %} @@ -185,7 +190,7 @@ The time in seconds between sending keep alive messages for this client. The def #### Broker certificate validation -To enable a secure connection to the broker, the broker certificate should be validated. If your broker uses a trusted certificate, then choose `Auto`. This will allow validation against certificate CAs bundled certificates. If a self-signed certificate is used, select `Custom`. A custom PEM-encoded CA certificate can be uploaded. Click `NEXT` to show the control to upload the CA certificate. +To enable a secure connection to the broker, the broker certificate should be validated. If your broker uses a trusted certificate, then choose `Auto`. This will allow validation against certificate CAs bundled certificates. If a self-signed certificate is used, select `Custom`. A custom PEM- or DER-encoded CA certificate can be uploaded. Click `NEXT` to show the control to upload the CA certificate. If the server certificate does not match the hostname then validation will fail. To allow a connection without the verification of the hostname, turn the `Ignore broker certificate validation` switch on. #### MQTT Protocol @@ -194,7 +199,7 @@ The MQTT protocol setting defaults to version `3.1.1`. If your MQTT broker suppo #### 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. +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 reveal file upload controls. A client certificate and the corresponding private key must be uploaded together. Both client certificate and private key must be either PEM- or DER-encoded. If the private key is encrypted with a password, ensure you supply the correct password when uploading the client certificate and key files. #### Using WebSockets as transport @@ -833,6 +838,7 @@ support_url: 'pl_rst_pct': 'payload_reset_percentage', 'pl_rst_pr_mode': 'payload_reset_preset_mode', 'pl_stop': 'payload_stop', + 'pl_stop_tilt': 'payload_stop_tilt', 'pl_stpa': 'payload_start_pause', 'pl_strt': 'payload_start', 'pl_toff': 'payload_turn_off', @@ -1041,7 +1047,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -1054,7 +1060,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template payload_available: @@ -1371,6 +1377,8 @@ Compatibility and features will vary, and not all devices may work. ## Manual configured MQTT items +Support to add manual items is added for the MQTT Notify entities, other platforms will follow later. + For most integrations, it is also possible to manually set up MQTT items in {% term "`configuration.yaml`" %}. Read more [about configuration in YAML](/docs/configuration/yaml). MQTT supports two styles for configuring items in YAML. All configuration items are placed directly under the `mqtt` integration key. Note that you cannot mix these styles. Use the *YAML configuration listed per item* style when in doubt. @@ -1408,6 +1416,18 @@ If you have a large number of manually configured items, you might want to consi Documentation on the MQTT components that support YAML [can be found here](/integrations/mqtt/#configuration-via-yaml). {% endnote %} +## Entity state updates + +Entities receive state updates via MQTT subscriptions. The payloads received on the state topics are processed to determine whether there is a significant change. If a change is detected, the entity will be updated. + +Note that MQTT device payloads often contain information for updating multiple entities that subscribe to the same topics. For example, a light status update might include information about link quality. This data can update a link quality sensor but is not used to update the light itself. MQTT filters out entity state updates when there are no changes. + +### The last reported state attribute + +Because MQTT state updates are often repeated frequently, even when no actual changes exist, it is up to the MQTT subscriber to determine whether a status update was received. If the latest update is missed, it might take some time before the next one arrives. If a retained payload exists at the broker, that value will be replayed first, but it will be an update of a previous last state. + +MQTT devices often continuously generate numerous state updates. MQTT does not update `last_reported` to avoid impacting system stability unless `force_update` is set. Alternatively, an MQTT sensor can be created to measure the last update. + ## Using Templates The MQTT integration supports templating. Read more [about using templates with the MQTT integration](/docs/configuration/templating/#using-templates-with-the-mqtt-integration). @@ -1472,7 +1492,7 @@ The MQTT integration will register the `mqtt.publish` action, which allows publi | `retain` | yes | If message should have the retain flag set. (default: false) | {% note %} -When `payload` is rendered from [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) in a YAML script or automation, and the template renders to a `bytes` literal, the outgoing MQTT payload will only be sent as `raw` data, if the `evaluate_payload` option flag is set to `true`. +When `payload` is rendered from [template](/docs/configuration/templating/#using-value-templates-with-mqtt) in a YAML script or automation, and the template renders to a `bytes` literal, the outgoing MQTT payload will only be sent as `raw` data, if the `evaluate_payload` option flag is set to `true`. {% endnote %} ```yaml @@ -1578,3 +1598,13 @@ logger: Event `event_mqtt_reloaded` is fired when Manually configured MQTT entities have been reloaded and entities thus might have changed. This event has no additional data. + +## Removing the integration + +{% include integrations/remove_device_service_steps.md %} + +Note: This action does not remove the [MQTT broker](#setting-up-a-broker) or its data. If you want to completely remove MQTT: + +1. Check your {% term "`configuration.yaml`" %} and other YAML files for MQTT-related configurations and remove them +2. Review your automations and scripts for any MQTT dependencies +3. Consider backing up your configuration before making these changes diff --git a/source/_integrations/nam.markdown b/source/_integrations/nam.markdown index 31ac3af9705..3bbb420f726 100644 --- a/source/_integrations/nam.markdown +++ b/source/_integrations/nam.markdown @@ -21,6 +21,7 @@ The Nettigo Air Monitor integration allows you to read temperature, humidity, pr The integration currently has support for the following sensors: +- BH1750 - BME280 - BMP180 - BMP280 diff --git a/source/_integrations/ness_alarm.markdown b/source/_integrations/ness_alarm.markdown index 999d7a4e498..6dcdadea4c7 100644 --- a/source/_integrations/ness_alarm.markdown +++ b/source/_integrations/ness_alarm.markdown @@ -124,7 +124,7 @@ Trigger an aux output. This requires PCB version 7.8 or higher. | Data attribute | Optional | Description | | ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `output_id` | No | The aux output you wish to change. A number from 1-4. | +| `output_id` | No | The aux output you wish to change. A number from 1-8. | | `state` | Yes | The On/Off State, represented as true/false. Default is true. If P14xE 8E is enabled then a value of true will pulse output x for the time specified in P14(x+4)E. | ### Action `panic` diff --git a/source/_integrations/nexia.markdown b/source/_integrations/nexia.markdown index f14d6c190fd..d8bb85672b2 100644 --- a/source/_integrations/nexia.markdown +++ b/source/_integrations/nexia.markdown @@ -82,7 +82,13 @@ The scene platform lets you activate a nexia automation. ### Switch -The switch platform lets you enable or disable hold mode for each thermostat. +The following enable/disable switches are added for each thermostat: + +- Emergency heat (if the device supports it) + +The following enable/disable switches are added for each thermostat zone: + +- Hold mode ### Action `nexia.set_aircleaner_mode` diff --git a/source/_integrations/nibe_heatpump.markdown b/source/_integrations/nibe_heatpump.markdown index 57bb0023744..79b433b6374 100644 --- a/source/_integrations/nibe_heatpump.markdown +++ b/source/_integrations/nibe_heatpump.markdown @@ -25,25 +25,26 @@ The Nibe Heat Pump integration allows you to control and monitor [Nibe Heat Pump Supported devices: -- F1145/F1155 -- S1145/S1155 -- F1245/F1255 -- F1355/F1355 +- F1145/F1245 +- F1155/F1255 +- S1155/S1255 +- F1345 +- F1355 - S2125 - S320/S325 +- S330/S332 - F370 - F470 - F730 - S735 - F750 +- S1156 - S1255 +- S1256 - SMO40 - SMOS40 -- VVM225 -- VVM310 -- VVM320 -- VVM325 -- VVM500 +- VVM225/VVM320/VVM325 +- VVM310/VVM500 {% include integrations/config_flow.md %} diff --git a/source/_integrations/notify.mqtt.markdown b/source/_integrations/notify.mqtt.markdown index 1f3de5342a0..b13408aa52a 100644 --- a/source/_integrations/notify.mqtt.markdown +++ b/source/_integrations/notify.mqtt.markdown @@ -40,7 +40,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -49,7 +49,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `availability_topic`. To determine the device's availability result, the template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the device's availability from the `availability_topic`. To determine the device's availability result, the template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -57,7 +57,7 @@ availability_topic: required: false type: string command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -140,7 +140,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: diff --git a/source/_integrations/number.markdown b/source/_integrations/number.markdown index 2663dd0a68a..8d04222722a 100644 --- a/source/_integrations/number.markdown +++ b/source/_integrations/number.markdown @@ -42,38 +42,39 @@ The following device classes are supported for numbers: - **apparent_power**: Apparent power in VA. - **aqi**: Air Quality Index (unitless). - **area**: Area in m², cm², km², mm², in², ft², yd², mi², ac, ha -- **atmospheric_pressure**: Atmospheric pressure in cbar, bar, hPa, inHg, kPa, mbar, Pa, psi -- **battery**: Percentage of battery that is left -- **blood_glocose_concentration**: Blood glucose concentration in mg/dL, mmol/L -- **carbon_dioxide**: Carbon Dioxide in CO2 (Smoke) -- **carbon_monoxide**: Carbon Monoxide in CO (Gas CNG/LPG) +- **atmospheric_pressure**: Atmospheric pressure in cbar, bar, hPa, mmHg, inHg, kPa, mbar, Pa or psi +- **battery**: Percentage of battery that is left in % +- **blood_glucose_concentration**: Blood glucose concentration in mg/dL, mmol/L +- **carbon_dioxide**: Carbon Dioxide in CO2 (Smoke) in ppm +- **carbon_monoxide**: Carbon Monoxide in CO (Gas CNG/LPG) in ppm - **current**: Current in A, mA -- **data_rate**: Data rate in bit/s, kbit/s, Mbit/s, Gbit/s, B/s, kB/s, MB/s, GB/s, KiB/s, MiB/s, or GiB/s -- **data_size**: Data size in bit, kbit, Mbit, Gbit, B, kB, MB, GB, TB, PB, EB, ZB, YB, KiB, MiB, GiB, TiB, PiB, EiB, ZiB, or YiB -- **distance**: Generic distance in km, m, cm, mm, mi, yd, or in +- **data_rate**: Data rate in bit/s, kbit/s, Mbit/s, Gbit/s, B/s, kB/s, MB/s, GB/s, KiB/s, MiB/s or GiB/s +- **data_size**: Data size in bit, kbit, Mbit, Gbit, B, kB, MB, GB, TB, PB, EB, ZB, YB, KiB, MiB, GiB, TiB, PiB, EiB, ZiB or YiB +- **distance**: Generic distance in km, m, cm, mm, mi, nmi, yd, or in +- **duration**: Duration in d, h, min, s, ms, or µs - **energy**: Energy in J, kJ, MJ, GJ, mWh, Wh, kWh, MWh, GWh, TWh, cal, kcal, Mcal, or Gcal - **energy_distance**: Energy per distance in kWh/100km, mi/kWh or km/kWh. - **energy_storage**: Stored energy in J, kJ, MJ, GJ, mWh, Wh, kWh, MWh, GWh, TWh, cal, kcal, Mcal, or Gcal - **frequency**: Frequency in Hz, kHz, MHz, or GHz -- **gas**: Gasvolume in m³, ft³, or CCF -- **humidity**: Percentage of humidity in the air +- **gas**: Gasvolume in m³, ft³ or CCF +- **humidity**: Percentage of humidity in the air in % - **illuminance**: The current light level in lx - **irradiance**: Irradiance in W/m² or BTU/(h⋅ft²) -- **moisture**: Percentage of water in a substance -- **monetary**: The monetary value +- **moisture**: Percentage of water in a substance in % +- **monetary**: The monetary value ([ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#Active_codes)) - **nitrogen_dioxide**: Concentration of Nitrogen Dioxide in µg/m³ - **nitrogen_monoxide**: Concentration of Nitrogen Monoxide in µg/m³ - **nitrous_oxide**: Concentration of Nitrous Oxide in µg/m³ - **ozone**: Concentration of Ozone in µg/m³ - **ph**: Potential hydrogen (pH) value of a water solution - **pm1**: Concentration of particulate matter less than 1 micrometer in µg/m³ -- **pm10**: Concentration of particulate matter less than 10 micrometers in µg/m³ - **pm25**: Concentration of particulate matter less than 2.5 micrometers in µg/m³ -- **power_factor**: Power factor(unitless), unit may be `None` or % +- **pm10**: Concentration of particulate matter less than 10 micrometers in µg/m³ +- **power_factor**: Power factor (unitless), unit may be `None` or % - **power**: Power in mW, W, kW, MW, GW or TW - **precipitation**: Accumulated precipitation in cm, in or mm -- **precipitation_intensity**: Precipitation intensity in in/d, in/h, mm/d, or mm/h -- **pressure**: Pressure in Pa, kPa, hPa, bar, cbar, mbar, mmHg, inHg, or psi +- **precipitation_intensity**: Precipitation intensity in in/d, in/h, mm/d or mm/h +- **pressure**: Pressure in Pa, kPa, hPa, bar, cbar, mbar, mmHg, inHg or psi - **reactive_power**: Reactive power in var - **signal_strength**: Signal strength in dB or dBm - **sound_pressure**: Sound pressure in dB or dBA @@ -81,6 +82,7 @@ The following device classes are supported for numbers: - **sulphur_dioxide**: Concentration of sulphur dioxide in µg/m³ - **temperature**: Temperature in °C, °F or K - **volatile_organic_compounds**: Concentration of volatile organic compounds in µg/m³ +- **volatile_organic_compounds_parts**: Ratio of volatile organic compounds in ppm or ppb - **voltage**: Voltage in V, mV, µV, kV, MV - **volume**: Generic volume in L, mL, gal, fl. oz., m³, ft³, or CCF - **volume_flow_rate**: Volume flow rate in m³/h, ft³/min, L/min, gal/min, or mL/s @@ -88,7 +90,7 @@ The following device classes are supported for numbers: - **water**: Water consumption in L, gal, m³, ft³, or CCF - **weight**: Generic mass in kg, g, mg, µg, oz, lb, or st - **wind_direction**: Wind direction in ° -- **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 ## Actions diff --git a/source/_integrations/number.mqtt.markdown b/source/_integrations/number.mqtt.markdown index 990fbef9639..8ae647a4b36 100644 --- a/source/_integrations/number.mqtt.markdown +++ b/source/_integrations/number.mqtt.markdown @@ -51,7 +51,7 @@ availability_mode: type: string default: latest command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -138,7 +138,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false type: template json_attributes_topic: @@ -210,7 +210,7 @@ unit_of_measurement: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/nut.markdown b/source/_integrations/nut.markdown index 76620d555b6..4ec72d95c7d 100644 --- a/source/_integrations/nut.markdown +++ b/source/_integrations/nut.markdown @@ -2,7 +2,9 @@ title: Network UPS Tools (NUT) description: Instructions on how to set up NUT sensors within Home Assistant. ha_category: + - Button - System monitor + - Switch ha_iot_class: Local Polling ha_release: 0.34 ha_domain: nut @@ -11,17 +13,91 @@ ha_codeowners: - '@bdraco' - '@ollo69' - '@pestevez' + - '@tdfountain' ha_zeroconf: true ha_platforms: + - button - diagnostics - sensor + - switch ha_integration_type: device --- -The Network UPS Tools (NUT) integration allows you to monitor and manage a UPS (battery backup) using a [NUT](https://networkupstools.org/) server. It lets you view their status, receives notifications about important events, and execute commands as device actions. +The **Network UPS Tools (NUT)** {% term integration %} allows you to monitor and manage an Uninterruptible Power Supply (UPS) for battery backup, a Power Distribution Unit (PDU), or other similar power device using a [NUT](https://networkupstools.org/) server. It lets you view the status, receive notifications about important events, and execute commands as device actions for one or more such devices. + +## Supported devices + +This integration supports hardware devices compatible with +NUT. NUT's hardware compatibility list is available from the [Network +UPS Tools](https://networkupstools.org/) website. + +## Prerequisites + +You must have a NUT server configured to monitor one or more supported +power device(s). + +It is not possible to automatically detect a NUT server IP address +change. You should therefore configure the NUT server with a static +IP address, assign a fixed IP address reservation with DHCP, or use +DNS as appropriate for your network. + +In addition, you will need a username and password for +this integration to log into the NUT server if authentication is +required. {% include integrations/config_flow.md %} +Setting up the integration requires the following information: + +{% configuration_basic %} +Host: + description: "The IP address or hostname of your NUT server." +Port: + description: "The network port of your NUT server. The NUT server's default port is '3493'." +Username: + description: "The username to log into the NUT server. This is configured in NUT." +Password: + description: "The password associated with the username to log into the NUT server. This is configured in NUT." +{% endconfiguration_basic %} + +## Supported functionality + +{% important %} +The username and password configured for the device must be granted +`instcmds` permissions on the NUT server to use buttons and +switches. Buttons and switches will not be available if user +credentials are not specified. See the [NUT server +documentation](https://networkupstools.org/documentation.html) for +configuration information. +{% endimportant %} + +### Buttons + +This NUT integration will add buttons for NUT server commands +available for your device. + +The following buttons are available for each switchable outlet: + +| name | Description | +|---------------------------|:------------------------------------------------| +| Power cycle outlet `name` | Power cycle the named outlet | + +### Switches + +This NUT integration will add switches for NUT server commands +available for your device. + +The following switches are available for each switchable outlet: + +| name | Description | +|---------------------------|:------------------------------------------------| +| Power outlet `name` | Turn power on/off for named outlet | + +## Data updates + +The integration uses {% term polling %} to retrieve data from the NUT +server. The default polling interval is once every 60 seconds. + ## Example Resources Given the following example output from NUT (your variables may differ): @@ -106,3 +182,10 @@ Ensure the user you specify has the required permissions to execute the desired In this example, the user `my_user` has permission to execute all commands (`instcmds = ALL`). Please note that Home Assistant cannot determine whether a user can access a specific action without executing it. If you attempt to perform an action for which the user does not have permission, an exception will be thrown at runtime. + +## Remove integration + +This integration follows standard integration removal. No extra steps +are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/ogemray.markdown b/source/_integrations/ogemray.markdown new file mode 100644 index 00000000000..ffbc2e4f5cc --- /dev/null +++ b/source/_integrations/ogemray.markdown @@ -0,0 +1,49 @@ +--- +title: Ogemray +description: Integrate Ogemray (Powered by Shelly) devices +ha_category: + - Binary sensor + - Climate + - Cover + - Energy + - Event + - Light + - Number + - Select + - Sensor + - Switch + - Text + - Update + - Valve +ha_release: '0.115' +ha_codeowners: + - '@balloob' + - '@bieniu' + - '@thecode' + - '@chemelli74' + - '@bdraco' +ha_iot_class: Local Push +ha_domain: ogemray +ha_config_flow: true +ha_zeroconf: true +ha_platforms: + - binary_sensor + - button + - climate + - cover + - diagnostics + - event + - light + - number + - select + - sensor + - switch + - text + - update + - valve +ha_integration_type: virtual +ha_supporting_domain: shelly +ha_supporting_integration: Shelly +--- + +{% include integrations/supported_brand.md %} diff --git a/source/_integrations/ohme.markdown b/source/_integrations/ohme.markdown index aa533eb3987..faf7853281f 100644 --- a/source/_integrations/ohme.markdown +++ b/source/_integrations/ohme.markdown @@ -73,11 +73,14 @@ The Ohme integration provides the following entities. - **Charger mode** - **Description**: Sets the mode of the charger. Possible options: `Smart charge`, `Max charge`, `Paused`. This is only available with a vehicle plugged in. - **Available for devices**: all +- **Vehicle** + - **Description**: Select the vehicle to charge. This will show vehicles configured in the Ohme app. + - **Available for devices**: all #### Sensors - **Status** - - **Description**: Current status of the charger. Possible states: `Unplugged`, `Pending approval`, `Plugged in`, `Charging`. + - **Description**: Current status of the charger. Possible states: `Unplugged`, `Pending approval`, `Plugged in`, `Charging`, `Finished charging`. - **Available for devices**: all - **Power** - **Description**: Power draw from the charger in kW. @@ -100,6 +103,9 @@ The Ohme integration provides the following entities. #### Switches +- **Price cap** + - **Description**: Prevents charging when the electricity price exceeds a defined threshold. The threshold can be set by the service `ohme.set_price_cap`. ***Not available with some energy providers and tariffs.*** + - **Available for devices**: all - **Lock buttons** - **Description**: Disable the controls on the device. - **Available for devices**: all @@ -128,6 +134,14 @@ The `ohme.list_charge_slots` action is used to fetch a list of charge slots from |------------------------|----------|--------------------------------------------------------------| | `config_entry` | No | The config entry of the account to get the charge list from. | +### Action: Set price cap + +The `ohme.set_price_cap` action is used to set the price cap threshold. This can be toggled by the switch **Price cap**. + +| Data attribute | Optional | Description | +|------------------------|----------|-------------------------------------------------------------| +| `config_entry` | No | The config entry of the account to apply the price cap to. | +| `price_cap` | No | Threshold in 1/100ths of your local currency. | ## Removing the integration diff --git a/source/_integrations/onedrive.markdown b/source/_integrations/onedrive.markdown index 04589228cf2..28e1986e52a 100644 --- a/source/_integrations/onedrive.markdown +++ b/source/_integrations/onedrive.markdown @@ -1,5 +1,5 @@ --- -title: Microsoft OneDrive +title: OneDrive description: Instructions on how to setup OneDrive to be used with backups. ha_release: 2025.2 ha_category: @@ -13,10 +13,12 @@ ha_integration_type: service related: - docs: /common-tasks/general/#backups title: Backups -ha_quality_scale: bronze +ha_quality_scale: platinum +ha_platforms: + - sensor --- -This integration allows you to use [Microsoft OneDrive](https://www.microsoft.com/en-us/microsoft-365/onedrive/online-cloud-storage) for [Home Assistant Backups](/common-tasks/general/#backups). +This integration allows you to use [OneDrive](https://www.microsoft.com/en-us/microsoft-365/onedrive/online-cloud-storage) for [Home Assistant Backups](/common-tasks/general/#backups) as well as uploading generic files to your OneDrive. Backups will be created in a folder called `Home Assistant\backups_` in the `App Folder` of your OneDrive by default. `id` is part of your Home Assistant instance's unique id to allow backups from multiple instances to the same OneDrive account. @@ -49,7 +51,15 @@ Delete files permanently: The backup folder is `root:\Apps\[Home Assistant | Graph]\backups_{id}`. This is not configurable because otherwise the integration would need permissions to write into your entire drive. You can, however, rename the application folder which is called `Home Assistant` or `Graph` in your OneDrive. -The last folder in the hierarchy (`backups_{id}`) is always a unique folder per Home Assistant instance to ensure that backups from different instances are not mixed. The name of this folder can be set during integration setup and can be changed later through reconfiguring the integration or by renaming the folder OneDrive. +The last folder in the hierarchy (`backups_{id}`) is always a unique folder per Home Assistant instance to ensure that backups from different instances are not mixed. The name of this folder can be set during integration setup and can be changed later through reconfiguring the integration or by renaming the folder in OneDrive. + +### Backup folder is called `Graph` + +This integration uses Microsoft's Graph API to communicate with your OneDrive. Because of an [issue](https://github.com/OneDrive/onedrive-api-docs/issues/1866) in that API, the application folder is often not named with the name of the application (`Home Assistant`), but `Graph` instead. + +There is no risk of different applications mixing in that `Graph` folder, if you already have such a `Graph` folder from a different application, the next folders will just be called `Graph 1`, `Graph 2` and so on. + +You should be able to manually rename the folder to something else, without the integration breaking. ## Requested permissions by the integration @@ -62,36 +72,6 @@ The integration will request the following permissions on your OneDrive for the Lists of permissions that the application will request. -## Getting application credentials - -This integration comes with a predefined set of [application credentials](https://www.home-assistant.io/integrations/application_credentials/) through Home Assistant account linking. -Nobody will ever have access to your data except you, as the app does not have permission to do anything on its own. It only works with a signed-in user (it only has `delegated` not `application permissions`). -However, if you want to use your own credentials, follow [this guide](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app?tabs=certificate) to create your own client ID and secret. - -{% tip %} -You will need an Azure tenant with an active Azure subscription to create your own client credentials. -{% endtip %} - -Make sure to configure the following settings on the app registration: - -- **Supported account types**: Personal Microsoft accounts only -- **Redirect URI**: Type: `Web`, URL: `https://my.home-assistant.io/redirect/oauth` - -Configuring a custom app. - - -{% note %} -If you set the integration up with the default credentials and switch to custom credentials later, your backup folder will change inside your OneDrive, and you will have to manually copy existing backups from the old folder to the new one. -{% endnote %} - -## Backup folder is called `Graph` - -This integration uses Microsoft's Graph API to communicate with your OneDrive. Because of an [issue](https://github.com/OneDrive/onedrive-api-docs/issues/1866) in that API, the application folder is often not named with the name of the application (`Home Assistant`), but `Graph` instead. - -There is no risk of different applications mixing in that `Graph` folder, if you already have such a `Graph` folder from a different application, the next folders will just be called `Graph 1`, `Graph 2` and so on. - -You should be able to manually rename the folder to something else, without the integration breaking. - ## Sensors The integration provides the following sensors, which are updated every 5 minutes: @@ -105,6 +85,25 @@ The integration provides the following sensors, which are updated every 5 minute A drive that is in **Drive state** `Exceeded` will be automatically frozen (meaning you can't upload any more backups & files), until you clear up enough storage. {% endnote %} +## Actions + +This integration provides the following actions: + +### Action `onedrive.upload` + +You can use the `onedrive.upload` action to upload files from Home Assistant +to OneDrive. For example, to upload `camera` snapshots. + +{% details "Upload action details" %} + +| Data attribute | Optional | Description | Example | +| ---------------------- | -------- | ----------- | --------| +| `filename` | no | Path to the file to upload. | /media/image.jpg | +| `destination_folder` | no | Folder inside your `Apps/Home Assistant` app folder that is the destination for the uploaded content. Will be created if it does not exist. Supports subfolders. | Snapshots/2025 | +| `config_entry_id` | no | The ID of the OneDrive config entry (the OneDrive you want to upload to). | a1bee602deade2b09bc522749bbce48e | + +{% enddetails %} + ## Automations Get started with these automation examples. @@ -145,6 +144,30 @@ mode: single {% enddetails %} +## Getting application credentials + +This integration comes with a predefined set of [application credentials](https://www.home-assistant.io/integrations/application_credentials/) through Home Assistant account linking. This means you should not need to provide credentials, but get redirected to Microsoft's sign-in page. + +Even if you use the default credentials, nobody will ever have access to your data except you, as the app does not have permission to do anything on its own. It only works with a signed-in user (it only has `delegated` not `application permissions`). + +However, if you want to use your own credentials, follow [this guide](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app?tabs=certificate) to create your own client ID and secret. + +{% tip %} +You will need an Azure tenant with an active Azure subscription to create your own client credentials. +{% endtip %} + +Make sure to configure the following settings on the app registration: + +- **Supported account types**: Personal Microsoft accounts only +- **Redirect URI**: Type: `Web`, URL: `https://my.home-assistant.io/redirect/oauth` + +Configuring a custom app. + + +{% note %} +If you set the integration up with the default credentials and switch to custom credentials later, your backup folder will change inside your OneDrive, and you will have to manually copy existing backups from the old folder to the new one. +{% endnote %} + ## Known limitations - Only personal OneDrives are supported at the moment. @@ -160,3 +183,7 @@ This integration follows standard integration removal. No extra steps are requir {% details "Unknown error while adding the integration" %} Make sure that your OneDrive is not frozen. This can happen if you haven't used it for a longer period of time, or went over your data quota. {% enddetails %} + +{% details "Default credentials not available" %} + +If the integration asks you for a `client ID` and a `client secret`, that likely means you disabled part of the `default_config` in your Home Assistant configuration. For account linking to work you'll need `my` & `cloud` integrations loaded. {% enddetails %} diff --git a/source/_integrations/onkyo.markdown b/source/_integrations/onkyo.markdown index 034d8cf0cf5..600cae4a25a 100644 --- a/source/_integrations/onkyo.markdown +++ b/source/_integrations/onkyo.markdown @@ -28,9 +28,11 @@ Volume Resolution: description: Number of steps it takes for the receiver to go from the lowest to the highest possible volume. Possible values are 50, 80, 100, 200. For older Onkyo receivers, this typically is 80; newer Onkyo receivers use 200. Input sources: description: List of input sources supported by the receiver. +Listening modes: + description: List of listening modes supported by the receiver. {% endconfiguration_basic %} -The above settings can also be adjusted later. To do this, click the three-dot menu on the integration entry and select **Reconfigure**. +The above settings can also be adjusted later. To change **Host** or **Volume Resolution**, select the three-dot menu on the integration entry and select **Reconfigure**. {% include integrations/option_flow.md %} @@ -39,6 +41,8 @@ Max Volume: description: Maximum volume limit as a percentage. Often the maximum volume of the receiver is far too loud. Setting this will set Home Assistant's 100% volume to be this setting on the amp, i.e., if you set this to 50%, when you set Home Assistant to be 100%, then your receiver will be set to 50% of its maximum volume. Input sources: description: Mappings of input sources to their names. +Listening modes: + description: Mappings of listening modes to their names. {% endconfiguration_basic %} ## Zones diff --git a/source/_integrations/openai_conversation.markdown b/source/_integrations/openai_conversation.markdown index 12491fece57..c209db566ff 100644 --- a/source/_integrations/openai_conversation.markdown +++ b/source/_integrations/openai_conversation.markdown @@ -151,3 +151,63 @@ template: ``` {% endraw %} + +### Service `openai_conversation.generate_content` + +Allows you to ask OpenAI to generate a content based on a prompt. This service +populates [Response Data](/docs/scripts/service-calls#use-templates-to-handle-response-data) +with the response from OpenAI. + +- **Service data attribute**: `config_entry` + - **Description**: Integration entry ID to use. + - **Example**: + - **Optional**: no + +- **Service data attribute**: `prompt` + - **Description**: The text to generate content from. + - **Example**: Describe the weather + - **Optional**: no + +- **Service data attribute**: `image_filename` + - **Description**: List of file names for images to include in the prompt. + - **Example**: /tmp/image.jpg + - **Optional**: yes + +{% raw %} + +```yaml +service: openai.generate_content +data: + config_entry: abce6b8696a15e107b4bd843de722249 + prompt: >- + Very briefly describe what you see in this image from my doorbell camera. + Your message needs to be short to fit in a phone notification. Don't + describe stationary objects or buildings. + image_filename: + - /tmp/doorbell_snapshot.jpg +response_variable: generated_content +``` + +{% endraw %} + +The response data field `text` will contain the generated content. + +Another example with multiple images: + +{% raw %} + +```yaml +service: openai.generate_content +data: + prompt: >- + Briefly describe what happened in the following sequence of images + from my driveway camera. + image_filename: + - /tmp/driveway_snapshot1.jpg + - /tmp/driveway_snapshot2.jpg + - /tmp/driveway_snapshot3.jpg + - /tmp/driveway_snapshot4.jpg +response_variable: generated_content +``` + +{% endraw %} diff --git a/source/_integrations/opower.markdown b/source/_integrations/opower.markdown index 95f234fd8f4..044e1f75d44 100644 --- a/source/_integrations/opower.markdown +++ b/source/_integrations/opower.markdown @@ -80,7 +80,7 @@ Alternatively, you can create a new TOTP secret for your account and use the "no When using Opower with any of the Exelon subsidiaries, such as BGE, ComEd, PECO, Pepco, etc., you need to actively disable two-factor authentication. Before proceeding, make sure you understand the security implications of disabling 2FA. -Log onto the website, select **Don't use 2FA** and **Don't ask me again**. If you have already enabled 2FA, disable it. +Log onto the website, select **Don't use 2FA** and **Don't ask me again**. If you have already enabled 2FA, you most likely cannot disable it, which unfortunately means you cannot use this integration. {% include integrations/config_flow.md %} @@ -142,3 +142,16 @@ Your **Configure gas consumption** should now look like this: With the above changes your (**{% my config_energy title="Settings > Dashboards > Energy" %}**) page should now look like this: ![Screenshot Energy Configuration](/images/integrations/opower/energy_config.png) + +## Known limitations + +- There is a delay, often for up to a few days, for sensors and statistics to have up-to-date data. +- For some utilities, there are no sensors added by this integration. +- For some utilities, the sensors might disappear or become unavailable at the beginning of your bill period. +- Sensors for typical monthly usage and cost are not populated for accounts younger than a year. +- Many utilities provide granular usage (for example, daily or hourly) but not cost. They only provide cost for billing periods (for example, month). This results in showing 0 for cost. + +## Troubleshooting + +- Before opening an issue, ensure you can access the energy usage section/dashboard on your utility website and verify that the data is up-to-date there. +- In your energy dashboard in Home Assistant, make sure you use the statistics and not the sensors. diff --git a/source/_integrations/otbr.markdown b/source/_integrations/otbr.markdown index 1ba8dccb7bf..7297ab0e487 100644 --- a/source/_integrations/otbr.markdown +++ b/source/_integrations/otbr.markdown @@ -18,8 +18,6 @@ This integration is installed automatically when the **Open Thread Border Router - [Enabling Thread on Home Assistant Yellow](https://yellow.home-assistant.io/procedures/enable-thread/) - [Enabling Thread on Home Assistant Connect ZBT-1](https://connectzbt1.home-assistant.io/procedures/enable-thread/) -The integration is also installed automatically when enabling the experimental **Silicon Labs Multiprotocol** support. - Installing this integration manually is an advanced use case, for example if you run your own border router. If you do have such a use case, follow these steps: {% include integrations/config_flow.md %} diff --git a/source/_integrations/pglab.markdown b/source/_integrations/pglab.markdown index c0c989eaa7c..65f50d672e7 100644 --- a/source/_integrations/pglab.markdown +++ b/source/_integrations/pglab.markdown @@ -2,16 +2,21 @@ title: PG LAB Electronics description: Instructions on how to integrate PG LAB Electronics with Home Assistant. ha_category: + - Cover - Switch -ha_release: "2025.3" + - Sensor +ha_release: '2025.3' ha_iot_class: Local Push ha_config_flow: true ha_codeowners: - - "@pglab-electronics" + - '@pglab-electronics' ha_domain: pglab ha_platforms: + - cover - switch + - sensor ha_integration_type: integration +ha_quality_scale: bronze --- The **PG LAB Electronics** {% term integrations %} allows you to control [PG LAB Electronics](https://www.pglab.dev/) devices in Home Assistant. @@ -49,9 +54,11 @@ Configure each PG LAB Electronics devices following these steps: ## Supported features -PG LAB Electronics relays, shutters, and switches are supported. +PG LAB Electronics relays, sensors, and switches are supported. - PG LAB Relays will be added as Home Assistant `switch` entities. +- PG LAB Shutters will be added as Home Assistant `cover` entities. +- PG LAB Sensors will be added as Home Assistant `sensor` entities. - The integration will also create diagnostic status sensors, with device different information. ## Removing the integration diff --git a/source/_integrations/philips_js.markdown b/source/_integrations/philips_js.markdown index 96711f088f1..94bac4dbaf5 100644 --- a/source/_integrations/philips_js.markdown +++ b/source/_integrations/philips_js.markdown @@ -24,10 +24,24 @@ ha_integration_type: integration The `philips_js` platform allows you to control Philips TVs which expose the [jointSPACE](http://jointspace.sourceforge.net/) JSON-API. -If your TV responds to `http://IP_ADDRESS_OF_TV:1925/system` then this integration can be used. In the response, you should also be able to see the version of the API the TV uses (`"api_version":{"Major":6...`). -For older TVs follow instructions on how to activate the API and if your model is supported [here](http://jointspace.sourceforge.net/download.html). Note that not all listed, jointSPACE-enabled devices will have JSON-interface running on port 1925. This is true at least for some models before year 2011. -Also, note that version 6 of the API needs to be authenticated by a PIN code displayed on your TV. +## Prerequisites + +Before adding the integration, it is worth checking if this integration works for you. As there are differences between TVs, you may need to try different addresses: + +- Some TVs use `https://` and port 1926, other TVs use `http://` and port 1925. + +### Check if this integration can be used + +1. Check if your TV responds to one of the following combinations: + - `http://IP_ADDRESS_OF_TV:1925/system` + - `https://IP_ADDRESS_OF_TV:1926/system` +2. If you get a response, then this integration can be used. + - In the response, you should also be able to see the version of the API the TV uses (`"api_version":{"Major":6...`). +3. For older TVs, follow instructions on how to activate the API and if your model is supported [here](http://jointspace.sourceforge.net/download.html). + - Note that not all listed, jointSPACE-enabled devices will have JSON-interface running on port 1925. + - This is true at least for some models before year 2011. + - Also, note that version 6 of the API needs to be authenticated by a PIN code displayed on your TV. {% include integrations/config_flow.md %} diff --git a/source/_integrations/picnic.markdown b/source/_integrations/picnic.markdown index d2d924482b1..2e3db91d159 100644 --- a/source/_integrations/picnic.markdown +++ b/source/_integrations/picnic.markdown @@ -8,6 +8,7 @@ ha_iot_class: Cloud Polling ha_config_flow: true ha_codeowners: - '@corneyl' + - '@codesalatdev' ha_domain: picnic ha_platforms: - sensor diff --git a/source/_integrations/private_ble_device.markdown b/source/_integrations/private_ble_device.markdown index 912de1b35ed..c51f394a8f4 100644 --- a/source/_integrations/private_ble_device.markdown +++ b/source/_integrations/private_ble_device.markdown @@ -56,6 +56,18 @@ Alternatively, the IRK of an Android phone and/or secondary device can be obtain 8. Select one of the frames and expand the "Bluetooth Security Manager Protocol." The hex dump will show either the sending or receiving device IRK. 9. Reverse the value displayed. For example, if it is `763af6c7f7d94ad6c262158e2320544e`, the IRK to use would be: `4e5420238e1562c2d64ad9f7c7f63a76`. +### On Windows - for any devices that will connect to a computer + +1. Get the PsExec tool from Microsoft. It's available in the [Sysinternals Suite](https://learn.microsoft.com/en-us/sysinternals/downloads/psexec). Download and extract the `PsExec.exe` or `PsExec64.exe`. +2. Open Command Prompt as Administrator: Press the Windows key, type `cmd`, right-click on **Command Prompt**, and select **Run as administrator**. +3. Run PsExec: Navigate to the folder where PsExec is located and run `psexec -i -s cmd` or `psexec64 -i -s cmd`. This command will open a new command prompt window with SYSTEM rights. +4. Verify SYSTEM Rights: In the new command prompt window, type `whoami` to confirm that you have SYSTEM rights. +5. Open Registry Editor with SYSTEM Rights: In the new command prompt window, type `regedit` to open the Registry Editor with SYSTEM rights. +6. Locate the IRK: Navigate to `HKLM\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys`. There is one subfolder that probably holds the computer's Bluetooth radio's MAC address, look inside it for the folder corresponding to the MAC address of your Bluetooth device. +7. Right-click the key(folder) and select export. Save the `.reg` file somewhere. +8. Open the `.reg` file in Notepad. To open the **Replace** window, press Ctrl+H. **Find what:** "," and **Replace with** "". Select **Replace All**. This removes all commas from the hex value. +9. Copy the IRK value (only the part after `hex:`) and it can be used as-is. No reversing of byte order needs to be done. + ## ESPresense If you already use Identity Resolving Key tracking with ESPresence then you already have a hex-encoded version of your Identity Resolving Key. Home Assistant can use the key in this format directly. diff --git a/source/_integrations/pterodactyl.markdown b/source/_integrations/pterodactyl.markdown new file mode 100644 index 00000000000..61b299daaaa --- /dev/null +++ b/source/_integrations/pterodactyl.markdown @@ -0,0 +1,58 @@ +--- +title: Pterodactyl +description: Instructions on how to integrate a Pterodactyl server into Home Assistant. +ha_release: 2025.4 +ha_category: + - Binary sensor +ha_iot_class: Local Polling +ha_config_flow: true +ha_codeowners: + - '@elmurato' +ha_domain: pterodactyl +ha_platforms: + - binary_sensor +ha_integration_type: integration +ha_quality_scale: bronze +--- + +[Pterodactyl](https://www.pterodactyl.io) is a game server management panel designed to simplify the administration of game servers. It offers a user-friendly interface which allows users to manage multiple game servers from a single dashboard, supporting popular games like Minecraft. Its key features include an intuitive web-based control panel, automated server installation, real-time server monitoring, scheduled backups and more. Each game server runs in an isolated Docker container, ensuring security and stability. + +The Pterodactyl {% term integration %} allows you to monitor your game servers of your Pterodactyl server within Home Assistant. + +## Prerequisites + +To access your Pterodactyl server, an account API key is required. Follow these steps to create a new one: + +- Access your **Pterodactyl Panel** and log in with your user account. +- From the main dashboard, click your **username** or **profile icon** in the top-right corner, then select **API Credentials**. +- Enter a **Description** to identify the key (for example, "Home Assistant"). +- Optionally, specify **Allowed IPs** to restrict where the key can be used (leave blank to allow all IPs). +- Click **Create**. The panel will generate and display your new account API key. +- Copy the **account API key** immediately and store it securely. You won’t be able to view it again after leaving the page. + +{% important %} +Pterodactyl has two different types of API keys: Account and Application. Application API keys are not supported, an account API key as described above is required instead. +{% endimportant %} + +{% include integrations/config_flow.md %} + +During setup, you will be prompted to enter the **URL** and the **account API key** of the server. + +{% configuration_basic %} +URL: + description: "The URL of your Pterodactyl server, including the protocol (`http://` or `https://`) and optionally the port number. Example: `http://192.168.0.123:8080`" +Account API key: + description: "The account API key for accessing your Pterodactyl server (see prerequisites)." +{% endconfiguration_basic %} + +## Binary sensors + +This integration provides a binary sensor with the following information for each game server of your Pterodactyl server: + +- Status: `Running` or `Not running` + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/pyload.markdown b/source/_integrations/pyload.markdown index 451c4be167f..16f022aae31 100644 --- a/source/_integrations/pyload.markdown +++ b/source/_integrations/pyload.markdown @@ -39,8 +39,7 @@ If you haven't set up pyLoad yet, an easy way to get it up and running is by ins - During the setup process in Home Assistant, you will need: - pyLoad account credentials – A valid *username* and *password* to authenticate with pyLoad. - - The {% term host %} of the device running pyLoad. - - The port number that pyLoad is listening on (default is usually `8000`). + - The full URL of your pyLoad web interface, including the protocol (HTTP or HTTPS), hostname or IP address, port (pyLoad uses 8000 by default), and any path prefix if applicable. {% note %} @@ -53,12 +52,8 @@ The account used for integration must either be an admin account or one with at ### Configuration parameters {% configuration_basic %} -Host: - description: "The hostname or IP address of the device running your pyLoad instance." -Port: - description: "The port of the pyLoad instance. pyLoad uses port 8000 by default." -Uses an SSL Certificate: - description: "If enabled, the connection to the pyLoad instance will use HTTPS." +URL: + description: "The full URL of the pyLoad web interface, including the protocol (HTTP or HTTPS), hostname or IP address, port, and any path prefix if applicable. Example: `https://example.com:8000/path`" Verify SSL certificate: description: "If checked, the SSL certificate will be validated to ensure a secure connection." Username: diff --git a/source/_integrations/python_script.markdown b/source/_integrations/python_script.markdown index d9894845953..7ebf71101a0 100644 --- a/source/_integrations/python_script.markdown +++ b/source/_integrations/python_script.markdown @@ -28,7 +28,8 @@ Other imports like `min`, `max` are available as builtins. See the [python_scrip [logger-api]: https://docs.python.org/3.7/library/logging.html#logger-objects {% note %} -It is not possible to use Python imports with this integration. If you want to do more advanced scripts, you can take a look at [AppDaemon](https://appdaemon.readthedocs.io/en/latest/) or [pyscript](https://github.com/custom-components/pyscript) + - It is not possible to use Python imports with this integration. If you want to do more advanced scripts, you can take a look at [AppDaemon](https://appdaemon.readthedocs.io/en/latest/) or [pyscript](https://github.com/custom-components/pyscript) + - It is not possible to include your script as a button on the dashboard. A workaround is to create a [helper button](/integrations/input_button/) and create automation to run your script when the button state changes. {% endnote %} ## Writing your first script, reading input and logging the activity diff --git a/source/_integrations/remote_calendar.markdown b/source/_integrations/remote_calendar.markdown new file mode 100644 index 00000000000..c051bbafdf7 --- /dev/null +++ b/source/_integrations/remote_calendar.markdown @@ -0,0 +1,60 @@ +--- +title: Remote calendar +description: Instructions on how to use remote calendars in Home Assistant. +ha_category: + - Calendar +ha_iot_class: Cloud Polling +ha_release: 2025.04 +ha_config_flow: true +ha_domain: remote_calendar +ha_platforms: + - calendar +ha_codeowners: + - '@Thomas55555' +ha_integration_type: service +--- + +The **Remote calendar** {% term integration %} allows you to read a calendar in Home Assistant for powering automations. + +## Known limitations + +The integration does not provide the ability to connect to an resource that requires authentication or special headers. + +## Installation instructions + +{% include integrations/config_flow.md %} + +Please provide the following information to the config flow. + +{% configuration_basic %} +Calendar Name: + description: "A name for your calendar, you can choose a name you want. + Example: `Home Assistant Events`" +Calendar URL: + description: "The URL of the remote calendar. Example: `https://calendar.google.com/calendar/ical/p07n98go11onamd08d0kmq6jhs%40group.calendar.google.com/public/basic.ics`" +{% endconfiguration_basic %} + +## Data updates + +At the start of the integration, we fetch data from the remote. If the update fails, the integration tries again to fetch the data. After that, the update interval of the calendar is set to every 24 hours. + +### Defining a custom polling interval + +{% include common-tasks/define_custom_polling.md %} +## Supported functionality + +The integration only supports reading a calendar. A calendar entity has a state and attributes that represent the next upcoming event (only). All the events of the calendar can be displayed in the Calendar dashboard. + +## Calendar Event Automations + +Individual Calendar *Events* are what powers automations such as: + +- Notify me *12 hours before* the *start* of the event named *Garbage collection*. + +See [Calendar Automations](/integrations/calendar#automation) for an overview, and read more about [Calendar Trigger Variables](/docs/automation/templating/#calendar) for the available information you can use in a condition or action such as the event `summary`, `description`, `location` and more. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown index c25c8c7bad7..614ad9faa26 100644 --- a/source/_integrations/reolink.markdown +++ b/source/_integrations/reolink.markdown @@ -100,6 +100,17 @@ Depending on the supported features of the camera, binary sensors are added for: - AI face detection++ - AI package detection++ - AI baby crying detection+ (sound detection) +- AI crossline person+ (up to 3 lines) +- AI crossline vehicle+ (up to 3 lines) +- AI crossline animal+ (up to 3 lines) +- AI intrusion person+ (up to 3 zones) +- AI intrusion vehicle+ (up to 3 zones) +- AI intrusion animal+ (up to 3 zones) +- AI linger person+ (up to 3 zones) +- AI linger vehicle+ (up to 3 zones) +- AI linger animal+ (up to 3 zones) +- AI item forgotten+ (up to 3 zones) +- AI item taken+ (up to 3 zones) - Sleep status+ \++ These sensors receive events using the following 4 methods (in order): TCP push, ONVIF push, ONVIF long polling or fast polling (every 5 seconds). @@ -107,6 +118,8 @@ The latency for receiving the events is the best for TCP push and the worst for For redundancy, these sensors are polled every 60 seconds together with the update of all other entities. To ensure you have the best latency possible, refer to the [Reducing latency of motion events](#reducing-latency-of-motion-events) section. +For the **crossline**, **intrusion**, **linger**, **item forgotten**, and **item taken** entities, you first need to configure the lines/zones in the Reolink app (**Settings** > **Detection alarm** > **Smart event detection**). In the Reolink app, you can add up to 3 zones/lines, and for each zone/line, you can enable/disable the person/vehicle/animal detection. Within 60 seconds after making a change in the Reolink app, the corresponding entities will automatically show up in Home Assistant. + ### Number entities Depending on the supported features of the camera, number entities are added for: @@ -127,12 +140,21 @@ Depending on the supported features of the camera, number entities are added for - AI package sensitivity - AI pet sensitivity - AI animal sensitivity +- AI crossline sensitivity+ (up to 3 lines) +- AI intrusion sensitivity+ (up to 3 zones) +- AI linger sensitivity+ (up to 3 zones) +- AI item forgotten sensitivity+ (up to 3 zones) +- AI item taken sensitivity+ (up to 3 zones) - AI face delay* - AI person delay* - AI vehicle delay* - AI package delay* - AI pet delay* - AI animal delay* +- AI intrusion delay+ (up to 3 zones) +- AI linger delay+ (up to 3 zones) +- AI item forgotten delay+ (up to 3 zones) +- AI item taken delay+ (up to 3 zones) - Auto quick reply time - Auto track limit left - Auto track limit right @@ -207,11 +229,14 @@ Depending on the supported features of the camera, select entities are added for - Chime visitor ringtone - Hub alarm ringtone - Hub visitor ringtone +- Hub scene mode (Off, Disarmed, Home, Away) **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. **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. +**Hub scene modes** can be set in the Reolink app/client. The scene names are loaded into Home Assistant at the start of the integration. After adding new custom scenes, restart the Reolink integration. + #### Action reolink.play_chime To play a ringtone on a Reolink chime, the `reolink.play_chime` action can be used. @@ -281,6 +306,7 @@ Depending on the supported features of the camera, the following sensor entities - PTZ pan position - PTZ tilt position +- Day night state+ - Wi-Fi signal* - CPU usage* - HDD/SD storage* @@ -730,6 +756,7 @@ Prerequisites: - Test if you can access the camera by its IP address in your browser `https://`. If you cannot, in the [Reolink mobile app, Windows, or Mac client](https://reolink.com/software-and-manual/) ensure at least one of the HTTP/HTTPS ports are enabled under **Settings** > **top camera model box** > **Network Information** > **Advanced** (mobile) or **Settings** > **Network** > **Advanced** > **Port Settings** (PC). See [additional instructions](https://support.reolink.com/hc/en-us/articles/900000621783-How-to-Set-up-Reolink-Ports-Settings/) on the Reolink site. - On some camera models, the RTMP port needs to be enabled in order for the HTTP(S) port to function properly. Make sure this port is also enabled if you get a `Cannot connect to host` error while one of the HTTP/HTTPS ports is already enabled. - If the integration and the browser can't connect to the camera even after you enable the HTTP/HTTPS ports, try to create a new user on the camera; that fixes the problem in some cases. +- Using a VLAN or other network restrictions between the Home Assistant device and the Reolink device is possible, but is also known to cause issues when not properly configured. Ensure HTTP (port 80), HTTPS (port 443), RTMP (port 1935), RTSP (port 554), ONVIF (port 8000) and TCP (port 9000) communication is not being blocked. When experiencing issues, please first test if moving the Reolink device to the same VLAN as the Home Assistant device and lifting all restrictions between them solves the issue. ### Entities intermittently become unavailable diff --git a/source/_integrations/roborock.markdown b/source/_integrations/roborock.markdown index f76fc31e916..4078e2ec8c5 100644 --- a/source/_integrations/roborock.markdown +++ b/source/_integrations/roborock.markdown @@ -24,6 +24,7 @@ ha_platforms: - diagnostics - image - number + - scene - select - sensor - switch @@ -32,113 +33,229 @@ ha_platforms: ha_integration_type: integration --- -The Roborock integration allows you to control your [Roborock](https://us.roborock.com/pages/robot-vacuum-cleaner) vacuum while using the Roborock app. -This integration requires a continuous cloud connection while using the device. However, excluding map data and scenes, communication between the integration and the device is conducted locally. +The Roborock {% term integration %} allows you to connect your [Roborock](https://us.roborock.com/pages/robot-vacuum-cleaner) robotic vacuums to your Home Assistant. Roborock vacuums are +intelligent home cleaning robots and, depending on the specific device, may have features +like mopping capabilities, laser navigation, and options for changing cleaning +performance or location in the home. This integration enables you to control and +monitor your Roborock vacuum directly from Home Assistant. -Once you log in with your Roborock account, the integration will automatically discover your Roborock devices and get the needed information to communicate locally with them. Please ensure your Home Assistant instance can communicate with the local IP of your device. We recommend setting a static IP for your Roborock Vacuum to help prevent future issues. The device communicates on port 58867. Depending on your firewall, you may need to allow communication from Home Assistant to your vacuum on that port. +The integration also allows for automation and integration with other smart home +devices. For example, you could send a notification when the vacuum is stuck, or +pause the vacuum when a media player starts playing music. + +## Prerequisites + +1. Download the Roborock App for iOS or Android. +2. Create an account and log in. +3. Add your Roborock device to the Roborock App (for example, by scanning a QR code). {% include integrations/config_flow.md %} +{% configuration_basic %} +Email address: + description: "The email address used to sign in to the Roborock app. A verification code will be sent to this email address when adding the Roborock integration." +Verification code: + description: "The verification code that is sent to your email address when adding the Roborock integration." +{% endconfiguration_basic %} -## Robovac entities +{% include integrations/option_flow.md %} + +The integration can be configured to specify which Roborock App features are drawn +on the map. + +{% configuration_basic %} +Charger: + description: Show the charger on the map. +Cleaned area: + description: Show the area cleaned on the map. +Go-to path: + description: Show the go-to path on the map. +Ignored obstacles: + description: Show ignored obstacles on the map. +Ignored obstacles with photo: + description: Show ignored obstacles with photos on the map. +Mop path: + description: Show the mop path on the map. +No carpet zones: + description: Show the no carpet zones on the map. +No-go zones: + description: Show the no-go zones on the map +No mopping zones: + description: Show the no-mop zones on the map. +Obstacles: + description: Show obstacles on the map. +Obstacles with photo: + description: Show obstacles with photos on the map. +Path: + description: Show the path on the map. +Predicted path: + description: Show the predicted path on the map. +Vacuum position: + description: Show the vacuum position on the map. +Virtual walls: + description: Show virtual walls on the map. +Zones: + description: Show zones on the map. +{% endconfiguration_basic %} + +## Data Updates + +This integration uses both local and cloud {% term polling %} and also receives +cloud push events using MQTT. Local communication is preferred when possible. +Map data is always fetched through the cloud, and Dyad and Zeo devices are cloud only. + +The integration will automatically discover your Roborock devices using the cloud APIs and get +the needed information to communicate locally with them, if supported. Please ensure your Home Assistant +instance can communicate with the local IP of your device. We recommend setting a static IP +for your Roborock Vacuum to help prevent future issues. The device communicates on port 58867. +Depending on your firewall, you may need to allow communication from Home Assistant to your vacuum on that port. + + +## Supported functionality Roborock devices have a variety of features that are supported on some devices but not on others. Only entities that your device supports will be added to your integration. -### Vacuum +### Robovac devices + +#### Vacuum The vacuum entity holds the ability to control most things the vacuum can do, such as start a clean, return to the dock, or set the fan speed. -### Select +#### Image -Mop mode - Describes how to mop the floor. On some firmware, it is called 'mop route'. +- **Map** + - **Description**: Displays a live map of your Roborock vacuum's cleaning area. -Mop intensity - How hard you would like your vacuum to mop. +#### Select -### Binary sensor +- **Mop mode** + - **Description**: Describes how to mop the floor. On some firmware, it is called 'mop route'. -Cleaning - States if the vacuum has a clean currently active. This is on when the robot is actively moving around or when the robot returns to the dock when the battery is low but a clean is still active and will resume later. +- **Mop intensity** + - **Description**: How hard you would like your vacuum to mop. -Mop attached - States if the mop is currently attached. +- **Selected map** + - **Description**: Choose the map that is loaded on the vacuum. -Mop drying status - Only available on docks with drying capabilites - States if the mop is currently being driven. +- **Empty mode** + - **Description**: You can set the "empty mode" setting including Max, Light, Balanced, and Smart. + - **Availability**: For vacuum equipped with an auto-empty dock -Water box attached - States if the water box is currently attached. +#### Binary sensor -Water shortage - States if the water box is low on water - 'Ok' if it has not detected a water shortage. +- **Charging** + - **Description**: States if the vacuum is currently charging or not. + +- **Cleaning** + - **Description**: States if the vacuum is currently cleaning or not. This is on when the robot is actively moving around or when the robot returns to the dock when the battery is low but a clean is still active and will resume later. + +- **Mop attached** + - **Description**: States if the mop is currently attached. + +- **Mop drying status** + - **Description**: Only available on docks with drying capabilites - States if the mop is currently being driven. + +- **Water box attached** + - **Description**: States if the water box is currently attached. + +- **Water shortage** + - **Description**: States if the water box is low on water - 'Ok' if it has not detected a water shortage. -### Sensor +#### Sensor -Cleaning area - How much area the vacuum has cleaned in its current run. If the vacuum is not currently cleaning, how much area it has cleaned during its last run. +- **Cleaning area** + - **Description**: How much area the vacuum has cleaned in its current run. If the vacuum is not currently cleaning, how much area it has cleaned during its last run. -Cleaning time - How long the vacuum has been cleaning for. If the vacuum is not currently cleaning, how long it cleaned for in its last run. +- **Cleaning time** + - **Description**: How long the vacuum has been cleaning for. If the vacuum is not currently cleaning, how long it cleaned for in its last run. -Cleaning progress - Only available on some newer devices - what percent of the current cleaning is completed. +- **Cleaning progress** + - **Description**: Only available on some newer devices - what percent of the current cleaning is completed. -Dock error - Only available on the non-basic docks - The current error of the vacuum or 'Ok' if none exist +- **Dock error** + - **Description**: Only available on the non-basic docks - The current error of the vacuum or 'Ok' if none exists. -Main brush time left - How much time is left before Roborock recommends you replace your main brush. +- **Main brush time left** + - **Description**: How much time is left before Roborock recommends you replace your main brush. -Mop drying remaining time - Only available on the non-basic docks - How much time is left until the mop is dry and ready to continue cleaning. +- **Mop drying remaining time** + - **Description**: Only available on the non-basic docks - How much time is left until the mop is dry and ready to continue cleaning. -Side brush time left - How much time is left before Roborock recommends you replace your side brush. +- **Side brush time left** + - **Description**: How much time is left before Roborock recommends you replace your side brush. -Filter time left - How much time is left before Roborock recommends you replace your vacuum's air filter. +- **Filter time left** + - **Description**: How much time is left before Roborock recommends you replace your vacuum's air filter. -Status - The current status of your vacuum. This typically describes the action that is currently being run. For example, 'spot_cleaning' or 'docking'. +- **Status** + - **Description**: The current status of your vacuum. This typically describes the action that is currently being run. For example, 'spot_cleaning' or 'docking'. -Last clean begin - the last time that your vacuum started cleaning. +- **Last clean begin** + - **Description**: the last time that your vacuum started cleaning. -Last clean end - The last time that your vacuum finished cleaning. +- **Last clean end** + - **Description**: The last time that your vacuum finished cleaning. -Total cleaning time - The lifetime cleaning duration of your vacuum. +- **Total cleaning time** + - **Description**: The lifetime cleaning duration of your vacuum. -Total cleaning area - The lifetime cleaning area of your vacuum. +- **Total cleaning area** + - **Description**: The lifetime cleaning area of your vacuum. -Total cleaning count - The lifetime cleaning count of your vacuum. +- **Total cleaning count** + - **Description**: The lifetime cleaning count of your vacuum. -Vacuum error - The current error with your vacuum, if there is one. +- **Vacuum error** + - **Description**: The current error with your vacuum, if there is one. -### Time +#### Time -Do not disturb begin - When _Do not disturb_ is enabled, the vacuum does not run or speak after this point. +- **Do not disturb begin** + - **Description**: When _Do not disturb_ is enabled, the vacuum does not run or speak after this point. -Do not disturb end - When _Do not disturb_ is enabled, the vacuum does not run or speak before this point. +- **Do not disturb end** + - **Description**: When _Do not disturb_ is enabled, the vacuum does not run or speak before this point. -### Switch +#### Switch -Child lock - This disables the buttons on the vacuum. Nothing happens when the buttons are pushed. +- **Child lock** + - **Description**: This disables the buttons on the vacuum. Nothing happens when the buttons are pushed. -Status indicator light - This is the LED on the top of your vacuum. The color changes depending on the status of your vacuum. +- **Status indicator light** + - **Description**: This is the LED on the top of your vacuum. The color changes depending on the status of your vacuum. -Do not disturb - This enables _Do not disturb_ during the time frame you have set in the app or on the time entity. When _Do not disturb_ is enabled, the vacuum does not run or speak. +- **Do not disturb** + - **Description**: This enables _Do not disturb_ during the time frame you have set in the app or on the time entity. When _Do not disturb_ is enabled, the vacuum does not run or speak. -### Number +#### Number -Volume - This allows you to control the volume of the robot's voice. For example, when it states "Starting cleaning". This allows you to set the volume to 0%, while the app limits it to 20%. +- **Volume** + - **Description**: This allows you to control the volume of the robot's voice. For example, when it states "Starting cleaning". This allows you to set the volume to 0%, while the app limits it to 20%. -### Button +#### Button There are currently four buttons that allow you to reset the various maintenance items on your vacuum. Pressing the button cannot be undone. For this reason, the buttons are disabled by default to make sure they are not pressed unintentionally. -Reset sensor consumable - The sensors on your vacuum are expected to be cleaned after 30 hours of use. +- **Reset sensor consumable** + - **Description**: The sensors on your vacuum are expected to be cleaned after 30 hours of use. -Reset side brush consumable - The side brush is expected to be replaced every 200 hours. +- **Reset side brush consumable** + - **Description**: The side brush is expected to be replaced every 200 hours. -Reset main brush consumable - The main brush/ roller is expected to be replaced every 300 hours. +- **Reset main brush consumable** + - **Description**: The main brush/ roller is expected to be replaced every 300 hours. -Reset air filter - The air filter is expected to be replaced every 150 hours. +- **Reset air filter** + - **Description**: The air filter is expected to be replaced every 150 hours. -### Scene +#### Actions -For every scene/routine/program you define for your vacuum, a scene entity will be created to activate it. +##### Action Set Vacuum Goto Position -### Actions - -#### Action `roborock.set_vacuum_goto_position` - -Go the specified coordinates. +The `roborock.set_vacuum_goto_position` action will set the vacuum to go to +the specified coordinates. - **Data attribute**: `entity_id` - **Description**: Only act on a specific robot. @@ -150,9 +267,11 @@ Go the specified coordinates. - **Description**: Y-coordinate, integer value. The dock is located at y-coordinate 25500. - **Optional**: No. -#### Action `roborock.get_vacuum_current_position` +##### Action Get Vacuum Current Position -Get the current position of the vacuum. This is a cloud call and should only be used for diagnostics. This is not meant to be used for automations. Frequent requests can lead to rate limiting. +The `roborock.get_vacuum_current_position` action will get the current position of the vacuum. This +is a cloud call and should only be used for diagnostics. This is not meant to be used for +automations. Frequent requests can lead to rate limiting. - **Data attribute**: `entity_id` - **Description**: Only act on a specific robot. @@ -175,43 +294,66 @@ data: {} y: 25168 ``` -### Image +##### Action Get Maps -You can see all the maps within your Roborock account. Keep in mind that they are device-specific. The maps require the cloud API to communicate as the maps are seemingly stored on the cloud. If someone can figure out a way around this - contributions are always welcome. +The `roborock.get_maps` action will return the maps available on the device and +details about any named rooms on each map. +- **Data attribute**: `entity_id` + - **Description**: Get maps for a specific device + - **Optional**: No. -## Dyad entities +This will return the name of the map, and the room names and id numbers. See [How can I clean a specific room? ](#how-can-i-clean-a-specific-room) for more details on how to use the maps response. + +### Dyad devices Roborock wet/dry vacuums currently expose some entities through an MQTT connection - it is currently cloud dependent. -### Sensor +#### Sensor -Status - The current status of your vacuum. This typically describes the action that is currently being run. For example, 'drying' or 'charging'. +- **Status** + - **Description**: The current status of your vacuum. This typically describes the action that is currently being run. For example, 'drying' or 'charging'. -Battery - The current charge of your device. +- **Battery** + - **Description**: The current charge of your device. -Filter time left - how long until Roborock recommends cleaning/replacing your filter. +- **Filter time left** + - **Description**: how long until Roborock recommends cleaning/replacing your filter. -Brush time left - how long until Roborock recommends cleaning/replacing your brush. +- **Brush time left** + - **Description**: how long until Roborock recommends cleaning/replacing your brush. -Error - the current error of the device - if one exists - "None" otherwise. +- **Error** + - **Description**: the current error of the device - if one exists - "None" otherwise. -Total cleaning time - how long you have cleaned with your wet/dry vacuum. +- **Total cleaning time** + - **Description**: how long you have cleaned with your wet/dry vacuum. -## Zeo Entities +### Zeo Entities Roborock Zeo One currently exposes some entities through an MQTT connection - it is currently cloud dependent. -### Sensor +#### Sensor -State - The current state of your washing machine. For example, 'washing' or 'rinsing'. +- **State** + - **Description**: The current state of your washing machine. For example, 'washing' or 'rinsing'. -Countdown - Countdown for how long until the machine starts. +- **Countdown** + - **Description**: Countdown for how long until the machine starts. -Washing left - The amount of time until your machine is done washing. +- **Washing left** + - **Description**: The amount of time until your machine is done washing. + +- **Error** + - **Description**: The current error of the Zeo, if one exists. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} -Error - The current error of the Zeo, if one exists. ## FAQ @@ -219,7 +361,7 @@ Error - The current error of the Zeo, if one exists. No. This integration requires information from your Roborock app to set up and uses Roborock's protocols to communicate with your device. You must have your vacuum synced to the Roborock app. ### Can I block internet access for this device? -As of right now - no. When the vacuum is disconnected from the internet, it will attempt to disconnect itself from Wi-Fi and reconnect itself until it can reach the Roborock servers. We are looking for the best way to handle this and see what can be blocked while still allowing the vacuum to function. +As of right now - no. When the vacuum is disconnected from the internet, it will attempt to disconnect itself from Wi-Fi and reconnect itself until it can reach the Roborock servers. ### What devices are supported? If you can add your device to the Roborock app - it is supported. However, some older vacuums like the Roborock S5 must be connected using the Mi Home app and can be set up in Home Assistant through the [Xiaomi Miio](/integrations/xiaomi_miio/) integration. diff --git a/source/_integrations/rocketchat.markdown b/source/_integrations/rocketchat.markdown index e85833b821e..bb5ed290de7 100644 --- a/source/_integrations/rocketchat.markdown +++ b/source/_integrations/rocketchat.markdown @@ -54,6 +54,6 @@ rocketchat_notification: #### Message variables - **message** (*Required*): Message to be displayed. -- **data** (*Optional*): Dictionary containing any of the variables defined in the [Rocket.Chat documentation](https://developer.rocket.chat/reference/api/rest-api/endpoints/core-endpoints/chat-endpoints/postmessage) +- **data** (*Optional*): Dictionary containing any of the variables defined in the [Rocket.Chat documentation](https://developer.rocket.chat/apidocs/post-message) To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_integrations/scene.mqtt.markdown b/source/_integrations/scene.mqtt.markdown index c581f777c31..ea0b9f5560f 100644 --- a/source/_integrations/scene.mqtt.markdown +++ b/source/_integrations/scene.mqtt.markdown @@ -42,7 +42,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -51,7 +51,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -138,7 +138,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: diff --git a/source/_integrations/select.mqtt.markdown b/source/_integrations/select.mqtt.markdown index f37de8c0236..68af312e19c 100644 --- a/source/_integrations/select.mqtt.markdown +++ b/source/_integrations/select.mqtt.markdown @@ -46,7 +46,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -59,11 +59,11 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -146,7 +146,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false type: template json_attributes_topic: @@ -193,7 +193,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/sensibo.markdown b/source/_integrations/sensibo.markdown index 3eb3796896e..0a74fa8525f 100644 --- a/source/_integrations/sensibo.markdown +++ b/source/_integrations/sensibo.markdown @@ -33,7 +33,7 @@ ha_dhcp: true ha_integration_type: integration --- -Integrates [Sensibo](https://sensibo.com) devices into Home Assistant. +The **Sensibo** {% term integration %} integrates [Sensibo](https://sensibo.com) devices into Home Assistant. ## Prerequisites @@ -45,127 +45,180 @@ then in the Sensibo app log you will be able to distinguish between actions done in the app and actions done by Home Assistant. {% endtip %} +## Supported devices + +The **Sensibo** {% term integration %} supports the following devices and accessories. + +- **Sensibo Sky**: Smart AC control device. +- **Sensibo Air**: Smart AC control device. +- **Sensibo Air Pro**: Smart AC control device with air quality monitoring. +- **Sensibo Pure**: Smart air purifier. +- **Sensibo Elements**: Smart air quality monitoring. +- **Sensibo Room Sensor**: Motion sensor and temperature readings (needs to be connected with an Air device). + {% include integrations/config_flow.md %} -## Binary sensors +{% configuration_basic %} +API key: + description: The previously created API key. +{% endconfiguration_basic %} -For motion sensors (supported by Sensibo Air devices), this integration provides the following sensors: +## Supported functionality -- Motion -- Alive -- Main sensor +{% note %} -For climate devices, these sensors are available: +Some entities are disabled by default, so you need to [enable them](/common-tasks/general/#to-enable-or-disable-a-single-entity) to use them. -- Room presence (for Air devices with an attached motion sensor) +Depending on device support, some entities might not be available as the device does not support them. -For Pure devices, these sensors are available: +{% endnote %} -- Pure Boost Enabled -- Pure Boost linked with AC -- Pure Boost linked with Presence -- Pure Boost linked with Outdoor Air Quality +### Sensibo Sky, Air, Air Pro, Pure, Elements and Room sensor -For all devices, these sensors are available: +#### Numbers -- Filter Clean Required +- **Temperature calibration**: Calibrate the temperature reading of the device. +- **Humidity calibration**: Calibrate the humidity reading of the device. -## Button +#### Updates -You can reset your filter check by using the button available on climate devices. +- **Firmware**: Firmware update available. -By pressing the button, you tell your device that you have cleaned or replaced the filter. +### Sensibo Sky, Air, Air Pro, Pure, and Elements -## Number entities +#### Binary sensors -By using the number entities you can calibrate the temperature and hunmidity of your device. +- **Filter clean required**: Does the A/C's filter need cleaning. -These entities are disabled by default. +#### Buttons -## Select entities +- **Reset filter**: Reset the filter timer after cleaning. -For supported devices, this integration provides support to set the following modes by the select entity: +#### Climates -- Light +- **[Name of device]**: The main climate entity for the device to control HVAC mode. -## Sensor entities +#### Selects -For all devices, these sensors are available: +- **Light**: Turn the light on/off or dim for the device. -- Filter last reset -- Feels Like -- Timer end time +#### Sensors -For motion sensors (supported by Sensibo Air devices), this integration provides the following sensors: +- **Filter last reset**: Last reset of the filter cleaning. -- Temperature -- Humidity +### Sensibo Sky, Air, and Air Pro -For diagnostics, not automatically displayed on dashboards, these sensors are available for motion sensors: +#### Sensors -- Voltage -- Rssi +- **Feels like**: Feels like temperature. +- **Timer end time**: End time of timer. +- **Climate React type**: Climate React type: Temperature, Feels like, or Humidity. +- **Climate React low temperature threshold**: Low temperature threshold setting for Climate react. +- **Climate React high temperature threshold**: High temperature threshold setting for Climate react. -For Pure devices, these sensors are available: +#### Switches -- PM2.5 -- Pure Boost Sensitivity +- **Timer**: Timer on/off. Enabling the timer, sets it to 10 minutes. +- **Climate React**: Enable/Disable Climate React. -For AirQ device, these sensors are available: +### Sensibo Air, Air Pro, and Elements -- TVOC -- CO2 +#### Sensors -For Element device, these sensors are available: +- **TVOC**: TVOC reading from device. +- **Co2**: Co2 reading from device. -- PM 2.5 -- TVOC -- CO2 -- Ethanol -- Air quality +### Sensibo Elements -For climate devices, these sensors are available: +#### Sensors -- Climate React low temperature threshold -- Climate React high temperature threshold +- **PM2.5**: PM2.5 reading from device. +- **Ethanol**: Ethanol reading from device. +- **Air quality**: Air quality based on readings from device. -## Switch entities +### Sensibo Pure -For climate devices, these switches are available: +#### Binary sensors -Support to enable/disable a timer to delay a start or stop (depending on the current state) of your device. +- **Pure Boost linked with AC**: Is Pure Boost linked with an A/C device. +- **Pure Boost linked with presence**: Is Pure Boost linked to presence. +- **Pure Boost linked with indoor air quality**: Is Pure Boost linked with indoor air quality. +- **Pure Boost linked with outdoor air quality**: Is Pure Boost linked with outdoor air quality. -The switch uses a timer of 60 minutes delay. You can choose a custom delay using the custom `sensibo.enable_timer` action. See [Timer](#timer). +#### Sensors -Support to enable/disable Climate React +- **Pure AQI**: PM2.5 level indicated as 'Good', 'Moderate', and 'Bad'. +- **Pure Boost Sensitivity**: Sensitivity for Pure Boost. -Usage of the Climate React switch requires that the action has been configured previously in the app or by using the custom `sensibo.enable_climate_react` action. See [Climate React](#climate-react) +#### Switches -For Pure devices, this integration provides support to enable/disable Pure Boost. +- **Pure Boost**: Enable/Disable Pure Boost. -To customize the settings of Pure Boost, you can use the custom `sensibo.enable_pure_boost` action. See [Pure Boost](#pure-boost) +### Sensibo Room sensor -## Custom actions +#### Binary sensors + +- **Motion**: Is there motion +- **Connectivity**: Is the motion sensor alive and connected +- **Main sensor**: Is the connected motion sensor the main sensor for the connected Air device. +- **Room occupied**: Is there presence in the room of the connected Air device. + +## Actions ### Get device mode capabilities -As the below custom actions [Full state](#full-state) and [Climate react](#climate-react) both require their inputs to be exactly what the API requires, this custom action will provide the capabilities for the device for a certain HVAC mode to help the users on using those actions properly. +As the below custom actions [Full state](#set-full-state) and [Climate react](#enable-climate-react) both require their inputs to match the API requirements precisely, this custom action will provide the capabilities for the device for a certain HVAC mode to help the users on using those actions properly. + +**Action configuration:** + +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +HVAC mode: + description: Select the HVAC mode for which you want to get the capabilities. +{% endconfiguration_basic %} + +**Proposed action use:** 1. Go to [Developer Tools](https://my.home-assistant.io/redirect/server_controls/). 2. Switch to the **Actions** page. 3. Use the `sensibo.get_device_capabilities` action. 4. Select the `climate` entity as the target. 5. Select the `hvac_mode` from the available list. -6. Select **Perform action** to retrieve the available options per capability for that particular `climate` entity. +6. Select **Perform action** to retrieve the available options. +7. Copy the case-sensitive options as needed to other action calls, automations or scripts. -From the provided dictionary, copy the case-sensitive options as needed into other action calls used in automations or scripts. +### Set full state -### Full state +You can send a full state command to **Sensibo** instead of single commands using the `sensibo.full_state` action. -You can send a full state command to Sensibo instead of single commands using the `sensibo.full_state` action. +{% note %} All fields are required to be according to Sensibo API specifications and are case-sensitive. +Only provide the fields which are supported by the device. + +{% endnote %} + +**Action configuration:** + +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +HVAC mode: + description: Select the HVAC mode for which you want to get the capabilities. +Target temperature: + description: Provide a target temperature if applicable. +Fan mode: + description: Provide a fan mode if applicable. +Swing mode: + description: Provide a swing mode if applicable. +Horizontal swing mode: + description: Provide a horizontal swing mode if applicable. +Light: + description: Provide a setting for the light if applicable. +{% endconfiguration_basic %} + {% tip %} Use the [Get device mode capabilities](#get-device-mode-capabilities) action to provide a list of capabilities. @@ -174,29 +227,88 @@ Use the [Get device mode capabilities](#get-device-mode-capabilities) action to ### Assume state -For devices which are also controlled in other ways or often goes out of sync with Sensibo there is a `sensibo.assume_state` action. +An HVAC device often has a manual remote or other means of control which can put **Sensibo** out of sync with the HVAC device. -With this action you can tell Sensibo if your device is currently running or not without sending a new command to you device. +Use the `sensibo.assume_state` action to tell **Sensibo** if the HVAC device is currently on or off without sending a control to the actual device. -### Pure Boost +**Action configuration:** + +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +State: + description: Select if the HVAC device is on or off. +{% endconfiguration_basic %} + +### Enable Pure Boost You can configure your Pure Boost settings using the `sensibo.enable_pure_boost` action. -- Enable Pure Boost will enable the action with configured settings +{% note %} -Using Geo integration for Pure Boost is only possible by pre-configuration of Presence within the app. +AC integration and Geo integration needs to be pre-configured via the app before first use. -### Timer +{% endnote %} -You can enable a timer with a custom delay using the `sensibo.enable_timer` action that is provided. +**Action configuration:** -### Climate React +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +AC integration: + description: Integrate with a HVAC device. +Geo integration: + description: Integrate with presence. +Indoor air quality: + description: Integrate with indoor air quality. +Outdoor air quality: + description: Integrate with outdoor air quality. +Sensitivity: + description: Set the sensitivity to `Normal` or `Sensitive`. +{% endconfiguration_basic %} + +### Enable timer + +You can enable a timer to turn the HVAC device on or off for a certain time, using the `sensibo.enable_timer` action that is provided. + +**Action configuration:** + +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +Minutes: + description: Number of minutes to turn the device on or off. + mandatory: true +{% endconfiguration_basic %} + +### Enable Climate React You can configure your Climate React settings using the `sensibo.enable_climate_react` action. -- Configuring this action also turns Climate React on +{% note %} -When using the action, the state needs to be set to precisely what Sensibo API expects. The first time it's recommended to use the app to configure it. +Configuring this action also turns Climate React on. + +When using the action, the state needs to be set to precisely what Sensibo API expects. The first time, it's recommended to use the app to configure it. + +{% endnote %} + +**Action configuration:** + +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +Threshold high: + description: When the trigger goes above this value. +State high threshold: + description: The full state to configure above the high threshold. +Threshold low: + description: When the trigger goes below this value. +State low threshold: + description: The full state to configure below the low threshold. +Trigger type: + description: The trigger type (`temperature`, `feelsLike`, or `humidity`). +{% endconfiguration_basic %} {% tip %} @@ -204,7 +316,7 @@ Use the [Get device mode capabilities](#get-device-mode-capabilities) action to {% endtip %} -Example for low threshold state: +**Example full state:** {% raw %} @@ -221,9 +333,11 @@ light: "on" {% endraw %} -## Adding a quick switch example +## Examples -If you want a "Quick Switch" to turn your AC On / Off, you can do that using the following `Switch Template`: +### Template switch to turn HVAC device on or off + +A simple switch which has `heat` or `off` as mode. {% raw %} @@ -233,13 +347,13 @@ switch: switches: ac: friendly_name: "AC" - value_template: "{{ is_state('climate.ac', 'cool') or is_state('climate.ac', 'heat') or is_state('climate.ac', 'dry') or is_state('climate.ac', 'fan_only') }}" + value_template: "{{ is_state('climate.ac', 'heat') }}" turn_on: action: climate.set_hvac_mode target: entity_id: climate.ac data: - hvac_mode: "cool" + hvac_mode: "heat" turn_off: action: climate.set_hvac_mode target: @@ -249,3 +363,76 @@ switch: ``` {% endraw %} + +### Start the timer for 30 minutes when I get home + +{% raw %} + +```yaml +automation: + alias: "Example timer" + triggers: + - trigger: zone + entity_id: person.me + zone: zone.home + event: enter + actions: + - action: sensibo.enable_timer + data: + minutes: 30 + target: + entity_id: climate.hvac_device +``` + +{% endraw %} + +### Set a full state of the HVAC device at 6pm + +{% raw %} + +```yaml +automation: + alias: "Example full state" + triggers: + - trigger: time + at: "18:00:00" + actions: + - action: sensibo.full_state + data: + mode: "heat" + target_temperature: 23 + fan_mode: "medium" + swing_mode: "fixedMiddleTop" + horizontal_swing_mode: "fixedCenter" + light: "off" + target: + entity_id: climate.hvac_device +``` + +{% endraw %} + +## Data fetching and limitations + +Data is {% term polling polled %} from the **Sensibo** API once every minute for all devices. + +If {% term polling %} cannot happen because of no connectivity or a malfunctioning API, it will retry a few times before failing. +The user can use the [`homeassistant.update_entity`](homeassistant#action-homeassistantupdate_entity) action to manually try again later, in the case the user has solved the connectivity issue. + +## Troubleshooting + +This service is reliant on an internet connection and that the **Sensibo** API is available. Here are the things you can try before raising an issue: + +- Check that internet is available in your Home Assistant instance. +- Check that the **Sensibo** API is available by accessing the [Sensibo API page](https://home.sensibo.com/api/v1/users/me). If you have previously logged in to Sensibo web, you will get a JSON back with the provided information about your account. If not logged in, the API will respond with `login_required`. +- Use `curl` in a terminal on your Home Assistant instance using the same URL as previously opened in the browser. `curl https://home.sensibo.com/api/v1/users/me` + +### Specific log entries + +**Log entry:** `Device [name of device] not correctly registered with remote on Sensibo cloud.` + +When setting up a device the first time, a `remote` needs to be defined for the device in the **Sensibo** app, either automatically or manually. +The device will appear in Home Assistant, but won't be usable as no HVAC modes can be selected. + +## Remove the integration + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/sensor.markdown b/source/_integrations/sensor.markdown index 5c94339fbf2..d535faa6d62 100644 --- a/source/_integrations/sensor.markdown +++ b/source/_integrations/sensor.markdown @@ -61,7 +61,7 @@ The following device classes are supported for sensors: - **data_size**: Data size in bit, kbit, Mbit, Gbit, B, kB, MB, GB, TB, PB, EB, ZB, YB, KiB, MiB, GiB, TiB, PiB, EiB, ZiB or YiB - **date**: Date string (ISO 8601) - **distance**: Generic distance in km, m, cm, mm, mi, nmi, yd, or in -- **duration**: Duration in d, h, min, s, or ms +- **duration**: Duration in d, h, min, s, ms, or µs - **energy**: Energy in J, kJ, MJ, GJ, mWh, Wh, kWh, MWh, GWh, TWh, cal, kcal, Mcal, or Gcal - **energy_distance**: Energy per distance in kWh/100km, mi/kWh or km/kWh. - **energy_storage**: Stored energy in J, kJ, MJ, GJ, mWh, Wh, kWh, MWh, GWh, TWh, cal, kcal, Mcal, or Gcal diff --git a/source/_integrations/sensor.mqtt.markdown b/source/_integrations/sensor.mqtt.markdown index 06fc7dee130..1cf23ea7a42 100644 --- a/source/_integrations/sensor.mqtt.markdown +++ b/source/_integrations/sensor.mqtt.markdown @@ -43,7 +43,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -52,7 +52,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -149,7 +149,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false type: template json_attributes_topic: @@ -157,7 +157,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. 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." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) 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: @@ -213,7 +213,7 @@ unit_of_measurement: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value. If the template throws an error, the current state will be used instead." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value. If the template throws an error, the current state will be used instead." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/siren.mqtt.markdown b/source/_integrations/siren.mqtt.markdown index 342ee7782f5..730e2b5dead 100644 --- a/source/_integrations/siren.mqtt.markdown +++ b/source/_integrations/siren.mqtt.markdown @@ -48,7 +48,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -57,7 +57,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -69,11 +69,11 @@ available_tones: required: false type: list command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate a custom payload to send to `command_topic`. The variable `value` will be assigned with the configured `payload_on` or `payload_off` setting. The siren turn on action parameters `tone`, `volume_level` or `duration` can be used as variables in the template. When operation in optimistic mode the corresponding state attributes will be set. Turn on parameters will be filtered if a device misses the support. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate a custom payload to send to `command_topic`. The variable `value` will be assigned with the configured `payload_on` or `payload_off` setting. The siren turn on action parameters `tone`, `volume_level` or `duration` can be used as variables in the template. When operation in optimistic mode the corresponding state attributes will be set. Turn on parameters will be filtered if a device misses the support. required: false type: template command_off_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate a custom payload to send to `command_topic` when the siren turn off action is called. By default `command_template` will be used as template for action turn off. The variable `value` will be assigned with the configured `payload_off` setting. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate a custom payload to send to `command_topic` when the siren turn off action is called. By default `command_template` will be used as template for action turn off. The variable `value` will be assigned with the configured `payload_off` setting. required: false type: template command_topic: @@ -157,7 +157,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -227,7 +227,7 @@ state_topic: required: false type: string state_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's state from the `state_topic`. To determine the siren's state result of this template will be compared to `state_on` and `state_off`. Alternatively `value_template` can be used to render to a valid JSON payload." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's state from the `state_topic`. To determine the siren's state result of this template will be compared to `state_on` and `state_off`. Alternatively `value_template` can be used to render to a valid JSON payload." required: false type: template support_duration: diff --git a/source/_integrations/smart_rollos.markdown b/source/_integrations/smart_rollos.markdown index 21976015968..bb7eef3076e 100644 --- a/source/_integrations/smart_rollos.markdown +++ b/source/_integrations/smart_rollos.markdown @@ -7,7 +7,7 @@ ha_domain: smart_rollos ha_integration_type: virtual ha_supporting_domain: motion_blinds ha_supporting_integration: Motionblinds -ha_release: 2025.3 +ha_release: 2020.12 ha_codeowners: - '@starkillerOG' ha_config_flow: true diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index b0cac8beefe..4935069d6b0 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -4,154 +4,96 @@ description: Instructions on setting up SmartThings within Home Assistant. featured: true ha_category: - Binary sensor + - Button - Climate - Cover + - Event - Fan - Hub - Light - Lock + - Media player + - Number - Scene + - Select - Sensor - Switch + - Update + - Valve ha_release: 0.87 ha_iot_class: Cloud Push ha_config_flow: true ha_domain: smartthings ha_platforms: - binary_sensor + - button - climate - cover + - event - fan - light - lock + - media_player + - number - scene + - select - sensor - switch + - update + - valve ha_dhcp: true ha_integration_type: integration --- -{% warning %} -The Samsung SmartThings integration currently does not allow new installations. We are working directly with Samsung to get this resolved. -{% endwarning %} - -SmartThings is integrated into Home Assistant through the SmartThings Cloud API. The features of this integration include: - -1. Controlling SmartThings devices as Home Assistant entities ([see platforms for supported devices and capabilities](#platforms)). -2. Entities automatically synchronized upon restart of Home Assistant when changed in SmartThings. -3. Support for multiple SmartThings accounts and locations with each represented as an integration instance in Home Assistant. -4. No brokers, bridges, or additional dependencies. +[SmartThings](https://www.samsung.com/smartthings/) is a home automation platform for connecting with Samsung or third-party devices. ## Prerequisites -1. A SmartThings [personal access token](https://account.smartthings.com/tokens). -2. An internet accessible incoming webhook or active Home Assistant Cloud subscription. - -### Personal Access Token (PAT) - -The PAT is used to create a Home Assistant SmartApp in your SmartThings account during setup of the integration. - -1. Log into the [personal access tokens page](https://account.smartthings.com/tokens) and select **[Generate new token](https://account.smartthings.com/tokens/new)**. -2. Enter a token name (can be whatever you want), for example, 'Home Assistant' and select the following authorized scopes: - - Devices (all) - - Installed Applications (all) - - Apps (all) - - Locations (all) - - Scenes (all) - - Schedules (all) -3. Select **Generate token**. When the token is displayed copy and save it somewhere safe (such as your keystore) as you will not be able to retrieve it again. - -### Webhook - -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. - 1. *Self-signed SSL certificates are not supported by the SmartThings Cloud API.* - 2. *SmartThings Cloud API requires SSL connection with **maximum** TLS version 1.2* -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 - -After completing the prerequisite steps above, you are ready to setup the integration! See [troubleshooting](#troubleshooting) if you are having issues setting up the integration. +- You need a Samsung account and account credentials. +- To connect devices, you need the SmartThings app installed on your phone. {% include integrations/config_flow.md %} -1. Confirm the callback URL is correct. If using Home Assistant Cloud, it will start with `https://hooks.nabu.casa`. If the URL is not correct, update your Home Assistant configuration, restart, and try again. -2. Enter your Personal Access Token. -3. Select the SmartThings Location to add to Home Assistant. -4. On the window that opens: - 1. Login with your SmartThings account (if not already logged in). - 2. Optionally change the display name and select **Done** at the bottom of the screen. - 3. Authorize the integration by selecting **Allow** on the bottom right of the screen. - 4. Select **Close Window** or close it manually. -5. Back in Home Assistant select **Finish**. +## Supported functionality -{% note %} -If you want to integrate additional SmartThings accounts or locations, repeat the steps above. -{% endnote %} - -## Removal instructions - -To remove the integration from Home Assistant, select the instance from the Home Assistant Integrations page and select the trash icon on the upper right corner. Alternatively, you can remove the SmartApp from the location within the SmartThings application. If the Home Assistant instance that setup the integration is no longer running or functioning, you will need to use this [utility to remove the orphaned SmartApps in your SmartThings account](https://pypi.org/project/hass-smartthings-remove/). - -## Events - -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.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 -{ - "component_id": "main", - "device_id": "42a16cf2-fef7-4ee8-b4a6-d32cb65474b7", - "location_id": "2a54b9fa-f66c-42d9-8488-d8f036b980c8", - "value": "pushed", - "name": "Scene Button" -} -``` - -| Attribute | Description | -| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `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.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.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. +SmartThings represents devices as a set of [capabilities](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference). The SmartThings integration maps those capabilities to entities in Home Assistant. A single device may be represented by one or more entities. - [Binary sensor](#binary-sensor) +- [Button](#button) - [Climate](#climate) - [Cover](#cover) - [Fan](#fan) - [Light](#light) - [Lock](#lock) +- [Media player](#media-player) +- [Number](#number) +- [Select](#select) - [Sensor](#sensor) - [Scene](#scene) - [Switch](#switch) - -Support for additional platforms will be added in the future. +- [Valve](#valve) ### Binary sensor -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. +In Home Assistant, a binary sensor entity will be created for each of the following SmartThings capabilities: -| 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` | +| SmartThings capability | +|---------------------------------------------------------------------------------------------------------------------------------| +| `accelerationSensor` | +| [`contactSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#contactSensor) | +| [`filterStatus`](https://developer.smartthings.com/docs/devices/capabilities/proposed#filterStatus) | +| [`motionSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#motionSensor) | +| [`presenceSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#presenceSensor) | +| `samsungce.kidsLock` | +| `switch` (only for dryers and washers) | +| [`remoteControlStatus`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#remoteControlStatus) | +| [`tamperAlert`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tamperAlert) | +| [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | +| [`waterSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#waterSensor) | + +### Button + +The SmartThings Button platform provides stop buttons for devices with the `ovenOperatingState` capability. ### Climate @@ -159,9 +101,9 @@ The SmartThings Climate platform lets you control devices that have air conditio #### Air Conditioners -For a SmartThings Air Conditioner to be represented by the climate platform, it must have all of the following required capabilities: +For a SmartThings Air Conditioner to be represented by the climate entity, it must have all of the following required capabilities. If it does not have all the capabilities, the features will be represented in Home Assistant as individual sensors instead of a climate entity. -| Capability | Climate Features | +| SmartThings capability | Related climate features in Home Assistant | | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [`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` | @@ -171,9 +113,9 @@ For a SmartThings Air Conditioner to be represented by the climate platform, it #### 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": +For a SmartThings thermostat to be represented by the climate entity, it must have all the capabilities from either "set a" _or_ "set b". If it does not have all the capabilities, the features will be represented in Home Assistant as individual sensors instead of a climate entity. -| Capability | Climate Features | +| SmartThings capability | Related climate features in Home Assistant | | --------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | | [`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` | @@ -185,188 +127,159 @@ For a SmartThings thermostat to be represented by the climate platform, it must ### 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. +The SmartThings Cover platform lets you control devices that have open/close related capabilities. For a device to be represented by the cover entity, it must either have the `doorControl` or `windowShade` capability. Otherwise the features will be represented as individual sensors in Home Assistant. -| 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) | +| SmartThings capability | Related cover features in Home Assistant | +| -------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | +| [`doorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#doorControl) | `open` and `close` | +| [`windowShade`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#windowShade) | `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) | + +### Event + +The SmartThings Event platform will create entities for every button. It will show any button presses and allows you to automate on these events. ### 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. +The SmartThings Fan lets you control devices that have fan-related capabilities. For a SmartThings device to be represented by the fan entity, 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 | +| SmartThings capability | Related fan features in Home Assistant | | --------------------------------------------------------------------------------------------------------- | -------------------------------------------- | | [`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. +The SmartThings Light lets you control devices that have light-related capabilities. For a SmartThings device to be represented by the light entity, 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.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` | +| SmartThings capability | Related light features in Home Assistant | +| ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | +| [`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.smartthings.com/docs/devices/capabilities/capabilities-reference#lock) capability, showing current lock status and supporting lock and unlock commands. +### Media player + +The SmartThings Media player lets you control devices that have media player-related capabilities. For a SmartThings device to be represented by the media player entity, it must have all required capabilities. + +| SmartThings capability | Related media player features in Home Assistant | +| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| [`audioMute`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#audioMute) (required) | `volume_mute` | +| [`audioTrackData`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#audioTrackData) (required) | `media_title` and `media_artist` | +| [`audioVolume`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#audioVolume) (required) | `volume_up`, `volume_down`, `volume_set` | +| [`mediaPlayback`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#mediaPlayback) (required) | `media_play`, `media_pause`, `media_stop`, `media_next_track`, `media_previous_track` | +| [`mediaInputSource`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#mediaInputSource) | `select_source` | +| [`mediaPlaybackRepeat`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#mediaPlaybackRepeat) | `repeat_set` | +| [`mediaPlaybackShuffle`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#mediaPlaybackShuffle) | `shuffle_set` | +| [`switch`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) | `turn_on`, `turn_off` | + +### Number + +The SmartThings number platform lets you control the amount of washer rinse cycles. + +### Select + +The SmartThings Select platform can be used to remotely turn on a dryer and washer. Be aware that for them to work, the Remote control has to be turned on. + ### 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.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` | +| SmartThings capability | Related entities in Home Assistant | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | +| [`activityLightingMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#activityLightingMode) | Activity lighting mode | +| [`airConditionerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) | Air conditioner mode | +| [`airQualitySensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#airQualitySensor) | Air quality | +| [`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) | Body mass index | +| [`bodyWeightMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#bodyWeightMeasurement) | Body weight | +| [`carbonDioxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonDioxideMeasurement) | Carbon dioxide | +| [`carbonMonoxideDetector`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonMonoxideDetector) | Carbon monoxide detector | +| [`carbonMonoxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#carbonMonoxideMeasurement) | Carbon monoxide | +| [`dishwasherOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dishwasherOperatingState) | Machine state
Job state
Completion time | +| [`dryerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dryerMode) | Dryer mode | +| [`dryerOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dryerOperatingState) | Machine state
Job state
Completion time | +| [`dustSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#dustSensor) | PM10
PM2.5 | +| [`energyMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#energyMeter) | Energy | +| [`equivalentCarbonDioxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#equivalentCarbonDioxideMeasurement) | Equivalent carbon dioxide | +| [`formaldehydeMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#formaldehydeMeasurement) | Formaldehyde | +| [`gasMeter`](https://developer.smartthings.com/docs/devices/capabilities/proposed#gasMeter) | Gas meter
Gas meter calorific
Gas meter time
Gas | +| [`illuminanceMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#illuminanceMeasurement) | Illuminance | +| [`infraredLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#infraredLevel) | Infrared level | +| [`mediaInputSource`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaInputSource) | Media input source | +| [`mediaPlaybackRepeat`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackRepeat) | Media playback repeat | +| [`mediaPlaybackShuffle`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackShuffle) | Media playback shuffle | +| [`mediaPlayback`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlayback) | Media playback status | +| [`odorSensor`](https://developer.smartthings.com/docs/devices/capabilities/proposed#odorSensor) | Odor sensor | +| [`ovenMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenMode) | Oven mode | +| [`ovenOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenOperatingState) | Machine state
Job state
Completion time | +| [`ovenSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenSetpoint) | Set point | +| [`powerConsumptionReport`](https://developer.smartthings.com/docs/devices/capabilities/proposed#powerConsumptionReport) | Energy difference
Power energy
Energy saved
Power
Energy | +| [`powerMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerMeter) | Power | +| [`powerSource`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerSource) | Power source | +| [`refrigerationSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/proposed#refrigerationSetpoint) | Set point | +| [`relativeHumidityMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#relativeHumidityMeasurement) | Humidity | +| [`robotCleanerCleaningMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerCleaningMode) | Cleaning mode | +| [`robotCleanerMovement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerMovement) | Movement | +| [`robotCleanerTurboMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerTurboMode) | Turbo mode | +| [`signalStrength`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#signalStrength) | Link quality
Signal strength | +| [`smokeDetector`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#smokeDetector) | Smoke detector | +| [`temperatureMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) | Temperature | +| [`thermostatCoolingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) | Cooling set point | +| [`thermostatFanMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatFanMode) | Fan mode | +| [`thermostatHeatingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) | Heating set point | +| [`thermostatMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) | Mode | +| [`thermostatOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatOperatingState) | Operating state | +| [`thermostatSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#thermostatSetpoint) | Set point | +| [`threeAxis`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#threeAxis) | X coordinate
Y coordinate
Z coordinate | +| [`tvChannel`](https://developer.smartthings.com/docs/devices/capabilities/proposed#tvChannel) | TV channel
TV channel name | +| [`tvocMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tvocMeasurement) | Volatile organic compounds | +| [`ultravioletIndex`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#ultravioletIndex) | UV index | +| [`veryFineDustSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#veryFineDustSensor) | PM1.0 | +| [`voltageMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#voltageMeasurement) | Voltage | +| [`washerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerMode) | Washer mode | +| [`washerOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerOperatingState) | Machine state
Job state
Completion time | ### Scene -The SmartThings Scene platform lets you activate scenes defined in SmartThings with a scene entity representing each SmartThings scenes within the location. +The SmartThings Scene lets you activate scenes defined in SmartThings. A scene entity is created for each SmartThings scene. ### Switch -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: +The SmartThings Switch 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. -| 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) | +It will also create switches for the following capabilities: + +| SmartThings capability | +|------------------------------| +| `custom.dryerWrinklePrevent` | + + +### Update + +The SmartThings update platform lets you update the firmware of devices that have the [`firmwareUpdate`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#firmwareUpdate) capability. + +### Valve + +The SmartThings Valve platform lets you control devices that have the [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) capability, showing the valve status and opening and closing. ## Troubleshooting -### Setup +### Enabling debug logs and diagnostics -#### Aborted: Home Assistant is not configured correctly to receive updates from SmartThings +If debug logging is enabled, the integration shows all the received events in the logs. The log captures events for that device for 5 seconds, and return a JSON file with the state of the device and the events. +Debug logs can be helpful for diagnosing state updates, for example by selecting the button and then turning on the device physically. -This error message occurs when you do not have an active Home Assistant Cloud (Nabu Casa) subscription and the external URL is not configured correctly (it must start with `https`). Update your Home Assistant configuration per the prerequisites above, and try again. +- To enable debug logs, follow the [steps to enable debug logs](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics). -#### Error: The token must be in the UID/GUID format +## Removing the integration -The personal access token does not match the expected format. Make sure you are copying the entire token and that there are no extraneous characters (such as trailing whitespace) and try again. - -#### Error: `pysmartthings.errors.APIInvalidGrant: Invalid refresh token:` (after a restore) - -You can fix this by using the SmartThings App to re-grant authorization to the API token you created before. -1. Open SmartThings app on your mobile device (not HA). -2. Select **Routines** from bottom. -3. Select your Home Assistant automation from the list. -4. Select **Done**, then select **Allow**. -5. Reload your SmartThings integration from Home Assistant Devices panel. - -#### Error: The token is invalid or no longer authorized (not solved by above) - -The personal access token entered is not valid or has been deleted. Create a new token per the instructions in the prerequisites and try again. - -#### Error: The token does not have the required OAuth scopes - -The personal access token entered is valid but does not have the required scopes as outlined in the prerequisites. Create a new token per the instructions in the prerequisites and try again. - -#### Error: SmartThings could not validate the webhook URL - -SmartThings was unable to reach your Home Assistant instance using the webhook URL. Enable debug logging to see the specific issue and follow the webhook troubleshooting checklist below. - -#### Aborted: There are no available SmartThings Locations - -This error message occurs when all of the SmartThings locations under the account linked to the personal access token are already setup in Home Assistant. Ensure you are using the correct personal access token or create an additional location in SmartThings to integrate and try again. - -#### Webhook Troubleshooting Checklist - -1. Ensure external URL is properly set to the _external address_ that Home Assistant is available to the internet. SmartThings must be able to reach this address. -2. Validate there are no problems with your certificate or SSL configuration by using an online checker, such as [https://www.digicert.com/help/](https://www.digicert.com/help/). -3. Some reverse proxy configuration settings can interfere with communication from SmartThings. For example, TLSv1.3 is not supported. Setting the supported cipher suite too restrictly will prevent handshaking. The following NGINX SSL configuration is known to work: - ```nginx - # cert.crt also contains intermediate certificates - ssl_certificate /path/to/cert.crt; - ssl_certificate_key /path/to/cert.key; - ssl_dhparam /path/to/dhparam.pem; - ssl_protocols TLSv1.2; - ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; - ssl_prefer_server_ciphers on; - ssl_ecdh_curve secp384r1; - ssl_session_timeout 10m; - ssl_session_cache shared:SSL:10m; - ssl_session_tickets off; - ``` -4. While the error message (above) is being displayed, run the following command from outside your local network to confirm it is responding to the ping lifecycle event: - ```bash - curl -X POST https://{EXTERNAL_URL}/api/webhook/{WEBHOOK_ID} -H "Content-Type: application/json; charset=utf-8" -d $'{"lifecycle": "PING", "executionId": "00000000-0000-0000-0000-000000000000", "locale": "en", "version": "1.0.0", "pingData": { "challenge": "00000000-0000-0000-0000-000000000000"}}' - ``` - Where `{EXTERNAL_URL}` is your external address and `{WEBHOOK_ID}` is the value of `webhook_id` from `.storage/smartthings` in your Home Assistant configuration directory. - - The expected response is: - ```bash - {"pingData": {"challenge": "00000000-0000-0000-0000-000000000000"}} - ``` - -If you have completed the checklist above and are still unable to setup the platform, [activate debug logging](#debugging) for the SmartThings integration and include the log messages up until the point of failure in [a new issue](https://github.com/home-assistant/home-assistant/issues). - -### Debugging - -The SmartThings integration will log additional information about push updates received, events fired, and other messages when the log level is set to `debug`. Add the relevant line below to the {% term "`configuration.yaml`" %}: - -```yaml -logger: - default: info - logs: - homeassistant.components.smartthings: debug -``` +{% include integrations/remove_device_service.md %} +4. Open the SmartThings app and delete the Home Assistant application from SmartThings. diff --git a/source/_integrations/snoo.markdown b/source/_integrations/snoo.markdown index 23b5c379577..be3326f2e86 100644 --- a/source/_integrations/snoo.markdown +++ b/source/_integrations/snoo.markdown @@ -1,8 +1,12 @@ --- -title: Snoo +title: Happiest Baby Snoo description: Instructions on how to integrate Snoo into Home Assistant ha_category: + - Binary Sensor + - Event - Sensor + - Select + - Switch ha_iot_class: Cloud Push ha_release: 2025.3 ha_config_flow: true @@ -10,8 +14,13 @@ ha_codeowners: - '@Lash-L' ha_domain: snoo ha_platforms: + - binary_sensor + - event - sensor + - select + - switch ha_integration_type: integration +ha_quality_scale: bronze --- The [Snoo](https://www.happiestbaby.com/products/snoo-smart-bassinet) is a smart bassinet made by [Happiest Baby](https://www.happiestbaby.com/) that helps get your baby to sleep and helps keep them asleep. @@ -22,6 +31,30 @@ This integration follows standard integration installation. No extra steps are r {% include integrations/config_flow.md %} +## Binary Sensors + +### Left and right safety clips + +States if the left or right safety clip is connected to the baby's swaddle. + +## Events + +### Snoo events + +These are the events broadcasted by your device. The most notable event is your baby crying. + +They can be: + +- Timer - A timer has started or updated for the current Snoo level. +- Cry - The Snoo has detected your baby crying. +- Command sent - A command has been received by the Snoo. +- Safety clip changed - The left or right safety clip has been disconnected or connected. +- Long activity press - The activity button has been held down. +- Activity press - The activity button has been pressed. +- Power button pressed - The power button has been pressed. +- Status requested - Either the integration or your mobile app has requested a status update. +- Sleepytime sounds updated - The Sleepytime sounds were turned on or off. + ## Sensors ### State @@ -39,6 +72,29 @@ The Snoo can have one of 8 states ## Time left This describes how long until the Snoo will change levels or it is Unknown if it is not currently planning to change levels. +## Select + +### Intensity + +This allows you to set the soothing level of your Snoo. + +1. Baseline - This is the basic state the snoo starts with. It has not detected the need to do any further soothing. +2. Level 1 - This is the lowest level of soothing. +3. Level 2 +4. Level 3 +5. Level 4 +6. Stop - The snoo is no longer running. + +## Switch + +### Level lock + +Keep SNOO’s rhythms locked on your baby’s favorite level (Baseline, Level 1, or Level 2). + +### Sleepytime sounds + +Allows you to turn on SNOO’s soothing sounds before you put your baby in SNOO or after you took your baby out of SNOO for a diaper change or feeding. + ## Removing the integration {% include integrations/remove_device_service.md %} diff --git a/source/_integrations/spotify.markdown b/source/_integrations/spotify.markdown index a5762fdc29d..8ec0fdb380a 100644 --- a/source/_integrations/spotify.markdown +++ b/source/_integrations/spotify.markdown @@ -156,4 +156,4 @@ The `media_content_id` value can be obtained from the Spotify desktop app by cli ## Unsupported devices -- **Sonos**: Although Sonos is a Spotify Connect device, it is not supported by the official Spotify API. +- **Sonos**: Although Sonos is a Spotify Connect device, it is not supported by the official Spotify API. One workaround to use Sonos players with Spotify is through [Music Assistant](https://www.music-assistant.io/) using the action `music_assistant.play_media`. Music Assistant creates another media_player entity named after the original media_player, which you can use to play from Spotify. diff --git a/source/_integrations/squeezebox.markdown b/source/_integrations/squeezebox.markdown index 9da6779dda2..69dbe2d9d98 100644 --- a/source/_integrations/squeezebox.markdown +++ b/source/_integrations/squeezebox.markdown @@ -147,6 +147,13 @@ data: - **Needs restart**: Server Service needs to be restarted (typically, this is needed to apply updates). - **Library rescan**: The music library is currently being scanned by LMS (depending on the type of scan, some content may be unavailable). +### Buttons + +- **Preset 1 ... Preset 6**: Play media stored in Preset 1 to Preset 6 on Squeezebox. +- **Brightness Up, Brightness Down**: Adjust the brightness on Logitech Squeezebox players with built-in screen, such as Radio and Boom. +- **Bass Up, Bass Down**: Adjust the bass on Logitech Squeezebox players, such as Radio and Boom. +- **Treble Up, Treble Down**: Adjust the treble on Logitech Squeezebox players, such as Radio and Boom. + ### Sensors - **Last scan**: Date of the last library scan. @@ -188,10 +195,9 @@ When specifying additional parameters in the Visual Editor, each parameter must For example, to create an automation to mute playback, use the command `mixer` and the parameter `muting`: -| Row | Parameter | Description | -| --- | -------- | ----------- | -| 1 | - muting | Toggle muting on / off | -| 2 | | | +| Row | Parameter | Description | +| --- | --------- | ---------------------- | +| 1 | - muting | Toggle muting on / off | resulting in the YAML: @@ -209,10 +215,10 @@ Where a parameter is an increment or decrement, it is necessary to place the val For example, to increase the playback volume, use the command `mixer` and the parameters `volume` and the amount to increment: -| Row | Parameter | Description | -| --- | -------- | ----------- | -| 1 | - volume | Parameter to change | -| 2 | - "+5" | Increment volume by 5 percent | +| Row | Parameter | Description | +| --- | --------- | ----------------------------- | +| 1 | - volume | Parameter to change | +| 2 | - "+5" | Increment volume by 5 percent | resulting in the YAML: @@ -227,7 +233,6 @@ data: - "+5" ``` - ### Action `call_query` Call a custom Squeezebox JSON-RPC API. The result of the query will be stored in the 'query_result' attribute of the player. diff --git a/source/_integrations/steam_online.markdown b/source/_integrations/steam_online.markdown index 32ba8c8dce7..1d6837cd1c0 100644 --- a/source/_integrations/steam_online.markdown +++ b/source/_integrations/steam_online.markdown @@ -32,7 +32,12 @@ Go to your profile, select "Edit Profile", "Privacy Settings". You need a [free API key](https://steamcommunity.com/dev/apikey) to use the platform. -To find an account's 64-bit SteamID on profiles without a custom URL you can check the URL of the profile page, the long string of numbers at the end is the 64-bit SteamID. If the profile has a custom URL you will have to copy the URL into [STEAMID I/O](https://steamid.io/) to find the 64-bit SteamID. +To find an account's 64-bit SteamID: + +1. Open Steam. +2. Open the dropdown menu labeled with your username. +3. Select **Account details**. + - Your **Steam ID** is displayed just below the label **Your-Account-Name Account**. ## Examples diff --git a/source/_integrations/supla.markdown b/source/_integrations/supla.markdown index 9fe9e22f1bf..ab6a2620848 100644 --- a/source/_integrations/supla.markdown +++ b/source/_integrations/supla.markdown @@ -26,6 +26,12 @@ Right now, it's impossible to add a device -- all of them are discovered from SU For more complete Home Assistant support based on MQTT autodiscovery, consider switching your Supla devices to MQTT (through the setup interface). Or use the MQTT broker provided by [Supla Cloud](https://cloud.supla.org/integrations/mqtt-broker). +{% important %} + +The Supla Cloud MQTT broker requires [changing the default MQTT protocol setting](https://www.home-assistant.io/integrations/mqtt/#broker-configuration) at version 3.1. + +{% endimportant %} + ## Configuration To use SUPLA devices in your installation, add the following to your {% term "`configuration.yaml`" %}: diff --git a/source/_integrations/switch.mqtt.markdown b/source/_integrations/switch.mqtt.markdown index dd71faec44c..c8b9b39fa22 100644 --- a/source/_integrations/switch.mqtt.markdown +++ b/source/_integrations/switch.mqtt.markdown @@ -48,7 +48,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -57,7 +57,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -65,7 +65,7 @@ availability_topic: required: false type: string command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. The switch command template accepts the parameters `value`. The `value` parameter will contain the configured value for either `payload_on` or `payload_off`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. The switch command template accepts the parameters `value`. The `value` parameter will contain the configured value for either `payload_on` or `payload_off`. required: false type: template command_topic: @@ -152,7 +152,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -226,7 +226,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's state from the `state_topic`. To determine the switches's state result of this template will be compared to `state_on` and `state_off`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's state from the `state_topic`. To determine the switches's state result of this template will be compared to `state_on` and `state_off`." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/synology_dsm.markdown b/source/_integrations/synology_dsm.markdown index 4e39529f945..ec73dcca1f4 100644 --- a/source/_integrations/synology_dsm.markdown +++ b/source/_integrations/synology_dsm.markdown @@ -170,3 +170,13 @@ This media browser supports multiple Synology Photos instances. `` is To find the `` you need to go to the album in your photos instance, and the id will be in the URL ex: `https://192.168.0.100:5001/#/album/19`, where 19 is the album id. An `` of 0 will contain all images. For performance reasons, a maximum of 1000 images will be shown in the Media Browser. + +## Troubleshooting + +In any case, when reporting an issue, please enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), restart the integration, and as soon as the issue re-occurs stop the debug logging again (_download of debug log file will start automatically_). Further _if still possible_, please also download the [diagnostics](/integrations/diagnostics) data. If you have collected the debug log and the diagnostics data, provide them with the issue report. + +## Remove the integration + +{% include integrations/remove_device_service.md %} + +If you don't use the separate created user anymore (_see [Separate User Configuration](#separate-user-configuration) above_), then remove it from the NAS under to **Control Panel** > **User & Group** > **User**. Don't forget to backup any data from the users home directory, if you want to keep them (_eq. Home Assistant backups_) diff --git a/source/_integrations/tado.markdown b/source/_integrations/tado.markdown index cbab7d2f921..8d4bad5cc9a 100644 --- a/source/_integrations/tado.markdown +++ b/source/_integrations/tado.markdown @@ -7,13 +7,12 @@ ha_category: - Hub - Presence detection - Sensor + - Switch - Water heater - Weather - - Switch ha_release: 0.41 ha_iot_class: Cloud Polling ha_codeowners: - - '@chiefdragon' - '@erwindouna' ha_domain: tado ha_config_flow: true @@ -23,6 +22,7 @@ ha_platforms: - climate - device_tracker - sensor + - switch - water_heater ha_dhcp: true ha_integration_type: integration diff --git a/source/_integrations/tag.mqtt.markdown b/source/_integrations/tag.mqtt.markdown index 352ad0d3fed..5d736f26e67 100644 --- a/source/_integrations/tag.mqtt.markdown +++ b/source/_integrations/tag.mqtt.markdown @@ -21,7 +21,7 @@ topic: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that returns a tag ID." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that returns a tag ID." required: false type: template device: diff --git a/source/_integrations/technove.markdown b/source/_integrations/technove.markdown index ff82a975bec..ed99a6e29af 100644 --- a/source/_integrations/technove.markdown +++ b/source/_integrations/technove.markdown @@ -54,7 +54,12 @@ The {% term integration %} adds the following sensors: - Last session energy usage - Wi-Fi signal strength - Wi-Fi network name -- Status +- Status, one of the following values: + - Unplugged + - Plugged, waiting + - Plugged, charging + - Out of activation period + - High tariff period ## Switch diff --git a/source/_integrations/template.markdown b/source/_integrations/template.markdown index ad065d8795d..0ac7df67233 100644 --- a/source/_integrations/template.markdown +++ b/source/_integrations/template.markdown @@ -73,7 +73,7 @@ Entities (sensors, binary sensors, buttons, images, numbers, and selections) are _For old sensor/binary sensor configuration format, [see below](#legacy-binary-sensor-configuration-format)._ -### State-based template binary sensors, buttons, images, numbers, selects and sensors +### State-based template binary sensors, buttons, images, numbers, selects, sensors, and weathers Template entities will by default update as soon as any of the referenced data in the template updates. @@ -95,8 +95,7 @@ template: {% endraw %} - -### Trigger-based template binary sensors, buttons, images, numbers, selects and sensors +### Trigger-based template binary sensors, images, numbers, selects, sensors, and weathers If you want more control over when an entity updates, you can define a trigger. Triggers follow the same format and work exactly the same as [triggers in automations][trigger-doc]. This feature is a great way to create entities based on webhook data ([example](#trigger-based-sensor-and-binary-sensor-storing-webhook-information)), or update entities based on a schedule. @@ -106,6 +105,10 @@ Trigger-based entities do not automatically update when states referenced in the The state, including attributes, of trigger-based sensors and binary sensors is restored when Home Assistant is restarted. The state of other trigger-based template entities is not restored. +{% note %} +Buttons do not support using `trigger` or `action` options. +{% endnote %} + {% raw %} ```yaml diff --git a/source/_integrations/text.mqtt.markdown b/source/_integrations/text.mqtt.markdown index c4506cbcffa..496f067c8e6 100644 --- a/source/_integrations/text.mqtt.markdown +++ b/source/_integrations/text.mqtt.markdown @@ -42,7 +42,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -55,11 +55,11 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -138,7 +138,7 @@ entity_picture: required: false type: string json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false type: template json_attributes_topic: @@ -196,7 +196,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the text state value from the payload received on `state_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the text state value from the payload received on `state_topic`." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/thermopro.markdown b/source/_integrations/thermopro.markdown index 101095970ad..26e0599a50e 100644 --- a/source/_integrations/thermopro.markdown +++ b/source/_integrations/thermopro.markdown @@ -12,6 +12,7 @@ ha_codeowners: ha_domain: thermopro ha_config_flow: true ha_platforms: + - button - sensor ha_integration_type: integration --- diff --git a/source/_integrations/thread.markdown b/source/_integrations/thread.markdown index 5c8250b2da5..55d29437b8b 100644 --- a/source/_integrations/thread.markdown +++ b/source/_integrations/thread.markdown @@ -83,7 +83,7 @@ Unlike other protocols, Thread can use multiple border routers in a single netwo OpenThread is an open source implementation of Thread, originally released by Google. Almost all commercially available Thread border routers are based on the open source implementation. However, the configuration of TBRs is not part of the Thread standard. This means that Google and Apple TBRs implementation setup and configured by their respective ecosystems. -While Home Assistant can *use* any border router, it can *configure* and *control* only OpenThread border routers built with the REST API available in the open source implementation. The OpenThread Border Router add-on (as well as the OpenThread Border Router bundled in the experimental Silicon Labs Multiprotocol add-on) are built from this open source OpenThread code and have the REST API enabled. +While Home Assistant can *use* any border router, it can *configure* and *control* only OpenThread border routers built with the REST API available in the open source implementation. The OpenThread Border Router add-on is built from this open source OpenThread code and has the REST API enabled. ### List of Thread border router devices diff --git a/source/_integrations/tplink.markdown b/source/_integrations/tplink.markdown index b5d988401fb..bddd5efe8f8 100644 --- a/source/_integrations/tplink.markdown +++ b/source/_integrations/tplink.markdown @@ -204,6 +204,7 @@ If required, you can manually trigger an update via **Developer tools** > **Acti - Ensure you have enabled **Tapo Lab** > **Third-Party Compatibility** in the Tapo app. You may need to factory reset and re-add to the Tapo app after this step. - Disable or remove any custom integrations that interact with TPLink devices supported by this integration. - Ensure stable network connectivity between Home Assistant and the device. +- Unplug existing TP-Link/Tapo devices on your network before onboarding a new device. The TP-Link Simple Setup (TSS) protocol, which shares credentials from existing devices, can break authentication. If issues persist, factory reset the new device and re-add it without other TP-Link devices active. - Check the [reported connection solutions](#reported-connection-solutions) section below. - Check the [supported device list](#supported-devices) to see if the device is tested to work with the integration. - Try running the [kasa tool](https://github.com/python-kasa/python-kasa) to connect to the device. An easy way to do this is to [install uv](https://docs.astral.sh/uv/getting-started/installation/) and run `uvx --from python-kasa kasa --username --password ` diff --git a/source/_integrations/tts.markdown b/source/_integrations/tts.markdown index 35bb67c89f0..dbf10248b44 100644 --- a/source/_integrations/tts.markdown +++ b/source/_integrations/tts.markdown @@ -141,7 +141,8 @@ $ curl -X POST -H "Authorization: Bearer " \ ## Troubleshooting {% important %} -Depending on your setup, you might need to set an external URL (`external_url`) inside the [configuration](/integrations/homeassistant/#external_url). +Playing TTS media will prioritize the local Home Assistant URL, which can be configured by navigating to **{% my network title="Settings > System > Network" %}**. +It is highly recommended to set the local Home Assistant URL to automatic, in which case the generated URL will be `http://:`. {% endimportant %} The following sections describe some of the problems encountered with media devices. @@ -154,10 +155,14 @@ The `tts` action will send an `https://` URL to the media device, which will che ### Google cast devices -The Google cast devices (Google Home, Chromecast, etc.) present the following problems: +Google cast devices (Google Home, Chromecast, etc.) require the host in media URLs to be resolvable using Google's public DNS servers, and if the URL is specifying the `https` protocol, the certificate must be valid and not self-signed. + +These requirements present the following problems, all of which create problems if the local Home Assistant URL is not `http://:`: - They [reject self-signed certificates](#self-signed-certificates). -- 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` action 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. +- They use Google's public DNS servers to resolve names, not DNS servers provided via DHCP. Additionally, they do not resolve local names through mDNS. This means 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` (via local DNS) and `homeassistant.local` (via mDNS). All machines on your local network can access it as `ha` or `homeassistant.local`. 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` action 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. + +The recommended way to overcome these obstacles is to not manually configure a local Home Assistant URL. diff --git a/source/_integrations/ublockout.markdown b/source/_integrations/ublockout.markdown index 4f4243e6e17..90036d7fe0e 100644 --- a/source/_integrations/ublockout.markdown +++ b/source/_integrations/ublockout.markdown @@ -7,7 +7,7 @@ ha_domain: ublockout ha_integration_type: virtual ha_supporting_domain: motion_blinds ha_supporting_integration: Motionblinds -ha_release: 2025.3 +ha_release: 2020.12 ha_codeowners: - '@starkillerOG' ha_config_flow: true diff --git a/source/_integrations/update.mqtt.markdown b/source/_integrations/update.mqtt.markdown index 3ad2fc316fb..17cdfdbbf53 100644 --- a/source/_integrations/update.mqtt.markdown +++ b/source/_integrations/update.mqtt.markdown @@ -43,7 +43,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -56,7 +56,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template command_topic: @@ -148,7 +148,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false type: template json_attributes_topic: @@ -156,7 +156,7 @@ json_attributes_topic: required: false type: string latest_version_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the latest version value. Use `state_topic` with a `value_template` if all update state values can be extracted from a single JSON payload." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the latest version value. Use `state_topic` with a `value_template` if all update state values can be extracted from a single JSON payload." required: false type: template latest_version_topic: @@ -210,7 +210,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the `installed_version` state value or to render to a valid JSON payload on from the payload received on `state_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the `installed_version` state value or to render to a valid JSON payload on from the payload received on `state_topic`." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/utility_meter.markdown b/source/_integrations/utility_meter.markdown index bdab9600e16..7481fb4f6a3 100644 --- a/source/_integrations/utility_meter.markdown +++ b/source/_integrations/utility_meter.markdown @@ -65,7 +65,7 @@ Sensor always available: You need to understand that with this option activated, when the source entity becomes unavailable, the utility meter sensor will have the last totalized value and will not change until the source entity returns to a valid state. {% endconfiguration_basic %} -If the meter reset cycle and reset offsets are to limited for your use case, +If the meter reset cycle and reset offsets are too limited for your use case, consider using the YAML configuration below, which support CRON-style patterns that provide a greater flexibility. diff --git a/source/_integrations/vacuum.mqtt.markdown b/source/_integrations/vacuum.mqtt.markdown index 4260dc9bd0d..fc336fac5b8 100644 --- a/source/_integrations/vacuum.mqtt.markdown +++ b/source/_integrations/vacuum.mqtt.markdown @@ -35,7 +35,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -44,7 +44,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -118,7 +118,7 @@ fan_speed_list: required: false type: [string, list] json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: diff --git a/source/_integrations/valve.mqtt.markdown b/source/_integrations/valve.mqtt.markdown index 77b609bd5ba..198418b6407 100644 --- a/source/_integrations/valve.mqtt.markdown +++ b/source/_integrations/valve.mqtt.markdown @@ -77,7 +77,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the device's availability from the `topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -86,7 +86,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `availability_topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the device's availability from the `availability_topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -94,7 +94,7 @@ availability_topic: required: false type: string command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -155,7 +155,7 @@ device: required: false type: string device_class: - description: Sets the [class of the device](/integrations/valve/), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`. + description: Sets the [class of the device](/integrations/valve/#device_class), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`. required: false type: string enabled_by_default: @@ -181,7 +181,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. A usage example can be found in the [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. A usage example can be found in the [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -284,7 +284,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `state_topic` topic. The rendered value should be a defined state payload or, if reporting a `position` is supported and `reports_position` is set to `true`, a numeric value is expected representing the position. See also `state_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that can be used to extract the payload for the `state_topic` topic. The rendered value should be a defined state payload or, if reporting a `position` is supported and `reports_position` is set to `true`, a numeric value is expected representing the position. See also `state_topic`." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/velbus.markdown b/source/_integrations/velbus.markdown index b3525a584db..bb611270b1c 100644 --- a/source/_integrations/velbus.markdown +++ b/source/_integrations/velbus.markdown @@ -27,6 +27,7 @@ ha_platforms: - sensor - switch ha_integration_type: hub +ha_quality_scale: bronze --- The **Velbus** {% term integration %} is used to control [Velbus](https://www.velbus.eu/?lang=en) modules. It supports the Velbus USB, Velbus serial and a TCP/IP gateway. diff --git a/source/_integrations/vesync.markdown b/source/_integrations/vesync.markdown index 7c057a6a0d1..5c38c564d19 100644 --- a/source/_integrations/vesync.markdown +++ b/source/_integrations/vesync.markdown @@ -23,6 +23,7 @@ ha_platforms: - humidifier - light - number + - select - sensor - switch ha_integration_type: integration @@ -133,6 +134,10 @@ VeSync air purifiers will expose the following details depending on the features | `night_light` | The current status of the night light (Core200S/Core400s) | off | | `child_lock` | The current status of the child lock (Core200S/300s/400s) | off | +| Select | Description | Example | +| ----------------------- | ---------------------------------------------------------------------------------- | --------- | +| `night_light_level` | Night light brightness level (Values: off, dim, on). | off | + ## Humidifier Sensors and settings exposed by VeSync humidifiers. @@ -147,7 +152,7 @@ Sensors and settings exposed by VeSync humidifiers. | Select | Description | Example | | ----------------------- | ---------------------------------------------------------------------------------- | --------- | -| `night_light_level`| Night light brightness level (Values: off, dim, bright). | off | +| `night_light_level` | Night light brightness level (Values: off, dim, bright). | off | ## Binary Sensors diff --git a/source/_integrations/vodafone_station.markdown b/source/_integrations/vodafone_station.markdown index 58f91b42846..1585cf484e4 100644 --- a/source/_integrations/vodafone_station.markdown +++ b/source/_integrations/vodafone_station.markdown @@ -18,13 +18,46 @@ ha_platforms: - diagnostics - sensor ha_integration_type: hub +ha_quality_scale: silver --- The **Vodafone Station** {% term integration %} allows you to control your [Vodafone Station](https://www.vodafone.it/privati/area-supporto/assistenza-dispositivi/vodafone-station.html) based router. -{% note %} +The integration provides information about your internet connection and the connected devices. + +## Supported devices + The integration supports only Sercomm models so far. -{% endnote %} + +### Tested models + +This {% term integration %} was tested against the following models from Sercomm: + +- Vodafone Power Station (SHG3000) +- Vodafone Power Station WiFi 6 (SHG3060) +- Vodafone WiFi 6 Station (RHG3006) +- Vodafone Gigabox (SHG3000) - supplied by [Vodafone Ireland](https://deviceguides.vodafone.ie/vodafone/gigabox-windows-10/) +- Vodafone H300S + +{% include integrations/config_flow.md %} + +{% configuration_basic %} + host: + description: The IP address of the Vodafone Station router. + username: + description: The username of the Vodafone Station router. + password: + description: The password of the Vodafone Station router. +{% endconfiguration_basic %} + +{% include integrations/option_flow.md %} + +{% configuration_basic %} + consider home: + description: Number of seconds that must elapse before considering a disconnected device "not at home". +{% endconfiguration_basic %} + +## Supported functionality There is support for the following platform types within Home Assistant: @@ -32,14 +65,55 @@ There is support for the following platform types within Home Assistant: - **Sensor** - external IP address, uptime, firmware, resources and network monitors. - **Button** - restart router, dsl/fiber/internet key connections. -{% include integrations/config_flow.md %} +## Examples -## Integration options +### Automation: reconnect / get new IP every night -It is possible to change some behaviors through the {% term integration %} options. -To change the settings, go to {% my integrations title="**Settings** > **Devices & services**" %}. On the **Vodafone Station** integration, select the cogwheel. Then select **Configure**. +```yaml +automation: +- alias: "Reconnect Vodafone Station (Fiber)" + triggers: + - trigger: time + at: "05:00:00" + actions: + - action: button.press + target: + entity_id: button.vodafone_station_xxxx_reconnect_fiber +``` -- **Consider home**: Number of seconds that must elapse before considering a disconnected device "not at home". +### Automation: notify connected device not home + +```yaml +automation: +- alias: "Apple TV disconnect" + triggers: + - platform: state + entity_id: device_tracker.appletv + to: "not_home" + actions: + - action: notify.mobile_app_phone + data: + message: "TV lost network connection" +``` + +### Automation: notify router CPU usage too high + +```yaml +automation: +- alias: "Vodafone Station CPU high cpu usage" + triggers: + - platform: numeric_state + entity_id: sensor.vodafone_station_xxxx_cpu_usage + above: 80 + actions: + - action: notify.mobile_app_phone + data: + message: "Router CPU above 80%." +``` + +## Data updates + +This integration {% term polling polls %} data from the device every 30 seconds by default. ## Additional info @@ -47,10 +121,24 @@ To change the settings, go to {% my integrations title="**Settings** > **Devices **Note**: If you don't want to automatically track newly detected devices, disable the {% term integration %} system option `Enable new added entities`. -### Tested models +## Troubleshooting -This {% term integration %} was tested against the following models from Sercomm: +### Can’t set up the device -- Vodafone Power Station (SHG3000) -- Vodafone WiFi 6 Station (RHG3006) -- Vodafone Gigabox (SHG3000) - supplied by [Vodafone Ireland](https://deviceguides.vodafone.ie/vodafone/gigabox-windows-10/) +#### Symptom: "User already logged-in" + +When trying to set up the integration, the form shows the message "User already logged-in". + +##### Description + +This means that there is already a logged session to the Vodafone Station router. + +##### Resolution + +To resolve this issue, log out from all active sessions, or, if the session was abruptly closed, wait for the router timeout (usually 60 seconds). + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/wallbox.markdown b/source/_integrations/wallbox.markdown index 0e12fa7f446..a820877b9ae 100644 --- a/source/_integrations/wallbox.markdown +++ b/source/_integrations/wallbox.markdown @@ -9,6 +9,7 @@ ha_domain: wallbox ha_platforms: - lock - number + - select - sensor - switch ha_config_flow: true @@ -54,6 +55,10 @@ The number {% term entity %} is only loaded if the supplied username has suffici The {% term integration %} adds a lock {% term entity %}, allowing you to lock the charger. Please note, this only works with a user with admin rights. +## Select + +The {% term integration %} adds a select {% term entity %} to control Solar Charging options, allowing you to choose between Eco Mode, Full Solar or disable Solar Charging. + ## Switch The {% term integration %} adds a switch {% term entity %}, allowing you to pause/resume the charging process. diff --git a/source/_integrations/water_heater.mqtt.markdown b/source/_integrations/water_heater.mqtt.markdown index 14c80540055..0919a7c6c33 100644 --- a/source/_integrations/water_heater.mqtt.markdown +++ b/source/_integrations/water_heater.mqtt.markdown @@ -43,7 +43,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -52,7 +52,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -147,7 +147,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: diff --git a/source/_integrations/watergate.markdown b/source/_integrations/watergate.markdown index 325640bb9c0..280d23870d5 100644 --- a/source/_integrations/watergate.markdown +++ b/source/_integrations/watergate.markdown @@ -13,6 +13,7 @@ ha_codeowners: ha_domain: watergate ha_platforms: - sensor + - event - valve ha_quality_scale: bronze ha_integration_type: integration @@ -24,6 +25,7 @@ With this integration, you are able to: - Control your valve - Monitor live telemetry (water flow, water pressure, water temperature) - Monitor water usage +- Receive information when Sonic shuts off the valve due to potential leak ## Prerequisites @@ -71,6 +73,16 @@ The Watergate integration provides the following entities. - **Water valve state** - **Description**: The current state of the water valve (open/closed). - **Remarks**: It is automatically updated when the valve state is changed. + +#### Events + +- **Auto Shut-Off** + - **Description**: Event triggered when the valve automatically shuts off due to detected leak. + - **Event Type**: Either `volume_threshold` or `duration_threshold` + - **Event Data**: + - `volume`: The volume of water that triggered the shut-off + - `duration`: The duration of leak that triggered the shut-off + - **Remarks**: Historical events are not preserved across Home Assistant restarts. ## Data updates @@ -79,7 +91,7 @@ Thanks to the webhook option, Sonic will provide live telemetry every second whe ## Known limitations -The integration does not provide the ability to set auto shut-off thresholds and does not report any events regarding automatically closed valves. +The integration does not provide the ability to set auto shut-off thresholds. {% include integrations/config_flow.md %} @@ -88,12 +100,6 @@ IP address: description: "The IP address of your Sonic device." {% endconfiguration_basic %} -## Removing the integration - -This integration follows standard integration removal procedures. No extra steps are required. - -{% include integrations/remove_device_service.md %} - ## Examples ### Monitor water usage in the Energy Dashboard @@ -107,3 +113,9 @@ The water meter volume entity can be added to the Energy Dashboard, allowing you - Send a notification when the water is too hot. - Send a notification when the water is too cold. - Send a notification when water is flowing for too long. + +## Removing the integration + +This integration follows standard integration removal procedures. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/weatherflow_cloud.markdown b/source/_integrations/weatherflow_cloud.markdown index 44c903da4fe..9c8b8ddc256 100644 --- a/source/_integrations/weatherflow_cloud.markdown +++ b/source/_integrations/weatherflow_cloud.markdown @@ -1,5 +1,5 @@ --- -title: WeatherFlow Cloud +title: WeatherflowCloud description: Instructions on the Cloud based WeatherFlow integration ha_release: 2024.3 ha_category: @@ -84,4 +84,3 @@ There is not a straight 1-1 mapping between the Home Assistant supported weather | snow | snowy | | thunderstorm | lightning | | windy | windy | - diff --git a/source/_integrations/webdav.markdown b/source/_integrations/webdav.markdown index b8d622f8532..039685e45d4 100644 --- a/source/_integrations/webdav.markdown +++ b/source/_integrations/webdav.markdown @@ -36,8 +36,9 @@ Verify SSL: ### Common WebDAV URLs -- [Nextcloud](https://nextcloud.com/): `https:///remote.php/dav/files//` -- [Owncloud](https://owncloud.com/): `https:///remote.php/dav/files//` +- [Nextcloud](https://nextcloud.com/): `https:///remote.php/webdav/` alternatively this can be found in the interface of your Nextcloud instance. + To do this, open the file overview and click on ‘Settings’ in the left-hand column. +- [Owncloud](https://owncloud.com/): `https:///remote.php/webdav/` - [Hetzner Storage Box](https://www.hetzner.com/storage/storage-box): `https://.your-storagebox.de` - [Strato HiDrive](https://www.strato.de/): `https://webdav.hidrive.strato.com` @@ -48,3 +49,14 @@ This integration follows standard integration removal. No extra steps are requir {% include integrations/remove_device_service.md %} - If you remove the integration, the backup folder is not automatically deleted. You have to manually delete it. + +## Known issues / limitations + +Due to the nature of WebDAV, it is required to have a fairly high file upload limit on the server. +If you experience issues with the backup, please check the server configuration or with your WebDAV service provider. + +Following WebDAV services are known to have issues with Home Assistant backups: + +- Yandex Disk is not supported, as the speed is artificially slowed down when using WebDAV. +- mail.ru Cloud is not supported due to the lack of support for WebDAV properties. +- pCloud WebDAV implementation proved to be unstable and is not recommended for backups. \ No newline at end of file diff --git a/source/_integrations/weheat.markdown b/source/_integrations/weheat.markdown index 4be775ebe6c..8723fe86250 100644 --- a/source/_integrations/weheat.markdown +++ b/source/_integrations/weheat.markdown @@ -67,7 +67,7 @@ Depending on the model/installation, states for the Indoor Unit states are avail ## Data updates -The integration is {% term polling %} and retrieves data every 30 seconds from the cloud. +The integration uses {% term polling %} to retrieve data every 120 seconds for a single heat pump. This interval increases proportionally with the number of heat pumps, for example, to 240 seconds for two heat pumps. Additionally, energy data is retrieved from the cloud every 1800 seconds. ## Actions diff --git a/source/_integrations/yalexs_ble.markdown b/source/_integrations/yalexs_ble.markdown index f07016c40b1..6921773cd80 100644 --- a/source/_integrations/yalexs_ble.markdown +++ b/source/_integrations/yalexs_ble.markdown @@ -48,7 +48,7 @@ Devices must have a Yale Access module installed to function with this {% term i These devices do not send updates, but can be locked and unlocked. -- MD-04I (Yale Conexis L1, Yale Conexis L2) +- MD-04I (Yale Conexis L1 (requires yale access module), Yale Conexis L2) - YRCB-490 (Yale Smart Cabinet Lock) ## Troubleshooting diff --git a/source/_integrations/zengge.markdown b/source/_integrations/zengge.markdown deleted file mode 100644 index e981d34fd2a..00000000000 --- a/source/_integrations/zengge.markdown +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Zengge -description: Instructions on how to integrate Zengge Bluetooth bulbs into Home Assistant. -ha_category: - - Light -ha_iot_class: Local Polling -ha_release: 0.36 -ha_domain: zengge -ha_platforms: - - light -ha_integration_type: integration -ha_codeowners: - - '@emontnemery' -related: - - docs: /docs/configuration/ - title: Configuration file -ha_quality_scale: legacy ---- - -The `zengge` {% term integration %} allows you to integrate your [Zengge Bluetooth bulbs](http://www.zengge.com/) into Home Assistant. - -## Configuration - -To enable the lights, add the following lines to your {% term "`configuration.yaml`" %} file. -{% include integrations/restart_ha_after_config_inclusion.md %} - -```yaml -# Example configuration.yaml entry -light: - - platform: zengge - devices: - "C4:BE:84:51:54:8B": - name: Living Room -``` - -{% configuration %} -devices: - description: The list of your devices/bulbs. - required: true - type: list - keys: - mac_address: - description: The MAC address of the bulb. - required: true - type: list - keys: - name: - description: The friendly name for the frontend. - required: false - type: string -{% endconfiguration %} diff --git a/source/_integrations/zha.markdown b/source/_integrations/zha.markdown index b20477ce374..414f23da333 100644 --- a/source/_integrations/zha.markdown +++ b/source/_integrations/zha.markdown @@ -48,9 +48,7 @@ ha_zeroconf: true ha_integration_type: integration --- -The ZHA (Zigbee Home Automation) {% term integration %} allows you to wirelessly connect many off-the-shelf [Zigbee-based devices](https://csa-iot.org/csa-iot_products/) directly to Home Assistant, using one of the many available Zigbee coordinators. - -ZHA uses an open-source Python library implementing a hardware-independent Zigbee stack called [zigpy](https://github.com/zigpy/zigpy). All coordinators compatible with zigpy can be used with ZHA. +The Zigbee Home Automation (ZHA) {% term integration %} allows you to wirelessly connect many off-the-shelf [Zigbee-based devices](https://csa-iot.org/csa-iot_products/) directly to Home Assistant, using one of many compatible hardware adapters called _Zigbee coordinators_. This {% term integration %} currently supports the following device types within Home Assistant: @@ -69,30 +67,33 @@ This {% term integration %} currently supports the following device types within - [Switch](/integrations/switch/) - [Update](/integrations/update/) -In addition, it has support for "Zigbee groups" that enable native on-device grouping of multiple Zigbee lights, switches, and fans that enable controlling all entities for those devices in those groups with one command. At least two entities must be added to a Zigbee group inside the ZHA {% term integration %} before a group entity is created. There is also support for native on-device binding. Refer to the [Zigbee groups and binding devices](#zigbee-groups-and-binding-devices) section for more information. - ## Introduction -This ZHA integration is a hardware-independent Zigbee gateway implementation that can replace most proprietary Zigbee gateways/bridges/hubs/controllers. Zigbee is a low-bandwidth communication protocol that relies on using small low-power digital radios to connect compatible devices to local Zigbee wireless private area networks. ZHA will create a single Zigbee network to which you can then pair/join most Zigbee-based devices that are made for home automation and lighting. +The ZHA integration is a hardware-independent Zigbee gateway implementation that can replace most proprietary Zigbee gateways (or bridges, hubs, or controllers). ZHA creates a single Zigbee network to which you can add most Zigbee-based devices. -Before installing the ZHA integration in Home Assistant, you need to connect a Zigbee Coordinator radio adapter that will connect to your Zigbee network. Those normally come in the form of a USB dongle that plugs directly into the same computer that is running your Home Assistant installation. The ZHA integration is compatible with many different "Zigbee Coordinator" adapters from various manufacturers. Be sure to [note the recommendations in the respective sections below before buying a Zigbee Coordinator](#compatible-hardware). A Zigbee network always needs to have one Zigbee Coordinator (it can never have more than one), and Zigbee devices can never be connected to more than a single Zigbee network, however, a Zigbee network can have multiple "Zigbee Router" devices and "Zigbee End Device" products. +ZHA uses an open-source Python library called [zigpy](https://github.com/zigpy/zigpy), so any coordinator that is compatible with zigpy can be used with ZHA. Review [compatible hardware](#compatible-hardware) recommendations before purchasing Zigbee devices. -Once ZHA has been set up with a Zigbee Coordinator it will automatically create a Zigbee network and you will be able to join/pair any Zigbee Router devices and Zigbee End Devices. With only a few [limitations](#limitations), most devices will join/pair directly regardless of brand and manufacturer. Technically almost all devices that are compliant with the official Zigbee specifications should offer interoperability, though a newer Zigbee Coordinator with support for later firmware often offers better compatibility with both new and older devices. Still, be aware that [all functionality might not always be supported or exposed for every device out-of-the-box](#knowing-which-devices-are-supported) as some devices that use manufacturer-specific extensions to add non-standard functions and features could sometimes need [device-specific code to fully work with ZHA](#how-to-add-support-for-new-and-unsupported-devices). +### Zigbee terminology -Note that because Zigbee relies on "mesh networking" technology it depends heavily on having [Zigbee Router devices](#using-router-devices-to-add-more-devices) to expand the network coverage and extend its size. These are always mains-powered devices that route messages to other devices that are located close to them within the Zigbee network mesh to improve the range and increase the total amount of devices you can add. You should therefore make sure that you add many Zigbee Router devices and not just Zigbee End Devices or else its network mesh connection routes will be limited due to the short range and poor wall penetration of Zigbee radio signals. It is highly recommended that you read and follow all the general tips below about [Zigbee interference avoidance and network range/coverage optimization](#zigbee-interference-avoidance-and-network-rangecoverage-optimization). +- **Zigbee network**: A mesh-network of devices with low-power digital radios using a low-bandwidth communication protocol. +- **Zigbee coordinator**: A hardware radio adapter (typically a USB dongle) that plugs directly into the same computer running your Home Assistant installation. +- **Zigbee router device**: A hardware device that is always mains-powered (AC) such as outlets or fans. +- **Zigbee end device**: A hardware device that is typically battery-powered (DC) such as remotes or motion sensors. +- **Zigbee group**: A collection of two or more Zigbee devices of the same type, different from Home Assistant's [Groups](/integrations/group/). + +### Zigbee concepts + +- A Zigbee network can have **only one** Zigbee coordinator, +- The Zigbee coordinator can have multiple **Zigbee router** or **Zigbee end devices** connected, +- Each Zigbee router device can have multiple **Zigbee end devices** connected to it, +- A Zigbee device can only be connected to a single Zigbee network, +- Zigbee networks depend heavily on having multiple [Zigbee Router devices](#using-router-devices-to-add-more-devices) to expand coverage and increase device capacity. +- Router devices help pass messages to other nearby devices in the Zigbee network and therefore can improve range and increase the number of devices you can add. ## Compatible hardware The hardware-independent design of this integration provides support for many Zigbee coordinators available from different manufacturers, as long as the coordinator is compatible with the [zigpy](https://github.com/zigpy/zigpy) library. -### Zigbee 3.0 support - -Some coordinators may not support firmware capable of Zigbee 3.0, but they can still be fully functional and feature-complete for your needs. Support for Zigbee 3.0 depends primarily on your coordinator hardware and firmware. - -{% note %} -Newer coordinators generally support Zigbee 3.0 firmware, but it is up to the manufacturer to make such firmware available to them. If your coordinator was shipped with an older firmware version, you may want to manually upgrade the firmware. -{% endnote %} - ### Recommended Zigbee radio adapters and modules - Silicon Labs EmberZNet based radios using the EZSP protocol (via the [bellows](https://github.com/zigpy/bellows) library for zigpy) @@ -108,13 +109,21 @@ Newer coordinators generally support Zigbee 3.0 firmware, but it is up to the ma ### Other supported but not recommended Zigbee radio adapters or modules -{% details "List of hardware that is not recommended" %} - -{% warning %} - The following hardware is supported, but _not recommended_. Specific models and details are noted where available in each section. -{% endwarning %} +{% details "List of hardware that is not recommended" %} + +{% caution %} + +- It is **not recommended** to run a coordinator via **Serial-Proxy-Server** _(also called Serial-to-IP bridge or Ser2Net remote adapter)_ over: + + - **Wi-Fi**, + - **WAN**, or + - **VPN** + +- The coordinator requires a stable, local connection to its serial port interface without drops in communication with the Zigbee gateway application running on the host computer. +- Serial protocols used by the coordinator do not have enough robustness, resilience, or fault tolerance to handle packet loss and latency delays that can occur over unstable connections. +{% endcaution %} **Silicon Labs EmberZNet based radios using legacy hardware using the EZSP protocol (via the [bellows](https://github.com/zigpy/bellows) library for zigpy)** @@ -165,22 +174,14 @@ The following hardware is supported, but _not recommended_. Specific models and If you find an opportunity to improve this information, refer to the section on how to [add support for new and unsupported devices](#how-to-add-support-for-new-and-unsupported-devices). -{% caution %} - -- It is **not recommended** to run a coordinator via **Serial-Proxy-Server** _(also called Serial-to-IP bridge or Ser2Net remote adapter)_ over: - - - **Wi-Fi**, - - **WAN**, or - - **VPN** - -- The coordinator requires a stable, local connection to its serial port interface without drops in communication with the Zigbee gateway application running on the host computer. -- Serial protocols used by the coordinator do not have enough robustness, resilience, or fault tolerance to handle packet loss and latency delays that can occur over unstable connections. -{% endcaution %} - ## Configuration requirements Be sure to connect a compatible radio module and restart Home Assistant before proceeding with configuration. +ZHA will automatically create a Zigbee network once it is configured with a Zigbee coordinator; you can then add compatible devices. + +It is highly recommended to review the guidance for [Zigbee interference avoidance and network range/coverage optimization)](#zigbee-interference-avoidance-and-network-rangecoverage-optimization). + {% include integrations/config_flow.md %} In the popup: @@ -227,6 +228,156 @@ If you are use ZiGate or Sonoff ZBBridge you have to use some special usb_path c - Wifi Zigate : `socket://[IP]:[PORT]` for example `socket://192.168.1.10:9999` - Sonoff ZBBridge : `socket://[IP]:[PORT]` for example `socket://192.168.1.11:8888` +### Global Options + +There are a few global options available once ZHA has been configured. Press **Configure** to access these settings. + +The options are as follows: + +{% configuration_basic %} +Enable enhanced light color/temperature transition from an off-state: + description: "For older non Zigbee 3.0 lights, this still allows a proper transition from an off-state to a new color (without seeing the old color). _(default: off)_" +Enable enhanced brightness slider during light transition: + description: "This avoids seeing intermediary brightness state when turning on lights with a transition. _(default: on)_" +Group members assume state of group: + description: "When using ZHA groups, turning on a ZHA group light makes the ZHA group members optimistically change their state to \"on\", instead of waiting and polling the lights when off. _(default: on)_" +{% endconfiguration_basic %} + +### Configuration - YAML + +For more advanced configuration, you can modify {% term "`configuration.yaml`" %} and restart Home Assistant + +{% configuration %} +database_path: + description: _Full_ path to the database which will keep persistent network data. + required: false + type: string +enable_quirks: + description: Enable quirks mode for devices where manufacturers didn't follow specs. + required: false + type: boolean + default: true +custom_quirks_path: + description: Full path to a directory containing custom quirk modules that will take precedence over any built-in quirks matching a device. + required: false + type: string +{% endconfiguration %} + +#### Defining Zigbee channel to use + +{% important %} +The best practice is to **not change the Zigbee channel** from the ZHA default. +{% endimportant %} + +{% note %} +**Before changing the Zigbee channel on an existing network**, review the following sections on this page: + +- [Best practices to avoid pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties) +- [Zigbee interference avoidance and network range/coverage optimization](#zigbee-interference-avoidance-and-network-rangecoverage-optimization) + +These sections both provide helpful advice on improving your Zigbee network performance. +{% endnote %} + +ZHA prefers to use Zigbee channel 15 by default. You can change this using YAML configuration, but this only works +if there's no existing network. To change the channel for an existing network, radio has to be factory reset and a new network to be formed. This requires re-pairing of all the devices. + +```yaml +zha: + zigpy_config: + network: + channel: 15 # What channel the radio should try to use. + channels: [15, 20, 25] # Channel mask +``` + + + +The related troubleshooting segments mentioned above will, among other things, inform that if you have issues with overlapping frequencies between Wi-Fi and Zigbee, then it is usually better to first only try changing and setting a static Wi-Fi channel on your Wi-Fi router or all your Wi-Fi access points (instead of just changing to another Zigbee channel). + +MetaGeek Support has a good reference article about channel selection for [Zigbee and WiFi coexistence](https://support.metageek.com/hc/en-us/articles/203845040-ZigBee-and-WiFi-Coexistence). + +The Zigbee specification standards divide the 2.4 GHz ISM radio band into 16 Zigbee channels (i.e. distinct radio frequencies for Zigbee). For all Zigbee devices to be able to communicate, they must support the same Zigbee channel (i.e. Zigbee radio frequency) that is set on the Zigbee Coordinator as the channel to use for its Zigbee network. Not all Zigbee devices support all Zigbee channels. Channel support usually depends on the age of the hardware and firmware, as well as on the device's power ratings. + +The general recommendation is to only use channels 15, 20, or 25 in order to avoid interoperability problems with Zigbee devices. Not only because there is less chance of Wi-Fi networks interfering too much with the Zigbee network on other channels, but also because not all Zigbee devices support all channels. Some devices, for example, are limited to only being compatible with ZLL (Zigbee Light Link) channels. It is therefore especially not recommended to use Zigbee channels 11, 24, 25, or 26 on your Zigbee coordinator. These Zigbee channels are commonly only supported by relatively modern Zigbee hardware devices with newer Zigbee firmware. If using those channels, your coordinator may not be usable with older Zigbee devices. + +#### Modifying the device type + +As not all device manufacturers follow the Zigbee standard, at times a device can be incorrectly classified. For example, a switch could be classified as a light. + +To correct the device type, also called domain, add the following to your {% term "`configuration.yaml`" %} and restart Home Assistant: + +```yaml +zha: + device_config: + 84:71:27:ff:fe:93:17:24-1: # format: {ieee}-{endpoint_id} + type: "switch" # corrected device type +``` + +`{ieee}` is the device hardware address which can be read from the Home Assistant UI when looking at _Device info_. From device info, you can find the `{endpoint_id}` by viewing the _Zigbee device signature_. + +### OTA updates of Zigbee device firmware + +The ZHA integration has the ability to perform OTA (over-the-air) firmware updates of Zigbee devices. This feature is enabled by default. As it uses standard [Update](/integrations/update/) entities in Home Assistant, users will get a UI notification if and when an OTA firmware update is available for a specific device, with an option to initiate the update or ignore that specific update for the device. + +To see OTA updates for a device, it must support OTA updates and firmware images for the device must be publicly provided by the manufacturer. ZHA currently only includes OTA providers for a few manufacturers that provide these updates publicly. + +**Included manufacturers:** + +- IKEA +- Inovelli +- Ledvance/OSRAM +- SALUS/Computime +- Sonoff/iTead +- Third Reality + +{% warning %} +Before updating a device, you should search for any disadvantages or if you even need to install an available update. Some firmware updates can break features you might use (e.g. group binding for IKEA devices). Some updates might also require changes to ZHA. In rare cases, you can even brick devices by installing a firmware update. +{% endwarning %} + +#### Advanced OTA configuration + +OTA for a few manufacturers is enabled by default, currently Ledvance, Sonoff, Inovelli, and ThirdReality. Other manufacturers are supported but disabled by default because their updates may change or remove device functionality, may require you to reconfigure devices, or are contributed by the community and may be minimally tested. + +Refer to the [zigpy documentation for OTA configuration](https://github.com/zigpy/zigpy/wiki/OTA-Configuration) for more information on additional OTA providers. + +## Adding devices + +{% tip %} +When adding devices, review the following sections on this page: + +- [Best practices to avoid pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties) +- [Zigbee interference avoidance and network range/coverage optimization](#zigbee-interference-avoidance-and-network-rangecoverage-optimization) + +These sections both provide helpful advice on improving your Zigbee network performance. +{% endtip %} + +**To add a new Zigbee device:** + +1. Go to {% my integrations title="**Settings** > **Devices & services**" %}. +2. Select the **Zigbee Home Automation** {% term integration %}. Then, select **Configure**. +3. To start a scan for new devices, on the bottom right corner of the screen, select **Add device**. +4. Reset your Zigbee devices to factory default settings according to the device instructions provided by the manufacturer (e.g., turn on/off lights up to 10 times; switches usually have a reset button/pin). It might take a few seconds for the devices to appear. You can click on **Show logs** for more verbose output. +5. Once the device is found, it will appear on that page and will be automatically added to your devices. You can optionally change its name and add it to an area (you can change this later). You can search again to add another device, or you can go back to the list of added devices. + +### Using router devices to add more devices + +Most mains-powered devices, e.g., many always-powered wall plugs or light bulbs in your Zigbee network will automatically act as a Zigbee router device (sometimes also referred to as a Zigbee "signal repeater" or "range extender"). + +Because Zigbee should use a [wireless mesh network](https://en.wikipedia.org/wiki/Wireless_mesh_network) to be effective, you will need to add Zigbee router devices to increase the number of Zigbee devices that can be used in your Zigbee network, both in the total number of devices that can be added as well as the total range and coverage of the network. Some Zigbee router devices do a much better job at routing and repeating Zigbee signals and messages than some other devices. You should not have a setup where Zigbee router devices (e.g. light bulbs) are often powered-off. Zigbee router devices are meant to be always available. + +All Zigbee coordinator firmware will only allow you to directly connect a certain amount of devices. That limit is set for two reasons; firstly, to not overload the Zigbee coordinator, and secondly, to encourage your Zigbee network to quickly begin to utilize a "[mesh networking](https://en.wikipedia.org/wiki/Mesh_networking)" topology instead of only a "[star network](https://en.wikipedia.org/wiki/Star_network)" topology. + +The total number of Zigbee devices that you can have on a Zigbee network depends on a few things. The Zigbee coordinator hardware and its firmware only play a larger role in Zigbee networks with a lot of devices. More important is the number of directly connected devices ("direct children") versus the number of routers that are connected to your Zigbee coordinator. The Zigpy library, which the ZHA {% term integration %} depends on, has an upper limit that is 32 direct children, but you can still have hundreds of Zigbee devices in total connected indirectly through routes via Zigbee router devices. + +In this theoretical example, a CC2652-based Zigbee coordinator has three CC2530 Zigbee router devices for a total limit of 77 devices: + +- Coordinator: 32 Zigbee End devices - 3 routers = 29 +- Router one: + 16 devices +- Router two: + 16 devices +- Router three: + 16 devices +- Total device limit = **77 devices** + +In practice, you will likely need to add a lot more Zigbee router devices than in this example in order to extend the coverage of the network to reach that many devices. + ### Discovery via USB or Zeroconf Some devices can be auto-discovered, which can simplify the ZHA setup process. The following devices have been tested with discovery and offer a quick setup experience. @@ -294,108 +445,6 @@ Some devices can be auto-discovered, which can simplify the ZHA setup process. T Additional devices in the [Compatible hardware](#compatible-hardware) section may be discoverable, however, only devices that have been confirmed discoverable are listed above. -### OTA updates of Zigbee device firmware - -The ZHA integration has the ability to perform OTA (over-the-air) firmware updates of Zigbee devices. This feature is enabled by default. As it uses standard [Update](/integrations/update/) entities in Home Assistant, users will get a UI notification if and when an OTA firmware update is available for a specific device, with an option to initiate the update or ignore that specific update for the device. - -To see OTA updates for a device, it must support OTA updates and firmware images for the device must be publicly provided by the manufacturer. ZHA currently only includes OTA providers for a few manufacturers that provide these updates publicly. - -**Included manufacturers:** - -- IKEA -- Inovelli -- Ledvacnce/OSRAM -- SALUS/Computime -- Sonoff/iTead -- Third Reality - -{% warning %} -Before updating a device, you should search for any disadvantages or if you even need to install an available update. Some firmware updates can break features you might use (e.g. group binding for IKEA devices). Some updates might also require changes to ZHA. In rare cases, you can even brick devices by installing a firmware update. -{% endwarning %} - -### Global Options - -There are a few global options available once ZHA has been configured. Press **Configure** to access these settings. - -The options are as follows: - -{% configuration_basic %} -Enable enhanced light color/temperature transition from an off-state: - description: "For older non Zigbee 3.0 lights, this still allows a proper transition from an off-state to a new color (without seeing the old color). _(default: off)_" -Enable enhanced brightness slider during light transition: - description: "This avoids seeing intermediary brightness state when turning on lights with a transition. _(default: on)_" -Group members assume state of group: - description: "When using ZHA groups, turning on a ZHA group light makes the ZHA group members optimistically change their state to \"on\", instead of waiting and polling the lights when off. _(default: on)_" -{% endconfiguration_basic %} - -### Configuration - YAML - -For more advanced configuration, you can modify {% term "`configuration.yaml`" %} and restart Home Assistant - -{% configuration %} -database_path: - description: _Full_ path to the database which will keep persistent network data. - required: false - type: string -enable_quirks: - description: Enable quirks mode for devices where manufacturers didn't follow specs. - required: false - type: boolean - default: true -custom_quirks_path: - description: Full path to a directory containing custom quirk modules that will take precedence over any built-in quirks matching a device. - required: false - type: string -{% endconfiguration %} - -#### Advanced OTA configuration - -OTA for a few manufacturers is enabled by default, currently Ledvance, Sonoff, Inovelli, and ThirdReality. Other manufacturers are supported but disabled by default because their updates may change or remove device functionality, may require you to reconfigure devices, or are contributed by the community and may be minimally tested. - -Refer to the [zigpy documentation for OTA configuration](https://github.com/zigpy/zigpy/wiki/OTA-Configuration) for more information on additional OTA providers. - -#### Defining Zigbee channel to use - -Tip! Before considering to change to an other Zigbee channel on an existing Zigbee network, it is highly recommended that you read through the two segments under the [troubleshooting](#troubleshooting) section below about _Best practices to avoid pairing/connection difficulties_ and _Zigbee interference avoidance and network range/coverage optimization_. These sections provide prerequisite information and advice on how to achieve the best possible Zigbee network in your environment. - -ZHA prefers to use Zigbee channel 15 by default. You can change this using YAML configuration, but this only works -if there's no existing network. To change the channel for an existing network, radio has to be factory reset and a new network to be formed. This requires re-pairing of all the devices. - -```yaml -zha: - zigpy_config: - network: - channel: 15 # What channel the radio should try to use. - channels: [15, 20, 25] # Channel mask -``` - -{% note %} -The best practice is to not change the Zigbee channel from the ZHA default. -{% endnote %} - -The related troubleshooting segments mentioned above will, among other things, inform that if you have issues with overlapping frequencies between Wi-Fi and Zigbee, then it is usually better to first only try changing and setting a static Wi-Fi channel on your Wi-Fi router or all your Wi-Fi access points (instead of just changing to another Zigbee channel). - -MetaGeek Support has a good reference article about channel selection for [Zigbee and WiFi coexistence](https://support.metageek.com/hc/en-us/articles/203845040-ZigBee-and-WiFi-Coexistence). - -The Zigbee specification standards divide the 2.4 GHz ISM radio band into 16 Zigbee channels (i.e. distinct radio frequencies for Zigbee). For all Zigbee devices to be able to communicate, they must support the same Zigbee channel (i.e. Zigbee radio frequency) that is set on the Zigbee Coordinator as the channel to use for its Zigbee network. Not all Zigbee devices support all Zigbee channels. Channel support usually depends on the age of the hardware and firmware, as well as on the device's power ratings. - -The general recommendation is to only use channels 15, 20, or 25 in order to avoid interoperability problems with Zigbee devices. Not only because there is less chance of Wi-Fi networks interfering too much with the Zigbee network on other channels, but also because not all Zigbee devices support all channels. Some devices, for example, are limited to only being compatible with ZLL (Zigbee Light Link) channels. It is therefore especially not recommended to use Zigbee channels 11, 24, 25, or 26 on your Zigbee coordinator. These Zigbee channels are commonly only supported by relatively modern Zigbee hardware devices with newer Zigbee firmware. If using those channels, your coordinator may not be usable with older Zigbee devices. - -#### Modifying the device type - -As not all device manufacturers follow the Zigbee standard, at times a device can be incorrectly classified. For example, a switch could be classified as a light. - -To correct the device type, also called domain, add the following to your {% term "`configuration.yaml`" %} and restart Home Assistant: - -```yaml -zha: - device_config: - 84:71:27:ff:fe:93:17:24-1: # format: {ieee}-{endpoint_id} - type: "switch" # corrected device type -``` - -`{ieee}` is the device hardware address which can be read from the Home Assistant UI when looking at _Device info_. From device info, you can find the `{endpoint_id}` by viewing the _Zigbee device signature_. - ## Actions ### Action `zha.permit` @@ -467,38 +516,6 @@ This action disables a lock code on a Zigbee lock. | ----------- | -------- | ------------------------------- | | `code_slot` | no | Which lock code slot to disable | -## Adding devices - -Tip! It is highly recommended that you read through the two segments under the troubleshooting section below about _Best practices to avoid pairing/connection difficulties_ and _Zigbee interference avoidance and network range/coverage optimization_ for general prerequisite knowledge and advice on how to achieve the best possible Zigbee network in your environment. - -**To add a new Zigbee device:** - -1. Go to {% my integrations title="**Settings** > **Devices & services**" %}. -2. Select the **Zigbee Home Automation** {% term integration %}. Then, select **Configure**. -3. To start a scan for new devices, on the bottom right corner of the screen, select **Add device**. -4. Reset your Zigbee devices to factory default settings according to the device instructions provided by the manufacturer (e.g., turn on/off lights up to 10 times; switches usually have a reset button/pin). It might take a few seconds for the devices to appear. You can click on **Show logs** for more verbose output. -5. Once the device is found, it will appear on that page and will be automatically added to your devices. You can optionally change its name and add it to an area (you can change this later). You can search again to add another device, or you can go back to the list of added devices. - -### Using router devices to add more devices - -Most mains-powered devices, e.g., many always-powered wall plugs or light bulbs in your Zigbee network will automatically act as a Zigbee router device (sometimes also referred to as a Zigbee "signal repeater" or "range extender"). - -Because Zigbee should use a [wireless mesh network](https://en.wikipedia.org/wiki/Wireless_mesh_network) to be effective, you will need to add Zigbee router devices to increase the number of Zigbee devices that can be used in your Zigbee network, both in the total number of devices that can be added as well as the total range and coverage of the network. Some Zigbee router devices do a much better job at routing and repeating Zigbee signals and messages than some other devices. You should not have a setup where Zigbee router devices (e.g. light bulbs) are often powered-off. Zigbee router devices are meant to be always available. - -All Zigbee coordinator firmware will only allow you to directly connect a certain amount of devices. That limit is set for two reasons; firstly, to not overload the Zigbee coordinator, and secondly, to encourage your Zigbee network to quickly begin to utilize a "[mesh networking](https://en.wikipedia.org/wiki/Mesh_networking)" topology instead of only a "[star network](https://en.wikipedia.org/wiki/Star_network)" topology. - -The total number of Zigbee devices that you can have on a Zigbee network depends on a few things. The Zigbee coordinator hardware and its firmware only play a larger role in Zigbee networks with a lot of devices. More important is the number of directly connected devices ("direct children") versus the number of routers that are connected to your Zigbee coordinator. The Zigpy library, which the ZHA {% term integration %} depends on, has an upper limit that is 32 direct children, but you can still have hundreds of Zigbee devices in total connected indirectly through routes via Zigbee router devices. - -In this theoretical example, a CC2652-based Zigbee coordinator has three CC2530 Zigbee router devices for a total limit of 77 devices: - -- Coordinator: 32 Zigbee End devices - 3 routers = 29 -- Router one: + 16 devices -- Router two: + 16 devices -- Router three: + 16 devices -- Total device limit = **77 devices** - -In practice, you will likely need to add a lot more Zigbee router devices than in this example in order to extend the coverage of the network to reach that many devices. - ## Zigbee groups and binding devices ZHA supports the creation of Zigbee groups (different from Home Assistant's [Group](/integrations/group/) integration), as well as binding devices to each other. Groups and device binding can be set up independently of each other, but they can be also used in combination (such as binding a device to another group of devices). @@ -562,16 +579,22 @@ ZHA supports migrating the Zigbee network between different Zigbee Coordinators #### Prerequisites -To migrate your Zigbee network from one Zigbee Coordinator to another, confirm you meet the following requirements before proceeding with the migration process: +Confirm you meet the following requirements before migrating: -- The previous Zigbee Coordinator is used in the ZHA {% term integration %} and _not_ in deCONZ or MQTT. +- The previous coordinator is used in the ZHA {% term integration %} and _not_ in deCONZ or MQTT. - The radio type is one of the following: - - ezsp (Silicon Labs EmberZnet) - - znp (Texas Instruments Z-Stack ZNP) - - deCONZ (ConBee/RaspBee from dresden elektronik) - - For deCONZ (ConBee/RaspBee) radio adapters, make sure it is running [firmware 0x26700700 (from 2021-08-18)](https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/Firmware-Changelog) or later. + - ezsp _(Silicon Labs EmberZnet)_ + - znp _(Texas Instruments Z-Stack ZNP)_ + - deCONZ _(ConBee/RaspBee from dresden elektronik)_ + - Be sure it is running [firmware 0x26700700 (from 2021-08-18)](https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/Firmware-Changelog) or later. -#### To migrate to a new Zigbee coordinator radio inside ZHA +{% details "To migrate to a new Zigbee coordinator radio inside ZHA:" %} + +{% important %} +You will not be able to control your existing Zigbee devices until the new coordinator fully joins the network after the migration. **This can take a few minutes.** + +If some existing devices do not resume normal functions after some time, try power-cycling them to attempt rejoining to the network. +{% endimportant %} 1. Go to **{% my integrations title="Settings > Devices & services" %}** and select the ZHA {% term integration %}. Then select **Configure**. 2. Under **Network settings**, select **Migrate radio**. @@ -603,42 +626,74 @@ To migrate your Zigbee network from one Zigbee Coordinator to another, confirm y 11. Finally, a **Success!** message should pop up with information that all options were successfully saved. - Select **Finish** to confirm. -{% important %} -You will not be able to control your existing Zigbee devices until the new coordinator fully joins the network after the migration. **This can take a few minutes.** - -If some existing devices do not resume normal functions after some time, try power-cycling them to attempt rejoining to the network. -{% endimportant %} +{% enddetails %} ## Troubleshooting -Please note the current limitations and follow the instructions in this troubleshooting section. - {% note %} To help resolve any kinks or compatibility problems, report bugs as issues with debug logs. {% endnote %} ### Limitations -ZHA only supports connecting a single dedicated Zigbee Coordinator radio adapter or module with a single Zigbee network. The Zigbee Coordinator cannot already be connected or used by any other application. Devices currently or previously connected to another Zigbee implementation will need to be reset to their factory default settings before they can be paired/joined to ZHA. Refer to each device manufacturer's documentation for reset steps. +The list of ZHA limitations may not be exhaustive. -Any Zigbee device can only be connected to a single Zigbee Coordinator (only one Zigbee gateway). This is a limitation in the Zigbee protocol specifications, governed by the [CSA (Connectivity Standards Alliance)](https://csa-iot.org/all-solutions/zigbee/), applying to all Zigbee implementations and not just the ZHA implementation. +{% details "List of ZHA limitations:" %} -Support for commissioning Zigbee 3.0 devices via "Install Code" or "QR Code" via the `zha.permit` action has so far only been implemented for 'ezsp' (Silicon Labs EmberZNet) or 'znp' (Texas Instruments) radio type in ZHA. Other radio types are missing support in their respective [radio libraries for zigpy](https://github.com/zigpy/) or manufacturer's firmware commands/APIs. +**ZHA only supports connecting a single dedicated Zigbee coordinator with a single Zigbee network:** -ZHA currently does not support devices that can only use the ZGP ("Zigbee Green Power") profile which is used in a few batteryless self-powered or energy harvesting devices, (such as for example; Philips Hue Click, Philips Hue Tap, and some "Friends of Hue" partnership switches). +- The Zigbee Coordinator cannot already be connected or used by any other application. +- Devices currently or previously connected to another Zigbee implementation will need to be reset to their factory default settings before they can be paired/joined to ZHA. +- Refer to each device manufacturer's documentation for reset steps. -ZHA does not currently support devices that can only use the ZSE ("Zigbee Smart Energy") profile, that is however due to the "Zigbee SE" specification not being part of the standard Zigbee 3.0 specification and thus not implemented in most of the Zigbee protocol stacks that are commonly available Zigbee Coordinator radio adapters and modules. +**A Zigbee device can only be connected to a single Zigbee Coordinator (only one Zigbee gateway):** + +- This is a limitation in the Zigbee protocol specifications, governed by the [CSA (Connectivity Standards Alliance)](https://csa-iot.org/all-solutions/zigbee/), applying to all Zigbee implementations and not just the ZHA implementation. + +**Support for commissioning Zigbee 3.0 devices via "Install Code" or "QR Code" via the `zha.permit` action:** + +- This has so far only been implemented for 'ezsp' (Silicon Labs EmberZNet) or 'znp' (Texas Instruments) radio type in ZHA. +- Other radio types are missing support in their respective [radio libraries for zigpy](https://github.com/zigpy/) or manufacturer's firmware commands/APIs. + +**ZHA does _not_ currently support devices that can only use:** + +- The ZGP ("Zigbee Green Power") profile: + - This is used in a few batteryless self-powered or energy harvesting devices, (such as Philips Hue Click, Philips Hue Tap, and some "Friends of Hue" partnership switches). +- The ZSE ("Zigbee Smart Energy") profile: + - This is due to the "Zigbee SE" specification not being part of the standard Zigbee 3.0 specification and thus not implemented in most of the Zigbee protocol stacks that are commonly available Zigbee Coordinator radio adapters and modules. + +{% enddetails %} ### Knowing which devices are supported -Home Assistant's ZHA {% term integration %} supports all standard Zigbee device types. It should be compatible with most Zigbee devices as long as they fully conform to the official ZCL (Zigbee Cluster Library) specifications defined by the [CSA (Connectivity Standards Alliance, formerly the Zigbee Alliance)](https://csa-iot.org/all-solutions/zigbee/). There is therefore no official compatibility list of devices that will work out-of-the-box with the ZHA {% term integration %} -Not all hardware manufacturers always fully comply with the standard specifications. Sometimes, they may also implement unique features. For this reason, some Zigbee devices pair/join fine with ZHA but then only show none or only a few entities in the {% term integration %}. Developers can work around most such interoperability issues by adding conversion/translation code in custom device handlers. For more information, refer to the section below on [How to add support for new and unsupported devices](#how-to-add-support-for-new-and-unsupported-devices). +Home Assistant's ZHA {% term integration %} supports all standard Zigbee device types as defined by the [CSA (Connectivity Standards Alliance, formerly the Zigbee Alliance)](https://csa-iot.org/all-solutions/zigbee/). -For clarification, normally only devices that do not fully conform to CSA's ZCL specifications that will not present all standard attributes as entities for configuration in the ZHA {% term integration %}. Zigbee devices that only use the standard clusters and attributes that are Zigbee specifications set by the Connectivity Standards Alliance should not need custom device handlers. +**There is therefore no official compatibility list of devices that will work out-of-the-box with the ZHA {% term integration %}.** -Before continuing with this section: If a device does not join/pair at all, read the troubleshooting sections about how to avoid pairing/connection difficulties, interference avoidance, and network range/coverage optimization. +{% tip %} +Check out [blakadder's unofficial Zigbee Device Compatibility Repository](https://zigbee.blakadder.com). -Tip to new Zigbee users: Checkout [blakadder's unofficial Zigbee Device Compatibility Repository](https://zigbee.blakadder.com). Anyone can help maintain the site by submitting device compatibility information to it. The repository contains independent community member's reports or device-specific pairing tips for several home automation gateway/bridge/hub software, including open-source Zigbee implementations, such as ZHA, Zigbee2MQTT, and Tasmota (Zigbee2Tasmota). +This unofficial list contains independent community members' reports _(or device-specific pairing tips)_ for several home automation gateway/bridge/hub software (including open-source Zigbee implementations such as ZHA, Zigbee2MQTT, and Tasmota/Zigbee2Tasmota). + +Anyone can help maintain the site by submitting device compatibility information to it. +{% endtip %} + +Not all hardware manufacturers fully comply with the standard. This can include: + +- Implementing unique (but non-standard) features, +- Not showing all expected entities within the Home Assistant {% term integration %} overview. +- Showing no entities within Home Assistant at all. + +Developers (or even advanced users) might be able to work around such interoperability issues by adding conversion/translation code in custom device handlers. For more information, refer to [How to add support for new and unsupported devices](#how-to-add-support-for-new-and-unsupported-devices). + +{% note %} +**If a device will not join/pair** at all, review the following sections on this page: + +- [Best practices to avoid pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties) +- [Zigbee interference avoidance and network range/coverage optimization](#zigbee-interference-avoidance-and-network-rangecoverage-optimization) + +These sections both provide helpful advice on improving your Zigbee network performance. +{% endnote %} ### How to add support for new and unsupported devices @@ -774,7 +829,12 @@ When reporting potential bugs related to the ZHA integration on the issues track 3. If the issue is related to a specific Zigbee device, provide both the **Zigbee Device Signature** and the **Diagnostics** information. - Both the **Zigbee Device Signature** and the **Diagnostics** information can be found under {% my integrations title="**Settings** > **Devices & services**" %}. Select the **Zigbee Home Automation** integration. Then, select **Configure** > **Devices** (pick your device). Select **Zigbee Device Signature** and **Download Diagnostics**, respectively. -Note: Please also make sure you give it your best effort to follow the recommended best practices for avoiding both [pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties) and [Zigbee interference](#zigbee-interference-avoidance-and-network-rangecoverage-optimization), (which helps free up time for developers). +{% tip %} +For troubleshooting, read the following sections on this page. They provide information on improving your Zigbee network performance. + +- [Best practices to avoid pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties) +- [Zigbee interference avoidance and network range/coverage optimization](#zigbee-interference-avoidance-and-network-rangecoverage-optimization) +{% endtip %} ### Debug logging @@ -899,3 +959,11 @@ services: When you see `NCP entered failed state. Requesting APP controller restart` in logs during normal operation, it indicates a drop in communication between ZHA and the serial interface of the Silabs EmberZNet Zigbee Coordinator. The EZSP (EmberZNet Serial Protocol) interface used by Silicon Labs EmberZNet Zigbee Coordinator adapters requires a stable connection to the serial port; therefore, it is not recommended to use a connection over Wi-Fi, WAN, VPN, etc. + +### Zigbee 3.0 support + +Some coordinators may not support firmware capable of Zigbee 3.0, but they can still be fully functional and feature-complete for your needs. + +{% note %} +It is up to hardware manufacturers to make such firmware available to them. If your coordinator was shipped with an older firmware version, you be able to manually upgrade the firmware. +{% endnote %} diff --git a/source/_posts/2025-02-27-apollo-joins-wwha.markdown b/source/_posts/2025-02-27-apollo-joins-wwha.markdown new file mode 100644 index 00000000000..17e9c60d45d --- /dev/null +++ b/source/_posts/2025-02-27-apollo-joins-wwha.markdown @@ -0,0 +1,50 @@ +--- +layout: post +title: "Apollo joins the Works With Home Assistant Program" +description: "Adding three devices, including their community favorite presence and air quality multisensors." +date: 2025-02-27 00:00:01 +date_formatted: "February 27, 2025" +author: Miranda Bishop +comments: true +categories: Announcements +og_image: /images/blog/2025-02-apollo/art.jpg +--- + +Apollo wwha logo + +[Apollo Automation](https://apolloautomation.com/) has joined the [Works with Home Assistant](https://partner.home-assistant.io/) program. Certifying three of their newest devices, including their community favorite presence and air quality multisensors, giving users the best possible experience when using these devices with Home Assistant. + +Notably, these are the first [ESPHome](https://esphome.io/index.html)-based devices to receive Works with Home Assistant certification. Apollo is one of the first movers in an important trend that we're very excited about: Home Assistant community members turning their open projects into viable businesses that support a thriving Open Home ecosystem. + + + +## Background + +Apollo Automation is a growing family-run business rooted in the Home Assistant and ESPHome communities. And yes, they're named after their German Shepherd, Apollo 🐕. + +

+

Apollo Automation is built by and for the Home Assistant community. We believe in open smart home technology that gives users control, privacy, and flexibility. Joining the Works With Home Assistant program is a natural step for us, ensuring our devices integrate seamlessly while supporting the ecosystem we love. Home Assistant allows users to create powerful smart homes, and we are excited to contribute by making high-quality, reliable hardware that enhances the experience for everyone.

+ - Justin Bunton, Co-Founder, Apollo Automation +
+ +Two years ago, they started sharing their designs for a new impressively small ESPHome-powered multisensor with the community. Getting feedback, sharing iterations, and working collaboratively, they turned that sensor into a full-fledged product, which was built to work with Home Assistant. They have continued this open, community-first approach and have now built several even more refined multisensors. + +

Apollo MSR-2 multisensor +A multisensor for ants? 🐜

+ +Home Assistant is the [only true smart home platform](https://newsletter.openhomefoundation.org/true-platforms-let-you-create/) because it gives everyone full control to build and create. [ESPHome](/integrations/esphome/) is the ultimate smart device platform, and it is fostering an entirely new ecosystem of Open Home projects. ESPHome works fully locally, and it's a modder's paradise, allowing users to build DIY smart home devices (check out the [getting started with ESPHome guide](https://esphome.io/guides/getting_started_hassio.html)). + +Creators can also use it to build pre-built, plug-and-play products that give users a really seamless experience. With devices being discovered and easily added to your Wi-Fi network and Home Assistant, along with a one-click update within Home Assistant. + +ESPHome and Home Assistant allows anyone to turn their passion for building cool things into a career, and the things they build help support a more vibrant Open Home. Apollo is an exciting new partner for the Works with Home Assistant program and should serve as an inspiration to all aspiring makers in our community. + +## Devices +Works with Home Assistant differs from other certification programs as products are rigorously tested in-house to ensure they work seamlessly out of the box. Any company joining also commits to providing long-term support and firmware updates, while being a positive force in the Home Assistant community. Works with Home Assistant is operated by the [Open Home Foundation](https://www.openhomefoundation.org/), and it is the support of [Home Assistant Cloud](/cloud/) subscribers that funds this work. + +Apollo has chosen first to certify three products, which include: + +- [MTR-1 Multi-Target Radar Multisensor For Home Assistant (LD2450)](https://apolloautomation.com/products/mtr-1) - A tiny, but powerful radar-based (mmWave) presence sensor that can pack in many other sensors. +- [MSR-2 mmWave Multisensor For Home Assistant (LD2410B)](https://apolloautomation.com/products/msr-2) - An even smaller multisensor that is the successor of the initial community feedback-driven design. +- [AIR-1 Air Quality Sensor For Home Assistant](https://apolloautomation.com/products/air-1) - A small air quality multisensor that can be extended to incorporate a huge variety of sensors. + +We anticipate that Apollo will bring more of their lineup into the program, and we are excited to see their new innovations going forward! This is just the start of a year of many new Works with Home Assistant announcements, so please stay tuned! diff --git a/source/_posts/2025-03-05-music-assistants-next-big-hit.markdown b/source/_posts/2025-03-05-music-assistants-next-big-hit.markdown new file mode 100644 index 00000000000..94f8c3456b6 --- /dev/null +++ b/source/_posts/2025-03-05-music-assistants-next-big-hit.markdown @@ -0,0 +1,95 @@ +--- +layout: post +title: "Music Assistant's next big hit" +description: "Spotify Connect, Assist streaming, podcasts, audiobooks, Apple Music, a full EQ, and more!" +date: 2025-03-05 00:00:01 +date_formatted: "March 5, 2025" +author: Marcel van der Veldt +comments: true +categories: Music-Assistant +og_image: /images/blog/2025-03-music-assistant/art.jpg +--- + +

Music Assistants next big hit

+ +Over the past several months, [Music Assistant](https://www.music-assistant.io/) has been hitting all the right notes with new features, greater stability, and a crescendo of contributors who keep pushing the project forward. If you're [unfamiliar with Music Assistant](/blog/2024/05/09/music-assistant-2/#what-is-music-assistant), it allows you to merge your libraries from leading audio streaming providers and local files, letting you play them on the most popular smart speakers. Since our [last update](/blog/2024/05/09/music-assistant-2/), Music Assistant has had a couple of big releases, but our most recent might just be our platinum record 💿, with a lot of new functionality coming in version 2.4. In case you've missed the last few updates, here are the biggest additions. + +**Table of contents** +- [Optimized for Assist](#say-my-name) +- [External audio & Spotify Connect](#across-the-universe) +- [Podcasts & Audiobooks](#radio-ga-ga) +- [More players and providers](#new-sensation) +- [Equalizer control & features](#all-about-that-bass) +- [Home Assistant improvements](#master-of-puppets) +- [More stable streaming](#d-d-dont-dont-stop-the-beat) +- [Get Music Assistant 2.4 today!](#drop-it-like-its-hot) + + + +### "Say My Name" +

Optimized for Assist

+

audiobooks pageWe should have called it Hi-Fi edition

+ +The most recent release has some great advancements for [Assist](/voice_control/) devices, like the [Home Assistant Voice Preview Edition](/voice-pe/). We've been working closely with the [ESPHome](https://esphome.io/) team to ensure the most optimal audio streaming experience, which has helped make Assist devices into very capable media players. The community has even added some great functionality to fully [control your media player with your voice](https://github.com/music-assistant/voice-support), including choosing songs, artists, and more. Voice Preview Edition has a high-quality DAC that provides very clean audio playback from its 3.5mm jack, allowing you to stream lossless audio to connected speakers (this $59 device puts some of my expensive Hi-Fi gear to shame!). + +### "Across the Universe" +

External audio & Spotify Connect

+

Spotify Connect on a Voice PESpotify Connect on Voice Preview Edition

+ +Another feature in the latest release is support for "external audio sources", which can be provided either by players themselves (source control) or with plugins. The first plugin to deliver this functionality is Spotify Connect. It's the easiest way to use Spotify with Music Assistant, and can be enabled on any player. This makes any Music Assistant supported device a Spotify Connect supported device (can confirm, Voice Preview Edition is great for this). [To get started](https://www.music-assistant.io/plugins/spotify-connect/) go to Music Assistant's settings, add the Spotify Connect Plugin, choose the devices you would like it to use, and within Spotify you will see the device as a player. Just note, Spotify Connect requires a Premium account to work. + +We've got our sights set on adding even more plugins like this down the line (AirPlay, anyone?). We're also hard at work making the whole setup process super simple, particularly for those using the Voice Preview Edition who might not need every single Music Assistant feature, but still want this simple casting capability. + +### "Radio Ga Ga" +

Podcasts & Audiobooks

+ +

audiobooks pageThe full book's progress is tracked, and chapters are clearly shown

+ +Your library just got a whole lot bigger! Music Assistant now has native support for podcasts and audiobooks. For podcasts, several providers have been added, including [Subsonic](https://www.music-assistant.io/music-providers/subsonic/), [YouTube](https://www.music-assistant.io/music-providers/youtube-music/), and [RSS feeds](https://www.music-assistant.io/music-providers/podcastfeed/). Audiobooks can be added via two brand new providers: [Audible](https://www.music-assistant.io/music-providers/audible/) and [Audiobookshelf](https://www.music-assistant.io/music-providers/audiobookshelf/), or imported directly from your local files. Audiobook playback presents the entire book as a single bar with dots showing each chapter (even if the book is separated into multiple files), allowing you to really track your progress. The entire core has been adjusted to keep better track of your progress through any media, so you will always resume where you left off. + +

Continue listening sectionThe "Continue listening" section on the home page takes you back to where you left off

+ +### "New Sensation" +

More players and providers

+ +Shortly after our last blog post, we added support for [Apple Music](https://www.music-assistant.io/music-providers/apple-music/) which was one of the most requested additions in the comments. A couple of other new providers were added, including [iBroadcast](https://www.music-assistant.io/music-providers/ibroadcast/) and [SiriusXM](https://www.music-assistant.io/music-providers/siriusxm/). For new hardware support we've added support for [Bluesound](https://www.music-assistant.io/player-support/bluesound/) players. If you have a provider or player you love and want to see it in Music Assistant, [request it](https://github.com/orgs/music-assistant/discussions?discussions_q=sort%3Atop)---but better yet [join us in developing it](https://github.com/music-assistant/server)! + +### "All About That Bass" +

Equalizer control & features

+ +

PEQ pageMake your own EQ settings or import pre-made settings for your speaker

+ +When we released 2.0 there were basic bass and treble controls for devices, but with our new [configurable DSP](https://www.music-assistant.io/audiopipeline/) (Digital Signal Processor) you can now fine-tune your audio like never before. This includes input and output gain, along with a powerful [parametric equalizer](https://www.music-assistant.io/dsp/parametriceq/) that can be applied per player 📈. You can conveniently view the entire audio pipeline by clicking the quality indicator icon. + +

Music Assistants next big hit

+ +Another useful feature added was a "[Don't stop the music](https://www.music-assistant.io/usage/#:~:text=Don%27t%20Stop%20The%20Music%20(DSTM))" mode that keeps music playing even once your queue finishes, playing similar songs from your library. Another way to keep the music playing is through lock screens and widget controls built into many popular operating systems, which can now control Music Assistant. + +### "Master of Puppets" +

Home Assistant improvements

+ +Home Assistant was always designed to work seamlessly with Music Assistant, and it's only getting better. In the [Home Assistant 2024.12 release](/blog/2024/12/04/release-202412/#new-integrations), we gave the community a Christmas present--Music Assistant moved from HACS to being a native integration ([please migrate if you haven't yet](https://www.music-assistant.io/integration/migrate/)). + +Many people now add all their players to Music Assistant first and then integrate Music Assistant with Home Assistant, eliminating the need to add each device separately. The most recent release added the ability to outsource any player control, including volume or turning it on/off, to a Home Assistant entity. There are other benefits to using them together, like Music Assistant [resuming audio playback](https://www.music-assistant.io/integration/announcements/) after an announcement or using Assist to find and play a song ([with or without LLMs](https://github.com/music-assistant/voice-support)). + +### "D-D-Don't Don't Stop the Beat" +

More stable streaming

+ +One of the biggest goals for every release is to improve streaming stability across all providers and players. With every release, we've been improving stability, and since our last post, we've had a big influx of users who have been finding and helping squash bugs. There have been nice improvements to almost every provider helping with stability, speed, and quality. Just in the next patch release 2.4.3, we've improved streaming performance on slower network connections. The goal is that the music never stops. + +## "Praise You" - 🙏 + +A huge thank you to everyone who contributed to this release---whether through code, testing, or feedback. Your support keeps Music Assistant evolving into the ultimate tool for managing your music, on your players. + +## "Drop It Like It's Hot" +

Get Music Assistant 2.4 today!

+ +If you haven't updated yet, now's the time! And if you haven't used it yet, you can install Music Assistant as a Home Assistant Add-on, + +[!Open your Home Assistant instance and show the dashboard of an add-on.](https://my.home-assistant.io/redirect/supervisor_addon/?addon=d5369777_music_assistant) + +For more on getting started with Music Assistant, [read the documentation](https://www.music-assistant.io/installation/). + +Have feedback or want to contribute? Join our growing community on GitHub and Discord! + +Happy listening! diff --git a/source/_posts/2025-03-05-release-20253.markdown b/source/_posts/2025-03-05-release-20253.markdown new file mode 100644 index 00000000000..36a31435c1a --- /dev/null +++ b/source/_posts/2025-03-05-release-20253.markdown @@ -0,0 +1,930 @@ +--- +layout: post +title: "2025.3: View those headers!" +description: "Beautiful dashboard view headers, tons of tile card improvements and new features, better map clustering, Assist now streams responses, and integrating with SmartThings is now better than ever!" +date: 2025-03-05 00:01:00 +date_formatted: "March 5, 2025" +author: Franck Nijhof +author_twitter: frenck +comments: true +categories: + - Release-Notes + - Core +og_image: /images/blog/2025-03/social.jpg +--- + + + +Home Assistant 2025.3! 🎉 + +But! Before I dive into the release, let me quickly catch you up on things you +might have missed. There is a lot of cool stuff happening lately! + +We had a live stream about Assist: [**Voice chapter 9**](https://www.youtube.com/watch?v=k6VvzDSI8RU)! +Here we announced [**Speech-to-Phrase**](/blog/2025/02/13/voice-chapter-9-speech-to-phrase/#voice-for-the-masses), +a voice recognition technology that is blazing fast and super accurate, even +on a Raspberry Pi! 🚀 + +I'm also super stoked [about the announcement](/blog/2025/02/27/apollo-joins-wwha/) +that [**Apollo Automation**](https://apolloautomation.com/) has joined the +[**Works with Home Assistant**](https://partner.home-assistant.io) program 🥰 + +And our friends at [**Music Assistant**](https://www.music-assistant.io/) have +[**shipped their next big hit**](/blog/2025/03/05/music-assistants-next-big-hit/)! +With awesome new features like Spotify Connect, Assist optimization, +an equalizer, and podcast & audiobook support. 🎶 + +Great stuff, right? But this release today is also packed with amazing things! + +After a few releases [focusing on backups](/blog/2025/02/05/release-20252/), +we are back with a release **packed** with new features and improvements, +mostly **focusing on dashboards**! 🤩 + +The new abilities, the tile card's fine-tuning, and the dashboard view's new +headers are really cool; I can’t wait to see screenshots of your dashboards +with these new features! 📸 + +Enjoy the release! + +../Frenck + + + +- [Dashboard view headers](#dashboard-view-headers) +- [Tile cards](#tile-cards) + - [Making tile card interactions clearer](#making-tile-card-interactions-clearer) + - [Position tile card features](#position-tile-card-features) + - [New tile card features](#new-tile-card-features) + - [Switch toggle](#switch-toggle) + - [Counter actions](#counter-actions) + - [Tiny interaction improvements](#tiny-interaction-improvements) + - [Editor improvements](#editor-improvements) +- [Assist chat now has streaming responses](#assist-chat-now-has-streaming-responses) +- [Integrations](#integrations) + - [New integrations](#new-integrations) + - [Noteworthy improvements to existing integrations](#noteworthy-improvements-to-existing-integrations) + - [SmartThings](#smartthings) +- [Other noteworthy changes](#other-noteworthy-changes) +- [Iterating on the legends of graphs](#iterating-on-the-legends-of-graphs) +- [Grouping/clustering of trackables on the maps](#groupingclustering-of-trackables-on-the-maps) +- [Patch releases](#patch-releases) + - [2025.3.1 - March 7](#202531---march-7) + - [2025.3.2 - March 11](#202532---march-11) + - [2025.3.3 - March 14](#202533---march-14) + - [2025.3.4 - March 21](#202534---march-21) +- [Need help? Join the community!](#need-help-join-the-community) +- [Backward-incompatible changes](#backward-incompatible-changes) +- [All changes](#all-changes) + +## Dashboard view headers + +This release brings a whole new look with the ability to add headers to your +dashboards. This allows you to add a title and welcoming text to your dashboards +using Markdown and even templates. Additionally, this gives you a lot of space +for badges next to the header. + +As always, we’ve baked in a lot of customization, with the ability to align the +header in multiple different ways. It comes with a responsive layout by default, +but you can also set it to always be left-aligned or center-aligned. + +Screenshot showing the new header feature in the dashboard view. + +The badges can also be positioned below the text (default) or above the text. A +great visual menu makes it easy to choose how you want to organize your header. + +## Tile cards + +This release has made many improvements and fine touches to the tile card. It +is one of the most versatile cards in Home Assistant, +and we have made it even better! + +### Making tile card interactions clearer + +There is no doubt the tile card can do a lot, but ever since its creation, +it has had a little flaw that you might have run into yourself… + +How would you know if tapping the icon on the tile card would trigger +an action or whether it would just display more information? We have addressed +this with some subtle visual language in this release! + +Screenshot showing tile cards with and without direct actions on their icons. The ones that do have a direct action have a circular background, others don't. + +When tapping the icon on the tile card directly performs an action, +like for example, turning on a light, the icon will have a circular background +around it. In all other cases, the little circle will not be displayed. + +Now you know! 👍 + +### Position tile card features + +Since [we added support for resizing cards](/blog/2024/07/03/release-20247/#resize-the-cards-on-your-dashboard), +we gained the ability to make very wide tile cards. These cards have a lot of +empty space surrounding them, which can be helpful at times. + +But what if you could do something useful with that space? Now you can! +All features of a tile card can now be positioned inline in the tile card! + +Screenshot showcasing the new inline tile card features (versus the existing bottom feature + +This brings a completely new look and feel, which we are sure you will love! +From the settings, you can add a feature, like a brightness slider, and position +it either below (bottom) or to the right side of the icon (inline). + +{% note %} +Only the first feature can be positioned inline; the rest will not be displayed. +{% endnote %} + +### New tile card features + +This release also ships with two new tile card features that can be +added to your entities to provide new controls. [@jpbede] contributed these, +so a big shout out to him! + +[@jpbede]: https://github.com/jpbede + +#### Switch toggle + +The first addition is one that is just surprising we didn't have it before: +A switch toggle! This allows you to toggle a switch entity directly from the +tile card. + +Screenshot showing the new tile card feature for switch entities. + +#### Counter actions + +The second addition is a counter toggle. This allows you to add a button to +increase, decrease, or reset a counter entity directly from the tile card. + +Screenshot showing the new tile card feature for counter helper entities. + +### Tiny interaction improvements + +More tweaks to the tile card have been made to improve their interaction +experience. For example, we now have nice little animations when you hover over +the tile card, making it more apparent that it is interactive. Still, when you +tap the tile card, it will show a little animation to indicate that the +tap was registered. + +
+Screenrecording showing the new tiny micro interactions added to the tile card and a small demo of using keyboard navigation +
+ +Another nice addition is that the tile card can now interact with your keyboard! +Tab and shift + tab your way across the screen like the keyboard warrior you are. + +### Editor improvements + +Not just the tile card itself has been improved, but also the editor for +the tile card has been improved. It is now clearer and easier to use. + +The new control gives you a better overview of what the option will do for +the tile card. + +Screenshot showing the brand new visual card editor that make it more visually clear what options do. + +## Assist chat now has streaming responses + +If you have hooked up an LLM, like ChatGPT, to your Assist as +a conversation agent, it will now livestream the responses to you when +you are text chatting with it! + +When experimenting with larger models, or on slower hardware, LLM’s can feel +sluggish. They only respond once the entire reply is generated, which can take +frustratingly long for lengthy responses (you’ll be waiting a while if you ask +it to tell you an epic fairy tale). + +We've added support for LLMs to stream their response to the text chat, allowing you +to start reading while the response is being generated. A bonus side effect is +that commands are now also faster: they will be executed as soon as they come +in, without waiting for the rest of the message to be complete. + + + +There was quite a lot more to tell around Assist and the new voice features; +in case you missed it, you can read all about it in this blog post: + +📰 [Speech-to-Phrase brings voice home - Voice chapter 9](/blog/2025/02/13/voice-chapter-9-speech-to-phrase/) + +## Integrations + +Thanks to our community for keeping pace with the new {% term integrations %} +and improvements to existing ones! You’re all awesome 🥰 + +### New integrations + +We welcome the following new integrations in this release: + +- **[Azure Storage]**, added by [@zweckj] + Use Azure Storage as a target location for your backups. +- **[IOmeter]**, added by [@MaestroOnICe] + Read out your [IOmeter device] data locally. +- **[PG LAB Electronics]**, added by [@pglab-electronics] + Control your [PG LAB Electronics devices] from Home Assistant. +- **[SensorPush Cloud]**, added by [@sstallion] + Integrate your [SensorPush devices] with Home Assistant, using their + cloud service. +- **[SNOO]**, added by [@Lash-L] + Get the state of your [SNOO Smart Sleeper Bassinet] into Home Assistant. +- **[WebDAV]**, added by [@jpbede] + Use any WebDAV compatible service as a target location for your backups. + +[@jpbede]: https://github.com/jpbede +[@Lash-L]: https://github.com/Lash-L +[@MaestroOnICe]: https://github.com/MaestroOnICe +[@pglab-electronics]: https://githb.com/pglab-electronics +[@sstallion]: https://github.com/sstallion +[@zweckj]: https://github.com/zweckj +[Azure Storage]: /integrations/azure_storage +[IOmeter device]: https://iometer.de/produkt/ +[IOmeter]: /integrations/iometer +[PG LAB Electronics devices]: https://www.pglab.dev/ +[PG LAB Electronics]: /integrations/pglab +[SensorPush Cloud]: /integrations/sensorpush_cloud +[SensorPush devices]: https://www.sensorpush.com/ +[SNOO Smart Sleeper Bassinet]: https://www.happiestbaby.com/ +[SNOO]: /integrations/snoo +[WebDAV]: /integrations/webdav + +This release also has new virtual integrations. Virtual integrations +are stubs that are handled by other (existing) integrations to help with +findability. These ones are new: + +- **[Burbank Water and Power (BWP)]**, provided by [Opower], added by [@tronikos] +- **[Heicko]**, provided by [Motionblinds], added by [@starkillerOG] +- **[LINAK]**, provided by [Idasen Desk], added by [@abmantis] +- **[Linx]**, provided by [Motionblinds], added by [@starkillerOG] +- **[Smart Rollos]**, provided by [Motionblinds], added by [@starkillerOG] +- **[Ublockout]**, provided by [Motionblinds], added by [@starkillerOG] + +[@abmantis]: https://github.com/abmantis +[@starkillerOG]: https://github.com/starkillerOG +[@tronikos]: https://github.com/tronikos +[Burbank Water and Power (BWP)]: /integrations/burbank_water_and_power +[Heicko]: /integrations/heicko +[Idasen Desk]: /integrations/idasen_desk +[LINAK]: /integrations/linak +[Linx]: /integrations/linx +[Motionblinds]: /integrations/motionblinds +[Opower]: /integrations/opower +[Smart Rollos]: /integrations/smart_rollos +[Ublockout]: /integrations/ublockout + +### Noteworthy improvements to existing integrations + +It is not just new {% term integrations %} that have been added; existing +integrations are also being constantly improved. Here are some of the noteworthy +changes to existing integrations: + +- [@MartinHjelmare] and [@Diegorro98] have been putting in a lot of effort to bring + the [Home Connect integration] to the next level. Nice! +- Got an [ESPHome] device that is acting up? [@bdraco] has added a new option + to the integration to let Home Assistant shadowlog the device logs. + Helpful! +- The [OpenAI conversation integration] now supports the `o1`, `o1-preview`, + `o1-mini`, and `o3-mini` reasoning models. Thanks, [@Shulyaka]! +- The [Shelly integration] now supports the 4th generation of the Shelly Flood + sensors and added support for Shelly script events entities. + Thanks, [@chemelli74] and [@wjtje]! +- Support for the [Switchbot Remote] has been added to the + [Switchbot integration]. Thanks, [@awahlig]! +- UniFi version 9 introduced zone-based rules. These are now supported by + [Unifi integration]. Thanks, [@Samywamy10]! +- [@Galorhallen] has added support for effects in [Govee lights]. Nice! + +[@awahlig]: https://github.com/awahlig +[@bdraco]: https://github.com/bdraco +[@chemelli74]: https://github.com/chemelli74 +[@Diegorro98]: https://github.com/Diegorro98 +[@Galorhallen]: https://github.com/Galorhallen +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@Samywamy10]: https://github.com/Samywamy10 +[@Shulyaka]: https://github.com/Shulyaka +[@wjtje]: https://github.com/wjtje +[ESPhome]: /integrations/esphome +[Govee lights]: /integrations/govee_light_local +[Home Connect integration]: /integrations/home_connect +[OpenAI conversation integration]: /integrations/openai_conversation +[Switchbot integration]: /integrations/switchbot +[Switchbot Remote]: https://eu.switch-bot.com/products/switchbot-Remote +[UniFi integration]: /integrations/unifi +[Shelly integration]: /integrations/shelly + +### SmartThings + +The [SmartThings] integration has been completely rewritten! 🎉 In December, +SmartThings shut down the old authentication method, but thanks to +SmartThings' hard work and close collaboration with us, [@joostlek] was able to +bring back the integration—better than ever. + +No more setting up routing, exposing ports, or creating developer accounts with +access tokens—**just log in with your Samsung account**, and you’re good to go! + +And there’s more! Push updates now work without exposing your instance to the +internet, making the experience faster, seamless, and more secure! 🚀 + +A huge shoutout to our amazing community, who played a key role in this effort! +💙 When [@joostlek] shared a guide on gathering test data, the community +stepped up—sending in valuable test data that helped fine-tune the integration. +This collaboration truly made a difference! + +[@joostlek]: https://github.com/joostlek +[SmartThings]: /integrations/smartthings + +## Other noteworthy changes + +There are many more improvements in this release; here are some of the other +noteworthy changes this release: + +- Ever upgraded Home Assistant and needed to do a hard refresh in your + browser to make it work again? We have been able to reduce the cases in + which this happens! Thanks, [@bramkragten]! +- [@balloob] made a small change with a big impact. When you set up a new + integration for a new device, Home Assistant will now redirect you to the + device page after setting it up. Nice! +- There is now an option to add an extra margin to the top of a section view. + Thanks, [@piitaya]! +- The add/edit area dialog has been improved and compacted. They are + much more pleasant to use now. Thanks, [@jpbede]! +- We now have a device class for the wind direction sensors! Thanks, [@edenhaus]! +- [@jschlyter] has added the energy distance device class for sensors, + which supports the following units: `kWh/100mi`, `kWh/100km`, and `mi/kWh`, + including conversion between them. Awesome! +- Media player entities that support browsing media now have a new action + available to [browse media as an action with a response]. Thanks, [@PeteRager]! +- [@rikroe] has added an action to [retrieve the configuration of a schedule + helper]. Thanks! + +[@balloob]: https://github.com/balloob +[@bramkragten]: https://github.com/bramkragten +[@edenhaus]: https://github.com/edenhaus +[@jpbede]: https://github.com/jpbede +[@jschlyter]: https://github.com/jschlyter +[@PeteRager]: https:/github.com/PeteRager +[@piitaya]: https://github.com/piitaya +[@rikroe]: https://github.com/rikroe +[browse media as an action with a response]: /integrations/media_player#action-media_playerbrowse_media +[retrieve the configuration of a schedule helper]: /integrations/schedule#action-scheduleget_schedule + +## Iterating on the legends of graphs + +Last release, we made [quite a big change to the charts](/blog/2025/02/05/release-20252/#preparing-our-graphs-for-the-future) +by replacing the software we use to make these graphs in Home Assistant. Things +changed behind the scenes, but our aim to start was to make it look +and feel similar. + +However, we received a lot of feedback from the community that the legends shown +on the new graphs were suboptimal. Our UX and frontend teams have been working +hard to improve this situation and make the new graph legends more similar +to the old ones. + +
+A screen recording showing expanding and collapsing the legend +
+ +By default, we show the legend below the graph and show as many data points +as possible. If there are too many, they will be displayed on demand using the +little ellipsis button. + +When using these cards on your dashboard, if you want to always show the full +legend, a new option will allow you to keep it fully visible. + +You can now also zoom in and out, by double clicking on a graph. If you want +more control over the range you want to view in your graph, you can press the +ctrl/cmd key and then select the range on the graph you want to zoom in on. + +## Grouping/clustering of trackables on the maps + +The map card is perfect for visualizing your entities’ locations, but when too +many cluster together in the same spot, it can get a bit cluttered. + +To tackle this, we’ve introduced marker clustering, which groups nearby entities +together, making it easier to see them at a glance. When zooming in, the markers +‘spider’ out, showing individual entity locations with a connecting line to +their original positions. You can temporarily disable clustering with a +simple toggle. + +Thanks [@jpbede] and [@marcinbauer85] for this awesome improvement! + +
+The map now nicely clusters the items on the same location. This animation shows the ability to expand the cluster of items. +
+ +[@jpbede]: https://github.com/jpbede +[@marcinbauer85]: https://github.com/marcinbauer85 + +## Patch releases + +We will also release patch releases for Home Assistant 2025.3 in March. +These patch releases only contain bug fixes. Our goal is to release a patch +release every Friday. + +### 2025.3.1 - March 7 + +- Check support for demand load control in SmartThings AC ([@Ishima] - [#139616]) +- Fix Unit of Measurement for Squeezebox duration sensor entity on LMS service ([@peteS-UK] - [#139861]) +- Trim the Schema allowed keys to match the Public Gemini API docs. ([@IvanLH] - [#139876]) +- Bump thermobeacon-ble to 0.8.1 ([@bdraco] - [#139919]) +- Deduplicate climate modes in SmartThings ([@joostlek] - [#139930]) +- Check if the unit of measurement is valid before creating the entity ([@jbouwh] - [#139932]) +- Bump pysmartthings to 2.6.1 ([@joostlek] - [#139936]) +- Bump aiowebdav2 to 0.4.0 ([@jpbede] - [#139938]) +- Add config entry level diagnostics to SmartThings ([@joostlek] - [#139939]) +- Set content length when uploading files to WebDAV ([@jpbede] - [#139950]) +- Bump to python-snoo 0.6.1 ([@Lash-L] - [#139954]) +- Fix SmartThings fan ([@joostlek] - [#139962]) +- Update frontend to 20250306.0 ([@bramkragten] - [#139965]) +- Fix SmartThings dust sensor UoM ([@joostlek] - [#139977]) +- Bump nexia to 2.2.2 ([@bdraco] - [#139986]) +- Bump aiowebdav2 to 0.4.1 ([@jpbede] - [#139988]) +- Correctly retrieve only loaded Google Generative AI config_entries ([@IvanLH] - [#139999]) +- Fix regression to evohome debug logging ([@zxdavb] - [#140000]) +- Check operation state on Home Connect program sensor update ([@Diegorro98] - [#140011]) +- Bump aiohomeconnect to 0.16.3 ([@MartinHjelmare] - [#140014]) +- Fix powerwall 0% in Tessie and Tesla Fleet ([@Bre77] - [#140017]) +- Fix shift state default in Teslemetry and Tessie ([@Bre77] - [#140018]) +- Add description for HomematicIP HCU1 in homematicip_cloud setup config flow ([@hahn-th] - [#140025]) +- Fix evohome to gracefully handle null schedules ([@zxdavb] - [#140036]) +- Fix SmartThings disabling working capabilities ([@joostlek] - [#140039]) +- Fix SmartThings thermostat climate check ([@joostlek] - [#140046]) +- Bump pysmartthings to 2.7.0 ([@joostlek] - [#140047]) +- Only keep valid powerConsumptionReports in SmartThings ([@joostlek] - [#140049]) +- Bump py-synologydsm-api to 2.7.1 ([@mib1185] - [#140052]) +- Restore SmartThings button event ([@joostlek] - [#140044]) + +[#139616]: https://github.com/home-assistant/core/pull/139616 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#139861]: https://github.com/home-assistant/core/pull/139861 +[#139876]: https://github.com/home-assistant/core/pull/139876 +[#139919]: https://github.com/home-assistant/core/pull/139919 +[#139930]: https://github.com/home-assistant/core/pull/139930 +[#139932]: https://github.com/home-assistant/core/pull/139932 +[#139936]: https://github.com/home-assistant/core/pull/139936 +[#139938]: https://github.com/home-assistant/core/pull/139938 +[#139939]: https://github.com/home-assistant/core/pull/139939 +[#139950]: https://github.com/home-assistant/core/pull/139950 +[#139954]: https://github.com/home-assistant/core/pull/139954 +[#139962]: https://github.com/home-assistant/core/pull/139962 +[#139965]: https://github.com/home-assistant/core/pull/139965 +[#139977]: https://github.com/home-assistant/core/pull/139977 +[#139986]: https://github.com/home-assistant/core/pull/139986 +[#139988]: https://github.com/home-assistant/core/pull/139988 +[#139999]: https://github.com/home-assistant/core/pull/139999 +[#140000]: https://github.com/home-assistant/core/pull/140000 +[#140011]: https://github.com/home-assistant/core/pull/140011 +[#140014]: https://github.com/home-assistant/core/pull/140014 +[#140017]: https://github.com/home-assistant/core/pull/140017 +[#140018]: https://github.com/home-assistant/core/pull/140018 +[#140025]: https://github.com/home-assistant/core/pull/140025 +[#140036]: https://github.com/home-assistant/core/pull/140036 +[#140039]: https://github.com/home-assistant/core/pull/140039 +[#140044]: https://github.com/home-assistant/core/pull/140044 +[#140046]: https://github.com/home-assistant/core/pull/140046 +[#140047]: https://github.com/home-assistant/core/pull/140047 +[#140049]: https://github.com/home-assistant/core/pull/140049 +[#140052]: https://github.com/home-assistant/core/pull/140052 +[@Bre77]: https://github.com/Bre77 +[@Diegorro98]: https://github.com/Diegorro98 +[@Ishima]: https://github.com/Ishima +[@IvanLH]: https://github.com/IvanLH +[@Lash-L]: https://github.com/Lash-L +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@bdraco]: https://github.com/bdraco +[@bramkragten]: https://github.com/bramkragten +[@frenck]: https://github.com/frenck +[@hahn-th]: https://github.com/hahn-th +[@jbouwh]: https://github.com/jbouwh +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede +[@mib1185]: https://github.com/mib1185 +[@peteS-UK]: https://github.com/peteS-UK +[@zxdavb]: https://github.com/zxdavb + +### 2025.3.2 - March 11 + +- Don't allow creating backups if Home Assistant is not running ([@emontnemery] - [#139499]) +- Bump govee_ble to 0.43.1 ([@moosilauke18] - [#139862]) +- Label emergency heat switch ([@jrhillery] - [#139872]) +- Bump sense-energy lib to 0.13.7 ([@kbickar] - [#140068]) +- Update jinja to 3.1.6 ([@frenck] - [#140069]) +- Update evohome-async to 1.0.3 ([@zxdavb] - [#140083]) +- Fix HEOS discovery error when previously ignored ([@andrewsayre] - [#140091]) +- Map prewash job state in SmartThings ([@joostlek] - [#140097]) +- Check support for thermostat operating state in SmartThings ([@joostlek] - [#140103]) +- Handle None options in SmartThings ([@joostlek] - [#140110]) +- Fix MQTT JSON light not reporting color temp status if color is not supported ([@jbouwh] - [#140113]) +- Fix HEOS user initiated setup when discovery is waiting confirmation ([@andrewsayre] - [#140119]) +- Support null supported Thermostat modes in SmartThings ([@joostlek] - [#140101]) +- Set device class for Oven Completion time in SmartThings ([@joostlek] - [#140139]) +- Revert "Check if the unit of measurement is valid before creating the entity" ([@jbouwh] - [#140155]) +- Fix the order of the group members attribute of the Music Assistant integration ([@msm595] - [#140204]) +- Fix events without user in Bring integration ([@tr4nt0r] - [#140213]) +- Log broad exception in Electricity Maps config flow ([@jpbede] - [#140219]) +- Bump evohome-async to 1.0.4 to fix #140194 ([@zxdavb] - [#140230]) +- Refresh Home Connect token during config entry setup ([@Diegorro98] - [#140233]) +- Add 900 RPM option to washer spin speed options at Home Connect ([@Diegorro98] - [#140234]) +- Fix todo tool broken with Gemini 2.0 models. ([@Lash-L] - [#140246]) +- Fix version not always available in onewire ([@epenet] - [#140260]) +- Fix `client_id` not generated when connecting to the MQTT broker ([@jbouwh] - [#140264]) +- Bump velbusaio to 2025.3.0 ([@cereal2nd] - [#140267]) +- Fix dryer operating state in SmartThings ([@joostlek] - [#140277]) +- FGLair : Upgrade to ayla-iot-unofficial 1.4.7 ([@crevetor] - [#140296]) +- Bump pyheos to v1.0.3 ([@andrewsayre] - [#140310]) +- Bump ZHA to 0.0.52 ([@puddly] - [#140325]) +- Bump pydrawise to 2025.3.0 ([@dknowles2] - [#140330]) +- Bump teslemetry-stream ([@Bre77] - [#140335]) +- Fix no temperature unit in SmartThings ([@joostlek] - [#140363]) +- Fix double space quoting in WebDAV ([@jpbede] - [#140364]) +- Bump python-roborock to 2.12.2 ([@Lash-L] - [#140368]) +- Handle incomplete power consumption reports in SmartThings ([@joostlek] - [#140370]) +- Fix browsing Audible Favorites in Sonos ([@PeteRager] - [#140378]) +- Make sure SmartThings light can deal with unknown states ([@joostlek] - [#140190]) +- Delete subscription on shutdown of SmartThings ([@joostlek] - [#140135]) + +[#139499]: https://github.com/home-assistant/core/pull/139499 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#139862]: https://github.com/home-assistant/core/pull/139862 +[#139872]: https://github.com/home-assistant/core/pull/139872 +[#140061]: https://github.com/home-assistant/core/pull/140061 +[#140068]: https://github.com/home-assistant/core/pull/140068 +[#140069]: https://github.com/home-assistant/core/pull/140069 +[#140083]: https://github.com/home-assistant/core/pull/140083 +[#140091]: https://github.com/home-assistant/core/pull/140091 +[#140097]: https://github.com/home-assistant/core/pull/140097 +[#140101]: https://github.com/home-assistant/core/pull/140101 +[#140103]: https://github.com/home-assistant/core/pull/140103 +[#140110]: https://github.com/home-assistant/core/pull/140110 +[#140113]: https://github.com/home-assistant/core/pull/140113 +[#140119]: https://github.com/home-assistant/core/pull/140119 +[#140135]: https://github.com/home-assistant/core/pull/140135 +[#140139]: https://github.com/home-assistant/core/pull/140139 +[#140155]: https://github.com/home-assistant/core/pull/140155 +[#140190]: https://github.com/home-assistant/core/pull/140190 +[#140204]: https://github.com/home-assistant/core/pull/140204 +[#140213]: https://github.com/home-assistant/core/pull/140213 +[#140219]: https://github.com/home-assistant/core/pull/140219 +[#140230]: https://github.com/home-assistant/core/pull/140230 +[#140233]: https://github.com/home-assistant/core/pull/140233 +[#140234]: https://github.com/home-assistant/core/pull/140234 +[#140246]: https://github.com/home-assistant/core/pull/140246 +[#140260]: https://github.com/home-assistant/core/pull/140260 +[#140264]: https://github.com/home-assistant/core/pull/140264 +[#140267]: https://github.com/home-assistant/core/pull/140267 +[#140277]: https://github.com/home-assistant/core/pull/140277 +[#140296]: https://github.com/home-assistant/core/pull/140296 +[#140310]: https://github.com/home-assistant/core/pull/140310 +[#140325]: https://github.com/home-assistant/core/pull/140325 +[#140330]: https://github.com/home-assistant/core/pull/140330 +[#140335]: https://github.com/home-assistant/core/pull/140335 +[#140363]: https://github.com/home-assistant/core/pull/140363 +[#140364]: https://github.com/home-assistant/core/pull/140364 +[#140368]: https://github.com/home-assistant/core/pull/140368 +[#140370]: https://github.com/home-assistant/core/pull/140370 +[#140378]: https://github.com/home-assistant/core/pull/140378 +[@Bre77]: https://github.com/Bre77 +[@Diegorro98]: https://github.com/Diegorro98 +[@Lash-L]: https://github.com/Lash-L +[@PeteRager]: https://github.com/PeteRager +[@andrewsayre]: https://github.com/andrewsayre +[@cereal2nd]: https://github.com/cereal2nd +[@crevetor]: https://github.com/crevetor +[@dknowles2]: https://github.com/dknowles2 +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@frenck]: https://github.com/frenck +[@jbouwh]: https://github.com/jbouwh +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede +[@jrhillery]: https://github.com/jrhillery +[@kbickar]: https://github.com/kbickar +[@moosilauke18]: https://github.com/moosilauke18 +[@msm595]: https://github.com/msm595 +[@puddly]: https://github.com/puddly +[@tr4nt0r]: https://github.com/tr4nt0r +[@zxdavb]: https://github.com/zxdavb + +### 2025.3.3 - March 14 + +- Fix bug with all Roborock maps being set to the wrong map when empty ([@Lash-L] - [#138493]) +- Bump pysuezV2 to 2.0.4 ([@jb101010-2] - [#139824]) +- Bump upb-lib to 0.6.1 ([@gwww] - [#140212]) +- Use only IPv4 for zeroconf in bluesound integration ([@LouisChrist] - [#140226]) +- Only do WebDAV path migration when path differs ([@jpbede] - [#140402]) +- Bump velbusaio to 2025.3.1 ([@cereal2nd] - [#140443]) +- Mark value in number.set_value action as required ([@joostlek] - [#140445]) +- Bump Tesla Fleet API to 0.9.13 ([@Bre77] - [#140485]) +- Update xknxproject to 3.8.2 ([@farmio] - [#140499]) +- Fix Shelly diagnostics for devices without WebSocket Outbound support ([@bieniu] - [#140501]) +- Fix windowShadeLevel capability in SmartThings ([@joostlek] - [#140552]) +- Set unit of measurement for SmartThings oven setpoint ([@joostlek] - [#140560]) +- Fix missing UnitOfPower.MILLIWATT in sensor and number allowed units ([@ashionky] - [#140567]) + +[#138493]: https://github.com/home-assistant/core/pull/138493 +[#139824]: https://github.com/home-assistant/core/pull/139824 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#140061]: https://github.com/home-assistant/core/pull/140061 +[#140212]: https://github.com/home-assistant/core/pull/140212 +[#140226]: https://github.com/home-assistant/core/pull/140226 +[#140392]: https://github.com/home-assistant/core/pull/140392 +[#140402]: https://github.com/home-assistant/core/pull/140402 +[#140443]: https://github.com/home-assistant/core/pull/140443 +[#140445]: https://github.com/home-assistant/core/pull/140445 +[#140485]: https://github.com/home-assistant/core/pull/140485 +[#140499]: https://github.com/home-assistant/core/pull/140499 +[#140501]: https://github.com/home-assistant/core/pull/140501 +[#140552]: https://github.com/home-assistant/core/pull/140552 +[#140560]: https://github.com/home-assistant/core/pull/140560 +[#140567]: https://github.com/home-assistant/core/pull/140567 +[@Bre77]: https://github.com/Bre77 +[@Lash-L]: https://github.com/Lash-L +[@LouisChrist]: https://github.com/LouisChrist +[@ashionky]: https://github.com/ashionky +[@bieniu]: https://github.com/bieniu +[@cereal2nd]: https://github.com/cereal2nd +[@farmio]: https://github.com/farmio +[@frenck]: https://github.com/frenck +[@gwww]: https://github.com/gwww +[@jb101010-2]: https://github.com/jb101010-2 +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede + +### 2025.3.4 - March 21 + +- Fix initial fetch of Home Connect appliance data to handle API rate limit errors ([@Diegorro98] - [#139379]) +- Handle API rate limit error on Home Connect entities fetch ([@Diegorro98] - [#139384]) +- Album art not available for Sonos media library favorites ([@PeteRager] - [#140557]) +- Change max ICP value to fixed value for Wallbox Integration ([@hesselonline] - [#140592]) +- Add 700 RPM option to washer spin speed options at Home Connect ([@Diegorro98] - [#140607]) +- Handle non documented options at Home Connect select entities ([@Diegorro98] - [#140608]) +- Fix optional password in Velbus config flow ([@cereal2nd] - [#140615]) +- Make Oven setpoint follow temperature UoM in SmartThings ([@joostlek] - [#140666]) +- Fix Elk-M1 missing TLS 1.2 check ([@gwww] - [#140672]) +- Bump PySwitchBot to 0.57.1 ([@bdraco] - [#140681]) +- Check Celsius in SmartThings oven setpoint ([@joostlek] - [#140687]) +- Fix broken core integration Smart Meter Texas by switching it to use HA's SSL Context ([@adamfeldman] - [#140694]) +- Don't reload onedrive on options flow ([@zweckj] - [#140712]) +- Bump pySmartThings to 2.7.4 ([@joostlek] - [#140720]) +- Fix SmartThings ACs without supported AC modes ([@joostlek] - [#140744]) +- Bump pylamarzocco to 1.4.9 ([@zweckj] - [#140916]) +- Log SmartThings subscription error on exception ([@joostlek] - [#140939]) +- Ensure file is correctly uploaded by the GenAI SDK ([@IvanLH] - [#140969]) +- Reolink fix playback headers ([@starkillerOG] - [#141015]) +- Fix some Home Connect options keys ([@Diegorro98] - [#141023]) +- Bump ZHA to 0.0.53 ([@puddly] - [#141025]) +- Bump Python-Snoo to 0.6.3 ([@Lash-L] - [#140628]) +- Bump python-snoo to 0.6.4 ([@Lash-L] - [#141030]) +- Improve Home Connect appliances test fixture ([@MartinHjelmare] - [#139787]) + +[#139379]: https://github.com/home-assistant/core/pull/139379 +[#139384]: https://github.com/home-assistant/core/pull/139384 +[#139787]: https://github.com/home-assistant/core/pull/139787 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#140061]: https://github.com/home-assistant/core/pull/140061 +[#140392]: https://github.com/home-assistant/core/pull/140392 +[#140557]: https://github.com/home-assistant/core/pull/140557 +[#140583]: https://github.com/home-assistant/core/pull/140583 +[#140592]: https://github.com/home-assistant/core/pull/140592 +[#140607]: https://github.com/home-assistant/core/pull/140607 +[#140608]: https://github.com/home-assistant/core/pull/140608 +[#140615]: https://github.com/home-assistant/core/pull/140615 +[#140628]: https://github.com/home-assistant/core/pull/140628 +[#140666]: https://github.com/home-assistant/core/pull/140666 +[#140672]: https://github.com/home-assistant/core/pull/140672 +[#140681]: https://github.com/home-assistant/core/pull/140681 +[#140687]: https://github.com/home-assistant/core/pull/140687 +[#140694]: https://github.com/home-assistant/core/pull/140694 +[#140712]: https://github.com/home-assistant/core/pull/140712 +[#140720]: https://github.com/home-assistant/core/pull/140720 +[#140744]: https://github.com/home-assistant/core/pull/140744 +[#140916]: https://github.com/home-assistant/core/pull/140916 +[#140939]: https://github.com/home-assistant/core/pull/140939 +[#140969]: https://github.com/home-assistant/core/pull/140969 +[#141015]: https://github.com/home-assistant/core/pull/141015 +[#141023]: https://github.com/home-assistant/core/pull/141023 +[#141025]: https://github.com/home-assistant/core/pull/141025 +[#141030]: https://github.com/home-assistant/core/pull/141030 +[@Diegorro98]: https://github.com/Diegorro98 +[@IvanLH]: https://github.com/IvanLH +[@Lash-L]: https://github.com/Lash-L +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@PeteRager]: https://github.com/PeteRager +[@adamfeldman]: https://github.com/adamfeldman +[@bdraco]: https://github.com/bdraco +[@cereal2nd]: https://github.com/cereal2nd +[@frenck]: https://github.com/frenck +[@gwww]: https://github.com/gwww +[@hesselonline]: https://github.com/hesselonline +[@joostlek]: https://github.com/joostlek +[@puddly]: https://github.com/puddly +[@starkillerOG]: https://github.com/starkillerOG +[@zweckj]: https://github.com/zweckj + +## 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 + +We do our best to avoid making changes to existing functionality that might +unexpectedly impact your Home Assistant installation. Unfortunately, sometimes, +it is inevitable. + +We always make sure to document these changes to make the transition as easy as +possible for you. This release has the following backward-incompatible changes: + +{% details "Automations & scripts" %} + +The `wait` variable and variables defined by a `response_variable` set in an +inner scope of a script or automation now propagate to outer scopes also if +a `variables` action is present in the inner scope. + +Furthermore, variables defined by a `response_variable` now also propagate +out from `parallel` sequences. Scripts and automations which relied on the +older (buggy) behavior might need to be adjusted. + +([@arturpragacz] - [#138883]) + +[@arturpragacz]: https://github.com/jrieger +[#138883]: https://github.com/home-assistant/core/pull/138883 + +{% enddetails %} + +{% details "GPSD" %} + +All state attributes of the main sensor were replaced with a dedicated sensor +Home Assistant in 2024.9. The deprecated attributes have now been removed. + +([@jrieger] - [#137600]) ([documentation](/integrations/gpsd)) + +[@jrieger]: https://github.com/jrieger +[#137600]: https://github.com/home-assistant/core/pull/137600 + +{% enddetails %} + +{% details "Home Connect" %} + +Some programs and program switches (which are being deprecated) and program +select entities may not be exposed anymore by the integration as they are +missing an `aiohomeconnect` program key enumeration ([file](https://github.com/MartinHjelmare/aiohomeconnect/blob/ccfbf802884aa781eef481da92e6bccd2e6de733/src/aiohomeconnect/model/program.py#L213C1-L507C6)). +You can get the diagnostics from the configuration entry or the device and open +an issue or submit a PR with the generated diagnostics file on the +[`aiohomeconnect` repository](https://github.com/MartinHjelmare/aiohomeconnect) +to suggest the missing program(s). + +([@Diegorro98] - [#136116]) ([documentation](/integrations/home_connect)) + +[@Diegorro98]: https://github.com/Diegorro98 +[#136116]: https://github.com/home-assistant/core/pull/136116 + +--- + +Using program and option keys that aren't in the API documentation in Home +Connect actions will no longer work. To be able to use undocumented program or +option keys, open an issue or submit a pull request with the required keys at +[MartinHjelmare/aiohomeconnect](https://github.com/MartinHjelmare/aiohomeconnect). + +([@Diegorro98] - [#137027]) ([documentation](/integrations/home_connect)) + +[@Diegorro98]: https://github.com/Diegorro98 +[#137027]: https://github.com/home-assistant/core/pull/137027 + +--- + +Multiple Home Connect config entries will not be allowed to be configured. For +regular users where all appliances in the home are connected to the same Home +Connect account, there should not be any reason to have more than one config +entry since all appliances in the home will be connected to the same account +and config entry. + +([@Diegorro98] - [#137088]) ([documentation](/integrations/home_connect)) + +[@Diegorro98]: https://github.com/Diegorro98 +[#137088]: https://github.com/home-assistant/core/pull/137088 + +{% enddetails %} + +{% details "MQTT" %} + + Legacy `color_mode` support for MQTT JSON lights has been removed. The support + was deprecated in HA Core 2024.4. + +Users with a YAML setup have been instructed to update their configuration in +`configuration.yaml` via repair issue flow. Deprecation issues with MQTT JSON +lights set up through discovery were communicated via warnings in the logs. +Using the removed parameters in discovery will not break the configuration but +will still log a warning. + +([@jbouwh] - [#136996]) ([documentation](/integrations/mqtt)) + +[@jbouwh]: https://github.com/jbouwh +[#136996]: https://github.com/home-assistant/core/pull/136996 + +{% enddetails %} + +{% details "Proximity" %} + +The distance is now measured to the edge of the monitored zones (it takes the +radius into account), instead of to the center of the zone as before. This leads +to slightly different expected distance values, which you may have to adjust +accordingly in your existing automations. + +([@Spcemarine] - [#138819]) ([documentation](/integrations/proximity)) + +[@Spcemarine]: https://github.com/Spcemarine +[#138819]: https://github.com/home-assistant/core/pull/138819 + +{% enddetails %} + +{% details "SmartThings" %} + +The energy and power sensors have been removed for every device that has a +switch. They rarely worked because there were no energy or power +capabilities available to get data from. If you do have the capabilities, +it will still work for you. + +([@joostlek] - [#138313]) ([documentation](/integrations/smartthings)) + +--- + +There are a lot of states that have been renamed; this might need an update in +your automations or other configurations. + +- Set options for dishwasher job state sensor in SmartThings ([#139349]) +- Add translatable states to SmartThings media source input ([#139353]) +- Add translatable states to SmartThings media playback ([#139354]) +- Add translatable states to oven mode in SmartThings ([#139356]) +- Add translatable states to oven job state in SmartThings ([#139361]) +- Add translatable states to robot cleaner movement in SmartThings ([#139363]) +- Add translatable states to robot cleaner turbo mode in SmartThings ([#139364]) +- Add translatable states to washer job state in SmartThings ([#139368]) +- Add translatable states to dryer job state in SmartThings ([#139370]) + + +[@joostlek]: https://github.com/joostlek +[#138313]: https://github.com/home-assistant/core/pull/138313 +[#139349]: https://github.com/home-assistant/core/pull/139349 +[#139353]: https://github.com/home-assistant/core/pull/139353 +[#139354]: https://github.com/home-assistant/core/pull/139354 +[#139356]: https://github.com/home-assistant/core/pull/139356 +[#139361]: https://github.com/home-assistant/core/pull/139361 +[#139363]: https://github.com/home-assistant/core/pull/139363 +[#139364]: https://github.com/home-assistant/core/pull/139364 +[#139368]: https://github.com/home-assistant/core/pull/139368 +[#139370]: https://github.com/home-assistant/core/pull/139370 + +{% enddetails %} + +{% details "Synology DSM" %} + +The scan interval option has been removed, and the default of 15 minutes is +used. If needed, there is an integration-independent and +[common way](/common-tasks/general/#defining-a-custom-polling-interval) +to set a custom polling interval. + +([@mib1185] - [#138490]) ([documentation](/integrations/synology_dsm)) + +[@mib1185]: https://github.com/mib1185 +[#138490]: https://github.com/home-assistant/core/pull/138490 + +{% enddetails %} + +{% details "TechnoVE" %} + +The status sensor state `high_charge_period` was renamed to `high_tariff_period`. + +([@Moustachauve] - [#139314]) ([documentation](/integrations/technove)) + +[@Moustachauve]: https://github.com/Moustachauve +[#139314]: https://github.com/home-assistant/core/pull/139314 + +{% enddetails %} + +If you are a custom integration developer and want to learn about changes and +new features available for your integration: Be sure to follow our +[developer blog][devblog]. The following changes are the most notable for this release: + +- [Backup agents](https://developers.home-assistant.io/blog/2025/02/17/backup-agents) +- [Changed config entry state transitions](https://developers.home-assistant.io/blog/2025/02/19/new-config-entry-states) +- [Changes to the BackupAgent API](https://developers.home-assistant.io/blog/2025/03/04/backup-agent-api-changes) +- [Energy by distance units](https://developers.home-assistant.io/blog/2025/01/31/energy-distance-units) +- [New checks for config flow unique ID](https://developers.home-assistant.io/blog/2025/03/01/config-flow-unique-id/) +- [Relocate dhcp/ssdp/usb/zeroconf ServiceInfo models](https://developers.home-assistant.io/blog/2025/01/15/service-info) +- [Support for config subentries](https://developers.home-assistant.io/blog/2025/02/16/config-subentries) + +[devblog]: https://developers.home-assistant.io/blog/ + +## 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 2025.3](/changelogs/core-2025.3) diff --git a/source/_posts/2025-03-10-matter-certification.markdown b/source/_posts/2025-03-10-matter-certification.markdown new file mode 100644 index 00000000000..1c6398e092e --- /dev/null +++ b/source/_posts/2025-03-10-matter-certification.markdown @@ -0,0 +1,78 @@ +--- +layout: post +title: "Home Assistant officially Matters" +description: "Home Assistant gains certification, but also a powerful tool for any open source project" +date: 2025-03-10 00:00:01 +date_formatted: "March 10, 2025" +author: Marcel van der Veldt +comments: true +categories: + - Announcements + - Matter +og_image: /images/blog/2025-03-matter-certification/art.jpg +--- + +

Home Assistant is officially matter certified

+ +Matter in Home Assistant has been officially certified! 🎉 The Connectivity Standards Alliance (CSA) has certified [Home Assistant](https://csa-iot.org/csa_product/home-assistant/) and the [Open Home Foundation Matter Server](https://csa-iot.org/csa_product/open-home-foundation-matter-server/), the first open-source project to receive this certification. Certification is proof that open source projects can sit among, or even above, big tech when it comes to providing the best smart home experience. + +Home Assistant, as part of the [Open Home Foundation](https://www.openhomefoundation.org/), strongly believes in open standards. They embody our values of choice, privacy, and sustainability in the smart home. When a standard is well supported, consumers get access to a wide range of smart home devices that should work far into the future, which is great for sustainability. Best of all, they work locally, keeping your smart home data in your home. + +All these benefits led us to include open standards certification [in our roadmap](/blog/2024/06/12/roadmap-2024h1/#open-standards-certified-quality). Home Assistant's implementations of Matter, Zigbee, and Z-Wave are already industry-leading, so it only makes sense to clearly signal and give users peace of mind that we provide true compatibility. This most recent certification is not just big for Home Assistant, but read on to see how it also helps any open source project looking to use Matter. + + + +## Matter matters + +

Our live stream from 2024 explains Matter in depth

+ +Matter is the latest smart home open standard, which is looking to connect and control smart home devices regardless of their manufacturer or which ecosystem you want to control them from. Like the other open standards we support, it can be controlled fully locally, meaning these devices are not reliant on the cloud to work. The Connectivity Standards Alliance (CSA) is the body behind the Matter standard, representing its many members. They certify devices and set the rules on how they work together. + +If you're not familiar with Matter, I'm not surprised. Though its adoption is growing, it's only a [couple of years old](https://csa-iot.org/newsroom/matter-arrives/). The most important companies in the smart home space have joined this standard, but support is still growing and becoming more consistent. If it fulfills its promise, any smart home product should work with your ecosystem of choice, and that makes us optimistic about its future. + +More and more Matter devices are entering the market, and if you're buying new smart devices, it will just be a matter of time 😉 before you own one. To this point, Matter devices are even a part of our [Works With Home Assistant](https://partner.home-assistant.io/) program. [Aqara was the first](/blog/2024/09/03/aqara-joins-works-with-home-assistant/) to join our program with Matter devices, and we tested these devices ourselves to ensure they give the best experience possible in Home Assistant. This year, we expect many more Matter devices to join the program, and we should have more updates soon. + +From a technical perspective, Matter is really interesting---it can work with different smart home systems at the same time. It also keeps the way devices connect and communicate separate, allowing it to connect to devices over Wi-Fi, Ethernet, and [Thread](/integrations/thread/) (a new mesh network technology for smart devices). Read our [State of Matter blog](/blog/2024/01/25/matter-livestream-blog/) or watch Paulus' appearance on [the Vergecast Matter Holiday Spec-Tacular](https://youtu.be/0Y75XEXAXfY?si=nSDpP6THkWhkARuc&t=3493) for a deeper dive into the standard. + +## What certification brings + +

Home Assistant Matter certificationWell, this is a bit... awesome

+ +First and foremost, from a usability perspective, nothing will change for you. We are consistently the first to adopt the newest Matter versions, currently providing the highest version available. We'll keep on improving the Matter Server and the Matter integration at the same pace, ensuring that all device types in the Matter spec will work perfectly with Home Assistant---just from now on it will come with this certification badge. + +The [Open Home Foundation Matter Server](https://csa-iot.org/csa_product/open-home-foundation-matter-server/) is now an officially trusted/certified software component, while [Home Assistant](https://csa-iot.org/csa_product/home-assistant/) is a certified "User Interface Component" (more on this distinction below). This allows us to clearly show this with a logo, along with being listed on the Matter website. For new Home Assistant users, this helps build confidence, knowing it is a supported way to use Matter. Similarly, for brands that don't know much about Home Assistant, these references can be surprisingly helpful, and it's our goal to have more brands target Home Assistant in their development. Another handy part of being certified is getting more access to pre-test new devices and SDK revisions, which will help development going forward. + +### Why two certifications (and the server add-on) + +

Open Home Foundation Matter Server is certifiedSo much fun we did it twice

+ +If you're confused why we certified both Home Assistant and Open Home Foundation Matter Server, there are a couple of legal/procedural reasons, but it comes with some useful benefits. We certified the server as a standalone component to allow any project to use it. Each project that uses it, including Home Assistant, will have to go through a certification process to acknowledge that it uses a certified component as a "User Interface Component". Certification for the Open Home Foundation Matter Server means it properly connects and communicates with other Matter devices, while certification for Home Assistant is about being able to display the Matter trademark. + +This separation is important because it means that we won't need to go through recertification every time we update Home Assistant. This way we can keep the Matter-related backend isolated in both a software and certification sense. This is also why we will need to continue to have the Open Home Foundation Matter Server as an add-on, and it cannot be built into [Home Assistant Core](/installation/#advanced-installation-methods). + +## The road to certification + +Becoming Matter certified was not easy. When we started certification, the process was tooled up to test and certify devices, not Matter controllers, let alone completely software-based (and open source) controllers. We chose to collaborate with [Resillion](https://www.resillion.com/services/conformance-interoperability/wireless-product-testing/matter-certification/) for our certification. They are a testing and certification house based in Belgium with a lot of experience certifying Matter products. They do the formal testing and submit the results to the CSA. Together, we collaborated to write thousands of lines of test scripts, ensuring that as many test cases as possible were automated. + +

Marcel van der Veldt at the Resillion labMy visit to Resillion's lab, I brought my own lab coat

+ +We really appreciate Resillion for taking on this challenge. Not only were we the first controller they certified, but we also went for all the device types in the Matter 1.3 specification. This was a huge effort for all involved, but now that these test scripts exist, they only require minor updates for each new version; we can reuse them whenever we need to recertify. + +
+

“At Resillion, we strongly support interoperability in connected home technology, and assure, secure and innovate to help make this technology work for everyone. For us, this was not only a fantastic way to contribute to the Home Assistant open-source project, but also upgrade our own Home Assistant instances with Matter, as enthusiasts of the project running active instances of HA in our own homes.

+

“Working on a controller utilizing the full Matter 1.3 feature set presents a great opportunity to advance HA and Matter, and we look forward to supporting the developed codebase and further contributing to an open smart home.”

+ - Jan Claes, Head of testing services - C&I Global, Resillion +
+ +This is another example of something that's only possible because of the support we get from users subscribing to [Home Assistant Cloud](/cloud/). Certification would be very difficult for any other open-source project, but we have the funding first to build a great server and also to pay for the required testing. Now this open source implementation exists and can be used by any project looking to add Matter. + +## The future Matters + +As we continue improving our Matter implementation, the Matter standard itself is also evolving. Even with the progress it has made in the past year, there are still challenges to overcome. Matter is completely built on IPv6, and its rollout is uncovering the poor state of IPv6 support in today's network hardware. Also, as it's a complicated standard, it can be difficult to explain concepts like Thread and Fabrics to the average user, but hopefully users won't need to be experts in the future to get the most out of Matter in their homes. + +Some might call Matter the smart home standard to replace all others, but we believe that there's room for multiple standards, each providing its own unique benefits. We are focused on providing the highest support for all local smart home standards ([certifying other standards is on our roadmap](/blog/2024/11/15/roadmap-2024h2/#open-protocols)) and ensuring they work far into the future, which is great for consumer choice and sustainability. + +As Home Assistant grows and takes important steps like certification, the more credibility we gain in the industry---it's a virtuous circle that helps us and Open Home projects continuously improve. Thanks for your support and helping us make this possible 🙏. + +**Try the Matter in Home Assistant today:** +[!Open your Home Assistant instance and show the dashboard of an add-on.](https://my.home-assistant.io/redirect/config_flow_start?domain=matter) diff --git a/source/_redirects b/source/_redirects index 3da3bae864f..675fcebea9f 100644 --- a/source/_redirects +++ b/source/_redirects @@ -648,6 +648,7 @@ layout: null /integrations/xfinity /more-info/removed-integration 301 /integrations/yessssms /more-info/removed-integration 301 /integrations/yweather /more-info/removed-integration 301 +/integrations/zengge /integrations/led_ble /components/zwave /integrations/zwave_js # Lovelace images diff --git a/source/changelogs/core-2025.3.markdown b/source/changelogs/core-2025.3.markdown new file mode 100644 index 00000000000..d2877eefd52 --- /dev/null +++ b/source/changelogs/core-2025.3.markdown @@ -0,0 +1,2775 @@ +--- +title: Full changelog for Home Assistant Core 2025.3 +description: Detailed changelog for the Home Assistant Core 2025.3 release +replace_regex: \s\(\[?[a-z0-9\-\s_]+\]?\)$ +--- + +These are all the changes included in the Home Assistant Core 2025.3 release. + +For a summary in a more readable format: +[Release notes blog for this release](/blog/2025/03/05/release-20253/). + +- Bump version to 2025.3.0 ([@bramkragten] - [#136859]) +- Update quality scale in Onkyo ([@arturpragacz] - [#136710]) +- Migrate from homeconnect dependency to aiohomeconnect ([@Diegorro98] - [#136116]) +- Bump github/codeql-action from 3.28.6 to 3.28.8 (@dependabot - [#136890]) +- Add error handling to enphase_envoy switch platform action ([@catsmanac] - [#136837]) +- Bump Pysmlight to v0.2.0 ([@tl-sl] - [#136886]) +- Remove stale translation string in HomeWizard ([@DCSBL] - [#136917]) +- Add DS2450 to onewire integration ([@moritzthecat] - [#136882]) +- Add software version to onewire device info ([@epenet] - [#136934]) +- Make assist_satellite action descriptions consistent ([@NoRi2909] - [#136955]) +- Add serial number to LG webOS TV device info ([@thecode] - [#136968]) +- Fetch all programs instead of only the available ones at Home Connect ([@Diegorro98] - [#136949]) +- Fix error messaging for cascading service calls ([@abmantis] - [#136966]) +- Add more Homee cover tests ([@Taraman17] - [#136568]) +- Add tariff sensor and peak sensors ([@gjong] - [#136919]) +- Add post action to mastodon ([@andrew-codechimp] - [#134788]) +- Add support for standby quickmode to ViCare integration ([@CFenner] - [#133156]) +- Add sensors for drink stats per key to lamarzocco ([@zweckj] - [#136582]) +- Do not duplicate device class translations in ring integration ([@sdb9696] - [#136868]) +- Make Reolink reboot button always available ([@starkillerOG] - [#136667]) +- Use runtime_data in motionmount integration ([@RJPoelstra] - [#136999]) +- Create/delete lists at runtime in Bring integration ([@tr4nt0r] - [#130098]) +- Bump python-MotionMount to 2.3.0 ([@RJPoelstra] - [#136985]) +- Energy distance units ([@jschlyter] - [#136933]) +- Add data_description's to motionmount integration ([@RJPoelstra] - [#137014]) +- Bump letpot to 0.4.0 ([@jpelgrom] - [#137007]) +- Add pets to litterrobot integration ([@natekspencer] - [#136865]) +- Add codeowner to Home Connect ([@MartinHjelmare] - [#137029]) +- Add exception handling for updating LetPot time entities ([@jpelgrom] - [#137033]) +- Fix one occurrence of "api" to match all other in sensibo and HA ([@NoRi2909] - [#137037]) +- Add dev docs and frontend PR links to PR template ([@abmantis] - [#137034]) +- Bump pysmlight to v0.2.1 ([@tl-sl] - [#137053]) +- Add switch platform to LetPot integration ([@jpelgrom] - [#136383]) +- Fix Home Connect actions keys ([@Diegorro98] - [#137027]) +- Replace keys with translatable friendly names in Statistics helper ([@NoRi2909] - [#136936]) +- Filter programs by execution type at select program entities at Home Connect ([@Diegorro98] - [#136950]) +- Home Connect entities availability based on the connected state of the appliance ([@Diegorro98] - [#136951]) +- Test config_entry_oauth2_flow.async_get_redirect_uri ([@tronikos] - [#136976]) +- Improve sonos alarms typing ([@cdce8p] - [#137078]) +- Improve isy994 sensor typing ([@cdce8p] - [#137077]) +- Enable Modbus Climate / HVAC on/off to use the coil instead of the register(s) ([@illia-piskurov] - [#135657]) +- Bump aiohomeconnect to 0.12.3 ([@MartinHjelmare] - [#137085]) +- Improve fully_kiosk sensor typing ([@cdce8p] - [#137079]) +- Small additions for Homee ([@Taraman17] - [#137000]) +- Fetch current active and selected programs at Home Connect ([@Diegorro98] - [#136948]) +- Add and delete Home Connect devices on CONNECTED/PAIRED and DEPAIRED events ([@Diegorro98] - [#136952]) +- Extract conversation ID generation to helper ([@balloob] - [#137062]) +- Bump openai to 1.61.0 ([@Shulyaka] - [#137130]) +- Fix home connect manifest logger ([@MartinHjelmare] - [#137138]) +- Make get_chat_session a callback context manager ([@balloob] - [#137146]) +- fix: sort available modes ([@iprak] - [#137134]) +- Reolink styling using walrus operator ([@starkillerOG] - [#137069]) +- Bump teslemetry-stream to 0.6.10 ([@Bre77] - [#137159]) +- Add Linx virtual motionblinds integration ([@starkillerOG] - [#137184]) +- Add support for OpenAI reasoning models ([@Shulyaka] - [#137139]) +- Chat session rev2 ([@balloob] - [#137209]) +- Fix spelling of "SharkClean" and sentence-casing of some words ([@NoRi2909] - [#137183]) +- Add support for Shelly Flood gen4 ([@chemelli74] - [#136981]) +- Fix uppercase / lowercase setup strings in Generic Camera ([@NoRi2909] - [#137219]) +- Add parallel updates setting to Bang & Olufsen Event platform ([@mj23000] - [#135850]) +- Update license-expression to 30.4.1 ([@cdce8p] - [#137226]) +- Update pipdeptree to 2.25.0 ([@cdce8p] - [#137228]) +- Update pylint to 3.3.4 ([@cdce8p] - [#137227]) +- Update coverage to 7.6.10 ([@cdce8p] - [#137229]) +- Bump pysmlight to v0.2.2 ([@tl-sl] - [#137218]) +- Update pytest-freezer to 0.4.9 ([@cdce8p] - [#137232]) +- Update pytest-picked to 0.5.1 ([@cdce8p] - [#137233]) +- Add Starlink connectivity binary sensor ([@MrConorAE] - [#133184]) +- Update syrupy to 4.8.1 ([@cdce8p] - [#137235]) +- Update pyOpenSSL to 25.0.0 ([@cdce8p] - [#137236]) +- Update pytest-asyncio to 0.25.3 ([@cdce8p] - [#137231]) +- Update pytest-github-actions-annotate-failures to 0.3.0 ([@cdce8p] - [#137243]) +- Add service to retrieve schedule configuration ([@rikroe] - [#121904]) +- Update pylint-per-file-ignores to 1.4.0 ([@cdce8p] - [#137242]) +- Migrate unique ID in vesync switches ([@cdnninja] - [#137099]) +- Bump python-homeassistant-analytics to 0.9.0 ([@joostlek] - [#137240]) +- Assist Satellite to use ChatSession for conversation ID ([@balloob] - [#137142]) +- Assist Pipeline to use ChatSession for conversation ID ([@balloob] - [#137143]) +- Add tests for Shelly Flood gen4 ([@thecode] - [#137246]) +- Ensure random temp dir is used during MQTT CI tests ([@jbouwh] - [#137221]) +- Add Ublockout virtual integration of MotionBlinds ([@starkillerOG] - [#137179]) +- Add Heicko virtual motionblinds integration ([@starkillerOG] - [#137191]) +- Add Smart Rollos virtual motionblinds integration ([@starkillerOG] - [#137190]) +- Fix eheimdigital sw_version mock ([@MartinHjelmare] - [#137255]) +- Clear extra system prompt on start_conversation error ([@synesthesiam] - [#137254]) +- Update tqdm to 4.67.1 ([@cdce8p] - [#137241]) +- Add device cleanup to Vodafone Station ([@chemelli74] - [#116024]) +- Introduce async_add_assistant_content to conversation chat log ([@balloob] - [#137273]) +- Add Shelly script events entities ([@wjtje] - [#135979]) +- Pass config_entry as param to Shelly coordinator ([@chemelli74] - [#137276]) +- Add channel sensor to bthome ([@Ernst79] - [#137072]) +- Update Jellyfin codeowner ([@RunC0deRun] - [#137270]) +- Use runtime_data in fastdotcom ([@epenet] - [#137293]) +- Use HassKey in file_upload ([@epenet] - [#137294]) +- Use runtime_data in faa_delays ([@epenet] - [#137292]) +- Bump uv to 0.5.27 ([@edenhaus] - [#137297]) +- Allow integrations with digits in hassfest QS runtime_data ([@autinerd] - [#136479]) +- Cleanup runtime warnings in async unit tests ([@epenet] - [#137308]) +- Update pytest-aiohttp to 1.1.0 ([@cdce8p] - [#137311]) +- Update pyoverkiz to 1.16.0 ([@cdce8p] - [#137310]) +- Update codespell to 2.4.1 ([@cdce8p] - [#137312]) +- Improve descriptions of Bluesound actions ([@NoRi2909] - [#137156]) +- Improve frontier_silicon media_player typing ([@cdce8p] - [#137080]) +- Remove legacy color_mode support for legacy mqtt json light ([@jbouwh] - [#136996]) +- Update attrs to 25.1.0 ([@cdce8p] - [#137316]) +- Add default voice for languages in cloud TTS ([@ludeeus] - [#137300]) +- Update types packages ([@cdce8p] - [#137317]) +- Convert Niko home control to async ([@VandeurenGlenn] - [#137174]) +- Add exception translations to ring integration ([@sdb9696] - [#136468]) +- Added support for One Time Charge Status to Vicare ([@migrzyb] - [#135984]) +- Bump upb-lib to 0.6.0 ([@gwww] - [#137339]) +- Bump roombapy to 1.9.0 ([@jbouwh] - [#137336]) +- Update yalexs-ble to 2.5.7 ([@cdce8p] - [#137345]) +- Update home-assistant-bluetooth to 1.13.1 ([@cdce8p] - [#137350]) +- Make Sonos action descriptions more UI- and translation-friendly ([@NoRi2909] - [#137356]) +- Fix spelling of "ID" and sentence-casing in ovo_energy strings ([@NoRi2909] - [#137329]) +- Bump paho-mqtt client to version 2.1.0 ([@jbouwh] - [#136130]) +- Update bleak-esphome to 2.7.1 ([@cdce8p] - [#137354]) +- Add sensor and weather tests to meteo_france ([@epenet] - [#137318]) +- Update aiozoneinfo to 0.2.3 ([@cdce8p] - [#137370]) +- Add iometer integration ([@MaestroOnICe] - [#135513]) +- Bump thermopro-ble to 0.11.0 ([@stephan48] - [#137381]) +- Bump nexia to 2.0.9 ([@bdraco] - [#137383]) +- Update dhcp dependencies ([@cdce8p] - [#137384]) +- Update bthome-ble to 3.12.4 ([@cdce8p] - [#137385]) +- Update aiohttp-fast-zlib to 0.2.2 ([@cdce8p] - [#137387]) +- Update async-interrupt to 1.2.1 ([@cdce8p] - [#137388]) +- Update aionut to 4.3.4 ([@cdce8p] - [#137389]) +- Update aiosteamist to 1.0.1 ([@cdce8p] - [#137391]) +- Update aiooncue to 0.3.9 ([@cdce8p] - [#137392]) +- Add update entity for second Zigbee radio ([@tl-sl] - [#136918]) +- Update ismartgate to 5.0.2 ([@cdce8p] - [#137394]) +- Update discovergy30303 to 0.3.3 ([@cdce8p] - [#137396]) +- Fix spelling of "YoLink" and improve action descriptions ([@NoRi2909] - [#137412]) +- Bump pysmlight to v0.2.3 ([@tl-sl] - [#137386]) +- Bump sigstore/cosign-installer from 3.7.0 to 3.8.0 (@dependabot - [#137404]) +- Add coordinator unsubscribe listener test ([@epenet] - [#137422]) +- Improve action descriptions in rainmachine, fix casing ([@NoRi2909] - [#137428]) +- Fix sentence-casing and action names/descriptions in unifiprotect ([@NoRi2909] - [#137418]) +- Bump thinqconnect to 1.0.4 ([@LG-ThinQ-Integration] - [#137395]) +- Replace wrong name reference of binary jvc_power sensor in jvc_projector ([@NoRi2909] - [#137271]) +- Show new errors from the MotionMount ([@RJPoelstra] - [#137006]) +- Add tests for sensors in SwitchBot Cloud ([@mckbrmn] - [#137319]) +- Only clean up chat log if it was stored ([@balloob] - [#137399]) +- Replace "Ota" with "OTA update" in anova integration ([@NoRi2909] - [#137431]) +- Fix spelling of "PowerView Hub" in user-facing strings ([@NoRi2909] - [#137435]) +- Disable annotations for pytest warnings [ci] ([@cdce8p] - [#137434]) +- Update PySwitchbot to 0.56.0 ([@awahlig] - [#137432]) +- Add streaming select entities to Teslemetry ([@Bre77] - [#137210]) +- Add translation key for Matter Energy management mode ([@lboue] - [#137259]) +- Refactor switch for vesync ([@cdnninja] - [#134409]) +- Govee light local bump ([@Galorhallen] - [#137436]) +- Add support for Switchbot Remote ([@awahlig] - [#137443]) +- Move fireservicerota coordinator to own module ([@epenet] - [#137304]) +- Add GPSd satellites sensors ([@jrieger] - [#137320]) +- Explicitly pass in the config_entry in screenlogic coordinator init ([@mib1185] - [#137463]) +- Explicitly pass in the config_entry in omnilogic coordinator init ([@mib1185] - [#137466]) +- Explicitly pass in the config_entry in picnic coordinator init ([@mib1185] - [#137465]) +- Explicitly pass in the config_entry in webmin coordinator init ([@mib1185] - [#137462]) +- Explicitly pass in the config_entry in Bluesound coordinator init ([@mib1185] - [#137461]) +- Explicitly pass in the config_entry in rympro coordinator init ([@mib1185] - [#137464]) +- Explicitly pass in the config_entry in airgradient coordinator init ([@mib1185] - [#137469]) +- Explicitly pass in the config_entry in supervisor coordinator init ([@mib1185] - [#137472]) +- Bump aioairq version to 0.4.4 ([@Sibgatulin] - [#137454]) +- Update default Google model to Gemini Flash 2.0 ([@balloob] - [#137505]) +- Bump bring-api version to 1.0.1 ([@tr4nt0r] - [#137496]) +- Deprecate Linear Garage Door integration ([@IceBotYT] - [#137502]) +- Fix typo in keba and replace key references with UI-friendly descriptions ([@NoRi2909] - [#137527]) +- Add data_description to Bring! integration ([@tr4nt0r] - [#137513]) +- Enable strict-typing for Bring! integration ([@tr4nt0r] - [#137518]) +- Add switch to LG ThinQ for power control ([@LG-ThinQ-Integration] - [#137512]) +- Update mypy-dev to 1.16.0a2 ([@cdce8p] - [#137542]) +- Update govee-local-api to 2.0.1 ([@Galorhallen] - [#137546]) +- Fix translation key typo in coinbase options ([@natekspencer] - [#137543]) +- Prevent packages from accidentally installing poetry ([@cdce8p] - [#137560]) +- Fix spelling of "Roborock" and adapt action descriptions to HA standards ([@NoRi2909] - [#137570]) +- Several fixes in user-facing strings of the SQL integration ([@NoRi2909] - [#137438]) +- Explicitly pass in the config_entry in madvr coordinator init ([@mib1185] - [#137468]) +- Replace string literal with existing const in ZHA ([@abmantis] - [#137576]) +- Plugwise: remove user-config of port ([@bouwew] - [#137584]) +- Fix sentence-casing in user-facing strings of Coinbase integration ([@NoRi2909] - [#137586]) +- Correct state and icon if fan is in standby mode in ViCare integration ([@CFenner] - [#137565]) +- Explicitly pass in the config_entry in vesync ([@cdnninja] - [#137498]) +- Update library for smhi ([@gjohansson-ST] - [#136375]) +- Add exception translations to Bring! integration ([@tr4nt0r] - [#137515]) +- Bump python-overseerr to 0.7.0 ([@joostlek] - [#137590]) +- Fix sentence-casing in user-facing strings of here_travel_time ([@NoRi2909] - [#137593]) +- Keep track of addons and integrations when determining HA radio firmware type ([@puddly] - [#134598]) +- Remove deprecated state attributes from GPSd ([@jrieger] - [#137600]) +- KNX tests: Support loading different config store fixtures ([@farmio] - [#136961]) +- Add Wi-Fi RSSI sensor in HomeWizard ([@DCSBL] - [#136754]) +- Add remaining HEOS exception translations ([@andrewsayre] - [#136878]) +- Remove redundant dependency markers ([@cdce8p] - [#137608]) +- Add HNT wallet/rate to coinbase ([@natekspencer] - [#137592]) +- Add event platform to Bring! integration ([@tr4nt0r] - [#136935]) +- Pass in the config_entry in youless coordinator init ([@mib1185] - [#137471]) +- Use runtime_data in freedompro ([@epenet] - [#137635]) +- Fix fireservicerota unload ([@epenet] - [#137629]) +- Use runtime_data in fitbit ([@epenet] - [#137631]) +- Use runtime_data in foscam ([@epenet] - [#137646]) +- Add reconfiguration flow to Bring! integration ([@tr4nt0r] - [#137529]) +- Fix missing type annotation in bring ([@epenet] - [#137647]) +- Plugwise: fix double CONF_PASSWORD occurrence ([@bouwew] - [#137641]) +- Replace "HassOS" with "Home Assistant OS" in homeassistant_hardware ([@NoRi2909] - [#137637]) +- Improve type hints in fireservicerota ([@epenet] - [#137628]) +- Use runtime_data in frontier_silicon ([@epenet] - [#137633]) +- Use runtime_data in fivem ([@epenet] - [#137632]) +- Use runtime_data in firmata ([@epenet] - [#137630]) +- Use snapshots for ConfigEntry migration tests ([@alengwenus] - [#136093]) +- Remove unnecessary type casts ([@cdce8p] - [#137657]) +- Bump PyTado to version 0.18.6 ([@erwindouna] - [#137655]) +- Make all occurrences of "Home Guard" in lg_thinq consistent ([@NoRi2909] - [#137662]) +- Use runtime_data in flume ([@epenet] - [#137660]) +- Clean up colliding deleted devices when updating non-deleted devices ([@arturpragacz] - [#135592]) +- Replace key names with friendly names in todoist actions ([@NoRi2909] - [#137667]) +- Use config_entry.async_on_unload in forked_daapd ([@epenet] - [#137656]) +- Fix spelling of "SwitchBot", "ID" plus sentence-casing in switchbot ([@NoRi2909] - [#137684]) +- Set the device class for the Shelly virtual sensor ([@bieniu] - [#137068]) +- Fix spelling of "AccuWeather" and sentence-casing plus grammar ([@NoRi2909] - [#137696]) +- Pass in the config_entry in azure_devops coordinator init ([@mib1185] - [#137722]) +- Explicitly pass in the config_entry in autarco coordinator init ([@mib1185] - [#137718]) +- Explicitly pass in the config_entry in airnow coordinator init ([@mib1185] - [#137699]) +- Explicitly pass in the config_entry in airly coordinator init ([@mib1185] - [#137698]) +- Explicitly pass in the config entry in anova coordinator init ([@mib1185] - [#137701]) +- Explicitly pass in the config_entry in bsblan coordinator init ([@mib1185] - [#137725]) +- Pass in the config_entry in brother coordinator init ([@mib1185] - [#137726]) +- Explicitly pass in the config_entry in blink coordinator init ([@mib1185] - [#137727]) +- Bump SQLAlchemy to 2.0.38 ([@bdraco] - [#137693]) +- Explicitly pass in the config_entry in ambient_network coordinator init ([@mib1185] - [#137707]) +- Explicitly pass in the config entry in amberelectric coordinator init ([@mib1185] - [#137700]) +- Fix wrong reference for description of password field in bring ([@NoRi2909] - [#137720]) +- Explicitly pass in the config_entry in discovergy coordinator ([@mib1185] - [#137734]) +- Limit flume ConfigEntrySelect to integration domain ([@cdce8p] - [#137661]) +- Explicitly pass in the config_entry in aussie_broadband coordinator init ([@mib1185] - [#137719]) +- Explicitly pass in the config_entry in airzone coordinator init ([@mib1185] - [#137702]) +- Explicitly pass in the config_entry in aquacell coordinator init ([@mib1185] - [#137713]) +- Explicitly pass in the config_entry in braviatv coordinator init ([@mib1185] - [#137724]) +- Explicitly pass in the config_entry in aurora_abb_powerone coordinator init ([@mib1185] - [#137715]) +- Explicitly pass in the config_entry in arve coordinator init ([@mib1185] - [#137712]) +- Explicitly pass in the config_entry in android_ip_webcam coordinator … ([@mib1185] - [#137705]) +- Explicitly pass in the config_entry in analytics_insight coordinator init ([@mib1185] - [#137706]) +- Explicitly pass in the config_entry in apcupsd coordinator init ([@mib1185] - [#137709]) +- Explicitly pass in the config_entry in letpot coordinator ([@jpelgrom] - [#137759]) +- Explicitly pass in the config_entry in eheimdigital coordinator ([@mib1185] - [#137738]) +- Explicitly pass in the config_entry in dremel_3d_printer coordinator ([@mib1185] - [#137740]) +- Explicitly pass in the config_entry in emoncms coordinator ([@mib1185] - [#137743]) +- Explicitly pass in the config_entry in dwd weather warnings coordinator ([@mib1185] - [#137737]) +- Make sure we always have agent_id in ConversationInput ([@balloob] - [#137679]) +- Clear statistics when you unload the Opower integration ([@tronikos] - [#135908]) +- Conversation chat log cleanup and optimization ([@balloob] - [#137784]) +- Add discovery for Nanoleaf Blocks and 4D ([@milanmeu] - [#137792]) +- Info log when Android TV Remote is unavailable ([@tronikos] - [#137794]) +- Add quality_scale to motionmount ([@RJPoelstra] - [#137012]) +- Limit google_sheets ConfigEntrySelect to integration domain ([@cdce8p] - [#137766]) +- Group helpers of set_up_integrations in bootstrap ([@arturpragacz] - [#137673]) +- Explicitly pass in the config_entry in co2signal coordinator ([@mib1185] - [#137732]) +- Explicitly pass in the config_entry in airq coordinator init ([@mib1185] - [#137704]) +- Explicitly pass in the config_entry in airzone_cloud coordinator init ([@mib1185] - [#137703]) +- Explicitly pass in the config_entry in fjaraskupan coordinator ([@mib1185] - [#137825]) +- Explicitly pass in the config_entry in aosmith coordinator init ([@mib1185] - [#137710]) +- Explicitly pass in the config_entry in aseko_pool_live coordinator init ([@mib1185] - [#137711]) +- Explicitly pass in the config_entry in aurora coordinator init ([@mib1185] - [#137714]) +- Explicitly pass in the config_entry in gardena_bluetooth coordinator ([@mib1185] - [#137830]) +- Explicitly pass in the config_entry in gree coordinator ([@mib1185] - [#137844]) +- Explicitly pass in the config_entry in govee_light_local coordinator ([@mib1185] - [#137843]) +- Explicitly pass in the config_entry in flo coordinator ([@mib1185] - [#137819]) +- Explicitly pass in the config_entry in flume coordinator ([@mib1185] - [#137822]) +- Explicitly pass in the config_entry in forecast_solar coordinator ([@mib1185] - [#137824]) +- Explicitly pass in the config_entry in atag coordinator init ([@mib1185] - [#137716]) +- Explicitly pass in the config_entry in gogogate2 coordinator ([@mib1185] - [#137837]) +- Explicitly pass in the config_entry in goalzero coordinator ([@mib1185] - [#137836]) +- Explicitly pass in the config_entry in glances coordinator ([@mib1185] - [#137835]) +- Explicitly pass in the config_entry in github coordinator ([@mib1185] - [#137834]) +- Explicitly pass in the config_entry in garages_amsterdam coordinator ([@mib1185] - [#137829]) +- Explicitly pass in the config_entry in apsystems coordinator init ([@mib1185] - [#137708]) +- Explicitly pass in the config_entry in cert_expiry coordinator init ([@mib1185] - [#137728]) +- Explicitly pass in the config_entry in deluge coordinator ([@mib1185] - [#137733]) +- Explicitly pass in the config_entry in enigma2 coordinator ([@mib1185] - [#137739]) +- Add snapshot tests for setup of LetPot platforms ([@jpelgrom] - [#137756]) +- Explicitly pass in the config_entry in enphase flexit_bacnet coordinator ([@mib1185] - [#137814]) +- Explicitly pass in the config_entry in duke_energy coordinator ([@mib1185] - [#137741]) +- Bump PyViCare to 2.42.0 ([@CFenner] - [#137804]) +- Update fitbit quality scale for runtime-data ([@allenporter] - [#137785]) +- Explicitly pass in the config_entry in guardian coordinator ([@mib1185] - [#137848]) +- Explicitly pass in the config_entry in fitbit coordinator ([@mib1185] - [#137808]) +- Update flexit_bacnet dependecy 2.2.1 -> 2.2.3 ([@piotrbulinski] - [#137730]) +- Explicitly pass in the config_entry in awair coordinator init ([@mib1185] - [#137717]) +- Explicitly pass in the config_entry in enphase envoy coordinator ([@mib1185] - [#137806]) +- Explicitly pass in the config_entry in filesize coordinator ([@mib1185] - [#137807]) +- Explicitly pass in the config_entry in gios coordinator ([@mib1185] - [#137832]) +- Explicitly pass in the config_entry in flipr coordinator ([@mib1185] - [#137818]) +- Explicitly pass in the config_entry in google_tasks coordinator ([@mib1185] - [#137842]) +- Explicitly pass in the config_entry in flux_led coordinator ([@mib1185] - [#137823]) +- Explicitly pass in the config_entry in fyta coordinator ([@mib1185] - [#137828]) +- Explicitly pass in the config_entry in fujitsu_fglair coordinator ([@mib1185] - [#137826]) +- Explicitly pass in the config_entry in fully_kiosk coordinator ([@mib1185] - [#137827]) +- Explicitly pass in the config_entry in goodwe coordinator ([@mib1185] - [#137838]) +- Explicitly pass in the config_entry in geocaching coordinator ([@mib1185] - [#137831]) +- Explicitly pass in the config_entry in google coordinator ([@mib1185] - [#137839]) +- Explicitly pass in the config_entry in google_photos coordinator ([@mib1185] - [#137840]) +- Make action descriptions in adguard consistent, remove "true/false" ([@NoRi2909] - [#137799]) +- Explicitly pass in the config_entry in flick_electric coordinator ([@mib1185] - [#137816]) +- Refactor evohome for major bump of client to 1.0.2 ([@zxdavb] - [#135436]) +- Add Peblar charge switch ([@frenck] - [#137853]) +- Move ForkedDaapdUpdater to separate module ([@epenet] - [#137654]) +- Bump noaa-coops to version 0.4.0 ([@jdelaney72] - [#137777]) +- Bump plugwise to v1.7.1 and adapt ([@bouwew] - [#137599]) +- Only allow single Home Connect config entry ([@Diegorro98] - [#137088]) +- Explicitly pass in the config_entry in zamg coordinator ([@mib1185] - [#137858]) +- Explicitly pass in the config_entry in zeversolar coordinator ([@mib1185] - [#137857]) +- Explicitly pass in the config_entry in youtube coordinator ([@mib1185] - [#137859]) +- Explicitly pass in the config_entry in ws66i coordinator ([@mib1185] - [#137865]) +- Explicitly pass in the config_entry in waqi coordinator ([@mib1185] - [#137873]) +- Explicitly pass in the config_entry in watergate coordinator ([@mib1185] - [#137872]) +- Prolong ondilo ico update interval ([@MartinHjelmare] - [#137888]) +- Explicitly pass in the config_entry in v2c coordinator ([@mib1185] - [#137882]) +- Fix sentence-casing and description of homekit.reload action ([@NoRi2909] - [#137894]) +- Explicitly pass in the config_entry in steamist coordinator ([@mib1185] - [#137930]) +- Explicitly pass in the config_entry in uptimerobot coordinator ([@mib1185] - [#137883]) +- Explicitly pass in the config_entry in skybell coordinator ([@mib1185] - [#137947]) +- Bump bring-api to version 1.0.2 ([@tr4nt0r] - [#137925]) +- Fix three action descriptions in xiaomi_miio ([@NoRi2909] - [#137918]) +- Fix spelling of "Wi-Fi" in keenetic_ndms2 integration ([@NoRi2909] - [#137920]) +- Explicitly pass in the config_entry in simplefin coordinator ([@mib1185] - [#137948]) +- Explicitly pass in the config_entry in sleepiq coordinator ([@mib1185] - [#137946]) +- Add support for fireplace mode control for flexit_bacnet integration ([@piotrbulinski] - [#137594]) +- Bump nhc to 0.4.10 ([@VandeurenGlenn] - [#137903]) +- Explicitly pass in the config_entry in shelly coordinator ([@mib1185] - [#137951]) +- Explicitly pass in the config_entry in surepetcare coordinator ([@mib1185] - [#137926]) +- Explicitly pass in the config_entry in swiss_public_transport coordinator ([@mib1185] - [#137924]) +- Explicitly pass in the config_entry in switchbee coordinator ([@mib1185] - [#137923]) +- Explicitly pass in the config_entry in streamlabswater coordinator ([@mib1185] - [#137927]) +- Explicitly pass in the config_entry in yardian coordinator ([@mib1185] - [#137862]) +- Explicitly pass in the config_entry in xbox coordinator ([@mib1185] - [#137864]) +- Explicitly pass in the config_entry in slide_local coordinator ([@mib1185] - [#137945]) +- Explicitly pass in the config_entry in solaredge coordinator ([@mib1185] - [#137941]) +- Explicitly pass in the config_entry in samsungtv coordinator ([@mib1185] - [#137962]) +- Explicitly pass in the config_entry in sanix coordinator ([@mib1185] - [#137960]) +- Explicitly pass in the config_entry in steam_online coordinator ([@mib1185] - [#137929]) +- Explicitly pass in the config_entry in stookwijzer coordinator ([@mib1185] - [#137928]) +- Explicitly pass in the config_entry in smarty coordinator ([@mib1185] - [#137944]) +- Explicitly pass in the config_entry in seventeentrack coordinator ([@mib1185] - [#137956]) +- Explicitly pass in the config_entry in weheat coordinator ([@mib1185] - [#137868]) +- Explicitly pass in the config_entry in yolink coordinator ([@mib1185] - [#137861]) +- Explicitly pass in the config_entry in romy coordinator ([@mib1185] - [#137967]) +- Explicitly pass in the config_entry in tado coordinator ([@mib1185] - [#137916]) +- Explicitly pass in the config_entry in weatherkit coordinator ([@mib1185] - [#137869]) +- Explicitly pass in the config_entry in weatherflow_cloud coordinator ([@mib1185] - [#137871]) +- Explicitly pass in the config_entry in verisure coordinator ([@mib1185] - [#137879]) +- Explicitly pass in the config_entry in toon coordinator ([@mib1185] - [#137899]) +- Explicitly pass in the config_entry in upnp coordinator ([@mib1185] - [#137885]) +- Explicitly pass in the config_entry in rova coordinator ([@mib1185] - [#137966]) +- Improve emulated_hue logging to identify bad devices ([@stevesinchak] - [#137919]) +- Explicitly pass in the config_entry in ridwell coordinator ([@mib1185] - [#137973]) +- Explicitly pass in the config_entry in wallbox coordinator ([@mib1185] - [#137874]) +- Explicitly pass in the config_entry in volvooncall coordinator ([@mib1185] - [#137875]) +- Explicitly pass in the config_entry in vizio coordinator ([@mib1185] - [#137876]) +- Explicitly pass in the config_entry in rainbird coordinator ([@mib1185] - [#137982]) +- Small typing improvements ([@cdce8p] - [#137994]) +- Explicitly pass in the config_entry in roborock coordinator ([@mib1185] - [#137970]) +- Stream OpenAI messages into the chat log ([@balloob] - [#137400]) +- Fix sentence-casing in user-facing strings of screenlogic ([@NoRi2909] - [#138015]) +- Raise `ConfigEntryAuthFailed` at Home Connect update auth error ([@Diegorro98] - [#136953]) +- Explicitly pass in the config_entry in pvpc_hourly_pricing coordinator ([@mib1185] - [#138032]) +- Explicitly pass in the config_entry in openexchangerates coordinator ([@mib1185] - [#138053]) +- Explicitly pass in the config_entry in philips_js coordinator ([@mib1185] - [#138042]) +- Explicitly pass in the config_entry in withings coordinator ([@mib1185] - [#137866]) +- Explicitly pass in the config_entry in wemo coordinator ([@mib1185] - [#137867]) +- Explicitly pass in the config_entry in octoprint coordinator ([@mib1185] - [#138056]) +- Explicitly pass in the config_entry in yamaha_musiccast coordinator ([@mib1185] - [#137863]) +- Explicitly pass in the config_entry in version coordinator ([@mib1185] - [#137877]) +- Explicitly pass in the config_entry in vallox coordinator ([@mib1185] - [#137881]) +- Explicitly pass in the config_entry in ukraine_alarm coordinator ([@mib1185] - [#137886]) +- Explicitly pass in the config_entry in twinkly coordinator ([@mib1185] - [#137889]) +- Explicitly pass in the config_entry in transmission coordinator ([@mib1185] - [#137891]) +- Explicitly pass in the config_entry in tradfri coordinator ([@mib1185] - [#137892]) +- Explicitly pass in the config_entry in traccar_server coordinator ([@mib1185] - [#137893]) +- Explicitly pass in the config_entry in touchline_sl coordinator ([@mib1185] - [#137897]) +- Explicitly pass in the config_entry in tplink_omada coordinator ([@mib1185] - [#137895]) +- Explicitly pass in the config_entry in totalconnect coordinator ([@mib1185] - [#137898]) +- Explicitly pass in the config_entry in tomorrowio coordinator ([@mib1185] - [#137900]) +- Explicitly pass in the config_entry in tolo coordinator ([@mib1185] - [#137902]) +- Explicitly pass in the config_entry in tibber coordinator ([@mib1185] - [#137904]) +- Explicitly pass in the config_entry in thethingsnetwork coordinator ([@mib1185] - [#137905]) +- Explicitly pass in the config_entry in venstar coordinator ([@mib1185] - [#137880]) +- Explicitly pass in the config_entry in tessie coordinator ([@mib1185] - [#137906]) +- Explicitly pass in the config_entry in qnap_qsw coordinator ([@mib1185] - [#138027]) +- Explicitly pass in the config_entry in ping coordinator ([@mib1185] - [#138041]) +- Explicitly pass in the config_entry in technove coordinator ([@mib1185] - [#137910]) +- Explicitly pass in the config_entry in tautulli coordinator ([@mib1185] - [#137911]) +- Explicitly pass in the config_entry in tami4 coordinator ([@mib1185] - [#137912]) +- Explicitly pass in the config_entry in ohme coordinator ([@mib1185] - [#138055]) +- Explicitly pass in the config_entry in tailscale coordinator ([@mib1185] - [#137913]) +- Explicitly pass in the config_entry in system_bridge coordinator ([@mib1185] - [#137921]) +- Explicitly pass in the config_entry in switchbot_cloud coordinator ([@mib1185] - [#137922]) +- Explicitly pass in the config_entry in ondilo_ico coordinator ([@mib1185] - [#138054]) +- Explicitly pass in the config_entry in opengarage coordinator ([@mib1185] - [#138052]) +- Explicitly pass in the config_entry in starlink coordinator ([@mib1185] - [#137932]) +- Explicitly pass in the config_entry in openuv coordinator ([@mib1185] - [#138050]) +- Explicitly pass in the config_entry in purpleair coordinator ([@mib1185] - [#138034]) +- Explicitly pass in the config_entry in opensky coordinator ([@mib1185] - [#138051]) +- Explicitly pass in the config_entry in srp_energy coordinator ([@mib1185] - [#137933]) +- Explicitly pass in the config_entry in squeezebox coordinator ([@mib1185] - [#137934]) +- Explicitly pass in the config_entry in spotify coordinator ([@mib1185] - [#137935]) +- Explicitly pass in the config_entry in pyload coordinator ([@mib1185] - [#138031]) +- Explicitly pass in the config_entry in pvoutput coordinator ([@mib1185] - [#138033]) +- Explicitly pass in the config_entry in pure_energie coordinator ([@mib1185] - [#138035]) +- Explicitly pass in the config_entry in plaato coordinator ([@mib1185] - [#138040]) +- Explicitly pass in the config_entry in openweathermap coordinator ([@mib1185] - [#138049]) +- Explicitly pass in the config_entry in smlight coordinator ([@mib1185] - [#137943]) +- Explicitly pass in the config_entry in ourgroceries coordinator ([@mib1185] - [#138047]) +- Explicitly pass in the config_entry in sharkiq coordinator ([@mib1185] - [#137954]) +- Explicitly pass in the config_entry in sfr_box coordinator ([@mib1185] - [#137955]) +- Explicitly pass in the config_entry in sensoterra coordinator ([@mib1185] - [#137957]) +- Explicitly pass in the config_entry in sense coordinator ([@mib1185] - [#137958]) +- Explicitly pass in the config_entry in ruuvi_gateway coordinator ([@mib1185] - [#137964]) +- Explicitly pass in the config_entry in ruckus_unleashed coordinator ([@mib1185] - [#137965]) +- Explicitly pass in the config_entry in schlage coordinator ([@mib1185] - [#137959]) +- Explicitly pass in the config_entry in imap coordinator ([@jbouwh] - [#138068]) +- Explicitly pass in the config_entry in roku coordinator ([@mib1185] - [#137968]) +- Explicitly pass in the config_entry in rituals_perfume_genie coordinator ([@mib1185] - [#137971]) +- Explicitly pass in the config_entry in risco coordinator ([@mib1185] - [#137972]) +- Explicitly pass in the config_entry in renson coordinator ([@mib1185] - [#137974]) +- Explicitly pass in the config_entry in renault coordinator ([@mib1185] - [#137977]) +- Explicitly pass in the config_entry in refoss coordinator ([@mib1185] - [#137978]) +- Explicitly pass in the config_entry in snapcast coordinator ([@mib1185] - [#137942]) +- Explicitly pass in the config_entry in rainmachine coordinator ([@mib1185] - [#137979]) +- Explicitly pass in the config_entry in solarlog coordinator ([@mib1185] - [#137939]) +- Explicitly pass in the config_entry in tesla_fleet coordinator ([@mib1185] - [#137909]) +- Explicitly pass in the config_entry in sonarr coordinator ([@mib1185] - [#137938]) +- Explicitly pass in the config_entry in speedtestdotnet coordinator ([@mib1185] - [#137936]) +- Explicitly pass in the config_entry in teslemetry coordinator ([@mib1185] - [#137907]) +- Explicitly pass in the config_entry in rainforest_eagle coordinator ([@mib1185] - [#137981]) +- Explicitly pass in the config_entry in radiotherm coordinator ([@mib1185] - [#137983]) +- Explicitly pass in the config_entry in radarr coordinator ([@mib1185] - [#137984]) +- Explicitly pass in the config_entry in rabbitair coordinator ([@mib1185] - [#137985]) +- Explicitly pass in the config_entry in qnap coordinator ([@mib1185] - [#138028]) +- Explicitly pass in the config_entry in nexia coordinator ([@mib1185] - [#138073]) +- Explicitly pass in the config_entry in myuplink coordinator ([@mib1185] - [#138078]) +- Explicitly pass in the config_entry in nam coordinator ([@mib1185] - [#138076]) +- Explicitly pass in the config_entry in nanoleaf coordinator ([@mib1185] - [#138075]) +- Explicitly pass in the config_entry in netgear_lte coordinator ([@mib1185] - [#138074]) +- Explicitly pass in the config_entry in nextdns coordinator ([@mib1185] - [#138072]) +- Explicitly pass in the config_entry in nibe_heatpump coordinator ([@mib1185] - [#138071]) +- Explicitly pass in the config_entry in nice_go coordinator ([@mib1185] - [#138070]) +- Explicitly pass in the config_entry in palazzetti coordinator ([@mib1185] - [#138044]) +- Explicitly pass in the config_entry in notion coordinator ([@mib1185] - [#138066]) +- Explicitly pass in the config_entry in nuki coordinator ([@mib1185] - [#138064]) +- Explicitly pass in the config_entry in nws coordinator ([@mib1185] - [#138063]) +- Explicitly pass in the config_entry in nyt_games coordinator ([@mib1185] - [#138062]) +- Explicitly pass in the config_entry in nzbget coordinator ([@mib1185] - [#138061]) +- Explicitly pass in the config_entry in opower coordinator ([@mib1185] - [#138048]) +- Explicitly pass in the config_entry in moehlenhoff_alpha2 coordinator ([@mib1185] - [#138083]) +- Explicitly pass in the config_entry in monarch_money coordinator ([@mib1185] - [#138082]) +- Explicitly pass in the config_entry in monzo coordinator ([@mib1185] - [#138081]) +- Explicitly pass in the config_entry in plugwise coordinator ([@mib1185] - [#138039]) +- Explicitly pass in the config_entry in poolsense coordinator ([@mib1185] - [#138038]) +- Explicitly pass in the config_entry in powerfox coordinator ([@mib1185] - [#138037]) +- Explicitly pass in the config_entry in prusalink coordinator ([@mib1185] - [#138036]) +- Explicitly pass in the config_entry in qbittorrent coordinator ([@mib1185] - [#138029]) +- Explicitly pass in the config_entry in motion_blinds coordinator ([@mib1185] - [#138080]) +- Explicitly pass in the config_entry in modern_forms coordinator ([@mib1185] - [#138085]) +- Explicitly pass in the config_entry in minecraft_server coordinator ([@mib1185] - [#138086]) +- Explicitly pass in the config_entry in mill coordinator ([@mib1185] - [#138088]) +- Explicitly pass in the config_entry in mikrotik coordinator ([@mib1185] - [#138089]) +- Explicitly pass in the config_entry in microbees coordinator ([@mib1185] - [#138090]) +- Explicitly pass in the config_entry in met coordinator ([@mib1185] - [#138091]) +- Explicitly pass in the config_entry in melnor coordinator ([@mib1185] - [#138092]) +- Explicitly pass in the config_entry in mealie coordinator ([@mib1185] - [#138093]) +- Explicitly pass in the config_entry in mastodon coordinator ([@mib1185] - [#138094]) +- Explicitly pass in the config_entry in permobil coordinator ([@mib1185] - [#138043]) +- Explicitly pass in the config_entry in p1_monitor coordinator ([@mib1185] - [#138045]) +- Explicitly pass in the config_entry in overkiz coordinator ([@mib1185] - [#138046]) +- Explicitly pass in the config_entry in nina coordinator ([@mib1185] - [#138069]) +- Explicitly pass in the config_entry in teslemetry coordinator ([@mib1185] - [#138102]) +- Explicitly pass in the config_entry in starlink coordinator ([@mib1185] - [#138103]) +- Explicitly pass in the config_entry in loqed coordinator ([@mib1185] - [#138106]) +- Explicitly pass in the config_entry in linear_garage_door coordinator ([@mib1185] - [#138109]) +- Explicitly pass in the config_entry in squeezebox coordinator ([@mib1185] - [#138105]) +- Explicitly pass in the config_entry in lookin coordinator ([@mib1185] - [#138107]) +- Explicitly pass in the config_entry in livisi coordinator ([@mib1185] - [#138108]) +- Explicitly pass in the config_entry in lidarr coordinator ([@mib1185] - [#138111]) +- Explicitly pass in the config_entry in lg_thinq coordinator ([@mib1185] - [#138113]) +- Explicitly pass in the config_entry in lektrico coordinator ([@mib1185] - [#138114]) +- Explicitly pass in the config_entry in ld2410_ble coordinator ([@mib1185] - [#138115]) +- Explicitly pass in the config_entry in laundrify coordinator ([@mib1185] - [#138116]) +- Explicitly pass in the config_entry in lastfm coordinator ([@mib1185] - [#138117]) +- Explicitly pass in the config_entry in landisgyr_heat_meter coordinator ([@mib1185] - [#138119]) +- Explicitly pass in the config_entry in lametric coordinator ([@mib1185] - [#138120]) +- Explicitly pass in the config_entry in lifx coordinator ([@mib1185] - [#138110]) +- Explicitly pass in the config_entry in incomfort coordinator ([@jbouwh] - [#138131]) +- Explicitly pass in the config_entry in iskra coordinator ([@mib1185] - [#138134]) +- Explicitly pass in the config_entry in knocki coordinator ([@mib1185] - [#138125]) +- Explicitly pass in the config_entry in ista_ecotrend coordinator ([@mib1185] - [#138130]) +- Explicitly pass in the config_entry in jellyfin coordinator ([@mib1185] - [#138129]) +- Explicitly pass in the config_entry in imgw_pib coordinator ([@mib1185] - [#138144]) +- Explicitly pass in the config_entry in justnimbus coordinator ([@mib1185] - [#138128]) +- Explicitly pass in the config_entry in jvc_projector coordinator ([@mib1185] - [#138127]) +- Explicitly pass in the config_entry in kostal_plenticore coordinator ([@mib1185] - [#138124]) +- Explicitly pass in the config_entry in lacrosse_view coordinator ([@mib1185] - [#138122]) +- Explicitly pass in the config_entry in ialarm coordinator ([@mib1185] - [#138147]) +- Explicitly pass in the config_entry in israel_rail coordinator ([@mib1185] - [#138132]) +- Explicitly pass in the config_entry in iotty coordinator ([@mib1185] - [#138140]) +- Explicitly pass in the config_entry in islamic_prayer_times coordinator ([@mib1185] - [#138133]) +- Explicitly pass in the config_entry in iotawatt coordinator ([@mib1185] - [#138141]) +- Explicitly pass in the config_entry in idasen_desk coordinator ([@mib1185] - [#138146]) +- Explicitly pass in the config_entry in husqvarna_automower coordinator ([@mib1185] - [#138149]) +- Remove non-existing via_device in La Crosse View ([@IceBotYT] - [#137995]) +- Explicitly pass in the config_entry in husqvarna_automower_ble coordinator ([@mib1185] - [#138150]) +- Explicitly pass in the config_entry in homewizard coordinator ([@mib1185] - [#138152]) +- Explicitly pass in the config_entry in iometer coordinator ([@mib1185] - [#138142]) +- Explicitly pass in the config_entry in intellifire coordinator ([@mib1185] - [#138143]) +- Explicitly pass in the config_entry in here_travel_time coordinator ([@mib1185] - [#138155]) +- Explicitly pass in the config_entry in hko coordinator ([@mib1185] - [#138154]) +- Explicitly pass in the config_entry in hunterdouglas_powerview coordinator ([@mib1185] - [#138151]) +- Explicitly pass in the config_entry in habitica coordinator ([@mib1185] - [#138156]) +- Explicitly pass in the config_entry in hydrawise coordinator ([@mib1185] - [#138148]) +- Explicitly pass in the config_entry in iron_os coordinator ([@mib1185] - [#138137]) +- Explicitly pass in the config_entry in ipp coordinator ([@mib1185] - [#138138]) +- Explicitly pass in the config_entry in homeassistant_alerts coordinator ([@mib1185] - [#138153]) +- Revert "Clear statistics when you unload the Opower integration (#135908)" ([@jbouwh] - [#138163]) +- Add unique ID for NOAA Tides sensor ([@jdelaney72] - [#137988]) +- Add scene support to roborock ([@regevbr] - [#137203]) +- Update ollama to use the ChatLog/ChatSession APIs ([@allenporter] - [#138167]) +- Use generics for deprecation helpers ([@cdce8p] - [#138171]) +- Add extra tests to `flick_electric` ([@ZephireNZ] - [#138017]) +- Bump google-cloud-pubsub to 2.28.0 ([@bdraco] - [#137742]) +- Bump pyeconet to 0.1.27 ([@w1ll1am23] - [#136400]) +- Add battery level sensor for ViCare zigbee devices ([@CFenner] - [#137813]) +- Add optional media description to Mastodon post action ([@andrew-codechimp] - [#137224]) +- Replace duplicate keys with reference, improve field description ([@NoRi2909] - [#138123]) +- Fix user input not added to chat log from contextvar ([@balloob] - [#138173]) +- Make MockChatLog reusable for other integrations ([@balloob] - [#138112]) +- Add pipeline intent-progress events based on deltas ([@balloob] - [#138095]) +- Update anthropic to use the new chatlog API ([@allenporter] - [#138178]) +- Update Ollama to use streaming API ([@allenporter] - [#138177]) +- Add pglab integration ([@pglab-electronics] - [#109725]) +- Add authorities to london_air ([@kiranbhakre] - [#137349]) +- Improve blueprint importer typing ([@cdce8p] - [#138194]) +- Adjust 'Install all test requirements' task to include base requirements ([@epenet] - [#137642]) +- Bump pybalboa to 1.1.2 ([@natekspencer] - [#138139]) +- Merge config subentry feature branch to dev ([@emontnemery] - [#136121]) +- Improve description in Intergas entry setup form ([@jbouwh] - [#138225]) +- Add caching to onedrive ([@zweckj] - [#137950]) +- bump pyHomee to 1.2.7 ([@Taraman17] - [#138212]) +- Bump github/codeql-action from 3.28.8 to 3.28.9 (@dependabot - [#138184]) +- Allow ignored IronOS devices to be set up from the user flow ([@tr4nt0r] - [#138223]) +- Replace (wrong) xiaomi vacuum action key names with friendly names ([@NoRi2909] - [#138214]) +- Change light.turn_on and light.turn_off descriptions to match HA style ([@NoRi2909] - [#138213]) +- Rework ondilo ico coordinator ([@MartinHjelmare] - [#138204]) +- Update signature of platforms' async_setup_entry ([@emontnemery] - [#138201]) +- Add Wyoming satellite announce ([@synesthesiam] - [#138221]) +- Bump aiodiscover to 2.6.0 ([@bdraco] - [#138239]) +- Add test for trying to add an entity to an unknown config subentry ([@emontnemery] - [#138211]) +- Allow specifying SIP username for outgoing calls ([@jaminh] - [#137059]) +- Bump pyipma to 3.0.9 ([@dgomes] - [#138238]) +- Remove some unused tests from Google Generative AI ([@balloob] - [#138249]) +- Unify error reporting in onboarding backup API ([@emontnemery] - [#138200]) +- Remove question marks and "true/false" from action fields in zwave_js ([@NoRi2909] - [#138263]) +- Remove "true" / "false" from field descriptions in osoenergy ([@NoRi2909] - [#138267]) +- Make field descriptions in knx actions UI-friendly ([@NoRi2909] - [#138268]) +- Add user profile info to Habitica sensor and device URL ([@tr4nt0r] - [#137152]) +- Improve device naming for ViCare integration ([@CFenner] - [#138240]) +- Simplify the description of insteon.load_all_link_database action ([@NoRi2909] - [#138275]) +- Update signature of platforms' async_setup_entry in tests ([@emontnemery] - [#138271]) +- Improve config_entries tests ([@emontnemery] - [#138274]) +- Improve error reporting in onboarding backup API ([@emontnemery] - [#138203]) +- Flexit BACnet: Cooker hood mode support ([@piotrbulinski] - [#138229]) +- Add test helper for creating a mocked backup agent ([@emontnemery] - [#138294]) +- Fix scaffolding integration generation ([@stevenh] - [#138247]) +- Use runtime_data in fjaraskupan ([@epenet] - [#138281]) +- Use runtime_data in flexit_bacnet ([@epenet] - [#138280]) +- Use runtime_data in flux_led ([@epenet] - [#138279]) +- Keep responding state on wake word start ([@synesthesiam] - [#138244]) +- Set PARALLEL_UPDATES for MotionMount integration ([@RJPoelstra] - [#138264]) +- Dsmr eon hungary ([@balazs92117] - [#138162]) +- Do not test internals in flo tests ([@epenet] - [#138306]) +- Use runtime_data in flo ([@epenet] - [#138307]) +- Refactor SmartThings sensor platform ([@joostlek] - [#138313]) +- Fix data_entry_flow.UnknownStep error message ([@emontnemery] - [#138288]) +- Improve user-facing strings of denonavr for better translations ([@NoRi2909] - [#138322]) +- Improve type hints in forked_daapd coordinator ([@epenet] - [#138287]) +- Remove remaining occurrences of "true" / "false" in telegram_bot ([@NoRi2909] - [#138329]) +- Remove "true" / "false" and key name from yeelight.set_music_mode action ([@NoRi2909] - [#138334]) +- Allow timer.finish on paused timers ([@rrooggiieerr] - [#134552]) +- Improve test coverage of config subentries and fix related issues ([@emontnemery] - [#138321]) +- Fix timer.cancel action fires timer.cancelled event even on canceled timers ([@rrooggiieerr] - [#134507]) +- Add logs to Cloud component support package ([@abmantis] - [#138230]) +- Update anthropic to use the streaming API ([@allenporter] - [#138256]) +- Expose media_player async_browse_media as service ([@PeteRager] - [#116452]) +- Use test helper for creating a mocked backup agent in backup tests ([@emontnemery] - [#138312]) +- Use entry.async_on_unload in fireservicerota ([@epenet] - [#138360]) +- Use setup_backup_integration test helper in backup tests ([@emontnemery] - [#138362]) +- Fix authentication error when adding new devices to SMLIGHT ([@tl-sl] - [#138373]) +- Improve field names and descriptions of easyEnergy actions ([@NoRi2909] - [#138319]) +- Add Homee sensor tests ([@Taraman17] - [#137200]) +- Fix typos in user-facing strings of Bayesian integration ([@NoRi2909] - [#138364]) +- Use runtime_data in geo_json_events ([@epenet] - [#138366]) +- Use runtime_data in fireservicerota ([@epenet] - [#138361]) +- Add missing loggers to Cloud ([@abmantis] - [#138374]) +- Bump stookwijzer to 1.5.2 ([@fwestenberg] - [#138384]) +- Remove unused arguments in forked_daapd initialisation ([@epenet] - [#138289]) +- Bump ohmepy to 1.3.0 ([@dan-r] - [#138380]) +- Add sensor platform to OneDrive for drive usage ([@zweckj] - [#138232]) +- Improve test coverage for onedrive ([@zweckj] - [#138410]) +- OTBR firmware API for Home Assistant Hardware ([@puddly] - [#138330]) +- Set suggested display precision in La Crosse View ([@IceBotYT] - [#138355]) +- Improve test coverage for letpot ([@jpelgrom] - [#138420]) +- Handle no_readings in La Crosse View ([@IceBotYT] - [#138354]) +- Add error handling to enphase_envoy select platform action ([@catsmanac] - [#136698]) +- Make descriptions of `data` fields in notify actions UI-friendly ([@NoRi2909] - [#138431]) +- Add night light brightness level setting to VeSync ([@iprak] - [#137544]) +- Replace wrong description reference of isy994.send_node_command ([@NoRi2909] - [#138385]) +- Simplify stage 1 in bootstrap ([@arturpragacz] - [#137668]) +- Starlink migration to `StarlinkConfigEntry` ([@davidrapan] - [#137896]) +- Mark entity-device-class as done for motionmount integration ([@RJPoelstra] - [#138459]) +- Fix Tuya unsupported cameras ([@maghiel] - [#136960]) +- Add sonos_websocket to Sonos loggers ([@PeteRager] - [#138470]) +- Replace `config.yaml` with correct `configuration.yaml` in folder_watcher ([@NoRi2909] - [#138434]) +- Bump opower to 0.9.0 ([@tronikos] - [#138433]) +- Fix race configuring zeroconf ([@bdraco] - [#138425]) +- Upgrade paho-mqtt API to v2 ([@jbouwh] - [#137613]) +- Remove scan interval option from Synology DSM ([@mib1185] - [#138490]) +- Bump PyViCare to 2.42.1 ([@CFenner] - [#138494]) +- squeezebox bump pysqueezebox to 0.12.0 ([@pssc] - [#138205]) +- Improve descriptions of snooz.transition_xx actions ([@NoRi2909] - [#138403]) +- Add entity category to non primary entities for motionmount integration ([@RJPoelstra] - [#138436]) +- Update quality scale to platinum 🏆️ for Bring! integration ([@tr4nt0r] - [#138202]) +- Disable less used entities by default in MotionMount integration ([@RJPoelstra] - [#138509]) +- Improve tests of removing and unloading config entries ([@emontnemery] - [#138432]) +- Add icon translation to MotionMount integration ([@RJPoelstra] - [#138520]) +- Fix action descriptions in Xiaomi Miio integration ([@NoRi2909] - [#138476]) +- Add sensor platform to LetPot integration ([@jpelgrom] - [#138491]) +- Bump arcam-fmj to 1.8.0 ([@jgus] - [#138422]) +- Refactor and add tests to image platform of Habitica ([@tr4nt0r] - [#135897]) +- Bump aiohttp-asyncmdnsresolver to 0.1.1 ([@bdraco] - [#138534]) +- Update action descriptions of weather integration ([@NoRi2909] - [#138540]) +- Set quality scale to platinum 🏆️ for Habitica integration ([@tr4nt0r] - [#136076]) +- Improved auth failure handling in Nice G.O. ([@IceBotYT] - [#136607]) +- Add Home Connect action with recognized programs and options ([@Diegorro98] - [#130662]) +- Add binary sensor platform to LetPot integration ([@jpelgrom] - [#138554]) +- Add 6 new sensors to qBittorrent integration ([@Xitee1] - [#138446]) +- Add time entity to balboa ([@natekspencer] - [#138248]) +- Bump aioesphomeapi to 29.0.2 ([@bdraco] - [#138549]) +- Prevent voice wizard from crashing for wyoming/voip ([@synesthesiam] - [#138547]) +- Bump zeroconf to 0.144.3 ([@bdraco] - [#138553]) +- Use language util to match intent language ([@synesthesiam] - [#138560]) +- Fix and improve Home Connect strings ([@Diegorro98] - [#138583]) +- Bump pybalboa to 1.1.3 ([@natekspencer] - [#138557]) +- Bump PyViCare to 2.43.0 ([@CFenner] - [#138564]) +- Remove dynamic rate limits from Tesla Fleet ([@Bre77] - [#138576]) +- Add Event entity states to diagnostics for Bang & Olufsen ([@mj23000] - [#135859]) +- Provide part of uuid when requesting token for HomeWizard v2 API ([@DCSBL] - [#138586]) +- Fix home connect coffe-milk ratio option ([@Diegorro98] - [#138593]) +- Disable zwave_js testing resetting the controller ([@emontnemery] - [#138595]) +- Add switch to toggle filter cycle 2 on balboa spas ([@natekspencer] - [#138605]) +- Bump pyeconet to 0.1.28 ([@CodingSquirrel] - [#138610]) +- Bump plugwise to v1.7.2 ([@bouwew] - [#138613]) +- Add issues for data cap to onedrive ([@zweckj] - [#138411]) +- Replace alarm action descriptions with wording from online docs ([@NoRi2909] - [#138608]) +- Update integrations screenshot in README ([@IceBotYT] - [#138555]) +- Update action description in ecovacs integration to match HA style ([@NoRi2909] - [#138548]) +- Use correct inputs for relative time and duration options ([@Diegorro98] - [#138619]) +- Add missing unit for Withings snore sensor ([@teynar] - [#138517]) +- Fix sentence-casing in ZHA integration, capitalize names ([@NoRi2909] - [#138636]) +- Use gibibytes for onedrive ([@zweckj] - [#138637]) +- Replace opentherm_gw action key name with friendly name for UI ([@NoRi2909] - [#138634]) +- Fix sentence-casing and capitalization of "Zigbee" in smlight ([@NoRi2909] - [#138647]) +- Flexit bacnet/quality preparations ([@lellky] - [#138514]) +- Allow wifi switches for mesh repeaters in AVM Fritz!Box Tools ([@mib1185] - [#135456]) +- Add quality scale bronze for flexit_bacnet ([@lellky] - [#138309]) +- Bump sense_energy to 0.13.5 ([@kbickar] - [#138659]) +- Allow renaming of backup files in Synology DSM ([@mib1185] - [#138652]) +- Improve remember the milk storage ([@MartinHjelmare] - [#138618]) +- Add OptionsFlow to Squeezebox to allow setting Browse Limit and Volume Step ([@peteS-UK] - [#129578]) +- Add latest Nighthawk WiFi 7 routers to V2 models ([@lanthaler] - [#138675]) +- Bump stookwijzer==1.5.4 ([@fwestenberg] - [#138678]) +- Move some setups during onboarding to background ([@balloob] - [#138558]) +- Allow removal of stale HEOS devices ([@andrewsayre] - [#138677]) +- Comply with parallel updates quality rule ([@lellky] - [#138672]) +- Update foscam action descriptions to match HA style ([@NoRi2909] - [#138664]) +- Add preconditioning number entity to Ohme ([@dan-r] - [#138346]) +- Improve 17track action descriptions by using those from the online docs ([@NoRi2909] - [#138698]) +- Elmax - fix issue 136877 ([@albertogeniola] - [#138419]) +- Fix casing in Sensibo action descriptions ([@NoRi2909] - [#138701]) +- Bump yolink api 0.4.8 ([@matrixd2] - [#138703]) +- Bump uv to 0.6.0 ([@edenhaus] - [#138707]) +- Optimize Refoss state_class of Sensor ([@ashionky] - [#138266]) +- Add repair-issue that backup location setup is missing in Synology DSM ([@mib1185] - [#138233]) +- Use correct camel-case for OpenThread, reword error message ([@NoRi2909] - [#138651]) +- Improve type hints in base entities ([@epenet] - [#138708]) +- Add common entity module to pylint plugin ([@epenet] - [#138706]) +- Update mypy-dev to 1.16.0a3 ([@cdce8p] - [#138655]) +- Fix snapshots timezone in Cloud tests ([@abmantis] - [#138393]) +- Add translations for exceptions ([@lellky] - [#138669]) +- Create HEOS devices after integration setup ([@andrewsayre] - [#138721]) +- Add LV-RH131S-WM Air Purifier ([@CloCkWeRX] - [#138626]) +- Move ZHA debug logs handling out of event loop ([@abmantis] - [#138568]) +- Add sensors for washer and system boiler in LG ThinQ ([@LG-ThinQ-Integration] - [#137514]) +- Improve config entry state transitions when unloading and removing entries ([@emontnemery] - [#138522]) +- Fix typos in qBittorrent exceptions strings ([@NoRi2909] - [#138728]) +- Update HEOS repair issues quality scale item ([@andrewsayre] - [#138724]) +- Fix race condition on eheimdigital coordinator setup ([@autinerd] - [#138580]) +- Fix small typo in qbittorrent strings.json ([@Xitee1] - [#138734]) +- Fix user-facing strings of the NWS integration ([@NoRi2909] - [#138727]) +- Mark reauthentication-flow as exempt for flexit_bacnet ([@lellky] - [#138740]) +- Mark action-exceptions as exempt for flexit_bacnet ([@lellky] - [#138739]) +- Fix wrong description of teslemetry.set_scheduled_charging action ([@NoRi2909] - [#138723]) +- Bump PyViCare to 2.43.1 ([@CFenner] - [#138737]) +- Bump aioesphomeapi to 29.1.0 ([@bdraco] - [#138742]) +- Fix temp files of mqtt CI tests not cleaned up properly ([@jbouwh] - [#138741]) +- Update Diagnostics in Teslemetry ([@Bre77] - [#138759]) +- Allow playback of h265 encoded Reolink video ([@starkillerOG] - [#138667]) +- Bump zeroconf to 0.145.1 ([@bdraco] - [#138763]) +- Fixing casing mistakes in user-facing strings of renault ([@NoRi2909] - [#138729]) +- Make spelling of "BSB-Lan" consistent ([@NoRi2909] - [#138766]) +- Fix Z-WaveJS inclusion in the background ([@MindFreeze] - [#138717]) +- Fix grammar in evohome.reset_system action, consistently add "mode" ([@NoRi2909] - [#138777]) +- Add support for announce to Squeezebox media player ([@peteS-UK] - [#129460]) +- Add HEOS entity service to set group volume level ([@andrewsayre] - [#136885]) +- airq: add more verbose debug logging ([@Sibgatulin] - [#138192]) +- Add threshold sensor to Aranet ([@parkerbxyz] - [#137291]) +- Add switch flex button support. ([@matrixd2] - [#137524]) +- Add `_shelly._tcp` to Shelly zeroconf configuration ([@bieniu] - [#138782]) +- Ecobee: Report Humidifier Action ([@SLaks] - [#138756]) +- Bump uv to 0.6.1 ([@edenhaus] - [#138790]) +- Reorder Dockerfile to improve caching ([@edenhaus] - [#138789]) +- Fix shelly not being able to be setup from user flow when already discovered ([@bdraco] - [#138807]) +- Add Home Connect to .strict-typing ([@Diegorro98] - [#138799]) +- Add Home Connect entities that weren't added before ([@Diegorro98] - [#138796]) +- Set Home Connect beverages counters as diagnostics ([@Diegorro98] - [#138798]) +- Add connectivity binary sensor to Home Connect ([@Diegorro98] - [#138795]) +- Update Home Assistant base image to 2025.02.1 ([@frenck] - [#138746]) +- Fix typos in strings.json files ([@CFenner] - [#138601]) +- Add HEOS group volume down/up actions ([@andrewsayre] - [#138801]) +- Set clean_start=True on connect to MQTT broker ([@skobow] - [#136026]) +- Bump aioesphomeapi to 29.1.1 ([@bdraco] - [#138827]) +- Move blocking code to executor job in MQTT CI test helper ([@jbouwh] - [#138815]) +- Bump habluetooth to 3.22.0 ([@bdraco] - [#138812]) +- Add button for bond light temp toggle feature ([@HA-Roberto] - [#135379]) +- Electric Kiwi: Add quality scale ([@mikey0000] - [#138680]) +- add icon to select ([@mikey0000] - [#138834]) +- Add test for flexit_bacnet hvac mode ([@lellky] - [#138748]) +- Improve performance of calculating state ([@bdraco] - [#138832]) +- Add sensors for pellets boiler in ViCare integration ([@CFenner] - [#138563]) +- Electric Kiwi: Parallel updates ([@mikey0000] - [#138839]) +- Remove unused code in the climate entity of the flexit_bacnet integration ([@lellky] - [#138840]) +- Update xknx to 3.6.0 ([@farmio] - [#138838]) +- Modify string water_heater's off state ([@LG-ThinQ-Integration] - [#137627]) +- Add check_connection parameter to cloud login methods and handle AlreadyConnectedError ([@ludeeus] - [#138699]) +- Adds Tado Child Lock support ([@proohit] - [#135837]) +- Add WIND_DIRECTION to SensorDeviceClass and NumberDeviceClass ([@edenhaus] - [#138714]) +- Refactor eheimdigital setup_device_entities ([@autinerd] - [#138837]) +- Homee switch platform ([@Taraman17] - [#137457]) +- Update play_media parameter description in Media Player ([@PeteRager] - [#138855]) +- Revert "Add assistant filter to expose entities list command" ([@emontnemery] - [#138867]) +- Improve reading clarity of steps code in scripts helper part 1 ([@arturpragacz] - [#138628]) +- Add exception translation for async_set_temperature in integration flexit_bacnet ([@lellky] - [#138870]) +- Select preferred discovered HEOS host ([@andrewsayre] - [#138779]) +- Bump onedrive-personal-sdk to 0.0.11 ([@zweckj] - [#138861]) +- Improve reading clarity of steps code in scripts helper ([@arturpragacz] - [#134395]) +- Capitalize all occurrences of "Bond" brand name ([@NoRi2909] - [#138876]) +- Tuya camera rm duplication ([@maghiel] - [#138794]) +- Make field description of snips.say_action UI-friendly ([@NoRi2909] - [#138276]) +- Fix scaffolding generations ([@stevenh] - [#138820]) +- Make description of `input_select.select_next` action consistent ([@NoRi2909] - [#138877]) +- Filter out certain intents from being matched in local fallback ([@balloob] - [#137763]) +- Add LINAK virtual integration supported by Idasen Desk ([@abmantis] - [#138749]) +- Remove some dead code from the conversation integration ([@emontnemery] - [#138878]) +- Add initial basic GitHub Copilot instructions ([@frenck] - [#137754]) +- Environment Canada: Add a detailed forecast action ([@gwww] - [#138806]) +- Switch cleanup for Shelly (part 1) ([@chemelli74] - [#138791]) +- Use xmod model info for Shelly XMOD devices ([@chemelli74] - [#137013]) +- Bump pyloadapi to 1.4.1 ([@tr4nt0r] - [#138894]) +- Add light platform to qbus ([@thomasddn] - [#136168]) +- Move test before setup coordinator `_async_setup` in pyLoad integration ([@tr4nt0r] - [#138893]) +- Set parallel_updates in pyLoad integration ([@tr4nt0r] - [#138897]) +- Minor readability improvement of Spotify browse media ([@emontnemery] - [#138907]) +- Bump docker/build-push-action from 6.13.0 to 6.14.0 (@dependabot - [#138902]) +- Adjust config entry state checks in qbus ([@emontnemery] - [#138911]) +- Adjust config entry state checks in reolink ([@emontnemery] - [#138909]) +- Adjust config entry state check in yolink ([@emontnemery] - [#138904]) +- Bump actions/cache from 4.2.0 to 4.2.1 (@dependabot - [#138901]) +- Adjust config entry state checks in esphome ([@emontnemery] - [#138914]) +- Adjust config entry state checks in renault ([@emontnemery] - [#138910]) +- Adjust config entry state checks in mcp_server ([@emontnemery] - [#138913]) +- Adjust config entry state checks in nest ([@emontnemery] - [#138912]) +- Adjust cleanup of removed integration aladdin_connect ([@emontnemery] - [#138917]) +- Improve action descriptions of ness_alarm integration ([@NoRi2909] - [#138921]) +- Bump bluetooth-auto-recovery to 1.4.4 ([@bdraco] - [#138895]) +- Allow use of insecure ciphers in rest_command ([@jpbede] - [#138886]) +- Add button platform to Homee ([@Taraman17] - [#138923]) +- Adjust cleanup of removed integration eight_sleep ([@emontnemery] - [#138926]) +- Adjust cleanup of removed integration life360 ([@emontnemery] - [#138928]) +- Adjust cleanup of removed integration linear_garage_door ([@emontnemery] - [#138929]) +- Adjust cleanup of removed integration mazda ([@emontnemery] - [#138930]) +- Adjust cleanup of removed integration myq ([@emontnemery] - [#138931]) +- Adjust cleanup of removed integration spider ([@emontnemery] - [#138932]) +- Bump habluetooth to 3.22.1 and bleak-retry-connector to 3.9.0 ([@bdraco] - [#138898]) +- Fix ability to set HEOS options ([@andrewsayre] - [#138235]) +- Allow files to be directly deleted in onedrive ([@zweckj] - [#138908]) +- Remove helper.recorder.async_wait_recorder ([@emontnemery] - [#138935]) +- Add SensorPush Cloud integration ([@sstallion] - [#134223]) +- Adjust config entry state check in vizio ([@emontnemery] - [#138905]) +- Bump ruff to 0.9.7 ([@joostlek] - [#138939]) +- Add climate entity tests for flexit_bacnet and mark test coverage done (99%) ([@lellky] - [#138887]) +- Minor adjustment of recorder helper ([@emontnemery] - [#138941]) +- Improve names and descriptions of `media_player.xxx_set` actions ([@NoRi2909] - [#138773]) +- Add light platform to Homee ([@Taraman17] - [#138776]) +- Revert Python 3.13.2 requirement for now ([@frenck] - [#138948]) +- Add error handling to enphase_envoy number platform action ([@catsmanac] - [#136812]) +- Bump propcache to 0.3.0 ([@bdraco] - [#138949]) +- Use capitalized "Modbus" as name, replace "slave" with "server" ([@NoRi2909] - [#138945]) +- Restore `PaddleSwitchPico` (Pico Paddle Remote) device trigger to Lutron Caseta ([@bdraco] - [#137689]) +- Adjust DSL line status options in SFR Box integration ([@epenet] - [#136425]) +- Bump arcam-fmj to 1.8.1 ([@jgus] - [#138959]) +- Jellyfin - Improve media image quality ([@zackslash] - [#138958]) +- Add debug launch configuration for current open test file ([@proohit] - [#137177]) +- Bump inkbird-ble to 0.7.0 ([@bdraco] - [#138964]) +- Bump universal-silabs-flasher to v0.0.29 ([@puddly] - [#138970]) +- Add ability to get callback when a config entry state changes ([@zweckj] - [#138943]) +- Mark flexit_bacnet as silver on the quality scale 🥈 ([@lellky] - [#138951]) +- Remember inkbird device type in the config entry ([@bdraco] - [#138967]) +- Bump aiounifi to v82 ([@Samywamy10] - [#138975]) +- Media Player tests patch demo object ([@PeteRager] - [#138854]) +- Update HEOS host from discovery ([@andrewsayre] - [#138950]) +- Extend initial IQS state for ViCare ([@CFenner] - [#138952]) +- Homee: fix state_class of rain sensors. ([@Taraman17] - [#138310]) +- Bump sigstore/cosign-installer from 3.8.0 to 3.8.1 (@dependabot - [#138973]) +- Migrate `homeassistant_hardware` to use `FirmwareInfo` instead of just the application type ([@puddly] - [#138874]) +- Don't fail on successful relogin in pyLoad integration ([@tr4nt0r] - [#138936]) +- Fix off by one bug when sorting tasks in Habitica integration ([@tr4nt0r] - [#138993]) +- Add remember the milk entity tests ([@MartinHjelmare] - [#138991]) +- Fix Shelly model name for xmod devices ([@thecode] - [#138984]) +- Unifi zone based rules ([@Samywamy10] - [#138974]) +- Bump wolf-comm to 0.0.19 ([@mtielen] - [#138997]) +- Bump qbusmqttapi to 1.3.0 ([@thomasddn] - [#139000]) +- Fix Shelly mock initialization for sleepy RPC device in tests ([@thecode] - [#139003]) +- Bump HEOS quality scale to platinum ([@andrewsayre] - [#138995]) +- Add daily and monthly consumption sensors to the rympro integration ([@nivstein] - [#137953]) +- Allow ignored thermobeacon devices to be set up from the user flow ([@bdraco] - [#139009]) +- Bump pyfritzhome 0.6.16 ([@mib1185] - [#139011]) +- Add target_temp_step attribute to water_heater ([@LG-ThinQ-Integration] - [#138920]) +- Add button to set date and time for thermopro TP358/TP393 ([@stephan48] - [#135740]) +- Fix write_registers calling after the upgrade of pymodbus to 3.8.x ([@crug80] - [#139017]) +- Swap the Gemini SDK to the newly released Unified SDK ([@IvanLH] - [#138246]) +- Adjust config entry state check in unifi ([@emontnemery] - [#138906]) +- Bump habluetooth to 3.24.0 ([@bdraco] - [#139021]) +- Fix station parser problem in Trafikverket Train ([@gjohansson-ST] - [#139035]) +- Implement base entity for smhi ([@gjohansson-ST] - [#139042]) +- Bump holidays to 0.67 ([@gjohansson-ST] - [#139036]) +- Bump async-interrupt to 1.2.2 ([@bdraco] - [#139056]) +- Bump aiodhcpwatcher to 1.1.1 ([@bdraco] - [#139058]) +- Bump aiohttp-fast-zlib to 0.2.3 ([@bdraco] - [#139062]) +- Bump fnv-hash-fast to 1.2.3 ([@bdraco] - [#139059]) +- Improve descriptions in `nuki.lock_n_go` action ([@NoRi2909] - [#139067]) +- Bump Stookwijzer to 1.5.7 ([@fwestenberg] - [#139063]) +- Bump cached-ipaddress to 0.8.1 ([@bdraco] - [#139061]) +- Use ConfigEntry.runtime_data to store Minecraft Server runtime data ([@elmurato] - [#139039]) +- Bump ulid-transform to 1.2.1 ([@bdraco] - [#139054]) +- Bump pyrisco to 0.6.7 ([@FredericMa] - [#139065]) +- Bump pyfritzhome to 0.6.17 ([@mib1185] - [#139066]) +- Fix docstring parameter in entity platform ([@joostlek] - [#139070]) +- Add entities that represent program options to Home Connect ([@Diegorro98] - [#138674]) +- Add buttons to Home Connect ([@Diegorro98] - [#138792]) +- Fix minimum schema version to run event_id_post_migration ([@bdraco] - [#139014]) +- Fix dryer's remaining time issue ([@LG-ThinQ-Integration] - [#138764]) +- Bump aiodiscover to 2.6.1 ([@bdraco] - [#139055]) +- Remove unnecessary debug message from vesync ([@iprak] - [#139083]) +- Bump py-synologydsm-api to 2.7.0 ([@mib1185] - [#139082]) +- Add select setting entities to Home Connect ([@Diegorro98] - [#138884]) +- Fix typo in SSH connection string for cisco ios device_tracker ([@javers99] - [#138584]) +- Bump pyprosegur to 0.0.14 ([@dgomes] - [#139077]) +- OpenAI to report when running out of funds ([@balloob] - [#139088]) +- Add tests to Evohome for its native services ([@zxdavb] - [#139104]) +- Add Home Connect functional light color temperature percent setting ([@Diegorro98] - [#139096]) +- Backup location feature requires Synology DSM 6.0 and higher ([@mib1185] - [#139106]) +- Fetch allowed values for select entities at Home Connect ([@Diegorro98] - [#139103]) +- Bump aiohue to 4.7.4 ([@joostlek] - [#139108]) +- Waze action support entities ([@TomBrien] - [#139068]) +- Remove individual lcn devices for each entity ([@alengwenus] - [#136450]) +- Allow rename of the backup folder for OneDrive ([@zweckj] - [#138407]) +- Deprecate Home Connect command actions ([@Diegorro98] - [#139093]) +- Move remember the milk config storage to own module ([@MartinHjelmare] - [#138999]) +- Test remember the milk configurator ([@MartinHjelmare] - [#139122]) +- Change backup listener calls for existing backup integrations ([@zweckj] - [#138988]) +- Bump thermobeacon-ble to 0.8.0 ([@bdraco] - [#139119]) +- Complete remember the milk typing ([@MartinHjelmare] - [#139123]) +- Fix flakey onedrive tests ([@zweckj] - [#139129]) +- Allow arbitrary Gemini attachments ([@SLaks] - [#138751]) +- bump soco to 0.30.9 ([@PeteRager] - [#139143]) +- Bump github/codeql-action from 3.28.9 to 3.28.10 (@dependabot - [#139162]) +- Bump aiowebostv to 0.7.0 ([@thecode] - [#139145]) +- Bump androidtvremote2 to 0.2.0 ([@tronikos] - [#139141]) +- Bump actions/upload-artifact from 4.6.0 to 4.6.1 (@dependabot - [#139161]) +- Consider the zone radius in proximity distance calculation ([@Spcemarine] - [#138819]) +- Remove unnecessary min/max setting of WATER_HEATER ([@LG-ThinQ-Integration] - [#138969]) +- Remove setup of rpi_power from onboarding ([@emontnemery] - [#139168]) +- Better handle runtime recovery mode in bootstrap ([@arturpragacz] - [#138624]) +- Add Snoo integration ([@Lash-L] - [#134243]) +- Bump zwave-js-server-python to 0.60.1 ([@MartinHjelmare] - [#139185]) +- Fix description of `cycle` field in `input_select.select_previous` action ([@NoRi2909] - [#139032]) +- Add melcloud standard horizontal vane modes ([@antlarr] - [#136654]) +- Change code owner - MotionMount integration ([@laiho-vogels] - [#139187]) +- Bump Weheat to 2025.2.22 ([@SteveDiks] - [#139186]) +- Add ambient temperature and humidity status sensors to NUT ([@tdfountain] - [#124181]) +- Update LG webOS TV diagnostics to use tv_info and tv_state dictionaries ([@thecode] - [#139189]) +- Add flag to backup store to track backup wizard completion ([@emontnemery] - [#138368]) +- Add translations for exceptions and data descriptions to pyLoad integration ([@tr4nt0r] - [#138896]) +- Refactor to-do list order and reordering in Habitica ([@tr4nt0r] - [#138566]) +- Add WebDAV backup agent ([@jpbede] - [#137721]) +- Remove name in Minecraft Server config entry ([@elmurato] - [#139113]) +- Add vesync debug mode in library ([@cdnninja] - [#134571]) +- Fix return value for DataUpdateCoordinator._async setup ([@MartinHjelmare] - [#139181]) +- Fix race in WS command recorder/info ([@emontnemery] - [#139177]) +- Bump aiohttp to 3.11.13 ([@bdraco] - [#139197]) +- Update Linkplay constants for Arylic S10+ and Arylic Up2Stream Amp 2.1 ([@ozonejunkieau] - [#138198]) +- Add support for Apps and Radios to Squeezebox Media Browser ([@peteS-UK] - [#135009]) +- Add azure_storage as backup agent ([@zweckj] - [#134085]) +- Bump onedrive quality scale to platinum ([@zweckj] - [#137451]) +- Bump pyloadapi to v1.4.2 ([@tr4nt0r] - [#139140]) +- Add missing translations to switchbot ([@emontnemery] - [#139212]) +- Fix bug in check_translations fixture ([@emontnemery] - [#139206]) +- Add missing exception translation to Home Connect ([@Diegorro98] - [#139218]) +- Configure trusted publishing for PyPI file upload ([@cdce8p] - [#137607]) +- Bump aiostreammagic to 2.11.0 ([@noahhusby] - [#139213]) +- Add missing exception translation to Home Connect ([@Diegorro98] - [#139223]) +- Bump ohmepy to 1.3.2 ([@dan-r] - [#139013]) +- Fix kitchen_sink statistic issues ([@emontnemery] - [#139228]) +- Bump aiowebdav2 to 0.3.0 ([@jpbede] - [#139202]) +- Bump pylamarzocco to 1.4.7 ([@zweckj] - [#139231]) +- Add backup helper ([@emontnemery] - [#139199]) +- Reduce requests made by webdav ([@jpbede] - [#139238]) +- Add Homee valve platform ([@Taraman17] - [#139188]) +- Fix units for LCN sensor ([@alengwenus] - [#138940]) +- Add Ohme voltage and slot list sensor ([@dan-r] - [#139203]) +- Initiate source list as instance variable in Volumio ([@joostlek] - [#139243]) +- `logbook.log` action: Make description of `name` field UI-friendly ([@NoRi2909] - [#139200]) +- Treat "Twist Assist" & "Block to Block" as feature names and add descriptions in Z-Wave ([@NoRi2909] - [#139239]) +- Add climate's swing mode to LG ThinQ ([@LG-ThinQ-Integration] - [#137619]) +- Bump aiowithings to 3.1.6 ([@joostlek] - [#139242]) +- Add update reward action to Habitica integration ([@tr4nt0r] - [#139157]) +- Add Re-Auth Flow to vesync ([@cdnninja] - [#137398]) +- Rework the velbus configflow to make it more user-friendly ([@cereal2nd] - [#135609]) +- Add missing ATTR_HVAC_MODE of async_set_temperature to LG ThinQ ([@LG-ThinQ-Integration] - [#137621]) +- Make Radarr units translatable ([@danbishop] - [#139250]) +- Improve Minecraft Server config flow tests ([@elmurato] - [#139251]) +- Revert "Bump Stookwijzer to 1.5.7" ([@edenhaus] - [#139253]) +- Add parallel updates to Home Connect ([@Diegorro98] - [#139255]) +- Bump fnv-hash-fast to 1.2.6 ([@bdraco] - [#139246]) +- Make default dim level configurable in Lutron ([@cameronr] - [#137127]) +- Set PARALLEL_UPDATES in all Minecraft Server platforms ([@elmurato] - [#139259]) +- Bump aiowebostv to 0.7.1 ([@thecode] - [#139244]) +- Consistently capitalize "Velbus" brand name, camel-case "VelServ" ([@NoRi2909] - [#139257]) +- Bump cached-ipaddress to 0.9.2 ([@bdraco] - [#139245]) +- Make Sonarr component's units translatable ([@danbishop] - [#139254]) +- Bump stookwijzer to 1.5.8 ([@fwestenberg] - [#139258]) +- Bump Velbus to bronze quality scale ([@cereal2nd] - [#139256]) +- Add Homee number platform ([@Taraman17] - [#138962]) +- Fix yolink lock v2 state update ([@matrixd2] - [#138710]) +- Set Minecraft Server quality scale to silver ([@elmurato] - [#139265]) +- Add OpenWeatherMap Minute forecast action ([@10100011] - [#128799]) +- Fix Ezviz entity state for cameras that are offline ([@RenierM26] - [#136003]) +- Use proper camel-case for "VeSync", fix sentence-casing in title ([@NoRi2909] - [#139252]) +- Add request made by `rest_command` to debug log ([@jpbede] - [#139266]) +- Create repair for configured unavailable backup agents ([@MartinHjelmare] - [#137382]) +- Improve description of `openweathermap.get_minute_forecast` action ([@NoRi2909] - [#139267]) +- Use right import in ezviz ([@joostlek] - [#139272]) +- Change touchline dependency to pytouchline_extended ([@brondum] - [#136362]) +- Rename description field to notes in Habitica action ([@tr4nt0r] - [#139271]) +- Add support for effects in Govee lights ([@Galorhallen] - [#137846]) +- Add Burbank Water and Power (BWP) virtual integration ([@tronikos] - [#139027]) +- Update adext to 0.4.4 ([@pleasantone] - [#139151]) +- Add sound mode support to Onkyo ([@arturpragacz] - [#133531]) +- Use new python library for picnic component ([@codesalatdev] - [#139111]) +- Bump securetar to 2025.2.1 ([@emontnemery] - [#139273]) +- Fix race in async_get_integrations with multiple calls when an integration is not found ([@bdraco] - [#139270]) +- Bump python-overseerr to 0.7.1 ([@joostlek] - [#139263]) +- Add coordinator to SMHI ([@gjohansson-ST] - [#139052]) +- Make Radarr unit translation lowercase ([@danbishop] - [#139261]) +- Add common state translation string for charging and discharging ([@mib1185] - [#139074]) +- Add test fixture ignore_translations_for_mock_domains ([@emontnemery] - [#139235]) +- Fix grammar in loader comments ([@bdraco] - [#139276]) +- Bump aiohomeconnect to 0.15.0 ([@Diegorro98] - [#139277]) +- Add current cavity temperature sensor to Home Connect ([@Diegorro98] - [#139282]) +- Bump anthropic to 0.47.2 ([@Shulyaka] - [#139283]) +- Adjust recorder validate_statistics handler ([@emontnemery] - [#139229]) +- Fix re-connect logic in Apple TV integration ([@postlund] - [#139289]) +- Revert "Bump stookwijzer==1.5.8" ([@bdraco] - [#139287]) +- Add option to ESPHome to subscribe to logs ([@bdraco] - [#139073]) +- Remove not used constants in smhi ([@gjohansson-ST] - [#139298]) +- Bump `aioshelly` to version `13.0.0` ([@bieniu] - [#139294]) +- Remove timeout from vscode test launch configuration ([@abmantis] - [#139288]) +- Add missing Home Connect context at event listener registration for appliance options ([@Diegorro98] - [#139292]) +- Sort common translation strings ([@mib1185] - [#139300]) +- Add album artist media browser category to Squeezebox ([@peteS-UK] - [#139210]) +- Bump aioesphomeapi to 29.2.0 ([@bdraco] - [#139309]) +- Bump actions/download-artifact from 4.1.8 to 4.1.9 (@dependabot - [#139317]) +- Bump home-assistant/builder from 2024.08.2 to 2025.02.0 (@dependabot - [#139316]) +- Adjust remote ESPHome log subscription level on logging change ([@bdraco] - [#139308]) +- Fix homeassistant/expose_entity/list ([@emontnemery] - [#138872]) +- Bump `accuweather` to version `4.1.0` ([@bieniu] - [#139320]) +- Bump ZHA to 0.0.50 ([@TheJulianJES] - [#139318]) +- Bump pytechnove to 2.0.0 ([@Moustachauve] - [#139314]) +- Update python-smarttub dependency to 0.0.39 ([@mdz] - [#139313]) +- Fix anthropic blocking call ([@Shulyaka] - [#139299]) +- Bump pybotvac to 0.0.26 ([@benbridts] - [#139330]) +- Bump stookwijzer==1.6.0 ([@fwestenberg] - [#139332]) +- Improve error message when failing to create backups ([@emontnemery] - [#139262]) +- Add translations and icon for Twinkly select entity ([@piitaya] - [#139336]) +- Bump recommended ESPHome Bluetooth proxy version to 2025.2.1 ([@bdraco] - [#139196]) +- Add default_db_url flag to WS command recorder/info ([@emontnemery] - [#139333]) +- Improve action descriptions of LIFX integration ([@NoRi2909] - [#139329]) +- Bump Music Assistant client to 1.1.1 ([@marcelveldt] - [#139331]) +- Refactor SmartThings ([@joostlek] - [#137940]) +- Add keys initiate_flow and entry_type to data entry translations ([@emontnemery] - [#138882]) +- Add support for swing horizontal mode for mqtt climate ([@jbouwh] - [#139303]) +- Add entity translations to SmartThings ([@joostlek] - [#139342]) +- Improve logging for selected options in Onkyo ([@arturpragacz] - [#139279]) +- Change no fixtures comment in SmartThings ([@joostlek] - [#139344]) +- Set options for carbon monoxide detector sensor in SmartThings ([@joostlek] - [#139346]) +- Improve calculating supported features in template light ([@jbouwh] - [#139339]) +- Update frontend to 20250226.0 ([@bramkragten] - [#139340]) +- Use particulate matter device class in SmartThings ([@joostlek] - [#139351]) +- Set options for dishwasher job state sensor in SmartThings ([@joostlek] - [#139349]) +- Set options for dishwasher machine state sensor in SmartThings ([@joostlek] - [#139347]) +- Set options for alarm sensor in SmartThings ([@joostlek] - [#139345]) +- Fix variable scopes in scripts ([@arturpragacz] - [#138883]) +- Add translatable states to SmartThings media source input ([@joostlek] - [#139353]) +- Add translatable states to SmartThings media playback ([@joostlek] - [#139354]) +- Add translatable states to oven mode in SmartThings ([@joostlek] - [#139356]) +- Add translatable states to oven job state in SmartThings ([@joostlek] - [#139361]) +- Add translatable states to oven machine state ([@joostlek] - [#139358]) +- Add translatable states to robot cleaner movement in SmartThings ([@joostlek] - [#139363]) +- Add translatable states to robot cleaner cleaning mode in SmartThings ([@joostlek] - [#139362]) +- Add translatable states to washer machine state in SmartThings ([@joostlek] - [#139366]) +- Add translatable states to smoke detector in SmartThings ([@joostlek] - [#139365]) +- Add translatable states to robot cleaner turbo mode in SmartThings ([@joostlek] - [#139364]) +- Add translatable states to washer job state in SmartThings ([@joostlek] - [#139368]) +- Improve Home Connect oven cavity temperature sensor ([@Diegorro98] - [#139355]) +- Add translatable states to dryer machine state in Smartthings ([@joostlek] - [#139369]) +- Add translatable states to dryer job state in SmartThings ([@joostlek] - [#139370]) +- Don't create entities for disabled capabilities in SmartThings ([@joostlek] - [#139343]) +- Fix typo in SmartThing string ([@joostlek] - [#139373]) +- Bump stookwijzer==1.6.1 ([@fwestenberg] - [#139380]) +- Bump ZHA to 0.0.51 ([@puddly] - [#139383]) +- Bump intents to 2025.2.26 ([@synesthesiam] - [#139387]) +- Fix fetch options error for Home connect ([@Diegorro98] - [#139392]) +- Bump onedrive to 0.0.12 ([@zweckj] - [#139410]) +- Bump pysmartthings to 2.0.0 ([@joostlek] - [#139418]) +- Bump habluetooth to 3.24.1 ([@bdraco] - [#139420]) +- Fix conversation agent fallback ([@balloob] - [#139421]) +- Add diagnostics to SmartThings ([@joostlek] - [#139423]) +- Bump bleak-esphome to 2.8.0 ([@bdraco] - [#139426]) +- Bump reolink-aio to 0.12.1 ([@starkillerOG] - [#139427]) +- Fix Music Assistant media player entity features ([@marcelveldt] - [#139428]) +- Update frontend to 20250227.0 ([@bramkragten] - [#139437]) +- Bump weatherflow4py to 1.3.1 ([@jeeftor] - [#135529]) +- Add new mediatypes to Music Assistant integration ([@marcelveldt] - [#139338]) +- Move climate intent to homeassistant integration ([@synesthesiam] - [#139371]) +- Bump aiohomeconnect to 0.15.1 ([@Diegorro98] - [#139445]) +- Fix SmartThings diagnostics ([@joostlek] - [#139447]) +- Bump pysmartthings to 2.0.1 ([@joostlek] - [#139454]) +- Change webdav namespace to absolut URI ([@jpbede] - [#139456]) +- Improve onedrive migration ([@zweckj] - [#139458]) +- Bump pysmartthings to 2.1.0 ([@joostlek] - [#139460]) +- Only lowercase SmartThings media input source if we have it ([@joostlek] - [#139468]) +- Set SmartThings suggested display precision ([@joostlek] - [#139470]) +- Fix Gemini Schema validation for #139416 ([@IvanLH] - [#139478]) +- Fail recorder.backup.async_pre_backup if Home Assistant is not running ([@emontnemery] - [#139491]) +- Fix shift state in Teslemetry ([@Bre77] - [#139505]) +- Improve error handling in CoreBackupReaderWriter ([@emontnemery] - [#139508]) +- Add diagnostics to onedrive ([@zweckj] - [#139516]) +- Make the Tuya backend library compatible with the newer paho mqtt client. ([@jbouwh] - [#139518]) +- Suppress unsupported event 'EVT_USP_RpsPowerDeniedByPsuOverload' by bumping aiounifi to v83 ([@Kane610] - [#139519]) +- Don't split wheels builder anymore ([@edenhaus] - [#139522]) +- Bump yt-dlp to 2025.02.19 ([@joostlek] - [#139526]) +- Update frontend to 20250228.0 ([@bramkragten] - [#139531]) +- Add missing 'state_class' attribute for Growatt plant sensors ([@LaithBudairi] - [#132145]) +- Bump env_canada to 0.8.0 ([@maruel] - [#138237]) +- Fix Nederlandse Spoorwegen to ignore trains in the past ([@Martreides] - [#138331]) +- Use multiple indexed group-by queries to get start time states for MySQL ([@bdraco] - [#138786]) +- Specify recorder as after dependency in sql integration ([@gjohansson-ST] - [#139037]) +- Handle IPv6 URLs in devolo Home Network ([@Shutgun] - [#139191]) +- Fix bug in derivative sensor when source sensor's state is constant ([@jgrande] - [#139230]) +- Ensure Hue bridge is added first to the device registry ([@marcelveldt] - [#139438]) +- Fix update data for multiple Gree devices ([@filipagh] - [#139469]) +- Use last event as color mode in SmartThings ([@joostlek] - [#139473]) +- Set SmartThings delta energy to Total ([@joostlek] - [#139474]) +- Fix alert not respecting can_acknowledge setting ([@StaleLoafOfBread] - [#139483]) +- Bump pysmartthings to 2.2.0 ([@joostlek] - [#139539]) +- Remove orphan devices on startup in SmartThings ([@joostlek] - [#139541]) +- Bump PySwitchBot to 0.56.1 ([@bdraco] - [#139544]) +- Bump pysmartthings to 2.3.0 ([@joostlek] - [#139546]) +- Improve SmartThings OCF device info ([@joostlek] - [#139547]) +- Add SmartThings Viper device info ([@joostlek] - [#139548]) +- Revert polling changes to HomeKit Controller ([@bdraco] - [#139550]) +- Bump pysmartthings to 2.4.0 ([@joostlek] - [#139564]) +- Bump Tesla Fleet API to v0.9.12 ([@Bre77] - [#139565]) +- Bump aiowebdav2 to 0.3.1 ([@jpbede] - [#139567]) +- Validate scopes in SmartThings config flow ([@joostlek] - [#139569]) +- Only determine SmartThings swing modes if we support it ([@joostlek] - [#139571]) +- Don't require not needed scopes in SmartThings ([@joostlek] - [#139576]) +- Homee: fix watchdog icon ([@Taraman17] - [#139577]) +- Bump aiohomekit to 3.2.8 ([@bdraco] - [#139579]) +- Fix duplicate unique id issue in Sensibo ([@gjohansson-ST] - [#139582]) +- Improve field descriptions of `zha.permit` action ([@NoRi2909] - [#139584]) +- Fix - Allow brightness only light MQTT json light to be set up using the `brightness` flag or via `supported_color_modes` ([@jbouwh] - [#139585]) +- Fix Manufacturer naming for Squeezelite model name for Squeezebox ([@peteS-UK] - [#139586]) +- Bump deebot-client to 12.3.1 ([@edenhaus] - [#139598]) +- Fix handling of NaN float values for current humidity in ESPHome ([@bdraco] - [#139600]) +- Bump aioshelly to 13.1.0 ([@thecode] - [#139601]) +- Bump inkbird-ble to 0.7.1 ([@bdraco] - [#139603]) +- Fix body text of imap message not available in custom event data template ([@jbouwh] - [#139609]) +- Fix arm vacation mode showing as armed away in elkm1 ([@bdraco] - [#139613]) +- Still request scopes in SmartThings ([@joostlek] - [#139626]) +- Bump pysmartthings to 2.4.1 ([@joostlek] - [#139627]) +- Fix unique identifiers where multiple IKEA Tradfri gateways are in use ([@cs12ag] - [#136060]) +- Fix vicare exception for specific ventilation device type ([@CrEaK] - [#138343]) +- Prevent zero interval in Calendar get_events service ([@abmantis] - [#139378]) +- Fix Homee brightness sensors reporting in percent ([@Taraman17] - [#139409]) +- Fix ability to remove orphan device in Music Assistant integration ([@marcelveldt] - [#139431]) +- Fix broken link in ESPHome BLE repair ([@bdraco] - [#139639]) +- Fix scope comparison in SmartThings ([@joostlek] - [#139652]) +- Avoid duplicate chat log content ([@balloob] - [#139679]) +- Add additional roborock debug logging ([@allenporter] - [#139680]) +- Improve failure handling and logging for invalid map responses ([@allenporter] - [#139681]) +- Abort SmartThings flow if default_config is not enabled ([@joostlek] - [#139700]) +- Bump ESPHome stable BLE version to 2025.2.2 ([@bdraco] - [#139704]) +- Bump holidays to 0.68 ([@gjohansson-ST] - [#139711]) +- Bump aiowebostv to 0.7.2 ([@thecode] - [#139712]) +- Bump sense-energy to 0.13.6 ([@bdraco] - [#139714]) +- Add nest translation string for `already_in_progress` ([@allenporter] - [#139727]) +- Bump google-nest-sdm to 7.1.4 ([@allenporter] - [#139728]) +- Delete refresh after a non-breaking error at event stream at Home Connect ([@Diegorro98] - [#139740]) +- Bump aiohomeconnect to 0.16.2 ([@Diegorro98] - [#139750]) +- Add Apollo Automation virtual integration ([@joostlek] - [#139751]) +- Fix incorrect weather state returned by HKO ([@MisterCommand] - [#139757]) +- Bump pysmartthings to 2.5.0 ([@joostlek] - [#139758]) +- Fix home connect available ([@MartinHjelmare] - [#139760]) +- Bump nexia to 2.1.1 ([@bdraco] - [#139772]) +- Bump aiowebostv to 0.7.3 ([@thecode] - [#139788]) +- Drop BETA postfix from Matter integration's title ([@marcelveldt] - [#139816]) +- Split the energy and data retrieval in WeHeat ([@SteveDiks] - [#139211]) +- Update frontend to 20250305.0 ([@bramkragten] - [#139829]) +- Get temperature data appropriate for hass.config.unit in LG ThinQ ([@LG-ThinQ-Integration] - [#137626]) +- Bump nexia to 2.2.1 ([@bdraco] - [#139786]) +- Revert "Add scene support to roborock (#137203)" ([@allenporter] - [#139840]) +- Bump aioecowitt to 2025.3.1 ([@joostlek] - [#139841]) +- Bump onedrive-personal-sdk to 0.0.13 ([@zweckj] - [#139846]) +- Bump intents to 2025.3.5 ([@synesthesiam] - [#139851]) +- Fix no disabled capabilities in SmartThings ([@joostlek] - [#139860]) + +## Release 2025.3.1 - March 7 + +- Check support for demand load control in SmartThings AC ([@Ishima] - [#139616]) +- Fix Unit of Measurement for Squeezebox duration sensor entity on LMS service ([@peteS-UK] - [#139861]) +- Trim the Schema allowed keys to match the Public Gemini API docs. ([@IvanLH] - [#139876]) +- Bump thermobeacon-ble to 0.8.1 ([@bdraco] - [#139919]) +- Deduplicate climate modes in SmartThings ([@joostlek] - [#139930]) +- Check if the unit of measurement is valid before creating the entity ([@jbouwh] - [#139932]) +- Bump pysmartthings to 2.6.1 ([@joostlek] - [#139936]) +- Bump aiowebdav2 to 0.4.0 ([@jpbede] - [#139938]) +- Add config entry level diagnostics to SmartThings ([@joostlek] - [#139939]) +- Set content length when uploading files to WebDAV ([@jpbede] - [#139950]) +- Bump to python-snoo 0.6.1 ([@Lash-L] - [#139954]) +- Fix SmartThings fan ([@joostlek] - [#139962]) +- Update frontend to 20250306.0 ([@bramkragten] - [#139965]) +- Fix SmartThings dust sensor UoM ([@joostlek] - [#139977]) +- Bump nexia to 2.2.2 ([@bdraco] - [#139986]) +- Bump aiowebdav2 to 0.4.1 ([@jpbede] - [#139988]) +- Correctly retrieve only loaded Google Generative AI config_entries ([@IvanLH] - [#139999]) +- Fix regression to evohome debug logging ([@zxdavb] - [#140000]) +- Check operation state on Home Connect program sensor update ([@Diegorro98] - [#140011]) +- Bump aiohomeconnect to 0.16.3 ([@MartinHjelmare] - [#140014]) +- Fix powerwall 0% in Tessie and Tesla Fleet ([@Bre77] - [#140017]) +- Fix shift state default in Teslemetry and Tessie ([@Bre77] - [#140018]) +- Add description for HomematicIP HCU1 in homematicip_cloud setup config flow ([@hahn-th] - [#140025]) +- Fix evohome to gracefully handle null schedules ([@zxdavb] - [#140036]) +- Fix SmartThings disabling working capabilities ([@joostlek] - [#140039]) +- Fix SmartThings thermostat climate check ([@joostlek] - [#140046]) +- Bump pysmartthings to 2.7.0 ([@joostlek] - [#140047]) +- Only keep valid powerConsumptionReports in SmartThings ([@joostlek] - [#140049]) +- Bump py-synologydsm-api to 2.7.1 ([@mib1185] - [#140052]) +- Restore SmartThings button event ([@joostlek] - [#140044]) + +[#139616]: https://github.com/home-assistant/core/pull/139616 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#139861]: https://github.com/home-assistant/core/pull/139861 +[#139876]: https://github.com/home-assistant/core/pull/139876 +[#139919]: https://github.com/home-assistant/core/pull/139919 +[#139930]: https://github.com/home-assistant/core/pull/139930 +[#139932]: https://github.com/home-assistant/core/pull/139932 +[#139936]: https://github.com/home-assistant/core/pull/139936 +[#139938]: https://github.com/home-assistant/core/pull/139938 +[#139939]: https://github.com/home-assistant/core/pull/139939 +[#139950]: https://github.com/home-assistant/core/pull/139950 +[#139954]: https://github.com/home-assistant/core/pull/139954 +[#139962]: https://github.com/home-assistant/core/pull/139962 +[#139965]: https://github.com/home-assistant/core/pull/139965 +[#139977]: https://github.com/home-assistant/core/pull/139977 +[#139986]: https://github.com/home-assistant/core/pull/139986 +[#139988]: https://github.com/home-assistant/core/pull/139988 +[#139999]: https://github.com/home-assistant/core/pull/139999 +[#140000]: https://github.com/home-assistant/core/pull/140000 +[#140011]: https://github.com/home-assistant/core/pull/140011 +[#140014]: https://github.com/home-assistant/core/pull/140014 +[#140017]: https://github.com/home-assistant/core/pull/140017 +[#140018]: https://github.com/home-assistant/core/pull/140018 +[#140025]: https://github.com/home-assistant/core/pull/140025 +[#140036]: https://github.com/home-assistant/core/pull/140036 +[#140039]: https://github.com/home-assistant/core/pull/140039 +[#140044]: https://github.com/home-assistant/core/pull/140044 +[#140046]: https://github.com/home-assistant/core/pull/140046 +[#140047]: https://github.com/home-assistant/core/pull/140047 +[#140049]: https://github.com/home-assistant/core/pull/140049 +[#140052]: https://github.com/home-assistant/core/pull/140052 +[@Bre77]: https://github.com/Bre77 +[@Diegorro98]: https://github.com/Diegorro98 +[@Ishima]: https://github.com/Ishima +[@IvanLH]: https://github.com/IvanLH +[@Lash-L]: https://github.com/Lash-L +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@bdraco]: https://github.com/bdraco +[@bramkragten]: https://github.com/bramkragten +[@frenck]: https://github.com/frenck +[@hahn-th]: https://github.com/hahn-th +[@jbouwh]: https://github.com/jbouwh +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede +[@mib1185]: https://github.com/mib1185 +[@peteS-UK]: https://github.com/peteS-UK +[@zxdavb]: https://github.com/zxdavb + +## Release 2025.3.2 - March 11 + +- Don't allow creating backups if Home Assistant is not running ([@emontnemery] - [#139499]) +- Bump govee_ble to 0.43.1 ([@moosilauke18] - [#139862]) +- Label emergency heat switch ([@jrhillery] - [#139872]) +- Bump sense-energy lib to 0.13.7 ([@kbickar] - [#140068]) +- Update jinja to 3.1.6 ([@frenck] - [#140069]) +- Update evohome-async to 1.0.3 ([@zxdavb] - [#140083]) +- Fix HEOS discovery error when previously ignored ([@andrewsayre] - [#140091]) +- Map prewash job state in SmartThings ([@joostlek] - [#140097]) +- Check support for thermostat operating state in SmartThings ([@joostlek] - [#140103]) +- Handle None options in SmartThings ([@joostlek] - [#140110]) +- Fix MQTT JSON light not reporting color temp status if color is not supported ([@jbouwh] - [#140113]) +- Fix HEOS user initiated setup when discovery is waiting confirmation ([@andrewsayre] - [#140119]) +- Support null supported Thermostat modes in SmartThings ([@joostlek] - [#140101]) +- Set device class for Oven Completion time in SmartThings ([@joostlek] - [#140139]) +- Revert "Check if the unit of measurement is valid before creating the entity" ([@jbouwh] - [#140155]) +- Fix the order of the group members attribute of the Music Assistant integration ([@msm595] - [#140204]) +- Fix events without user in Bring integration ([@tr4nt0r] - [#140213]) +- Log broad exception in Electricity Maps config flow ([@jpbede] - [#140219]) +- Bump evohome-async to 1.0.4 to fix #140194 ([@zxdavb] - [#140230]) +- Refresh Home Connect token during config entry setup ([@Diegorro98] - [#140233]) +- Add 900 RPM option to washer spin speed options at Home Connect ([@Diegorro98] - [#140234]) +- Fix todo tool broken with Gemini 2.0 models. ([@Lash-L] - [#140246]) +- Fix version not always available in onewire ([@epenet] - [#140260]) +- Fix `client_id` not generated when connecting to the MQTT broker ([@jbouwh] - [#140264]) +- Bump velbusaio to 2025.3.0 ([@cereal2nd] - [#140267]) +- Fix dryer operating state in SmartThings ([@joostlek] - [#140277]) +- FGLair : Upgrade to ayla-iot-unofficial 1.4.7 ([@crevetor] - [#140296]) +- Bump pyheos to v1.0.3 ([@andrewsayre] - [#140310]) +- Bump ZHA to 0.0.52 ([@puddly] - [#140325]) +- Bump pydrawise to 2025.3.0 ([@dknowles2] - [#140330]) +- Bump teslemetry-stream ([@Bre77] - [#140335]) +- Fix no temperature unit in SmartThings ([@joostlek] - [#140363]) +- Fix double space quoting in WebDAV ([@jpbede] - [#140364]) +- Bump python-roborock to 2.12.2 ([@Lash-L] - [#140368]) +- Handle incomplete power consumption reports in SmartThings ([@joostlek] - [#140370]) +- Fix browsing Audible Favorites in Sonos ([@PeteRager] - [#140378]) +- Make sure SmartThings light can deal with unknown states ([@joostlek] - [#140190]) +- Delete subscription on shutdown of SmartThings ([@joostlek] - [#140135]) + +[#139499]: https://github.com/home-assistant/core/pull/139499 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#139862]: https://github.com/home-assistant/core/pull/139862 +[#139872]: https://github.com/home-assistant/core/pull/139872 +[#140061]: https://github.com/home-assistant/core/pull/140061 +[#140068]: https://github.com/home-assistant/core/pull/140068 +[#140069]: https://github.com/home-assistant/core/pull/140069 +[#140083]: https://github.com/home-assistant/core/pull/140083 +[#140091]: https://github.com/home-assistant/core/pull/140091 +[#140097]: https://github.com/home-assistant/core/pull/140097 +[#140101]: https://github.com/home-assistant/core/pull/140101 +[#140103]: https://github.com/home-assistant/core/pull/140103 +[#140110]: https://github.com/home-assistant/core/pull/140110 +[#140113]: https://github.com/home-assistant/core/pull/140113 +[#140119]: https://github.com/home-assistant/core/pull/140119 +[#140135]: https://github.com/home-assistant/core/pull/140135 +[#140139]: https://github.com/home-assistant/core/pull/140139 +[#140155]: https://github.com/home-assistant/core/pull/140155 +[#140190]: https://github.com/home-assistant/core/pull/140190 +[#140204]: https://github.com/home-assistant/core/pull/140204 +[#140213]: https://github.com/home-assistant/core/pull/140213 +[#140219]: https://github.com/home-assistant/core/pull/140219 +[#140230]: https://github.com/home-assistant/core/pull/140230 +[#140233]: https://github.com/home-assistant/core/pull/140233 +[#140234]: https://github.com/home-assistant/core/pull/140234 +[#140246]: https://github.com/home-assistant/core/pull/140246 +[#140260]: https://github.com/home-assistant/core/pull/140260 +[#140264]: https://github.com/home-assistant/core/pull/140264 +[#140267]: https://github.com/home-assistant/core/pull/140267 +[#140277]: https://github.com/home-assistant/core/pull/140277 +[#140296]: https://github.com/home-assistant/core/pull/140296 +[#140310]: https://github.com/home-assistant/core/pull/140310 +[#140325]: https://github.com/home-assistant/core/pull/140325 +[#140330]: https://github.com/home-assistant/core/pull/140330 +[#140335]: https://github.com/home-assistant/core/pull/140335 +[#140363]: https://github.com/home-assistant/core/pull/140363 +[#140364]: https://github.com/home-assistant/core/pull/140364 +[#140368]: https://github.com/home-assistant/core/pull/140368 +[#140370]: https://github.com/home-assistant/core/pull/140370 +[#140378]: https://github.com/home-assistant/core/pull/140378 +[@Bre77]: https://github.com/Bre77 +[@Diegorro98]: https://github.com/Diegorro98 +[@Lash-L]: https://github.com/Lash-L +[@PeteRager]: https://github.com/PeteRager +[@andrewsayre]: https://github.com/andrewsayre +[@cereal2nd]: https://github.com/cereal2nd +[@crevetor]: https://github.com/crevetor +[@dknowles2]: https://github.com/dknowles2 +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@frenck]: https://github.com/frenck +[@jbouwh]: https://github.com/jbouwh +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede +[@jrhillery]: https://github.com/jrhillery +[@kbickar]: https://github.com/kbickar +[@moosilauke18]: https://github.com/moosilauke18 +[@msm595]: https://github.com/msm595 +[@puddly]: https://github.com/puddly +[@tr4nt0r]: https://github.com/tr4nt0r +[@zxdavb]: https://github.com/zxdavb + +## Release 2025.3.3 - March 14 + +- Fix bug with all Roborock maps being set to the wrong map when empty ([@Lash-L] - [#138493]) +- Bump pysuezV2 to 2.0.4 ([@jb101010-2] - [#139824]) +- Bump upb-lib to 0.6.1 ([@gwww] - [#140212]) +- Use only IPv4 for zeroconf in bluesound integration ([@LouisChrist] - [#140226]) +- Only do WebDAV path migration when path differs ([@jpbede] - [#140402]) +- Bump velbusaio to 2025.3.1 ([@cereal2nd] - [#140443]) +- Mark value in number.set_value action as required ([@joostlek] - [#140445]) +- Bump Tesla Fleet API to 0.9.13 ([@Bre77] - [#140485]) +- Update xknxproject to 3.8.2 ([@farmio] - [#140499]) +- Fix Shelly diagnostics for devices without WebSocket Outbound support ([@bieniu] - [#140501]) +- Fix windowShadeLevel capability in SmartThings ([@joostlek] - [#140552]) +- Set unit of measurement for SmartThings oven setpoint ([@joostlek] - [#140560]) +- Fix missing UnitOfPower.MILLIWATT in sensor and number allowed units ([@ashionky] - [#140567]) + +[#138493]: https://github.com/home-assistant/core/pull/138493 +[#139824]: https://github.com/home-assistant/core/pull/139824 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#140061]: https://github.com/home-assistant/core/pull/140061 +[#140212]: https://github.com/home-assistant/core/pull/140212 +[#140226]: https://github.com/home-assistant/core/pull/140226 +[#140392]: https://github.com/home-assistant/core/pull/140392 +[#140402]: https://github.com/home-assistant/core/pull/140402 +[#140443]: https://github.com/home-assistant/core/pull/140443 +[#140445]: https://github.com/home-assistant/core/pull/140445 +[#140485]: https://github.com/home-assistant/core/pull/140485 +[#140499]: https://github.com/home-assistant/core/pull/140499 +[#140501]: https://github.com/home-assistant/core/pull/140501 +[#140552]: https://github.com/home-assistant/core/pull/140552 +[#140560]: https://github.com/home-assistant/core/pull/140560 +[#140567]: https://github.com/home-assistant/core/pull/140567 +[@Bre77]: https://github.com/Bre77 +[@Lash-L]: https://github.com/Lash-L +[@LouisChrist]: https://github.com/LouisChrist +[@ashionky]: https://github.com/ashionky +[@bieniu]: https://github.com/bieniu +[@cereal2nd]: https://github.com/cereal2nd +[@farmio]: https://github.com/farmio +[@frenck]: https://github.com/frenck +[@gwww]: https://github.com/gwww +[@jb101010-2]: https://github.com/jb101010-2 +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede + +## Release 2025.3.4 - March 21 + +- Fix initial fetch of Home Connect appliance data to handle API rate limit errors ([@Diegorro98] - [#139379]) +- Handle API rate limit error on Home Connect entities fetch ([@Diegorro98] - [#139384]) +- Album art not available for Sonos media library favorites ([@PeteRager] - [#140557]) +- Change max ICP value to fixed value for Wallbox Integration ([@hesselonline] - [#140592]) +- Add 700 RPM option to washer spin speed options at Home Connect ([@Diegorro98] - [#140607]) +- Handle non documented options at Home Connect select entities ([@Diegorro98] - [#140608]) +- Fix optional password in Velbus config flow ([@cereal2nd] - [#140615]) +- Make Oven setpoint follow temperature UoM in SmartThings ([@joostlek] - [#140666]) +- Fix Elk-M1 missing TLS 1.2 check ([@gwww] - [#140672]) +- Bump PySwitchBot to 0.57.1 ([@bdraco] - [#140681]) +- Check Celsius in SmartThings oven setpoint ([@joostlek] - [#140687]) +- Fix broken core integration Smart Meter Texas by switching it to use HA's SSL Context ([@adamfeldman] - [#140694]) +- Don't reload onedrive on options flow ([@zweckj] - [#140712]) +- Bump pySmartThings to 2.7.4 ([@joostlek] - [#140720]) +- Fix SmartThings ACs without supported AC modes ([@joostlek] - [#140744]) +- Bump pylamarzocco to 1.4.9 ([@zweckj] - [#140916]) +- Log SmartThings subscription error on exception ([@joostlek] - [#140939]) +- Ensure file is correctly uploaded by the GenAI SDK ([@IvanLH] - [#140969]) +- Reolink fix playback headers ([@starkillerOG] - [#141015]) +- Fix some Home Connect options keys ([@Diegorro98] - [#141023]) +- Bump ZHA to 0.0.53 ([@puddly] - [#141025]) +- Bump Python-Snoo to 0.6.3 ([@Lash-L] - [#140628]) +- Bump python-snoo to 0.6.4 ([@Lash-L] - [#141030]) +- Improve Home Connect appliances test fixture ([@MartinHjelmare] - [#139787]) + +[#139379]: https://github.com/home-assistant/core/pull/139379 +[#139384]: https://github.com/home-assistant/core/pull/139384 +[#139787]: https://github.com/home-assistant/core/pull/139787 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#140061]: https://github.com/home-assistant/core/pull/140061 +[#140392]: https://github.com/home-assistant/core/pull/140392 +[#140557]: https://github.com/home-assistant/core/pull/140557 +[#140583]: https://github.com/home-assistant/core/pull/140583 +[#140592]: https://github.com/home-assistant/core/pull/140592 +[#140607]: https://github.com/home-assistant/core/pull/140607 +[#140608]: https://github.com/home-assistant/core/pull/140608 +[#140615]: https://github.com/home-assistant/core/pull/140615 +[#140628]: https://github.com/home-assistant/core/pull/140628 +[#140666]: https://github.com/home-assistant/core/pull/140666 +[#140672]: https://github.com/home-assistant/core/pull/140672 +[#140681]: https://github.com/home-assistant/core/pull/140681 +[#140687]: https://github.com/home-assistant/core/pull/140687 +[#140694]: https://github.com/home-assistant/core/pull/140694 +[#140712]: https://github.com/home-assistant/core/pull/140712 +[#140720]: https://github.com/home-assistant/core/pull/140720 +[#140744]: https://github.com/home-assistant/core/pull/140744 +[#140916]: https://github.com/home-assistant/core/pull/140916 +[#140939]: https://github.com/home-assistant/core/pull/140939 +[#140969]: https://github.com/home-assistant/core/pull/140969 +[#141015]: https://github.com/home-assistant/core/pull/141015 +[#141023]: https://github.com/home-assistant/core/pull/141023 +[#141025]: https://github.com/home-assistant/core/pull/141025 +[#141030]: https://github.com/home-assistant/core/pull/141030 +[@Diegorro98]: https://github.com/Diegorro98 +[@IvanLH]: https://github.com/IvanLH +[@Lash-L]: https://github.com/Lash-L +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@PeteRager]: https://github.com/PeteRager +[@adamfeldman]: https://github.com/adamfeldman +[@bdraco]: https://github.com/bdraco +[@cereal2nd]: https://github.com/cereal2nd +[@frenck]: https://github.com/frenck +[@gwww]: https://github.com/gwww +[@hesselonline]: https://github.com/hesselonline +[@joostlek]: https://github.com/joostlek +[@puddly]: https://github.com/puddly +[@starkillerOG]: https://github.com/starkillerOG +[@zweckj]: https://github.com/zweckj + +[#109725]: https://github.com/home-assistant/core/pull/109725 +[#116024]: https://github.com/home-assistant/core/pull/116024 +[#116452]: https://github.com/home-assistant/core/pull/116452 +[#121904]: https://github.com/home-assistant/core/pull/121904 +[#124181]: https://github.com/home-assistant/core/pull/124181 +[#128799]: https://github.com/home-assistant/core/pull/128799 +[#129460]: https://github.com/home-assistant/core/pull/129460 +[#129578]: https://github.com/home-assistant/core/pull/129578 +[#130098]: https://github.com/home-assistant/core/pull/130098 +[#130662]: https://github.com/home-assistant/core/pull/130662 +[#132145]: https://github.com/home-assistant/core/pull/132145 +[#133156]: https://github.com/home-assistant/core/pull/133156 +[#133184]: https://github.com/home-assistant/core/pull/133184 +[#133531]: https://github.com/home-assistant/core/pull/133531 +[#134085]: https://github.com/home-assistant/core/pull/134085 +[#134223]: https://github.com/home-assistant/core/pull/134223 +[#134243]: https://github.com/home-assistant/core/pull/134243 +[#134395]: https://github.com/home-assistant/core/pull/134395 +[#134409]: https://github.com/home-assistant/core/pull/134409 +[#134507]: https://github.com/home-assistant/core/pull/134507 +[#134552]: https://github.com/home-assistant/core/pull/134552 +[#134571]: https://github.com/home-assistant/core/pull/134571 +[#134598]: https://github.com/home-assistant/core/pull/134598 +[#134788]: https://github.com/home-assistant/core/pull/134788 +[#135009]: https://github.com/home-assistant/core/pull/135009 +[#135379]: https://github.com/home-assistant/core/pull/135379 +[#135436]: https://github.com/home-assistant/core/pull/135436 +[#135456]: https://github.com/home-assistant/core/pull/135456 +[#135513]: https://github.com/home-assistant/core/pull/135513 +[#135529]: https://github.com/home-assistant/core/pull/135529 +[#135592]: https://github.com/home-assistant/core/pull/135592 +[#135609]: https://github.com/home-assistant/core/pull/135609 +[#135657]: https://github.com/home-assistant/core/pull/135657 +[#135740]: https://github.com/home-assistant/core/pull/135740 +[#135837]: https://github.com/home-assistant/core/pull/135837 +[#135850]: https://github.com/home-assistant/core/pull/135850 +[#135859]: https://github.com/home-assistant/core/pull/135859 +[#135897]: https://github.com/home-assistant/core/pull/135897 +[#135908]: https://github.com/home-assistant/core/pull/135908 +[#135979]: https://github.com/home-assistant/core/pull/135979 +[#135984]: https://github.com/home-assistant/core/pull/135984 +[#136003]: https://github.com/home-assistant/core/pull/136003 +[#136026]: https://github.com/home-assistant/core/pull/136026 +[#136060]: https://github.com/home-assistant/core/pull/136060 +[#136076]: https://github.com/home-assistant/core/pull/136076 +[#136093]: https://github.com/home-assistant/core/pull/136093 +[#136116]: https://github.com/home-assistant/core/pull/136116 +[#136121]: https://github.com/home-assistant/core/pull/136121 +[#136130]: https://github.com/home-assistant/core/pull/136130 +[#136168]: https://github.com/home-assistant/core/pull/136168 +[#136362]: https://github.com/home-assistant/core/pull/136362 +[#136375]: https://github.com/home-assistant/core/pull/136375 +[#136383]: https://github.com/home-assistant/core/pull/136383 +[#136400]: https://github.com/home-assistant/core/pull/136400 +[#136425]: https://github.com/home-assistant/core/pull/136425 +[#136450]: https://github.com/home-assistant/core/pull/136450 +[#136468]: https://github.com/home-assistant/core/pull/136468 +[#136479]: https://github.com/home-assistant/core/pull/136479 +[#136568]: https://github.com/home-assistant/core/pull/136568 +[#136582]: https://github.com/home-assistant/core/pull/136582 +[#136607]: https://github.com/home-assistant/core/pull/136607 +[#136654]: https://github.com/home-assistant/core/pull/136654 +[#136667]: https://github.com/home-assistant/core/pull/136667 +[#136698]: https://github.com/home-assistant/core/pull/136698 +[#136710]: https://github.com/home-assistant/core/pull/136710 +[#136754]: https://github.com/home-assistant/core/pull/136754 +[#136812]: https://github.com/home-assistant/core/pull/136812 +[#136837]: https://github.com/home-assistant/core/pull/136837 +[#136859]: https://github.com/home-assistant/core/pull/136859 +[#136865]: https://github.com/home-assistant/core/pull/136865 +[#136868]: https://github.com/home-assistant/core/pull/136868 +[#136878]: https://github.com/home-assistant/core/pull/136878 +[#136882]: https://github.com/home-assistant/core/pull/136882 +[#136885]: https://github.com/home-assistant/core/pull/136885 +[#136886]: https://github.com/home-assistant/core/pull/136886 +[#136890]: https://github.com/home-assistant/core/pull/136890 +[#136917]: https://github.com/home-assistant/core/pull/136917 +[#136918]: https://github.com/home-assistant/core/pull/136918 +[#136919]: https://github.com/home-assistant/core/pull/136919 +[#136933]: https://github.com/home-assistant/core/pull/136933 +[#136934]: https://github.com/home-assistant/core/pull/136934 +[#136935]: https://github.com/home-assistant/core/pull/136935 +[#136936]: https://github.com/home-assistant/core/pull/136936 +[#136948]: https://github.com/home-assistant/core/pull/136948 +[#136949]: https://github.com/home-assistant/core/pull/136949 +[#136950]: https://github.com/home-assistant/core/pull/136950 +[#136951]: https://github.com/home-assistant/core/pull/136951 +[#136952]: https://github.com/home-assistant/core/pull/136952 +[#136953]: https://github.com/home-assistant/core/pull/136953 +[#136955]: https://github.com/home-assistant/core/pull/136955 +[#136960]: https://github.com/home-assistant/core/pull/136960 +[#136961]: https://github.com/home-assistant/core/pull/136961 +[#136966]: https://github.com/home-assistant/core/pull/136966 +[#136968]: https://github.com/home-assistant/core/pull/136968 +[#136976]: https://github.com/home-assistant/core/pull/136976 +[#136981]: https://github.com/home-assistant/core/pull/136981 +[#136985]: https://github.com/home-assistant/core/pull/136985 +[#136996]: https://github.com/home-assistant/core/pull/136996 +[#136999]: https://github.com/home-assistant/core/pull/136999 +[#137000]: https://github.com/home-assistant/core/pull/137000 +[#137006]: https://github.com/home-assistant/core/pull/137006 +[#137007]: https://github.com/home-assistant/core/pull/137007 +[#137012]: https://github.com/home-assistant/core/pull/137012 +[#137013]: https://github.com/home-assistant/core/pull/137013 +[#137014]: https://github.com/home-assistant/core/pull/137014 +[#137027]: https://github.com/home-assistant/core/pull/137027 +[#137029]: https://github.com/home-assistant/core/pull/137029 +[#137033]: https://github.com/home-assistant/core/pull/137033 +[#137034]: https://github.com/home-assistant/core/pull/137034 +[#137037]: https://github.com/home-assistant/core/pull/137037 +[#137053]: https://github.com/home-assistant/core/pull/137053 +[#137059]: https://github.com/home-assistant/core/pull/137059 +[#137062]: https://github.com/home-assistant/core/pull/137062 +[#137068]: https://github.com/home-assistant/core/pull/137068 +[#137069]: https://github.com/home-assistant/core/pull/137069 +[#137072]: https://github.com/home-assistant/core/pull/137072 +[#137077]: https://github.com/home-assistant/core/pull/137077 +[#137078]: https://github.com/home-assistant/core/pull/137078 +[#137079]: https://github.com/home-assistant/core/pull/137079 +[#137080]: https://github.com/home-assistant/core/pull/137080 +[#137085]: https://github.com/home-assistant/core/pull/137085 +[#137088]: https://github.com/home-assistant/core/pull/137088 +[#137099]: https://github.com/home-assistant/core/pull/137099 +[#137127]: https://github.com/home-assistant/core/pull/137127 +[#137130]: https://github.com/home-assistant/core/pull/137130 +[#137134]: https://github.com/home-assistant/core/pull/137134 +[#137138]: https://github.com/home-assistant/core/pull/137138 +[#137139]: https://github.com/home-assistant/core/pull/137139 +[#137142]: https://github.com/home-assistant/core/pull/137142 +[#137143]: https://github.com/home-assistant/core/pull/137143 +[#137146]: https://github.com/home-assistant/core/pull/137146 +[#137152]: https://github.com/home-assistant/core/pull/137152 +[#137156]: https://github.com/home-assistant/core/pull/137156 +[#137159]: https://github.com/home-assistant/core/pull/137159 +[#137174]: https://github.com/home-assistant/core/pull/137174 +[#137177]: https://github.com/home-assistant/core/pull/137177 +[#137179]: https://github.com/home-assistant/core/pull/137179 +[#137183]: https://github.com/home-assistant/core/pull/137183 +[#137184]: https://github.com/home-assistant/core/pull/137184 +[#137190]: https://github.com/home-assistant/core/pull/137190 +[#137191]: https://github.com/home-assistant/core/pull/137191 +[#137200]: https://github.com/home-assistant/core/pull/137200 +[#137203]: https://github.com/home-assistant/core/pull/137203 +[#137209]: https://github.com/home-assistant/core/pull/137209 +[#137210]: https://github.com/home-assistant/core/pull/137210 +[#137218]: https://github.com/home-assistant/core/pull/137218 +[#137219]: https://github.com/home-assistant/core/pull/137219 +[#137221]: https://github.com/home-assistant/core/pull/137221 +[#137224]: https://github.com/home-assistant/core/pull/137224 +[#137226]: https://github.com/home-assistant/core/pull/137226 +[#137227]: https://github.com/home-assistant/core/pull/137227 +[#137228]: https://github.com/home-assistant/core/pull/137228 +[#137229]: https://github.com/home-assistant/core/pull/137229 +[#137231]: https://github.com/home-assistant/core/pull/137231 +[#137232]: https://github.com/home-assistant/core/pull/137232 +[#137233]: https://github.com/home-assistant/core/pull/137233 +[#137235]: https://github.com/home-assistant/core/pull/137235 +[#137236]: https://github.com/home-assistant/core/pull/137236 +[#137240]: https://github.com/home-assistant/core/pull/137240 +[#137241]: https://github.com/home-assistant/core/pull/137241 +[#137242]: https://github.com/home-assistant/core/pull/137242 +[#137243]: https://github.com/home-assistant/core/pull/137243 +[#137246]: https://github.com/home-assistant/core/pull/137246 +[#137254]: https://github.com/home-assistant/core/pull/137254 +[#137255]: https://github.com/home-assistant/core/pull/137255 +[#137259]: https://github.com/home-assistant/core/pull/137259 +[#137270]: https://github.com/home-assistant/core/pull/137270 +[#137271]: https://github.com/home-assistant/core/pull/137271 +[#137273]: https://github.com/home-assistant/core/pull/137273 +[#137276]: https://github.com/home-assistant/core/pull/137276 +[#137291]: https://github.com/home-assistant/core/pull/137291 +[#137292]: https://github.com/home-assistant/core/pull/137292 +[#137293]: https://github.com/home-assistant/core/pull/137293 +[#137294]: https://github.com/home-assistant/core/pull/137294 +[#137297]: https://github.com/home-assistant/core/pull/137297 +[#137300]: https://github.com/home-assistant/core/pull/137300 +[#137304]: https://github.com/home-assistant/core/pull/137304 +[#137308]: https://github.com/home-assistant/core/pull/137308 +[#137310]: https://github.com/home-assistant/core/pull/137310 +[#137311]: https://github.com/home-assistant/core/pull/137311 +[#137312]: https://github.com/home-assistant/core/pull/137312 +[#137316]: https://github.com/home-assistant/core/pull/137316 +[#137317]: https://github.com/home-assistant/core/pull/137317 +[#137318]: https://github.com/home-assistant/core/pull/137318 +[#137319]: https://github.com/home-assistant/core/pull/137319 +[#137320]: https://github.com/home-assistant/core/pull/137320 +[#137329]: https://github.com/home-assistant/core/pull/137329 +[#137336]: https://github.com/home-assistant/core/pull/137336 +[#137339]: https://github.com/home-assistant/core/pull/137339 +[#137345]: https://github.com/home-assistant/core/pull/137345 +[#137349]: https://github.com/home-assistant/core/pull/137349 +[#137350]: https://github.com/home-assistant/core/pull/137350 +[#137354]: https://github.com/home-assistant/core/pull/137354 +[#137356]: https://github.com/home-assistant/core/pull/137356 +[#137370]: https://github.com/home-assistant/core/pull/137370 +[#137381]: https://github.com/home-assistant/core/pull/137381 +[#137382]: https://github.com/home-assistant/core/pull/137382 +[#137383]: https://github.com/home-assistant/core/pull/137383 +[#137384]: https://github.com/home-assistant/core/pull/137384 +[#137385]: https://github.com/home-assistant/core/pull/137385 +[#137386]: https://github.com/home-assistant/core/pull/137386 +[#137387]: https://github.com/home-assistant/core/pull/137387 +[#137388]: https://github.com/home-assistant/core/pull/137388 +[#137389]: https://github.com/home-assistant/core/pull/137389 +[#137391]: https://github.com/home-assistant/core/pull/137391 +[#137392]: https://github.com/home-assistant/core/pull/137392 +[#137394]: https://github.com/home-assistant/core/pull/137394 +[#137395]: https://github.com/home-assistant/core/pull/137395 +[#137396]: https://github.com/home-assistant/core/pull/137396 +[#137398]: https://github.com/home-assistant/core/pull/137398 +[#137399]: https://github.com/home-assistant/core/pull/137399 +[#137400]: https://github.com/home-assistant/core/pull/137400 +[#137404]: https://github.com/home-assistant/core/pull/137404 +[#137412]: https://github.com/home-assistant/core/pull/137412 +[#137418]: https://github.com/home-assistant/core/pull/137418 +[#137422]: https://github.com/home-assistant/core/pull/137422 +[#137428]: https://github.com/home-assistant/core/pull/137428 +[#137431]: https://github.com/home-assistant/core/pull/137431 +[#137432]: https://github.com/home-assistant/core/pull/137432 +[#137434]: https://github.com/home-assistant/core/pull/137434 +[#137435]: https://github.com/home-assistant/core/pull/137435 +[#137436]: https://github.com/home-assistant/core/pull/137436 +[#137438]: https://github.com/home-assistant/core/pull/137438 +[#137443]: https://github.com/home-assistant/core/pull/137443 +[#137451]: https://github.com/home-assistant/core/pull/137451 +[#137454]: https://github.com/home-assistant/core/pull/137454 +[#137457]: https://github.com/home-assistant/core/pull/137457 +[#137461]: https://github.com/home-assistant/core/pull/137461 +[#137462]: https://github.com/home-assistant/core/pull/137462 +[#137463]: https://github.com/home-assistant/core/pull/137463 +[#137464]: https://github.com/home-assistant/core/pull/137464 +[#137465]: https://github.com/home-assistant/core/pull/137465 +[#137466]: https://github.com/home-assistant/core/pull/137466 +[#137468]: https://github.com/home-assistant/core/pull/137468 +[#137469]: https://github.com/home-assistant/core/pull/137469 +[#137471]: https://github.com/home-assistant/core/pull/137471 +[#137472]: https://github.com/home-assistant/core/pull/137472 +[#137496]: https://github.com/home-assistant/core/pull/137496 +[#137498]: https://github.com/home-assistant/core/pull/137498 +[#137502]: https://github.com/home-assistant/core/pull/137502 +[#137505]: https://github.com/home-assistant/core/pull/137505 +[#137512]: https://github.com/home-assistant/core/pull/137512 +[#137513]: https://github.com/home-assistant/core/pull/137513 +[#137514]: https://github.com/home-assistant/core/pull/137514 +[#137515]: https://github.com/home-assistant/core/pull/137515 +[#137518]: https://github.com/home-assistant/core/pull/137518 +[#137524]: https://github.com/home-assistant/core/pull/137524 +[#137527]: https://github.com/home-assistant/core/pull/137527 +[#137529]: https://github.com/home-assistant/core/pull/137529 +[#137542]: https://github.com/home-assistant/core/pull/137542 +[#137543]: https://github.com/home-assistant/core/pull/137543 +[#137544]: https://github.com/home-assistant/core/pull/137544 +[#137546]: https://github.com/home-assistant/core/pull/137546 +[#137560]: https://github.com/home-assistant/core/pull/137560 +[#137565]: https://github.com/home-assistant/core/pull/137565 +[#137570]: https://github.com/home-assistant/core/pull/137570 +[#137576]: https://github.com/home-assistant/core/pull/137576 +[#137584]: https://github.com/home-assistant/core/pull/137584 +[#137586]: https://github.com/home-assistant/core/pull/137586 +[#137590]: https://github.com/home-assistant/core/pull/137590 +[#137592]: https://github.com/home-assistant/core/pull/137592 +[#137593]: https://github.com/home-assistant/core/pull/137593 +[#137594]: https://github.com/home-assistant/core/pull/137594 +[#137599]: https://github.com/home-assistant/core/pull/137599 +[#137600]: https://github.com/home-assistant/core/pull/137600 +[#137607]: https://github.com/home-assistant/core/pull/137607 +[#137608]: https://github.com/home-assistant/core/pull/137608 +[#137613]: https://github.com/home-assistant/core/pull/137613 +[#137619]: https://github.com/home-assistant/core/pull/137619 +[#137621]: https://github.com/home-assistant/core/pull/137621 +[#137626]: https://github.com/home-assistant/core/pull/137626 +[#137627]: https://github.com/home-assistant/core/pull/137627 +[#137628]: https://github.com/home-assistant/core/pull/137628 +[#137629]: https://github.com/home-assistant/core/pull/137629 +[#137630]: https://github.com/home-assistant/core/pull/137630 +[#137631]: https://github.com/home-assistant/core/pull/137631 +[#137632]: https://github.com/home-assistant/core/pull/137632 +[#137633]: https://github.com/home-assistant/core/pull/137633 +[#137635]: https://github.com/home-assistant/core/pull/137635 +[#137637]: https://github.com/home-assistant/core/pull/137637 +[#137641]: https://github.com/home-assistant/core/pull/137641 +[#137642]: https://github.com/home-assistant/core/pull/137642 +[#137646]: https://github.com/home-assistant/core/pull/137646 +[#137647]: https://github.com/home-assistant/core/pull/137647 +[#137654]: https://github.com/home-assistant/core/pull/137654 +[#137655]: https://github.com/home-assistant/core/pull/137655 +[#137656]: https://github.com/home-assistant/core/pull/137656 +[#137657]: https://github.com/home-assistant/core/pull/137657 +[#137660]: https://github.com/home-assistant/core/pull/137660 +[#137661]: https://github.com/home-assistant/core/pull/137661 +[#137662]: https://github.com/home-assistant/core/pull/137662 +[#137667]: https://github.com/home-assistant/core/pull/137667 +[#137668]: https://github.com/home-assistant/core/pull/137668 +[#137673]: https://github.com/home-assistant/core/pull/137673 +[#137679]: https://github.com/home-assistant/core/pull/137679 +[#137684]: https://github.com/home-assistant/core/pull/137684 +[#137689]: https://github.com/home-assistant/core/pull/137689 +[#137693]: https://github.com/home-assistant/core/pull/137693 +[#137696]: https://github.com/home-assistant/core/pull/137696 +[#137698]: https://github.com/home-assistant/core/pull/137698 +[#137699]: https://github.com/home-assistant/core/pull/137699 +[#137700]: https://github.com/home-assistant/core/pull/137700 +[#137701]: https://github.com/home-assistant/core/pull/137701 +[#137702]: https://github.com/home-assistant/core/pull/137702 +[#137703]: https://github.com/home-assistant/core/pull/137703 +[#137704]: https://github.com/home-assistant/core/pull/137704 +[#137705]: https://github.com/home-assistant/core/pull/137705 +[#137706]: https://github.com/home-assistant/core/pull/137706 +[#137707]: https://github.com/home-assistant/core/pull/137707 +[#137708]: https://github.com/home-assistant/core/pull/137708 +[#137709]: https://github.com/home-assistant/core/pull/137709 +[#137710]: https://github.com/home-assistant/core/pull/137710 +[#137711]: https://github.com/home-assistant/core/pull/137711 +[#137712]: https://github.com/home-assistant/core/pull/137712 +[#137713]: https://github.com/home-assistant/core/pull/137713 +[#137714]: https://github.com/home-assistant/core/pull/137714 +[#137715]: https://github.com/home-assistant/core/pull/137715 +[#137716]: https://github.com/home-assistant/core/pull/137716 +[#137717]: https://github.com/home-assistant/core/pull/137717 +[#137718]: https://github.com/home-assistant/core/pull/137718 +[#137719]: https://github.com/home-assistant/core/pull/137719 +[#137720]: https://github.com/home-assistant/core/pull/137720 +[#137721]: https://github.com/home-assistant/core/pull/137721 +[#137722]: https://github.com/home-assistant/core/pull/137722 +[#137724]: https://github.com/home-assistant/core/pull/137724 +[#137725]: https://github.com/home-assistant/core/pull/137725 +[#137726]: https://github.com/home-assistant/core/pull/137726 +[#137727]: https://github.com/home-assistant/core/pull/137727 +[#137728]: https://github.com/home-assistant/core/pull/137728 +[#137730]: https://github.com/home-assistant/core/pull/137730 +[#137732]: https://github.com/home-assistant/core/pull/137732 +[#137733]: https://github.com/home-assistant/core/pull/137733 +[#137734]: https://github.com/home-assistant/core/pull/137734 +[#137737]: https://github.com/home-assistant/core/pull/137737 +[#137738]: https://github.com/home-assistant/core/pull/137738 +[#137739]: https://github.com/home-assistant/core/pull/137739 +[#137740]: https://github.com/home-assistant/core/pull/137740 +[#137741]: https://github.com/home-assistant/core/pull/137741 +[#137742]: https://github.com/home-assistant/core/pull/137742 +[#137743]: https://github.com/home-assistant/core/pull/137743 +[#137754]: https://github.com/home-assistant/core/pull/137754 +[#137756]: https://github.com/home-assistant/core/pull/137756 +[#137759]: https://github.com/home-assistant/core/pull/137759 +[#137763]: https://github.com/home-assistant/core/pull/137763 +[#137766]: https://github.com/home-assistant/core/pull/137766 +[#137777]: https://github.com/home-assistant/core/pull/137777 +[#137784]: https://github.com/home-assistant/core/pull/137784 +[#137785]: https://github.com/home-assistant/core/pull/137785 +[#137792]: https://github.com/home-assistant/core/pull/137792 +[#137794]: https://github.com/home-assistant/core/pull/137794 +[#137799]: https://github.com/home-assistant/core/pull/137799 +[#137804]: https://github.com/home-assistant/core/pull/137804 +[#137806]: https://github.com/home-assistant/core/pull/137806 +[#137807]: https://github.com/home-assistant/core/pull/137807 +[#137808]: https://github.com/home-assistant/core/pull/137808 +[#137813]: https://github.com/home-assistant/core/pull/137813 +[#137814]: https://github.com/home-assistant/core/pull/137814 +[#137816]: https://github.com/home-assistant/core/pull/137816 +[#137818]: https://github.com/home-assistant/core/pull/137818 +[#137819]: https://github.com/home-assistant/core/pull/137819 +[#137822]: https://github.com/home-assistant/core/pull/137822 +[#137823]: https://github.com/home-assistant/core/pull/137823 +[#137824]: https://github.com/home-assistant/core/pull/137824 +[#137825]: https://github.com/home-assistant/core/pull/137825 +[#137826]: https://github.com/home-assistant/core/pull/137826 +[#137827]: https://github.com/home-assistant/core/pull/137827 +[#137828]: https://github.com/home-assistant/core/pull/137828 +[#137829]: https://github.com/home-assistant/core/pull/137829 +[#137830]: https://github.com/home-assistant/core/pull/137830 +[#137831]: https://github.com/home-assistant/core/pull/137831 +[#137832]: https://github.com/home-assistant/core/pull/137832 +[#137834]: https://github.com/home-assistant/core/pull/137834 +[#137835]: https://github.com/home-assistant/core/pull/137835 +[#137836]: https://github.com/home-assistant/core/pull/137836 +[#137837]: https://github.com/home-assistant/core/pull/137837 +[#137838]: https://github.com/home-assistant/core/pull/137838 +[#137839]: https://github.com/home-assistant/core/pull/137839 +[#137840]: https://github.com/home-assistant/core/pull/137840 +[#137842]: https://github.com/home-assistant/core/pull/137842 +[#137843]: https://github.com/home-assistant/core/pull/137843 +[#137844]: https://github.com/home-assistant/core/pull/137844 +[#137846]: https://github.com/home-assistant/core/pull/137846 +[#137848]: https://github.com/home-assistant/core/pull/137848 +[#137853]: https://github.com/home-assistant/core/pull/137853 +[#137857]: https://github.com/home-assistant/core/pull/137857 +[#137858]: https://github.com/home-assistant/core/pull/137858 +[#137859]: https://github.com/home-assistant/core/pull/137859 +[#137861]: https://github.com/home-assistant/core/pull/137861 +[#137862]: https://github.com/home-assistant/core/pull/137862 +[#137863]: https://github.com/home-assistant/core/pull/137863 +[#137864]: https://github.com/home-assistant/core/pull/137864 +[#137865]: https://github.com/home-assistant/core/pull/137865 +[#137866]: https://github.com/home-assistant/core/pull/137866 +[#137867]: https://github.com/home-assistant/core/pull/137867 +[#137868]: https://github.com/home-assistant/core/pull/137868 +[#137869]: https://github.com/home-assistant/core/pull/137869 +[#137871]: https://github.com/home-assistant/core/pull/137871 +[#137872]: https://github.com/home-assistant/core/pull/137872 +[#137873]: https://github.com/home-assistant/core/pull/137873 +[#137874]: https://github.com/home-assistant/core/pull/137874 +[#137875]: https://github.com/home-assistant/core/pull/137875 +[#137876]: https://github.com/home-assistant/core/pull/137876 +[#137877]: https://github.com/home-assistant/core/pull/137877 +[#137879]: https://github.com/home-assistant/core/pull/137879 +[#137880]: https://github.com/home-assistant/core/pull/137880 +[#137881]: https://github.com/home-assistant/core/pull/137881 +[#137882]: https://github.com/home-assistant/core/pull/137882 +[#137883]: https://github.com/home-assistant/core/pull/137883 +[#137885]: https://github.com/home-assistant/core/pull/137885 +[#137886]: https://github.com/home-assistant/core/pull/137886 +[#137888]: https://github.com/home-assistant/core/pull/137888 +[#137889]: https://github.com/home-assistant/core/pull/137889 +[#137891]: https://github.com/home-assistant/core/pull/137891 +[#137892]: https://github.com/home-assistant/core/pull/137892 +[#137893]: https://github.com/home-assistant/core/pull/137893 +[#137894]: https://github.com/home-assistant/core/pull/137894 +[#137895]: https://github.com/home-assistant/core/pull/137895 +[#137896]: https://github.com/home-assistant/core/pull/137896 +[#137897]: https://github.com/home-assistant/core/pull/137897 +[#137898]: https://github.com/home-assistant/core/pull/137898 +[#137899]: https://github.com/home-assistant/core/pull/137899 +[#137900]: https://github.com/home-assistant/core/pull/137900 +[#137902]: https://github.com/home-assistant/core/pull/137902 +[#137903]: https://github.com/home-assistant/core/pull/137903 +[#137904]: https://github.com/home-assistant/core/pull/137904 +[#137905]: https://github.com/home-assistant/core/pull/137905 +[#137906]: https://github.com/home-assistant/core/pull/137906 +[#137907]: https://github.com/home-assistant/core/pull/137907 +[#137909]: https://github.com/home-assistant/core/pull/137909 +[#137910]: https://github.com/home-assistant/core/pull/137910 +[#137911]: https://github.com/home-assistant/core/pull/137911 +[#137912]: https://github.com/home-assistant/core/pull/137912 +[#137913]: https://github.com/home-assistant/core/pull/137913 +[#137916]: https://github.com/home-assistant/core/pull/137916 +[#137918]: https://github.com/home-assistant/core/pull/137918 +[#137919]: https://github.com/home-assistant/core/pull/137919 +[#137920]: https://github.com/home-assistant/core/pull/137920 +[#137921]: https://github.com/home-assistant/core/pull/137921 +[#137922]: https://github.com/home-assistant/core/pull/137922 +[#137923]: https://github.com/home-assistant/core/pull/137923 +[#137924]: https://github.com/home-assistant/core/pull/137924 +[#137925]: https://github.com/home-assistant/core/pull/137925 +[#137926]: https://github.com/home-assistant/core/pull/137926 +[#137927]: https://github.com/home-assistant/core/pull/137927 +[#137928]: https://github.com/home-assistant/core/pull/137928 +[#137929]: https://github.com/home-assistant/core/pull/137929 +[#137930]: https://github.com/home-assistant/core/pull/137930 +[#137932]: https://github.com/home-assistant/core/pull/137932 +[#137933]: https://github.com/home-assistant/core/pull/137933 +[#137934]: https://github.com/home-assistant/core/pull/137934 +[#137935]: https://github.com/home-assistant/core/pull/137935 +[#137936]: https://github.com/home-assistant/core/pull/137936 +[#137938]: https://github.com/home-assistant/core/pull/137938 +[#137939]: https://github.com/home-assistant/core/pull/137939 +[#137940]: https://github.com/home-assistant/core/pull/137940 +[#137941]: https://github.com/home-assistant/core/pull/137941 +[#137942]: https://github.com/home-assistant/core/pull/137942 +[#137943]: https://github.com/home-assistant/core/pull/137943 +[#137944]: https://github.com/home-assistant/core/pull/137944 +[#137945]: https://github.com/home-assistant/core/pull/137945 +[#137946]: https://github.com/home-assistant/core/pull/137946 +[#137947]: https://github.com/home-assistant/core/pull/137947 +[#137948]: https://github.com/home-assistant/core/pull/137948 +[#137950]: https://github.com/home-assistant/core/pull/137950 +[#137951]: https://github.com/home-assistant/core/pull/137951 +[#137953]: https://github.com/home-assistant/core/pull/137953 +[#137954]: https://github.com/home-assistant/core/pull/137954 +[#137955]: https://github.com/home-assistant/core/pull/137955 +[#137956]: https://github.com/home-assistant/core/pull/137956 +[#137957]: https://github.com/home-assistant/core/pull/137957 +[#137958]: https://github.com/home-assistant/core/pull/137958 +[#137959]: https://github.com/home-assistant/core/pull/137959 +[#137960]: https://github.com/home-assistant/core/pull/137960 +[#137962]: https://github.com/home-assistant/core/pull/137962 +[#137964]: https://github.com/home-assistant/core/pull/137964 +[#137965]: https://github.com/home-assistant/core/pull/137965 +[#137966]: https://github.com/home-assistant/core/pull/137966 +[#137967]: https://github.com/home-assistant/core/pull/137967 +[#137968]: https://github.com/home-assistant/core/pull/137968 +[#137970]: https://github.com/home-assistant/core/pull/137970 +[#137971]: https://github.com/home-assistant/core/pull/137971 +[#137972]: https://github.com/home-assistant/core/pull/137972 +[#137973]: https://github.com/home-assistant/core/pull/137973 +[#137974]: https://github.com/home-assistant/core/pull/137974 +[#137977]: https://github.com/home-assistant/core/pull/137977 +[#137978]: https://github.com/home-assistant/core/pull/137978 +[#137979]: https://github.com/home-assistant/core/pull/137979 +[#137981]: https://github.com/home-assistant/core/pull/137981 +[#137982]: https://github.com/home-assistant/core/pull/137982 +[#137983]: https://github.com/home-assistant/core/pull/137983 +[#137984]: https://github.com/home-assistant/core/pull/137984 +[#137985]: https://github.com/home-assistant/core/pull/137985 +[#137988]: https://github.com/home-assistant/core/pull/137988 +[#137994]: https://github.com/home-assistant/core/pull/137994 +[#137995]: https://github.com/home-assistant/core/pull/137995 +[#138015]: https://github.com/home-assistant/core/pull/138015 +[#138017]: https://github.com/home-assistant/core/pull/138017 +[#138027]: https://github.com/home-assistant/core/pull/138027 +[#138028]: https://github.com/home-assistant/core/pull/138028 +[#138029]: https://github.com/home-assistant/core/pull/138029 +[#138031]: https://github.com/home-assistant/core/pull/138031 +[#138032]: https://github.com/home-assistant/core/pull/138032 +[#138033]: https://github.com/home-assistant/core/pull/138033 +[#138034]: https://github.com/home-assistant/core/pull/138034 +[#138035]: https://github.com/home-assistant/core/pull/138035 +[#138036]: https://github.com/home-assistant/core/pull/138036 +[#138037]: https://github.com/home-assistant/core/pull/138037 +[#138038]: https://github.com/home-assistant/core/pull/138038 +[#138039]: https://github.com/home-assistant/core/pull/138039 +[#138040]: https://github.com/home-assistant/core/pull/138040 +[#138041]: https://github.com/home-assistant/core/pull/138041 +[#138042]: https://github.com/home-assistant/core/pull/138042 +[#138043]: https://github.com/home-assistant/core/pull/138043 +[#138044]: https://github.com/home-assistant/core/pull/138044 +[#138045]: https://github.com/home-assistant/core/pull/138045 +[#138046]: https://github.com/home-assistant/core/pull/138046 +[#138047]: https://github.com/home-assistant/core/pull/138047 +[#138048]: https://github.com/home-assistant/core/pull/138048 +[#138049]: https://github.com/home-assistant/core/pull/138049 +[#138050]: https://github.com/home-assistant/core/pull/138050 +[#138051]: https://github.com/home-assistant/core/pull/138051 +[#138052]: https://github.com/home-assistant/core/pull/138052 +[#138053]: https://github.com/home-assistant/core/pull/138053 +[#138054]: https://github.com/home-assistant/core/pull/138054 +[#138055]: https://github.com/home-assistant/core/pull/138055 +[#138056]: https://github.com/home-assistant/core/pull/138056 +[#138061]: https://github.com/home-assistant/core/pull/138061 +[#138062]: https://github.com/home-assistant/core/pull/138062 +[#138063]: https://github.com/home-assistant/core/pull/138063 +[#138064]: https://github.com/home-assistant/core/pull/138064 +[#138066]: https://github.com/home-assistant/core/pull/138066 +[#138068]: https://github.com/home-assistant/core/pull/138068 +[#138069]: https://github.com/home-assistant/core/pull/138069 +[#138070]: https://github.com/home-assistant/core/pull/138070 +[#138071]: https://github.com/home-assistant/core/pull/138071 +[#138072]: https://github.com/home-assistant/core/pull/138072 +[#138073]: https://github.com/home-assistant/core/pull/138073 +[#138074]: https://github.com/home-assistant/core/pull/138074 +[#138075]: https://github.com/home-assistant/core/pull/138075 +[#138076]: https://github.com/home-assistant/core/pull/138076 +[#138078]: https://github.com/home-assistant/core/pull/138078 +[#138080]: https://github.com/home-assistant/core/pull/138080 +[#138081]: https://github.com/home-assistant/core/pull/138081 +[#138082]: https://github.com/home-assistant/core/pull/138082 +[#138083]: https://github.com/home-assistant/core/pull/138083 +[#138085]: https://github.com/home-assistant/core/pull/138085 +[#138086]: https://github.com/home-assistant/core/pull/138086 +[#138088]: https://github.com/home-assistant/core/pull/138088 +[#138089]: https://github.com/home-assistant/core/pull/138089 +[#138090]: https://github.com/home-assistant/core/pull/138090 +[#138091]: https://github.com/home-assistant/core/pull/138091 +[#138092]: https://github.com/home-assistant/core/pull/138092 +[#138093]: https://github.com/home-assistant/core/pull/138093 +[#138094]: https://github.com/home-assistant/core/pull/138094 +[#138095]: https://github.com/home-assistant/core/pull/138095 +[#138102]: https://github.com/home-assistant/core/pull/138102 +[#138103]: https://github.com/home-assistant/core/pull/138103 +[#138105]: https://github.com/home-assistant/core/pull/138105 +[#138106]: https://github.com/home-assistant/core/pull/138106 +[#138107]: https://github.com/home-assistant/core/pull/138107 +[#138108]: https://github.com/home-assistant/core/pull/138108 +[#138109]: https://github.com/home-assistant/core/pull/138109 +[#138110]: https://github.com/home-assistant/core/pull/138110 +[#138111]: https://github.com/home-assistant/core/pull/138111 +[#138112]: https://github.com/home-assistant/core/pull/138112 +[#138113]: https://github.com/home-assistant/core/pull/138113 +[#138114]: https://github.com/home-assistant/core/pull/138114 +[#138115]: https://github.com/home-assistant/core/pull/138115 +[#138116]: https://github.com/home-assistant/core/pull/138116 +[#138117]: https://github.com/home-assistant/core/pull/138117 +[#138119]: https://github.com/home-assistant/core/pull/138119 +[#138120]: https://github.com/home-assistant/core/pull/138120 +[#138122]: https://github.com/home-assistant/core/pull/138122 +[#138123]: https://github.com/home-assistant/core/pull/138123 +[#138124]: https://github.com/home-assistant/core/pull/138124 +[#138125]: https://github.com/home-assistant/core/pull/138125 +[#138127]: https://github.com/home-assistant/core/pull/138127 +[#138128]: https://github.com/home-assistant/core/pull/138128 +[#138129]: https://github.com/home-assistant/core/pull/138129 +[#138130]: https://github.com/home-assistant/core/pull/138130 +[#138131]: https://github.com/home-assistant/core/pull/138131 +[#138132]: https://github.com/home-assistant/core/pull/138132 +[#138133]: https://github.com/home-assistant/core/pull/138133 +[#138134]: https://github.com/home-assistant/core/pull/138134 +[#138137]: https://github.com/home-assistant/core/pull/138137 +[#138138]: https://github.com/home-assistant/core/pull/138138 +[#138139]: https://github.com/home-assistant/core/pull/138139 +[#138140]: https://github.com/home-assistant/core/pull/138140 +[#138141]: https://github.com/home-assistant/core/pull/138141 +[#138142]: https://github.com/home-assistant/core/pull/138142 +[#138143]: https://github.com/home-assistant/core/pull/138143 +[#138144]: https://github.com/home-assistant/core/pull/138144 +[#138146]: https://github.com/home-assistant/core/pull/138146 +[#138147]: https://github.com/home-assistant/core/pull/138147 +[#138148]: https://github.com/home-assistant/core/pull/138148 +[#138149]: https://github.com/home-assistant/core/pull/138149 +[#138150]: https://github.com/home-assistant/core/pull/138150 +[#138151]: https://github.com/home-assistant/core/pull/138151 +[#138152]: https://github.com/home-assistant/core/pull/138152 +[#138153]: https://github.com/home-assistant/core/pull/138153 +[#138154]: https://github.com/home-assistant/core/pull/138154 +[#138155]: https://github.com/home-assistant/core/pull/138155 +[#138156]: https://github.com/home-assistant/core/pull/138156 +[#138162]: https://github.com/home-assistant/core/pull/138162 +[#138163]: https://github.com/home-assistant/core/pull/138163 +[#138167]: https://github.com/home-assistant/core/pull/138167 +[#138171]: https://github.com/home-assistant/core/pull/138171 +[#138173]: https://github.com/home-assistant/core/pull/138173 +[#138177]: https://github.com/home-assistant/core/pull/138177 +[#138178]: https://github.com/home-assistant/core/pull/138178 +[#138184]: https://github.com/home-assistant/core/pull/138184 +[#138192]: https://github.com/home-assistant/core/pull/138192 +[#138194]: https://github.com/home-assistant/core/pull/138194 +[#138198]: https://github.com/home-assistant/core/pull/138198 +[#138200]: https://github.com/home-assistant/core/pull/138200 +[#138201]: https://github.com/home-assistant/core/pull/138201 +[#138202]: https://github.com/home-assistant/core/pull/138202 +[#138203]: https://github.com/home-assistant/core/pull/138203 +[#138204]: https://github.com/home-assistant/core/pull/138204 +[#138205]: https://github.com/home-assistant/core/pull/138205 +[#138211]: https://github.com/home-assistant/core/pull/138211 +[#138212]: https://github.com/home-assistant/core/pull/138212 +[#138213]: https://github.com/home-assistant/core/pull/138213 +[#138214]: https://github.com/home-assistant/core/pull/138214 +[#138221]: https://github.com/home-assistant/core/pull/138221 +[#138223]: https://github.com/home-assistant/core/pull/138223 +[#138225]: https://github.com/home-assistant/core/pull/138225 +[#138229]: https://github.com/home-assistant/core/pull/138229 +[#138230]: https://github.com/home-assistant/core/pull/138230 +[#138232]: https://github.com/home-assistant/core/pull/138232 +[#138233]: https://github.com/home-assistant/core/pull/138233 +[#138235]: https://github.com/home-assistant/core/pull/138235 +[#138237]: https://github.com/home-assistant/core/pull/138237 +[#138238]: https://github.com/home-assistant/core/pull/138238 +[#138239]: https://github.com/home-assistant/core/pull/138239 +[#138240]: https://github.com/home-assistant/core/pull/138240 +[#138244]: https://github.com/home-assistant/core/pull/138244 +[#138246]: https://github.com/home-assistant/core/pull/138246 +[#138247]: https://github.com/home-assistant/core/pull/138247 +[#138248]: https://github.com/home-assistant/core/pull/138248 +[#138249]: https://github.com/home-assistant/core/pull/138249 +[#138256]: https://github.com/home-assistant/core/pull/138256 +[#138263]: https://github.com/home-assistant/core/pull/138263 +[#138264]: https://github.com/home-assistant/core/pull/138264 +[#138266]: https://github.com/home-assistant/core/pull/138266 +[#138267]: https://github.com/home-assistant/core/pull/138267 +[#138268]: https://github.com/home-assistant/core/pull/138268 +[#138271]: https://github.com/home-assistant/core/pull/138271 +[#138274]: https://github.com/home-assistant/core/pull/138274 +[#138275]: https://github.com/home-assistant/core/pull/138275 +[#138276]: https://github.com/home-assistant/core/pull/138276 +[#138279]: https://github.com/home-assistant/core/pull/138279 +[#138280]: https://github.com/home-assistant/core/pull/138280 +[#138281]: https://github.com/home-assistant/core/pull/138281 +[#138287]: https://github.com/home-assistant/core/pull/138287 +[#138288]: https://github.com/home-assistant/core/pull/138288 +[#138289]: https://github.com/home-assistant/core/pull/138289 +[#138294]: https://github.com/home-assistant/core/pull/138294 +[#138306]: https://github.com/home-assistant/core/pull/138306 +[#138307]: https://github.com/home-assistant/core/pull/138307 +[#138309]: https://github.com/home-assistant/core/pull/138309 +[#138310]: https://github.com/home-assistant/core/pull/138310 +[#138312]: https://github.com/home-assistant/core/pull/138312 +[#138313]: https://github.com/home-assistant/core/pull/138313 +[#138319]: https://github.com/home-assistant/core/pull/138319 +[#138321]: https://github.com/home-assistant/core/pull/138321 +[#138322]: https://github.com/home-assistant/core/pull/138322 +[#138329]: https://github.com/home-assistant/core/pull/138329 +[#138330]: https://github.com/home-assistant/core/pull/138330 +[#138331]: https://github.com/home-assistant/core/pull/138331 +[#138334]: https://github.com/home-assistant/core/pull/138334 +[#138343]: https://github.com/home-assistant/core/pull/138343 +[#138346]: https://github.com/home-assistant/core/pull/138346 +[#138354]: https://github.com/home-assistant/core/pull/138354 +[#138355]: https://github.com/home-assistant/core/pull/138355 +[#138360]: https://github.com/home-assistant/core/pull/138360 +[#138361]: https://github.com/home-assistant/core/pull/138361 +[#138362]: https://github.com/home-assistant/core/pull/138362 +[#138364]: https://github.com/home-assistant/core/pull/138364 +[#138366]: https://github.com/home-assistant/core/pull/138366 +[#138368]: https://github.com/home-assistant/core/pull/138368 +[#138373]: https://github.com/home-assistant/core/pull/138373 +[#138374]: https://github.com/home-assistant/core/pull/138374 +[#138380]: https://github.com/home-assistant/core/pull/138380 +[#138384]: https://github.com/home-assistant/core/pull/138384 +[#138385]: https://github.com/home-assistant/core/pull/138385 +[#138393]: https://github.com/home-assistant/core/pull/138393 +[#138403]: https://github.com/home-assistant/core/pull/138403 +[#138407]: https://github.com/home-assistant/core/pull/138407 +[#138410]: https://github.com/home-assistant/core/pull/138410 +[#138411]: https://github.com/home-assistant/core/pull/138411 +[#138419]: https://github.com/home-assistant/core/pull/138419 +[#138420]: https://github.com/home-assistant/core/pull/138420 +[#138422]: https://github.com/home-assistant/core/pull/138422 +[#138425]: https://github.com/home-assistant/core/pull/138425 +[#138431]: https://github.com/home-assistant/core/pull/138431 +[#138432]: https://github.com/home-assistant/core/pull/138432 +[#138433]: https://github.com/home-assistant/core/pull/138433 +[#138434]: https://github.com/home-assistant/core/pull/138434 +[#138436]: https://github.com/home-assistant/core/pull/138436 +[#138446]: https://github.com/home-assistant/core/pull/138446 +[#138459]: https://github.com/home-assistant/core/pull/138459 +[#138470]: https://github.com/home-assistant/core/pull/138470 +[#138476]: https://github.com/home-assistant/core/pull/138476 +[#138490]: https://github.com/home-assistant/core/pull/138490 +[#138491]: https://github.com/home-assistant/core/pull/138491 +[#138494]: https://github.com/home-assistant/core/pull/138494 +[#138509]: https://github.com/home-assistant/core/pull/138509 +[#138514]: https://github.com/home-assistant/core/pull/138514 +[#138517]: https://github.com/home-assistant/core/pull/138517 +[#138520]: https://github.com/home-assistant/core/pull/138520 +[#138522]: https://github.com/home-assistant/core/pull/138522 +[#138534]: https://github.com/home-assistant/core/pull/138534 +[#138540]: https://github.com/home-assistant/core/pull/138540 +[#138547]: https://github.com/home-assistant/core/pull/138547 +[#138548]: https://github.com/home-assistant/core/pull/138548 +[#138549]: https://github.com/home-assistant/core/pull/138549 +[#138553]: https://github.com/home-assistant/core/pull/138553 +[#138554]: https://github.com/home-assistant/core/pull/138554 +[#138555]: https://github.com/home-assistant/core/pull/138555 +[#138557]: https://github.com/home-assistant/core/pull/138557 +[#138558]: https://github.com/home-assistant/core/pull/138558 +[#138560]: https://github.com/home-assistant/core/pull/138560 +[#138563]: https://github.com/home-assistant/core/pull/138563 +[#138564]: https://github.com/home-assistant/core/pull/138564 +[#138566]: https://github.com/home-assistant/core/pull/138566 +[#138568]: https://github.com/home-assistant/core/pull/138568 +[#138576]: https://github.com/home-assistant/core/pull/138576 +[#138580]: https://github.com/home-assistant/core/pull/138580 +[#138583]: https://github.com/home-assistant/core/pull/138583 +[#138584]: https://github.com/home-assistant/core/pull/138584 +[#138586]: https://github.com/home-assistant/core/pull/138586 +[#138593]: https://github.com/home-assistant/core/pull/138593 +[#138595]: https://github.com/home-assistant/core/pull/138595 +[#138601]: https://github.com/home-assistant/core/pull/138601 +[#138605]: https://github.com/home-assistant/core/pull/138605 +[#138608]: https://github.com/home-assistant/core/pull/138608 +[#138610]: https://github.com/home-assistant/core/pull/138610 +[#138613]: https://github.com/home-assistant/core/pull/138613 +[#138618]: https://github.com/home-assistant/core/pull/138618 +[#138619]: https://github.com/home-assistant/core/pull/138619 +[#138624]: https://github.com/home-assistant/core/pull/138624 +[#138626]: https://github.com/home-assistant/core/pull/138626 +[#138628]: https://github.com/home-assistant/core/pull/138628 +[#138634]: https://github.com/home-assistant/core/pull/138634 +[#138636]: https://github.com/home-assistant/core/pull/138636 +[#138637]: https://github.com/home-assistant/core/pull/138637 +[#138647]: https://github.com/home-assistant/core/pull/138647 +[#138651]: https://github.com/home-assistant/core/pull/138651 +[#138652]: https://github.com/home-assistant/core/pull/138652 +[#138655]: https://github.com/home-assistant/core/pull/138655 +[#138659]: https://github.com/home-assistant/core/pull/138659 +[#138664]: https://github.com/home-assistant/core/pull/138664 +[#138667]: https://github.com/home-assistant/core/pull/138667 +[#138669]: https://github.com/home-assistant/core/pull/138669 +[#138672]: https://github.com/home-assistant/core/pull/138672 +[#138674]: https://github.com/home-assistant/core/pull/138674 +[#138675]: https://github.com/home-assistant/core/pull/138675 +[#138677]: https://github.com/home-assistant/core/pull/138677 +[#138678]: https://github.com/home-assistant/core/pull/138678 +[#138680]: https://github.com/home-assistant/core/pull/138680 +[#138698]: https://github.com/home-assistant/core/pull/138698 +[#138699]: https://github.com/home-assistant/core/pull/138699 +[#138701]: https://github.com/home-assistant/core/pull/138701 +[#138703]: https://github.com/home-assistant/core/pull/138703 +[#138706]: https://github.com/home-assistant/core/pull/138706 +[#138707]: https://github.com/home-assistant/core/pull/138707 +[#138708]: https://github.com/home-assistant/core/pull/138708 +[#138710]: https://github.com/home-assistant/core/pull/138710 +[#138714]: https://github.com/home-assistant/core/pull/138714 +[#138717]: https://github.com/home-assistant/core/pull/138717 +[#138721]: https://github.com/home-assistant/core/pull/138721 +[#138723]: https://github.com/home-assistant/core/pull/138723 +[#138724]: https://github.com/home-assistant/core/pull/138724 +[#138727]: https://github.com/home-assistant/core/pull/138727 +[#138728]: https://github.com/home-assistant/core/pull/138728 +[#138729]: https://github.com/home-assistant/core/pull/138729 +[#138734]: https://github.com/home-assistant/core/pull/138734 +[#138737]: https://github.com/home-assistant/core/pull/138737 +[#138739]: https://github.com/home-assistant/core/pull/138739 +[#138740]: https://github.com/home-assistant/core/pull/138740 +[#138741]: https://github.com/home-assistant/core/pull/138741 +[#138742]: https://github.com/home-assistant/core/pull/138742 +[#138746]: https://github.com/home-assistant/core/pull/138746 +[#138748]: https://github.com/home-assistant/core/pull/138748 +[#138749]: https://github.com/home-assistant/core/pull/138749 +[#138751]: https://github.com/home-assistant/core/pull/138751 +[#138756]: https://github.com/home-assistant/core/pull/138756 +[#138759]: https://github.com/home-assistant/core/pull/138759 +[#138763]: https://github.com/home-assistant/core/pull/138763 +[#138764]: https://github.com/home-assistant/core/pull/138764 +[#138766]: https://github.com/home-assistant/core/pull/138766 +[#138773]: https://github.com/home-assistant/core/pull/138773 +[#138776]: https://github.com/home-assistant/core/pull/138776 +[#138777]: https://github.com/home-assistant/core/pull/138777 +[#138779]: https://github.com/home-assistant/core/pull/138779 +[#138782]: https://github.com/home-assistant/core/pull/138782 +[#138786]: https://github.com/home-assistant/core/pull/138786 +[#138789]: https://github.com/home-assistant/core/pull/138789 +[#138790]: https://github.com/home-assistant/core/pull/138790 +[#138791]: https://github.com/home-assistant/core/pull/138791 +[#138792]: https://github.com/home-assistant/core/pull/138792 +[#138794]: https://github.com/home-assistant/core/pull/138794 +[#138795]: https://github.com/home-assistant/core/pull/138795 +[#138796]: https://github.com/home-assistant/core/pull/138796 +[#138798]: https://github.com/home-assistant/core/pull/138798 +[#138799]: https://github.com/home-assistant/core/pull/138799 +[#138801]: https://github.com/home-assistant/core/pull/138801 +[#138806]: https://github.com/home-assistant/core/pull/138806 +[#138807]: https://github.com/home-assistant/core/pull/138807 +[#138812]: https://github.com/home-assistant/core/pull/138812 +[#138815]: https://github.com/home-assistant/core/pull/138815 +[#138819]: https://github.com/home-assistant/core/pull/138819 +[#138820]: https://github.com/home-assistant/core/pull/138820 +[#138827]: https://github.com/home-assistant/core/pull/138827 +[#138832]: https://github.com/home-assistant/core/pull/138832 +[#138834]: https://github.com/home-assistant/core/pull/138834 +[#138837]: https://github.com/home-assistant/core/pull/138837 +[#138838]: https://github.com/home-assistant/core/pull/138838 +[#138839]: https://github.com/home-assistant/core/pull/138839 +[#138840]: https://github.com/home-assistant/core/pull/138840 +[#138854]: https://github.com/home-assistant/core/pull/138854 +[#138855]: https://github.com/home-assistant/core/pull/138855 +[#138861]: https://github.com/home-assistant/core/pull/138861 +[#138867]: https://github.com/home-assistant/core/pull/138867 +[#138870]: https://github.com/home-assistant/core/pull/138870 +[#138872]: https://github.com/home-assistant/core/pull/138872 +[#138874]: https://github.com/home-assistant/core/pull/138874 +[#138876]: https://github.com/home-assistant/core/pull/138876 +[#138877]: https://github.com/home-assistant/core/pull/138877 +[#138878]: https://github.com/home-assistant/core/pull/138878 +[#138882]: https://github.com/home-assistant/core/pull/138882 +[#138883]: https://github.com/home-assistant/core/pull/138883 +[#138884]: https://github.com/home-assistant/core/pull/138884 +[#138886]: https://github.com/home-assistant/core/pull/138886 +[#138887]: https://github.com/home-assistant/core/pull/138887 +[#138893]: https://github.com/home-assistant/core/pull/138893 +[#138894]: https://github.com/home-assistant/core/pull/138894 +[#138895]: https://github.com/home-assistant/core/pull/138895 +[#138896]: https://github.com/home-assistant/core/pull/138896 +[#138897]: https://github.com/home-assistant/core/pull/138897 +[#138898]: https://github.com/home-assistant/core/pull/138898 +[#138901]: https://github.com/home-assistant/core/pull/138901 +[#138902]: https://github.com/home-assistant/core/pull/138902 +[#138904]: https://github.com/home-assistant/core/pull/138904 +[#138905]: https://github.com/home-assistant/core/pull/138905 +[#138906]: https://github.com/home-assistant/core/pull/138906 +[#138907]: https://github.com/home-assistant/core/pull/138907 +[#138908]: https://github.com/home-assistant/core/pull/138908 +[#138909]: https://github.com/home-assistant/core/pull/138909 +[#138910]: https://github.com/home-assistant/core/pull/138910 +[#138911]: https://github.com/home-assistant/core/pull/138911 +[#138912]: https://github.com/home-assistant/core/pull/138912 +[#138913]: https://github.com/home-assistant/core/pull/138913 +[#138914]: https://github.com/home-assistant/core/pull/138914 +[#138917]: https://github.com/home-assistant/core/pull/138917 +[#138920]: https://github.com/home-assistant/core/pull/138920 +[#138921]: https://github.com/home-assistant/core/pull/138921 +[#138923]: https://github.com/home-assistant/core/pull/138923 +[#138926]: https://github.com/home-assistant/core/pull/138926 +[#138928]: https://github.com/home-assistant/core/pull/138928 +[#138929]: https://github.com/home-assistant/core/pull/138929 +[#138930]: https://github.com/home-assistant/core/pull/138930 +[#138931]: https://github.com/home-assistant/core/pull/138931 +[#138932]: https://github.com/home-assistant/core/pull/138932 +[#138935]: https://github.com/home-assistant/core/pull/138935 +[#138936]: https://github.com/home-assistant/core/pull/138936 +[#138939]: https://github.com/home-assistant/core/pull/138939 +[#138940]: https://github.com/home-assistant/core/pull/138940 +[#138941]: https://github.com/home-assistant/core/pull/138941 +[#138943]: https://github.com/home-assistant/core/pull/138943 +[#138945]: https://github.com/home-assistant/core/pull/138945 +[#138948]: https://github.com/home-assistant/core/pull/138948 +[#138949]: https://github.com/home-assistant/core/pull/138949 +[#138950]: https://github.com/home-assistant/core/pull/138950 +[#138951]: https://github.com/home-assistant/core/pull/138951 +[#138952]: https://github.com/home-assistant/core/pull/138952 +[#138958]: https://github.com/home-assistant/core/pull/138958 +[#138959]: https://github.com/home-assistant/core/pull/138959 +[#138962]: https://github.com/home-assistant/core/pull/138962 +[#138964]: https://github.com/home-assistant/core/pull/138964 +[#138967]: https://github.com/home-assistant/core/pull/138967 +[#138969]: https://github.com/home-assistant/core/pull/138969 +[#138970]: https://github.com/home-assistant/core/pull/138970 +[#138973]: https://github.com/home-assistant/core/pull/138973 +[#138974]: https://github.com/home-assistant/core/pull/138974 +[#138975]: https://github.com/home-assistant/core/pull/138975 +[#138984]: https://github.com/home-assistant/core/pull/138984 +[#138988]: https://github.com/home-assistant/core/pull/138988 +[#138991]: https://github.com/home-assistant/core/pull/138991 +[#138993]: https://github.com/home-assistant/core/pull/138993 +[#138995]: https://github.com/home-assistant/core/pull/138995 +[#138997]: https://github.com/home-assistant/core/pull/138997 +[#138999]: https://github.com/home-assistant/core/pull/138999 +[#139000]: https://github.com/home-assistant/core/pull/139000 +[#139003]: https://github.com/home-assistant/core/pull/139003 +[#139009]: https://github.com/home-assistant/core/pull/139009 +[#139011]: https://github.com/home-assistant/core/pull/139011 +[#139013]: https://github.com/home-assistant/core/pull/139013 +[#139014]: https://github.com/home-assistant/core/pull/139014 +[#139017]: https://github.com/home-assistant/core/pull/139017 +[#139021]: https://github.com/home-assistant/core/pull/139021 +[#139027]: https://github.com/home-assistant/core/pull/139027 +[#139032]: https://github.com/home-assistant/core/pull/139032 +[#139035]: https://github.com/home-assistant/core/pull/139035 +[#139036]: https://github.com/home-assistant/core/pull/139036 +[#139037]: https://github.com/home-assistant/core/pull/139037 +[#139039]: https://github.com/home-assistant/core/pull/139039 +[#139042]: https://github.com/home-assistant/core/pull/139042 +[#139052]: https://github.com/home-assistant/core/pull/139052 +[#139054]: https://github.com/home-assistant/core/pull/139054 +[#139055]: https://github.com/home-assistant/core/pull/139055 +[#139056]: https://github.com/home-assistant/core/pull/139056 +[#139058]: https://github.com/home-assistant/core/pull/139058 +[#139059]: https://github.com/home-assistant/core/pull/139059 +[#139061]: https://github.com/home-assistant/core/pull/139061 +[#139062]: https://github.com/home-assistant/core/pull/139062 +[#139063]: https://github.com/home-assistant/core/pull/139063 +[#139065]: https://github.com/home-assistant/core/pull/139065 +[#139066]: https://github.com/home-assistant/core/pull/139066 +[#139067]: https://github.com/home-assistant/core/pull/139067 +[#139068]: https://github.com/home-assistant/core/pull/139068 +[#139070]: https://github.com/home-assistant/core/pull/139070 +[#139073]: https://github.com/home-assistant/core/pull/139073 +[#139074]: https://github.com/home-assistant/core/pull/139074 +[#139077]: https://github.com/home-assistant/core/pull/139077 +[#139082]: https://github.com/home-assistant/core/pull/139082 +[#139083]: https://github.com/home-assistant/core/pull/139083 +[#139088]: https://github.com/home-assistant/core/pull/139088 +[#139093]: https://github.com/home-assistant/core/pull/139093 +[#139096]: https://github.com/home-assistant/core/pull/139096 +[#139103]: https://github.com/home-assistant/core/pull/139103 +[#139104]: https://github.com/home-assistant/core/pull/139104 +[#139106]: https://github.com/home-assistant/core/pull/139106 +[#139108]: https://github.com/home-assistant/core/pull/139108 +[#139111]: https://github.com/home-assistant/core/pull/139111 +[#139113]: https://github.com/home-assistant/core/pull/139113 +[#139119]: https://github.com/home-assistant/core/pull/139119 +[#139122]: https://github.com/home-assistant/core/pull/139122 +[#139123]: https://github.com/home-assistant/core/pull/139123 +[#139129]: https://github.com/home-assistant/core/pull/139129 +[#139140]: https://github.com/home-assistant/core/pull/139140 +[#139141]: https://github.com/home-assistant/core/pull/139141 +[#139143]: https://github.com/home-assistant/core/pull/139143 +[#139145]: https://github.com/home-assistant/core/pull/139145 +[#139151]: https://github.com/home-assistant/core/pull/139151 +[#139157]: https://github.com/home-assistant/core/pull/139157 +[#139161]: https://github.com/home-assistant/core/pull/139161 +[#139162]: https://github.com/home-assistant/core/pull/139162 +[#139168]: https://github.com/home-assistant/core/pull/139168 +[#139177]: https://github.com/home-assistant/core/pull/139177 +[#139181]: https://github.com/home-assistant/core/pull/139181 +[#139185]: https://github.com/home-assistant/core/pull/139185 +[#139186]: https://github.com/home-assistant/core/pull/139186 +[#139187]: https://github.com/home-assistant/core/pull/139187 +[#139188]: https://github.com/home-assistant/core/pull/139188 +[#139189]: https://github.com/home-assistant/core/pull/139189 +[#139191]: https://github.com/home-assistant/core/pull/139191 +[#139196]: https://github.com/home-assistant/core/pull/139196 +[#139197]: https://github.com/home-assistant/core/pull/139197 +[#139199]: https://github.com/home-assistant/core/pull/139199 +[#139200]: https://github.com/home-assistant/core/pull/139200 +[#139202]: https://github.com/home-assistant/core/pull/139202 +[#139203]: https://github.com/home-assistant/core/pull/139203 +[#139206]: https://github.com/home-assistant/core/pull/139206 +[#139210]: https://github.com/home-assistant/core/pull/139210 +[#139211]: https://github.com/home-assistant/core/pull/139211 +[#139212]: https://github.com/home-assistant/core/pull/139212 +[#139213]: https://github.com/home-assistant/core/pull/139213 +[#139218]: https://github.com/home-assistant/core/pull/139218 +[#139223]: https://github.com/home-assistant/core/pull/139223 +[#139228]: https://github.com/home-assistant/core/pull/139228 +[#139229]: https://github.com/home-assistant/core/pull/139229 +[#139230]: https://github.com/home-assistant/core/pull/139230 +[#139231]: https://github.com/home-assistant/core/pull/139231 +[#139235]: https://github.com/home-assistant/core/pull/139235 +[#139238]: https://github.com/home-assistant/core/pull/139238 +[#139239]: https://github.com/home-assistant/core/pull/139239 +[#139242]: https://github.com/home-assistant/core/pull/139242 +[#139243]: https://github.com/home-assistant/core/pull/139243 +[#139244]: https://github.com/home-assistant/core/pull/139244 +[#139245]: https://github.com/home-assistant/core/pull/139245 +[#139246]: https://github.com/home-assistant/core/pull/139246 +[#139250]: https://github.com/home-assistant/core/pull/139250 +[#139251]: https://github.com/home-assistant/core/pull/139251 +[#139252]: https://github.com/home-assistant/core/pull/139252 +[#139253]: https://github.com/home-assistant/core/pull/139253 +[#139254]: https://github.com/home-assistant/core/pull/139254 +[#139255]: https://github.com/home-assistant/core/pull/139255 +[#139256]: https://github.com/home-assistant/core/pull/139256 +[#139257]: https://github.com/home-assistant/core/pull/139257 +[#139258]: https://github.com/home-assistant/core/pull/139258 +[#139259]: https://github.com/home-assistant/core/pull/139259 +[#139261]: https://github.com/home-assistant/core/pull/139261 +[#139262]: https://github.com/home-assistant/core/pull/139262 +[#139263]: https://github.com/home-assistant/core/pull/139263 +[#139265]: https://github.com/home-assistant/core/pull/139265 +[#139266]: https://github.com/home-assistant/core/pull/139266 +[#139267]: https://github.com/home-assistant/core/pull/139267 +[#139270]: https://github.com/home-assistant/core/pull/139270 +[#139271]: https://github.com/home-assistant/core/pull/139271 +[#139272]: https://github.com/home-assistant/core/pull/139272 +[#139273]: https://github.com/home-assistant/core/pull/139273 +[#139276]: https://github.com/home-assistant/core/pull/139276 +[#139277]: https://github.com/home-assistant/core/pull/139277 +[#139279]: https://github.com/home-assistant/core/pull/139279 +[#139282]: https://github.com/home-assistant/core/pull/139282 +[#139283]: https://github.com/home-assistant/core/pull/139283 +[#139287]: https://github.com/home-assistant/core/pull/139287 +[#139288]: https://github.com/home-assistant/core/pull/139288 +[#139289]: https://github.com/home-assistant/core/pull/139289 +[#139292]: https://github.com/home-assistant/core/pull/139292 +[#139294]: https://github.com/home-assistant/core/pull/139294 +[#139298]: https://github.com/home-assistant/core/pull/139298 +[#139299]: https://github.com/home-assistant/core/pull/139299 +[#139300]: https://github.com/home-assistant/core/pull/139300 +[#139303]: https://github.com/home-assistant/core/pull/139303 +[#139308]: https://github.com/home-assistant/core/pull/139308 +[#139309]: https://github.com/home-assistant/core/pull/139309 +[#139313]: https://github.com/home-assistant/core/pull/139313 +[#139314]: https://github.com/home-assistant/core/pull/139314 +[#139316]: https://github.com/home-assistant/core/pull/139316 +[#139317]: https://github.com/home-assistant/core/pull/139317 +[#139318]: https://github.com/home-assistant/core/pull/139318 +[#139320]: https://github.com/home-assistant/core/pull/139320 +[#139329]: https://github.com/home-assistant/core/pull/139329 +[#139330]: https://github.com/home-assistant/core/pull/139330 +[#139331]: https://github.com/home-assistant/core/pull/139331 +[#139332]: https://github.com/home-assistant/core/pull/139332 +[#139333]: https://github.com/home-assistant/core/pull/139333 +[#139336]: https://github.com/home-assistant/core/pull/139336 +[#139338]: https://github.com/home-assistant/core/pull/139338 +[#139339]: https://github.com/home-assistant/core/pull/139339 +[#139340]: https://github.com/home-assistant/core/pull/139340 +[#139342]: https://github.com/home-assistant/core/pull/139342 +[#139343]: https://github.com/home-assistant/core/pull/139343 +[#139344]: https://github.com/home-assistant/core/pull/139344 +[#139345]: https://github.com/home-assistant/core/pull/139345 +[#139346]: https://github.com/home-assistant/core/pull/139346 +[#139347]: https://github.com/home-assistant/core/pull/139347 +[#139349]: https://github.com/home-assistant/core/pull/139349 +[#139351]: https://github.com/home-assistant/core/pull/139351 +[#139353]: https://github.com/home-assistant/core/pull/139353 +[#139354]: https://github.com/home-assistant/core/pull/139354 +[#139355]: https://github.com/home-assistant/core/pull/139355 +[#139356]: https://github.com/home-assistant/core/pull/139356 +[#139358]: https://github.com/home-assistant/core/pull/139358 +[#139361]: https://github.com/home-assistant/core/pull/139361 +[#139362]: https://github.com/home-assistant/core/pull/139362 +[#139363]: https://github.com/home-assistant/core/pull/139363 +[#139364]: https://github.com/home-assistant/core/pull/139364 +[#139365]: https://github.com/home-assistant/core/pull/139365 +[#139366]: https://github.com/home-assistant/core/pull/139366 +[#139368]: https://github.com/home-assistant/core/pull/139368 +[#139369]: https://github.com/home-assistant/core/pull/139369 +[#139370]: https://github.com/home-assistant/core/pull/139370 +[#139371]: https://github.com/home-assistant/core/pull/139371 +[#139373]: https://github.com/home-assistant/core/pull/139373 +[#139378]: https://github.com/home-assistant/core/pull/139378 +[#139380]: https://github.com/home-assistant/core/pull/139380 +[#139383]: https://github.com/home-assistant/core/pull/139383 +[#139387]: https://github.com/home-assistant/core/pull/139387 +[#139392]: https://github.com/home-assistant/core/pull/139392 +[#139409]: https://github.com/home-assistant/core/pull/139409 +[#139410]: https://github.com/home-assistant/core/pull/139410 +[#139418]: https://github.com/home-assistant/core/pull/139418 +[#139420]: https://github.com/home-assistant/core/pull/139420 +[#139421]: https://github.com/home-assistant/core/pull/139421 +[#139423]: https://github.com/home-assistant/core/pull/139423 +[#139426]: https://github.com/home-assistant/core/pull/139426 +[#139427]: https://github.com/home-assistant/core/pull/139427 +[#139428]: https://github.com/home-assistant/core/pull/139428 +[#139431]: https://github.com/home-assistant/core/pull/139431 +[#139437]: https://github.com/home-assistant/core/pull/139437 +[#139438]: https://github.com/home-assistant/core/pull/139438 +[#139445]: https://github.com/home-assistant/core/pull/139445 +[#139447]: https://github.com/home-assistant/core/pull/139447 +[#139454]: https://github.com/home-assistant/core/pull/139454 +[#139456]: https://github.com/home-assistant/core/pull/139456 +[#139458]: https://github.com/home-assistant/core/pull/139458 +[#139460]: https://github.com/home-assistant/core/pull/139460 +[#139468]: https://github.com/home-assistant/core/pull/139468 +[#139469]: https://github.com/home-assistant/core/pull/139469 +[#139470]: https://github.com/home-assistant/core/pull/139470 +[#139473]: https://github.com/home-assistant/core/pull/139473 +[#139474]: https://github.com/home-assistant/core/pull/139474 +[#139478]: https://github.com/home-assistant/core/pull/139478 +[#139483]: https://github.com/home-assistant/core/pull/139483 +[#139491]: https://github.com/home-assistant/core/pull/139491 +[#139505]: https://github.com/home-assistant/core/pull/139505 +[#139508]: https://github.com/home-assistant/core/pull/139508 +[#139516]: https://github.com/home-assistant/core/pull/139516 +[#139518]: https://github.com/home-assistant/core/pull/139518 +[#139519]: https://github.com/home-assistant/core/pull/139519 +[#139522]: https://github.com/home-assistant/core/pull/139522 +[#139526]: https://github.com/home-assistant/core/pull/139526 +[#139531]: https://github.com/home-assistant/core/pull/139531 +[#139539]: https://github.com/home-assistant/core/pull/139539 +[#139541]: https://github.com/home-assistant/core/pull/139541 +[#139544]: https://github.com/home-assistant/core/pull/139544 +[#139546]: https://github.com/home-assistant/core/pull/139546 +[#139547]: https://github.com/home-assistant/core/pull/139547 +[#139548]: https://github.com/home-assistant/core/pull/139548 +[#139550]: https://github.com/home-assistant/core/pull/139550 +[#139564]: https://github.com/home-assistant/core/pull/139564 +[#139565]: https://github.com/home-assistant/core/pull/139565 +[#139567]: https://github.com/home-assistant/core/pull/139567 +[#139569]: https://github.com/home-assistant/core/pull/139569 +[#139571]: https://github.com/home-assistant/core/pull/139571 +[#139576]: https://github.com/home-assistant/core/pull/139576 +[#139577]: https://github.com/home-assistant/core/pull/139577 +[#139579]: https://github.com/home-assistant/core/pull/139579 +[#139582]: https://github.com/home-assistant/core/pull/139582 +[#139584]: https://github.com/home-assistant/core/pull/139584 +[#139585]: https://github.com/home-assistant/core/pull/139585 +[#139586]: https://github.com/home-assistant/core/pull/139586 +[#139598]: https://github.com/home-assistant/core/pull/139598 +[#139600]: https://github.com/home-assistant/core/pull/139600 +[#139601]: https://github.com/home-assistant/core/pull/139601 +[#139603]: https://github.com/home-assistant/core/pull/139603 +[#139609]: https://github.com/home-assistant/core/pull/139609 +[#139613]: https://github.com/home-assistant/core/pull/139613 +[#139626]: https://github.com/home-assistant/core/pull/139626 +[#139627]: https://github.com/home-assistant/core/pull/139627 +[#139639]: https://github.com/home-assistant/core/pull/139639 +[#139652]: https://github.com/home-assistant/core/pull/139652 +[#139679]: https://github.com/home-assistant/core/pull/139679 +[#139680]: https://github.com/home-assistant/core/pull/139680 +[#139681]: https://github.com/home-assistant/core/pull/139681 +[#139700]: https://github.com/home-assistant/core/pull/139700 +[#139704]: https://github.com/home-assistant/core/pull/139704 +[#139711]: https://github.com/home-assistant/core/pull/139711 +[#139712]: https://github.com/home-assistant/core/pull/139712 +[#139714]: https://github.com/home-assistant/core/pull/139714 +[#139727]: https://github.com/home-assistant/core/pull/139727 +[#139728]: https://github.com/home-assistant/core/pull/139728 +[#139740]: https://github.com/home-assistant/core/pull/139740 +[#139750]: https://github.com/home-assistant/core/pull/139750 +[#139751]: https://github.com/home-assistant/core/pull/139751 +[#139757]: https://github.com/home-assistant/core/pull/139757 +[#139758]: https://github.com/home-assistant/core/pull/139758 +[#139760]: https://github.com/home-assistant/core/pull/139760 +[#139772]: https://github.com/home-assistant/core/pull/139772 +[#139786]: https://github.com/home-assistant/core/pull/139786 +[#139788]: https://github.com/home-assistant/core/pull/139788 +[#139816]: https://github.com/home-assistant/core/pull/139816 +[#139829]: https://github.com/home-assistant/core/pull/139829 +[#139840]: https://github.com/home-assistant/core/pull/139840 +[#139841]: https://github.com/home-assistant/core/pull/139841 +[#139846]: https://github.com/home-assistant/core/pull/139846 +[#139851]: https://github.com/home-assistant/core/pull/139851 +[#139860]: https://github.com/home-assistant/core/pull/139860 +[@10100011]: https://github.com/10100011 +[@Bre77]: https://github.com/Bre77 +[@CFenner]: https://github.com/CFenner +[@CloCkWeRX]: https://github.com/CloCkWeRX +[@CodingSquirrel]: https://github.com/CodingSquirrel +[@CrEaK]: https://github.com/CrEaK +[@DCSBL]: https://github.com/DCSBL +[@Diegorro98]: https://github.com/Diegorro98 +[@Ernst79]: https://github.com/Ernst79 +[@FredericMa]: https://github.com/FredericMa +[@Galorhallen]: https://github.com/Galorhallen +[@HA-Roberto]: https://github.com/HA-Roberto +[@IceBotYT]: https://github.com/IceBotYT +[@IvanLH]: https://github.com/IvanLH +[@Kane610]: https://github.com/Kane610 +[@LG-ThinQ-Integration]: https://github.com/LG-ThinQ-Integration +[@LaithBudairi]: https://github.com/LaithBudairi +[@Lash-L]: https://github.com/Lash-L +[@MaestroOnICe]: https://github.com/MaestroOnICe +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@Martreides]: https://github.com/Martreides +[@MindFreeze]: https://github.com/MindFreeze +[@MisterCommand]: https://github.com/MisterCommand +[@Moustachauve]: https://github.com/Moustachauve +[@MrConorAE]: https://github.com/MrConorAE +[@NoRi2909]: https://github.com/NoRi2909 +[@PeteRager]: https://github.com/PeteRager +[@RJPoelstra]: https://github.com/RJPoelstra +[@RenierM26]: https://github.com/RenierM26 +[@RunC0deRun]: https://github.com/RunC0deRun +[@SLaks]: https://github.com/SLaks +[@Samywamy10]: https://github.com/Samywamy10 +[@Shulyaka]: https://github.com/Shulyaka +[@Shutgun]: https://github.com/Shutgun +[@Sibgatulin]: https://github.com/Sibgatulin +[@Spcemarine]: https://github.com/Spcemarine +[@StaleLoafOfBread]: https://github.com/StaleLoafOfBread +[@SteveDiks]: https://github.com/SteveDiks +[@Taraman17]: https://github.com/Taraman17 +[@TheJulianJES]: https://github.com/TheJulianJES +[@TomBrien]: https://github.com/TomBrien +[@VandeurenGlenn]: https://github.com/VandeurenGlenn +[@Xitee1]: https://github.com/Xitee1 +[@ZephireNZ]: https://github.com/ZephireNZ +[@abmantis]: https://github.com/abmantis +[@albertogeniola]: https://github.com/albertogeniola +[@alengwenus]: https://github.com/alengwenus +[@allenporter]: https://github.com/allenporter +[@andrew-codechimp]: https://github.com/andrew-codechimp +[@andrewsayre]: https://github.com/andrewsayre +[@antlarr]: https://github.com/antlarr +[@arturpragacz]: https://github.com/arturpragacz +[@ashionky]: https://github.com/ashionky +[@autinerd]: https://github.com/autinerd +[@awahlig]: https://github.com/awahlig +[@balazs92117]: https://github.com/balazs92117 +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@benbridts]: https://github.com/benbridts +[@bieniu]: https://github.com/bieniu +[@bouwew]: https://github.com/bouwew +[@bramkragten]: https://github.com/bramkragten +[@brondum]: https://github.com/brondum +[@cameronr]: https://github.com/cameronr +[@catsmanac]: https://github.com/catsmanac +[@cdce8p]: https://github.com/cdce8p +[@cdnninja]: https://github.com/cdnninja +[@cereal2nd]: https://github.com/cereal2nd +[@chemelli74]: https://github.com/chemelli74 +[@codesalatdev]: https://github.com/codesalatdev +[@crug80]: https://github.com/crug80 +[@cs12ag]: https://github.com/cs12ag +[@dan-r]: https://github.com/dan-r +[@danbishop]: https://github.com/danbishop +[@davidrapan]: https://github.com/davidrapan +[@dgomes]: https://github.com/dgomes +[@edenhaus]: https://github.com/edenhaus +[@elmurato]: https://github.com/elmurato +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@erwindouna]: https://github.com/erwindouna +[@farmio]: https://github.com/farmio +[@filipagh]: https://github.com/filipagh +[@frenck]: https://github.com/frenck +[@fwestenberg]: https://github.com/fwestenberg +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@gjong]: https://github.com/gjong +[@gwww]: https://github.com/gwww +[@illia-piskurov]: https://github.com/illia-piskurov +[@iprak]: https://github.com/iprak +[@jaminh]: https://github.com/jaminh +[@javers99]: https://github.com/javers99 +[@jbouwh]: https://github.com/jbouwh +[@jdelaney72]: https://github.com/jdelaney72 +[@jeeftor]: https://github.com/jeeftor +[@jgrande]: https://github.com/jgrande +[@jgus]: https://github.com/jgus +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede +[@jpelgrom]: https://github.com/jpelgrom +[@jrieger]: https://github.com/jrieger +[@jschlyter]: https://github.com/jschlyter +[@kbickar]: https://github.com/kbickar +[@kiranbhakre]: https://github.com/kiranbhakre +[@laiho-vogels]: https://github.com/laiho-vogels +[@lanthaler]: https://github.com/lanthaler +[@lboue]: https://github.com/lboue +[@lellky]: https://github.com/lellky +[@ludeeus]: https://github.com/ludeeus +[@maghiel]: https://github.com/maghiel +[@marcelveldt]: https://github.com/marcelveldt +[@maruel]: https://github.com/maruel +[@matrixd2]: https://github.com/matrixd2 +[@mckbrmn]: https://github.com/mckbrmn +[@mdz]: https://github.com/mdz +[@mib1185]: https://github.com/mib1185 +[@migrzyb]: https://github.com/migrzyb +[@mikey0000]: https://github.com/mikey0000 +[@milanmeu]: https://github.com/milanmeu +[@mj23000]: https://github.com/mj23000 +[@moritzthecat]: https://github.com/moritzthecat +[@mtielen]: https://github.com/mtielen +[@natekspencer]: https://github.com/natekspencer +[@nivstein]: https://github.com/nivstein +[@noahhusby]: https://github.com/noahhusby +[@ozonejunkieau]: https://github.com/ozonejunkieau +[@parkerbxyz]: https://github.com/parkerbxyz +[@peteS-UK]: https://github.com/peteS-UK +[@pglab-electronics]: https://github.com/pglab-electronics +[@piitaya]: https://github.com/piitaya +[@piotrbulinski]: https://github.com/piotrbulinski +[@pleasantone]: https://github.com/pleasantone +[@postlund]: https://github.com/postlund +[@proohit]: https://github.com/proohit +[@pssc]: https://github.com/pssc +[@puddly]: https://github.com/puddly +[@regevbr]: https://github.com/regevbr +[@rikroe]: https://github.com/rikroe +[@rrooggiieerr]: https://github.com/rrooggiieerr +[@sdb9696]: https://github.com/sdb9696 +[@skobow]: https://github.com/skobow +[@sstallion]: https://github.com/sstallion +[@starkillerOG]: https://github.com/starkillerOG +[@stephan48]: https://github.com/stephan48 +[@stevenh]: https://github.com/stevenh +[@stevesinchak]: https://github.com/stevesinchak +[@synesthesiam]: https://github.com/synesthesiam +[@tdfountain]: https://github.com/tdfountain +[@teynar]: https://github.com/teynar +[@thecode]: https://github.com/thecode +[@thomasddn]: https://github.com/thomasddn +[@tl-sl]: https://github.com/tl-sl +[@tr4nt0r]: https://github.com/tr4nt0r +[@tronikos]: https://github.com/tronikos +[@w1ll1am23]: https://github.com/w1ll1am23 +[@wjtje]: https://github.com/wjtje +[@zackslash]: https://github.com/zackslash +[@zweckj]: https://github.com/zweckj +[@zxdavb]: https://github.com/zxdavb diff --git a/source/dashboards/cards.markdown b/source/dashboards/cards.markdown index bfb3acccb34..a26bb1a5ff4 100644 --- a/source/dashboards/cards.markdown +++ b/source/dashboards/cards.markdown @@ -55,9 +55,13 @@ A card can be added to a dashboard directly [from the view](#to-add-a-card-from- 3. If you want this card to be visible only to specific users or under a certain condition, you can [define those conditions](#showing-or-hiding-a-card-or-badge-conditionally). 4. If you are adding this card to a [sections view](/dashboards/sections/), on the **Layout** tab, you can [resize the card](#resizing-a-card). -5. If you like, define [card actions, features, header and footer widgets](#card-actions-features-header-and-footer-widgets). +5. Customize your card: + - [define card actions](/dashboards/actions/). + - [define header and footer](/dashboards/header-footer/) + - [customize features](/dashboards/features/#customizing-features). - Not all cards support these elements. Refer to the documentation of the specific card type. 6. Select **Add to dashboard**. + ![Screenshot card suggestions](/images/dashboards/dashboard_add-by-entity_04.png) ### To add a card from the device page @@ -81,7 +85,10 @@ This method is useful if you are on the **Device** page and want to create a car 6. If you want this card to be visible only to specific users or under a certain condition, you can [define those conditions](#showing-or-hiding-a-card-or-badge-conditionally). 7. If you are adding this card to a [sections view](/dashboards/sections/), on the **Layout** tab, you can [resize the card](#resizing-a-card). -8. If you like, define [card actions, features, header and footer widgets](#card-actions-features-header-and-footer-widgets). +8. Customize your card: + - [define card actions or header and footer widgets](#card-actions-features-header-and-footer-widgets). + - [define header and footer](/dashboards/header-footer/) + - [customize features](/dashboards/features/#customizing-features). - Not all cards support these elements. Refer to the documentation of the specific card type. ## Showing or hiding a card or badge conditionally diff --git a/source/dashboards/features.markdown b/source/dashboards/features.markdown index b784d1fadf1..46af70a75c1 100644 --- a/source/dashboards/features.markdown +++ b/source/dashboards/features.markdown @@ -22,6 +22,25 @@ Features can be enabled on the following cards: - [Thermostat](/dashboards/thermostat/) - [Tile](/dashboards/tile/) +## Customizing features + +1. Edit the card and open the **Features** section. +2. To add an additional feature to your card, select **Add feature**. + - **Info**: The available options for a feature depend on the entity and type of feature. + - For example, not all entities have a [toggle](#toggle) or a [counter-action](#counter-actions). +3. On tile cards, you can adjust the feature position. + - Under **Features** > **Feature position**, select **Bottom** or **Inline**: + + ![Screen recording showing how you can now reorder the HVAC modes on the thermostat shown in a tile card.](/images/dashboards/features/tile-card-feature-position.png) + +4. Reordering features: + - Some features of the tile card, such as the presets or the HVAC modes of a thermostat, can show buttons. + - To reorder the buttons, enable **Customize** and drag and drop the buttons into position. + - If you don't like the buttons, you can replace them by a **Dropdown** instead. + - Under **Style**, select the **Dropdown** option. + + ![Screen recording showing how you can now reorder the HVAC modes on the thermostat shown in a tile card.](/images/blog/2024-05/tile-card-reorder-features.gif) + ## Alarm modes Widget that displays buttons to arm and disarm an [alarm](/integrations/alarm_control_panel). @@ -164,7 +183,7 @@ preset_modes: ## Counter actions -Widget that displays buttons to increment, decrement and reset a [counter](/integrations/counter). +Widget that displays buttons to increment, decrement, and reset a [counter](/integrations/counter).

Screenshot of the tile card with counter actions feature diff --git a/source/dashboards/header-footer.markdown b/source/dashboards/header-footer.markdown index 2b80e0720eb..8072e8a1dc4 100644 --- a/source/dashboards/header-footer.markdown +++ b/source/dashboards/header-footer.markdown @@ -22,7 +22,7 @@ Header and footer can be used on the following cards: - [Entity](/dashboards/entity/) - [Entities](/dashboards/entities/) -- [Statistics](/dashboards/statistics/) +- [Statistic](/dashboards/statistic/) ## Picture header & footer diff --git a/source/getting-started/onboarding.markdown b/source/getting-started/onboarding.markdown index ea89826e8b2..15fba1c3dad 100644 --- a/source/getting-started/onboarding.markdown +++ b/source/getting-started/onboarding.markdown @@ -21,7 +21,7 @@ After Home Assistant has been [installed](/installation/) on your device, there ![Home Assistant preparation](/images/getting-started/onboarding_preparing_02.png) - Enter a name, username, and password. - Make sure the username is lowercase and contains no whitespace. - - {% icon "mdi:info" %} **Info**: The **Name** is the name of the person the is shown in the UI. The username is used for login. + - {% icon "mdi:info" %} **Info**: The **Name** is the name of the person that is shown in the UI. The username is used for login. ![Set your username and password.](/images/getting-started/onboarding_username.png) - Store the name, username, and password somewhere safe. There is no way to recover the owner credentials. diff --git a/source/images/blog/2025-02-apollo/art.jpg b/source/images/blog/2025-02-apollo/art.jpg new file mode 100644 index 00000000000..fcfd0408d8b Binary files /dev/null and b/source/images/blog/2025-02-apollo/art.jpg differ diff --git a/source/images/blog/2025-02-apollo/multisensor.jpg b/source/images/blog/2025-02-apollo/multisensor.jpg new file mode 100644 index 00000000000..aa2fe0d6249 Binary files /dev/null and b/source/images/blog/2025-02-apollo/multisensor.jpg differ diff --git a/source/images/blog/2025-03-matter-certification/art.jpg b/source/images/blog/2025-03-matter-certification/art.jpg new file mode 100644 index 00000000000..7af69ed65f2 Binary files /dev/null and b/source/images/blog/2025-03-matter-certification/art.jpg differ diff --git a/source/images/blog/2025-03-matter-certification/ha-matter.png b/source/images/blog/2025-03-matter-certification/ha-matter.png new file mode 100644 index 00000000000..18540ad5a49 Binary files /dev/null and b/source/images/blog/2025-03-matter-certification/ha-matter.png differ diff --git a/source/images/blog/2025-03-matter-certification/lab.jpg b/source/images/blog/2025-03-matter-certification/lab.jpg new file mode 100644 index 00000000000..9baa7c30155 Binary files /dev/null and b/source/images/blog/2025-03-matter-certification/lab.jpg differ diff --git a/source/images/blog/2025-03-matter-certification/ohf-matter.png b/source/images/blog/2025-03-matter-certification/ohf-matter.png new file mode 100644 index 00000000000..788be3d5dd9 Binary files /dev/null and b/source/images/blog/2025-03-matter-certification/ohf-matter.png differ diff --git a/source/images/blog/2025-03-music-assistant/art.jpg b/source/images/blog/2025-03-music-assistant/art.jpg new file mode 100644 index 00000000000..57cdbf5b43e Binary files /dev/null and b/source/images/blog/2025-03-music-assistant/art.jpg differ diff --git a/source/images/blog/2025-03-music-assistant/audio_path.png b/source/images/blog/2025-03-music-assistant/audio_path.png new file mode 100644 index 00000000000..ed92474c79b Binary files /dev/null and b/source/images/blog/2025-03-music-assistant/audio_path.png differ diff --git a/source/images/blog/2025-03-music-assistant/audiobooks.png b/source/images/blog/2025-03-music-assistant/audiobooks.png new file mode 100644 index 00000000000..0dd206490cb Binary files /dev/null and b/source/images/blog/2025-03-music-assistant/audiobooks.png differ diff --git a/source/images/blog/2025-03-music-assistant/continue.png b/source/images/blog/2025-03-music-assistant/continue.png new file mode 100644 index 00000000000..99ea4c93152 Binary files /dev/null and b/source/images/blog/2025-03-music-assistant/continue.png differ diff --git a/source/images/blog/2025-03-music-assistant/eq.png b/source/images/blog/2025-03-music-assistant/eq.png new file mode 100644 index 00000000000..b3f18093fa1 Binary files /dev/null and b/source/images/blog/2025-03-music-assistant/eq.png differ diff --git a/source/images/blog/2025-03-music-assistant/spotify_connect.jpg b/source/images/blog/2025-03-music-assistant/spotify_connect.jpg new file mode 100644 index 00000000000..728e04089bf Binary files /dev/null and b/source/images/blog/2025-03-music-assistant/spotify_connect.jpg differ diff --git a/source/images/blog/2025-03-music-assistant/voice_ma.jpg b/source/images/blog/2025-03-music-assistant/voice_ma.jpg new file mode 100644 index 00000000000..61bd18106cb Binary files /dev/null and b/source/images/blog/2025-03-music-assistant/voice_ma.jpg differ diff --git a/source/images/blog/2025-03/card-editor-improvements.png b/source/images/blog/2025-03/card-editor-improvements.png new file mode 100644 index 00000000000..06871a9d5a4 Binary files /dev/null and b/source/images/blog/2025-03/card-editor-improvements.png differ diff --git a/source/images/blog/2025-03/dashboard-view-header.png b/source/images/blog/2025-03/dashboard-view-header.png new file mode 100644 index 00000000000..eca145b3a90 Binary files /dev/null and b/source/images/blog/2025-03/dashboard-view-header.png differ diff --git a/source/images/blog/2025-03/graph-legend.gif b/source/images/blog/2025-03/graph-legend.gif new file mode 100644 index 00000000000..1486ab90457 Binary files /dev/null and b/source/images/blog/2025-03/graph-legend.gif differ diff --git a/source/images/blog/2025-03/map-marker-clustering.gif b/source/images/blog/2025-03/map-marker-clustering.gif new file mode 100644 index 00000000000..8db8b741266 Binary files /dev/null and b/source/images/blog/2025-03/map-marker-clustering.gif differ diff --git a/source/images/blog/2025-03/social.jpg b/source/images/blog/2025-03/social.jpg new file mode 100644 index 00000000000..0ac04407788 Binary files /dev/null and b/source/images/blog/2025-03/social.jpg differ diff --git a/source/images/blog/2025-03/tile-card-clear-interactions.png b/source/images/blog/2025-03/tile-card-clear-interactions.png new file mode 100644 index 00000000000..24274eeffad Binary files /dev/null and b/source/images/blog/2025-03/tile-card-clear-interactions.png differ diff --git a/source/images/blog/2025-03/tile-card-counter-actions.png b/source/images/blog/2025-03/tile-card-counter-actions.png new file mode 100644 index 00000000000..2c3273174ea Binary files /dev/null and b/source/images/blog/2025-03/tile-card-counter-actions.png differ diff --git a/source/images/blog/2025-03/tile-card-inline-features.png b/source/images/blog/2025-03/tile-card-inline-features.png new file mode 100644 index 00000000000..589b76c047c Binary files /dev/null and b/source/images/blog/2025-03/tile-card-inline-features.png differ diff --git a/source/images/blog/2025-03/tile-card-interactions.gif b/source/images/blog/2025-03/tile-card-interactions.gif new file mode 100644 index 00000000000..ba31351dcca Binary files /dev/null and b/source/images/blog/2025-03/tile-card-interactions.gif differ diff --git a/source/images/blog/2025-03/tile-card-switch-toggle.png b/source/images/blog/2025-03/tile-card-switch-toggle.png new file mode 100644 index 00000000000..380d913ad0f Binary files /dev/null and b/source/images/blog/2025-03/tile-card-switch-toggle.png differ diff --git a/source/images/dashboards/energy/sankey.png b/source/images/dashboards/energy/sankey.png new file mode 100644 index 00000000000..d6d43f81bae Binary files /dev/null and b/source/images/dashboards/energy/sankey.png differ diff --git a/source/images/dashboards/features/tile-card-feature-position.png b/source/images/dashboards/features/tile-card-feature-position.png new file mode 100644 index 00000000000..1b9bf4b4204 Binary files /dev/null and b/source/images/dashboards/features/tile-card-feature-position.png differ diff --git a/source/images/dashboards/map_card.png b/source/images/dashboards/map_card.png deleted file mode 100644 index db160757ded..00000000000 Binary files a/source/images/dashboards/map_card.png and /dev/null differ diff --git a/source/images/dashboards/map_card.webp b/source/images/dashboards/map_card.webp new file mode 100644 index 00000000000..e5096fa7f2c Binary files /dev/null and b/source/images/dashboards/map_card.webp differ diff --git a/source/images/dashboards/map_card_config.png b/source/images/dashboards/map_card_config.png index 8fd38382cc2..3ffd2102319 100644 Binary files a/source/images/dashboards/map_card_config.png and b/source/images/dashboards/map_card_config.png differ diff --git a/source/images/dashboards/sections_view_header_edit.png b/source/images/dashboards/sections_view_header_edit.png new file mode 100644 index 00000000000..b0d158be37e Binary files /dev/null and b/source/images/dashboards/sections_view_header_edit.png differ diff --git a/source/images/dashboards/sections_view_header_editor.png b/source/images/dashboards/sections_view_header_editor.png new file mode 100644 index 00000000000..efb9cbd856a Binary files /dev/null and b/source/images/dashboards/sections_view_header_editor.png differ diff --git a/source/images/dashboards/tile_card.png b/source/images/dashboards/tile_card.png deleted file mode 100644 index 3657c2c1686..00000000000 Binary files a/source/images/dashboards/tile_card.png and /dev/null differ diff --git a/source/images/dashboards/tile_card_tap_action.webp b/source/images/dashboards/tile_card_tap_action.webp new file mode 100644 index 00000000000..5f494708616 Binary files /dev/null and b/source/images/dashboards/tile_card_tap_action.webp differ diff --git a/source/images/docs/developer-tools/Assist.png b/source/images/docs/developer-tools/Assist.png index 61bd212c468..8533ae3ad71 100644 Binary files a/source/images/docs/developer-tools/Assist.png and b/source/images/docs/developer-tools/Assist.png differ diff --git a/source/images/docs/developer-tools/adjust-statistics.png b/source/images/docs/developer-tools/adjust-statistics.png new file mode 100644 index 00000000000..8473ab053e5 Binary files /dev/null and b/source/images/docs/developer-tools/adjust-statistics.png differ diff --git a/source/images/docs/developer-tools/statistics_issue.png b/source/images/docs/developer-tools/statistics_issue.png index 653c14a7a6d..34f46d85266 100644 Binary files a/source/images/docs/developer-tools/statistics_issue.png and b/source/images/docs/developer-tools/statistics_issue.png differ diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_production_non_zero_reset.png b/source/images/integrations/enphase_envoy/enphase_envoy_production_non_zero_reset.png new file mode 100644 index 00000000000..65685329bbd Binary files /dev/null and b/source/images/integrations/enphase_envoy/enphase_envoy_production_non_zero_reset.png differ diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_production_non_zero_reset_step_change.png b/source/images/integrations/enphase_envoy/enphase_envoy_production_non_zero_reset_step_change.png new file mode 100644 index 00000000000..7f882f11c76 Binary files /dev/null and b/source/images/integrations/enphase_envoy/enphase_envoy_production_non_zero_reset_step_change.png differ diff --git a/source/images/pi-day/2025-raspberry-pi-recipe.pdf b/source/images/pi-day/2025-raspberry-pi-recipe.pdf new file mode 100644 index 00000000000..d8a0df9a6f5 Binary files /dev/null and b/source/images/pi-day/2025-raspberry-pi-recipe.pdf differ diff --git a/source/integrations/index.html b/source/integrations/index.html index 908979ca990..0f47a65fe1d 100644 --- a/source/integrations/index.html +++ b/source/integrations/index.html @@ -23,68 +23,38 @@ regenerate: false {%- assign components = site.integrations | sort: 'title' -%} {%- assign components_by_version = site.integrations | group_components_by_release -%} {%- assign categories = components | map: 'ha_category' | join: ',' | downcase | split: ',' | uniq | sort -%} +{%- assign iot_classes = "Local Push,Local Polling,Cloud Push,Cloud Polling,Assumed State,Calculated,Configurable" | +join: ',' | split: ',' -%} +{% assign quality_scales = +"icon:🏆,name:platinum|icon:🥇,name:gold|icon:🥈,name:silver|icon:🥉,name:bronze|icon:🏠,name:internal|icon:💾,name:legacy" +| split: "|" +%}

-
-
-
- All {{tot}} +
+
+
+ +
- -
+
-
- - {%- for category in categories -%} - {%- assign category_name = "" -%} - {%- assign components_count = 0 -%} - {%- for comp in components -%} - {%- assign comp_categories = comp.ha_category | join: ',' | downcase -%} - {%- if comp_categories contains category -%} - {%- if category_name == "" -%} - {%- for cat in comp.ha_category -%} - {%- assign lower_cat = cat | downcase -%} - {%- if lower_cat == category -%} - {%- assign category_name = cat -%} - {%- endif -%} - {%- endfor -%} - {%- endif -%} - {%- assign components_count = components_count | plus: 1 -%} - {%- endif -%} - {%- endfor -%} - {%- if category != 'other' and components_count != 0 -%} - {%- if category_name == "" -%} - {%- assign category_name = category | capitalize -%} - {%- endif -%} - {{ category_name }} {{ components_count }} - {%- endif -%} - {%- endfor -%} - Other {{ components | where: 'ha_category', 'Other' | size }} -
- -
- - + {%- for category in categories -%} {%- assign category_name = "" -%} {%- assign components_count = 0 -%} @@ -106,154 +76,341 @@ regenerate: false {%- if category_name == "" -%} {%- assign category_name = category | capitalize -%} {%- endif -%} - + {%- endif -%} {%- endfor -%} - + + +
+
+
+
+

Version

+ +
+
+ +
+
+

IoT Class

+ +
+
+ +
+
+

Quality Scale

+ +
-
+ +
+
+ + +
diff --git a/source/voice-pe/index.html b/source/voice-pe/index.html index ca5900529eb..de4d3ff0ac5 100644 --- a/source/voice-pe/index.html +++ b/source/voice-pe/index.html @@ -216,7 +216,7 @@ frontpage_image: /images/frontpage/voice-pe-frontpage.jpg Front view of the Voice Preview Edition showing the speaker holes
- Buy now + Buy now * Recommended MSRP. Pricing subject to individual retailers.
@@ -1383,4 +1383,4 @@ frontpage_image: /images/frontpage/voice-pe-frontpage.jpg {% include custom/buy-dialog.html product="voice-pe" %} - \ No newline at end of file + diff --git a/source/voice_control/create_wake_word.markdown b/source/voice_control/create_wake_word.markdown index ba44fb124d0..326ab52201e 100644 --- a/source/voice_control/create_wake_word.markdown +++ b/source/voice_control/create_wake_word.markdown @@ -41,9 +41,9 @@ Enabling a wake word consists of 2 steps: 1. Go to {% my supervisor_addon addon="core_openwakeword" title="**Settings** > **Add-ons** > **openWakeWord**" %} and select **Install**. 2. **Start** the add-on. 3. Go to {% my integrations title="**Settings** > **Devices & Services**" %}. - - Under **Discovered**, you should now see the **openWakeWord** integration. + - Under **Discovered**, you should now see the **openWakeWord** component of the **Wyoming** integration. - Select **Configure** and **Submit**. - - **Result**: You have successfully installed the **openWakeWord** add-on and Wyoming integration. + - **Result**: You have successfully installed the **openWakeWord** add-on and **Wyoming** integration. ### To enable wake word for your voice assistant @@ -56,8 +56,10 @@ Enabling a wake word consists of 2 steps: - If the **Text-to-speech** and **Speech-to-text** sections do not provide language selectors, this means you do not have an Assist pipeline set up. - Set up [Home Assistant Cloud](https://www.nabucasa.com) or a manually configured [Assist pipeline](/voice_control/voice_remote_local_assistant). 5. Under **Text-to-speech**, select the language and voice you want Home Assistant to use when speaking to you. -6. To define the wake word engine, under **Wake word**, select **openwakeword**. - - Then, select **ok nabu**. +6. To define the wake word engine, in the top-right corner of the dialog, select the three dots {% icon "mdi:dots-vertical" %} menu and select **Add streaming wake word**. + - **Troubleshooting**: If you don't see the three dots {% icon "mdi:dots-vertical" %} menu, go to {% my integrations title="**Settings** > **Devices & Services**" %} and make sure the **openWakeWord** component of the **Wyoming** integration is added. + - **Result**: on the bottom of the page, you now see a new section **Streaming wake word engine**. + - Select **openwakeword**, then select **ok nabu**. - If you created a new assistant, select **Create**. - If you edited an existing assistant, select **Update**. - **Result**: You now have a voice assistant that listens to a wake word. diff --git a/source/voice_control/index.markdown b/source/voice_control/index.markdown index bbae36654bd..1c407dd6f8e 100644 --- a/source/voice_control/index.markdown +++ b/source/voice_control/index.markdown @@ -66,87 +66,86 @@ Assist aims to support more languages than other voice assistants, but this is s
@@ -411,87 +410,86 @@ function registerLanguageSelectChange() { function updateLanguageSupports(locale = null) { let data = { + "af-ZA": [0, 0], + "am-ET": [0, 0], + "ar-JO": [0, 2], + "az-AZ": [0, 0], + "bg-BG": [0, 2], + "bn-IN": [0, 0], + "bs-BA": [0, 0], + "ca-ES": [0, 3], + "cs-CZ": [0, 1], + "cy-GB": [0, 0], + "da-DK": [0, 2], + "de-DE": [3, 3], + "el-GR": [0, 1], "en-US": [3, 3], "es-ES": [3, 3], - "pt-BR": [3, 3], - "de-DE": [3, 3], - "it-IT": [2, 2], - "ru-RU": [2, 2], - "ja-JP": [0, 0], - "tr-TR": [0, 1], - "ko-KR": [0, 1], - "fr-FR": [0, 3], - "ca-ES": [0, 3], - "pl-PL": [0, 3], - "nl-BE": [0, 3], - "id-ID": [0, 1], - "zh-HK": [0, 2], - "zh-CN": [0, 1], - "ms-MY": [0, 1], - "sv-SE": [0, 2], - "uk-UA": [0, 2], - "th-TH": [0, 1], - "vi-VN": [0, 1], - "fi-FI": [0, 3], - "no-NO": [0, 0], - "gl-ES": [0, 2], - "ar-JO": [0, 2], - "ur-IN": [0, 0], - "el-GR": [0, 1], - "ro-RO": [0, 3], - "da-DK": [0, 2], - "ta-IN": [0, 0], - "hr-HR": [0, 3], - "mk-MK": [0, 0], - "sk-SK": [0, 1], - "he-IL": [0, 2], - "sr-RS": [0, 1], - "hu-HU": [0, 3], - "bg-BG": [0, 2], - "cs-CZ": [0, 1], - "bs-BA": [0, 0], - "sl-SI": [0, 2], - "az-AZ": [0, 0], "et-EE": [0, 1], - "lv-LV": [0, 1], - "af-ZA": [0, 0], - "cy-GB": [0, 0], + "eu-ES": [0, 1], "fa-IR": [0, 1], - "lt-LT": [0, 1], + "fi-FI": [0, 3], + "fil-PH": [0, 0], + "fr-FR": [0, 3], + "ga-IE": [0, 0], + "gl-ES": [0, 2], + "gu-IN": [0, 0], + "he-IL": [0, 2], + "hi-IN": [0, 0], + "hr-HR": [0, 3], + "hu-HU": [0, 3], + "hy-AM": [0, 0], + "id-ID": [0, 1], + "is-IS": [0, 1], + "it-IT": [2, 2], + "ja-JP": [0, 0], "jv-ID": [0, 0], + "ka-GE": [0, 1], + "kk-KZ": [0, 0], + "km-KH": [0, 0], + "kn-IN": [0, 0], + "ko-KR": [0, 1], + "lb-LU": [0, 0], + "lo-LA": [0, 0], + "lt-LT": [0, 1], + "lv-LV": [0, 1], + "mk-MK": [0, 0], + "ml-IN": [0, 1], + "mn-MN": [0, 0], + "mr-IN": [0, 0], + "ms-MY": [0, 1], + "mt-MT": [0, 0], + "my-MM": [0, 0], + "nb-NO": [0, 3], + "ne-NP": [0, 0], + "nl-BE": [0, 3], + "pl-PL": [0, 3], + "ps-AF": [0, 0], + "pt-BR": [3, 3], + "ro-RO": [0, 3], + "ru-RU": [2, 2], + "si-LK": [0, 0], + "sk-SK": [0, 1], + "sl-SI": [0, 2], + "so-SO": [0, 0], + "sq-AL": [0, 0], + "sr-RS": [0, 1], + "su-ID": [0, 0], + "sv-SE": [0, 2], "sw-KE": [0, 0], "sw-TZ": [0, 0], - "is-IS": [0, 1], - "mt-MT": [0, 0], - "ps-AF": [0, 0], - "mr-IN": [0, 0], - "bn-IN": [0, 0], - "lb-LU": [0, 0], - "hi-IN": [0, 0], - "gu-IN": [0, 0], - "km-KH": [0, 0], - "ne-NP": [0, 0], - "lo-LA": [0, 0], + "ta-IN": [0, 0], "te-IN": [0, 1], - "kn-IN": [0, 0], - "ml-IN": [0, 1], - "kk-KZ": [0, 0], - "so-SO": [0, 0], + "th-TH": [0, 1], + "tr-TR": [0, 1], + "uk-UA": [0, 2], + "ur-IN": [0, 0], "uz-UZ": [0, 0], - "ka-GE": [0, 1], - "my-MM": [0, 0], - "mn-MN": [0, 0], - "hy-AM": [0, 0], - "am-ET": [0, 0], - "nb-NO": [0, 3], - "eu-ES": [0, 1], - "fil-PH": [0, 0], - "ga-IE": [0, 0], - "si-LK": [0, 0], - "sq-AL": [0, 0], - "su-ID": [0, 0], + "vi-VN": [0, 1], "wuu-CN": [0, 0], "yue-CN": [0, 0], + "zh-CN": [0, 1], + "zh-HK": [0, 2], "zu-ZA": [0, 0] }; diff --git a/source/voice_control/install_wake_word_add_on.markdown b/source/voice_control/install_wake_word_add_on.markdown index fe8b3a327c7..593e0a083c9 100644 --- a/source/voice_control/install_wake_word_add_on.markdown +++ b/source/voice_control/install_wake_word_add_on.markdown @@ -23,7 +23,7 @@ Enabling a wake word consists of 2 steps: 1. Go to {% my supervisor_addon addon="core_openwakeword" title="**Settings** > **Add-ons** > **openWakeWord**" %} and select **Install**. 2. **Start** the add-on. 3. Go to {% my integrations title="**Settings** > **Devices & Services**" %}. - - Under **Discovered**, you should now see the **openWakeWord** integration. + - Under **Discovered**, you should now see the **openWakeWord** component of the **Wyoming** integration. - Select **Configure** and **Submit**. - **Result**: You have successfully installed the openWakeWord add-on and Wyoming integration. @@ -38,8 +38,10 @@ Enabling a wake word consists of 2 steps: - If the **Text-to-speech** and **Speech-to-text** sections do not provide language selectors, this means you do not have an Assist pipeline set up. - Set up [Home Assistant Cloud](https://www.nabucasa.com) or a manually configured [Assist pipeline](/voice_control/voice_remote_local_assistant). 5. Under **Text-to-speech**, select the language and voice you want Home Assistant to use when speaking to you. -6. To define the wake word engine, under **Wake word**, select **openwakeword**. - - Then, select **ok nabu**. +6. To define the wake word engine, in the top-right corner of the dialog, select the three dots {% icon "mdi:dots-vertical" %} menu and select **Add streaming wake word**. + - **Troubleshooting**: If you don't see the three dots {% icon "mdi:dots-vertical" %} menu, go to {% my integrations title="**Settings** > **Devices & Services**" %} and make sure the **openWakeWord** component of the **Wyoming** integration is added. + - **Result**: on the bottom of the page, you now see a new section **Streaming wake word engine**. + - Select **openwakeword**, then select **ok nabu**. - If you created a new assistant, select **Create**. - If you edited an existing assistant, select **Update**. - **Result**: You now have a voice assistant that listens to a wake word.