From 12acdffff1c3898585a82e99d0e644ff4e76b383 Mon Sep 17 00:00:00 2001 From: dxmnkd316 <46753733+dxmnkd316@users.noreply.github.com> Date: Sat, 5 Oct 2024 05:18:10 -0500 Subject: [PATCH 01/67] Update ibeacon.markdown - Fix Broken Links (#35058) --- source/_integrations/ibeacon.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_integrations/ibeacon.markdown b/source/_integrations/ibeacon.markdown index 144b549696a..38e771d94e8 100644 --- a/source/_integrations/ibeacon.markdown +++ b/source/_integrations/ibeacon.markdown @@ -70,12 +70,12 @@ To get the Estimated distance sensor to work, in most cases, it has to be calibr - [Blue Charm Beacons BC-U1-USB-Powered-MultiBeacon](https://bluecharmbeacons.com/product/bluetooth-ble-ibeacon-bc-u1-multibeacon-usb-powered/) - [Blue Charm Beacons BC011-MultiBeacon](https://bluecharmbeacons.com/product/bluetooth-ble-multi-beacon-bc011/) - [Blue Charm Beacons BC021-MultiBeacon](https://bluecharmbeacons.com/product/bluetooth-ble-ibeacon-bc021-multibeacon-with-button-trigger-and-motion-sensor/) -- [Blue Charm Beacons BC037G-GeoPattern-iBeacon](https://bluecharmbeacons.com/product/blue-charm-bc037-ibeacon/) -- [Blue Charm Beacons BC037S-SmoothPattern-iBeacon](https://bluecharmbeacons.com/product/bluetooth-ble-ibeacon-bc037s-ibeacon/) -- [Blue Charm Beacons BC08-MultiBeacon](https://bluecharmbeacons.com/product/blue-charm-beacons-bluetooth-ble-ibeacon-bc08-multibeacon-w-motion-sensor-and-button-trigger-ble-5-0/) - Blue Charm Beacons BC037G-GeoPattern-iBeacon (discontinued) - Blue Charm Beacons BC037S-SmoothPattern-iBeacon (discontinued) -- [Blue SLIM ID](https://elainnovation.com/en/product/blue-slim-id-en/) +- Blue Charm Beacons BC08-MultiBeacon (discontinued) +- Blue Charm Beacons BC037G-GeoPattern-iBeacon (discontinued) +- Blue Charm Beacons BC037S-SmoothPattern-iBeacon (discontinued) +- [Blue SLIM ID](https://elainnovation.com/en/catalogue/blue-slim-id-en/) - [Feasycom FSC-BP103B](https://www.feasycom.com/bluetooth-ibeacon-da14531) - [Feasycom FSC-BP104D](https://www.feasycom.com/dialog-da14531-bluetooth-low-energy-beacon) - [Feasycom FSC-BP106](https://www.feasycom.com/fsc-bp106) From 2248dcb60990ada86eb0c8c9bcb643e484af56ec Mon Sep 17 00:00:00 2001 From: Jan Bouwhuis Date: Sat, 5 Oct 2024 12:28:42 +0200 Subject: [PATCH 02/67] Clearify the use of the mqtt sensor `options` option (#35084) --- source/_integrations/sensor.mqtt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/sensor.mqtt.markdown b/source/_integrations/sensor.mqtt.markdown index 8f8bc9927b4..e3982b60e9c 100644 --- a/source/_integrations/sensor.mqtt.markdown +++ b/source/_integrations/sensor.mqtt.markdown @@ -166,7 +166,7 @@ object_id: required: false type: string options: - description: List of allowed sensor state value. An empty list is not allowed. The sensor's `device_class` should be set to `enum`. Cannot be used together with `state_class` or `unit_of_measurement`. + description: List of allowed sensor state value. An empty list is not allowed. The sensor's `device_class` must be set to `enum`. The `options` option cannot be used together with `state_class` or `unit_of_measurement`. required: false type: list payload_available: From 5ac126d770d7b4c72369e210408df9807870e8f1 Mon Sep 17 00:00:00 2001 From: Jean-Paul van Ravensberg <14926452+DevSecNinja@users.noreply.github.com> Date: Mon, 7 Oct 2024 08:09:53 +0200 Subject: [PATCH 03/67] Add deprecation notice for Teams connector (#35097) --- source/_integrations/msteams.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_integrations/msteams.markdown b/source/_integrations/msteams.markdown index d1350c73d1d..876e7d0e86d 100644 --- a/source/_integrations/msteams.markdown +++ b/source/_integrations/msteams.markdown @@ -15,6 +15,12 @@ ha_integration_type: integration The `Microsoft Teams` platform allows you to send notifications from Home Assistant to a team channel in [Microsoft Teams](https://www.microsoft.com/microsoft-teams/group-chat-software). +{% note %} + +Please note that Microsoft announced the retirement of the Office 365 connectors within Microsoft Teams. Existing connectors will [continue to work until December 2025](https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/). + +{% endnote %} + ## Setup To send a notification to teams, you need to add the Incoming Webhook app to your team channel. When the app is added, you will receive a webhook URL that needs to be added to your {% term "`configuration.yaml`" %}. From 25d1ccc13a363e4e133c31c40d5ce9849ce4e113 Mon Sep 17 00:00:00 2001 From: AJ Jordan Date: Mon, 7 Oct 2024 02:10:38 -0400 Subject: [PATCH 04/67] Add documentation on local-only Unifi users (#35102) --- source/_integrations/unifi.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/unifi.markdown b/source/_integrations/unifi.markdown index a40964d8ec1..f0959448017 100644 --- a/source/_integrations/unifi.markdown +++ b/source/_integrations/unifi.markdown @@ -51,6 +51,8 @@ All configuration options are offered from the front end. Enter what UniFi Netwo The UniFi Network application allows you to create multiple users on it besides the main administrator. If all you want to use is the device tracker then it is recommended that you create a limited user that has `read-only` permissions for the UniFi Network device tracker. If you want blocking of network access, POE control, or firmware upgrades as well you would need to have 'admin' permissions. +If you want to create a local-only user, you need to switch to the classic UniFi interface for the option to become available. + ### UniFi OS For UniFi OS a local-only user needs to be created. A user who uses the Ubiquiti cloud will not work. You can do this in the manage users section on the UniFi OS dashboard. Make sure to give it the right permissions for the functions you want to use. Note the Dream Machine Pro and Cloud Key Gen2 plus updated to UniFi OS needs the port to be 443. For some self hosted servers the port will be 8443. From 97766359c60e45fd79992541ee8c196dbe1c6c77 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 08:36:30 +0200 Subject: [PATCH 05/67] build(deps-dev): bump sorbet-runtime from 0.5.11595 to 0.5.11597 (#35105) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index f006290f8a2..190cb0084ad 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -149,7 +149,7 @@ GEM rack-protection (= 4.0.0) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - sorbet-runtime (0.5.11595) + sorbet-runtime (0.5.11597) stringex (2.8.6) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) From fea3abfc0164b88a938ac80053c14f83e5e9bf87 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 08:36:43 +0200 Subject: [PATCH 06/67] build(deps-dev): bump ruby-lsp from 0.19.0 to 0.19.1 (#35104) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 87d8e7c5a70..22273a694f3 100644 --- a/Gemfile +++ b/Gemfile @@ -11,7 +11,7 @@ group :development do # > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189 gem 'sassc', '2.1.0' gem 'rubocop', '1.66.1' - gem 'ruby-lsp', '0.19.0' + gem 'ruby-lsp', '0.19.1' gem 'rackup', '2.1.0' end diff --git a/Gemfile.lock b/Gemfile.lock index 190cb0084ad..c1ca0553cb5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -125,7 +125,7 @@ GEM unicode-display_width (>= 2.4.0, < 3.0) rubocop-ast (1.32.3) parser (>= 3.3.1.0) - ruby-lsp (0.19.0) + ruby-lsp (0.19.1) language_server-protocol (~> 3.17.0) prism (>= 1.1, < 2.0) rbs (>= 3, < 4) @@ -176,7 +176,7 @@ DEPENDENCIES rackup (= 2.1.0) rake (= 13.2.1) rubocop (= 1.66.1) - ruby-lsp (= 0.19.0) + ruby-lsp (= 0.19.1) sass-globbing (= 1.1.5) sassc (= 2.1.0) sinatra (= 4.0.0) From 0c82de38becd4a2a76de1449287799a73823a579 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 09:00:09 +0200 Subject: [PATCH 07/67] build(deps-dev): bump textlint from 14.2.0 to 14.2.1 (#35106) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 216 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 109 insertions(+), 109 deletions(-) diff --git a/package-lock.json b/package-lock.json index 50755286ad2..77741826bff 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.0", "remark-stringify": "^11.0.0", - "textlint": "^14.2.0", + "textlint": "^14.2.1", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^5.0.13" @@ -416,65 +416,65 @@ "dev": true }, "node_modules/@textlint/ast-tester": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.2.0.tgz", - "integrity": "sha512-k7HAVjv5hUFNWUeb1h+3yaoSnwhjKJ55FaFVlUPsW5qFRIAkWaZ0Xpo2IEAyGaa5jgulWe8vEX6ZTmvwi6bzUA==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.2.1.tgz", + "integrity": "sha512-JQhZQToHYfHy/w/AyRg+03uxG53yp6OSbq7mpRhvgpwMk/N5GAtF+vLhfMAUAStJLXpq5xfFEvDNROZsgn2x7Q==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.2.0", + "@textlint/ast-node-types": "^14.2.1", "debug": "^4.3.4" } }, "node_modules/@textlint/ast-tester/node_modules/@textlint/ast-node-types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz", - "integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", "dev": true }, "node_modules/@textlint/ast-traverse": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.2.0.tgz", - "integrity": "sha512-qmB+bbLTndlgIObMxoXhdE/t1o6JUQxgw1pzLEtd7rvZO7sNH4Agui1ddlWjaIczj+K40tm8jsfi/74NJtJ9fg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.2.1.tgz", + "integrity": "sha512-MmYIRE3myWPgswJlq1Iu42o/Z9aKQkeHF7SS/toySc1iDpjS4lKTYcbzRoq+RD8Tjp35RCcxBIpufrrZrT7V0Q==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.2.0" + "@textlint/ast-node-types": "^14.2.1" } }, "node_modules/@textlint/ast-traverse/node_modules/@textlint/ast-node-types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz", - "integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", "dev": true }, "node_modules/@textlint/config-loader": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.2.0.tgz", - "integrity": "sha512-LDIr0zykTVsIWz/q+NIiYXoF0Fqdl1X+JLGIAG6E2CTKJhsGW4naKvt2d9zWhCjSM7E9ZX6XAdvo16WDJALYlg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.2.1.tgz", + "integrity": "sha512-QfrALRn6ObeuTuwAl/bEtI9ScU2dTYDd+w3lB6JAQL+baAk8vclXnzbzI9L3p+YhmhGxOSNohZV09qSkhDYHZg==", "dev": true, "dependencies": { - "@textlint/kernel": "^14.2.0", - "@textlint/module-interop": "^14.2.0", - "@textlint/types": "^14.2.0", - "@textlint/utils": "^14.2.0", + "@textlint/kernel": "^14.2.1", + "@textlint/module-interop": "^14.2.1", + "@textlint/types": "^14.2.1", + "@textlint/utils": "^14.2.1", "debug": "^4.3.4", "rc-config-loader": "^4.1.3", "try-resolve": "^1.0.1" } }, "node_modules/@textlint/feature-flag": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.2.0.tgz", - "integrity": "sha512-KjO4ACoKhA10XUi4Wp3dKixfEMFQAE+WLgCDEB5k+cAKPkwaFYjN5vezA1TGe+fSHcQiBjv268F0r3hmtsPf8Q==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.2.1.tgz", + "integrity": "sha512-7fXZWh3UUH0LwPu2CWJOaSnYHVQojgQ/ulXQayMXf50x3/CGY/dqaBKpB+I/PW+60/pnKgUwJm9E/eHzwhVAqQ==", "dev": true }, "node_modules/@textlint/fixer-formatter": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.2.0.tgz", - "integrity": "sha512-Ji4Kq0hckDj1WranfNwnN87nUE4EldMyf7z2AEQ51vDSqLeYk+WCQo6/Gc+a+ytQt5s/QPyfcpiHItr75xHF8g==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.2.1.tgz", + "integrity": "sha512-AquSEaP0m0ZGlCzOHwRiAmnruFAngjLL5g/ZzE2REQ2qwSnUuxEII5SsucqTgT37LXOKBXNpU1OSPlKwtF2aJw==", "dev": true, "dependencies": { - "@textlint/module-interop": "^14.2.0", - "@textlint/types": "^14.2.0", + "@textlint/module-interop": "^14.2.1", + "@textlint/types": "^14.2.1", "chalk": "^4.1.2", "debug": "^4.3.4", "diff": "^5.2.0", @@ -485,39 +485,39 @@ } }, "node_modules/@textlint/kernel": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.2.0.tgz", - "integrity": "sha512-QYF2ZGnkLhd+GYGWL2wpZNjK0ec8HqwGjAsmc49E0g5NKMDvX3U/TYGwjsM8g6WCxGVGS625wr0tm6UxIAK5+Q==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.2.1.tgz", + "integrity": "sha512-PkCagYKlVLQvw9CBijJJ30Hmp9rk9oJJt9danoMhdR+v91SMQ7eeWk7HG8CqGbEnL0NehoOqgZV+O5Tfr8x38A==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.2.0", - "@textlint/ast-tester": "^14.2.0", - "@textlint/ast-traverse": "^14.2.0", - "@textlint/feature-flag": "^14.2.0", - "@textlint/source-code-fixer": "^14.2.0", - "@textlint/types": "^14.2.0", - "@textlint/utils": "^14.2.0", + "@textlint/ast-node-types": "^14.2.1", + "@textlint/ast-tester": "^14.2.1", + "@textlint/ast-traverse": "^14.2.1", + "@textlint/feature-flag": "^14.2.1", + "@textlint/source-code-fixer": "^14.2.1", + "@textlint/types": "^14.2.1", + "@textlint/utils": "^14.2.1", "debug": "^4.3.4", "fast-equals": "^4.0.3", "structured-source": "^4.0.0" } }, "node_modules/@textlint/kernel/node_modules/@textlint/ast-node-types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz", - "integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", "dev": true }, "node_modules/@textlint/linter-formatter": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.2.0.tgz", - "integrity": "sha512-9+5n3UIhbKGNCvI5s0BJexHrWqw/TZQnUQLpvbL04SnJqwSH2xlUQfEwPAybPO1Tb9coUGHYlBZObRxy9tRwig==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.2.1.tgz", + "integrity": "sha512-GHgNuQQAA/YyYeYcfF0JbFZZomrC0VtfldjKqCmTmPy7c89MTZPZFgyRbTKm1G8tUmxh4RuT1rkgwvX3IgT2VQ==", "dev": true, "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "^14.2.0", - "@textlint/types": "^14.2.0", + "@textlint/module-interop": "^14.2.1", + "@textlint/types": "^14.2.1", "chalk": "^4.1.2", "debug": "^4.3.4", "js-yaml": "^3.14.1", @@ -531,12 +531,12 @@ } }, "node_modules/@textlint/markdown-to-ast": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.2.0.tgz", - "integrity": "sha512-vDcj8fuo1ZJinLtDwMO8yh9hxWujDFQRJ/MDd4Y+vxGDJRnB0c9ZVPOOPlQjaumlVNI7CB1fDsz+jx8z6/d8iw==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.2.1.tgz", + "integrity": "sha512-IbxuCiGg2dQMg+PlLrSIvryEAngdvydF1MztRII9AjJNOMKomzYmZaNVRaANlhuFLnOwJbunNg0MV1q7oXz+iw==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.2.0", + "@textlint/ast-node-types": "^14.2.1", "debug": "^4.3.4", "mdast-util-gfm-autolink-literal": "^0.1.3", "neotraverse": "^0.6.15", @@ -548,9 +548,9 @@ } }, "node_modules/@textlint/markdown-to-ast/node_modules/@textlint/ast-node-types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz", - "integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", "dev": true }, "node_modules/@textlint/markdown-to-ast/node_modules/bail": { @@ -780,73 +780,73 @@ } }, "node_modules/@textlint/module-interop": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.2.0.tgz", - "integrity": "sha512-1X3DfCwF3y07eVyK41K6As0L+Ekyn5lAh98hVoUNOGDJQtjRvM3aKZ8z0o0BtbCeH7nYTyExo31lUgURWuDWnQ==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.2.1.tgz", + "integrity": "sha512-xMkUYUDnP6le/s3oHyoAX6pvIESDlz7l+vUyDwQjKxnZwawdaO3K8aZIXkXDh4VNiBx9erFhsFoePm714VsPtA==", "dev": true }, "node_modules/@textlint/source-code-fixer": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.2.0.tgz", - "integrity": "sha512-xMFtpwcs5Z1WTiFBmLN2Fe2GQg3u0kEZgF42AvFHKphbmToKYlGUMw1jaMsEXaxrTOTjqwj3SycRR7rrgKgOxg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.2.1.tgz", + "integrity": "sha512-5VI+BLieZOrXVrqCkEIbvGu73gkKw52Ns8J1OPNqaCpbnmiKmKcRzBsbMxzwD4Pa7M0l4yhUzyd15/7i7hzmAg==", "dev": true, "dependencies": { - "@textlint/types": "^14.2.0", + "@textlint/types": "^14.2.1", "debug": "^4.3.4" } }, "node_modules/@textlint/text-to-ast": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.2.0.tgz", - "integrity": "sha512-i71ksLnlkb6epmeOiRv/xiHHLBWOtCx3gUBiTr8YC/9xbdhzBehFblJ6IjeikIJYPTfpzDECRmDqDNq7Cvos3Q==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.2.1.tgz", + "integrity": "sha512-SHZIroDA1Gabhfj/GEatuP3x7CeD0I2xqWaJTaXkmuAgj6ckrjF9130zTgRCmOgm174FDr//H1MO6nc30ly2sA==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.2.0" + "@textlint/ast-node-types": "^14.2.1" } }, "node_modules/@textlint/text-to-ast/node_modules/@textlint/ast-node-types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz", - "integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", "dev": true }, "node_modules/@textlint/textlint-plugin-markdown": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.2.0.tgz", - "integrity": "sha512-TDd132D816R5q+/ZDfxe15Cxua6RNegkQzPv0iaZZKob6t8lhMND6lUHfbXEEGHCtyignxZUXQXZGZcjKtWL4A==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.2.1.tgz", + "integrity": "sha512-14ZKJ9xsmTM9fr7S+ybisnhfNwL9CH/qcIU4/yjoP73RL1MMX4ddb/THGDBVt5O/wm4kzSUFP0CiNtDVxFfskQ==", "dev": true, "dependencies": { - "@textlint/markdown-to-ast": "^14.2.0" + "@textlint/markdown-to-ast": "^14.2.1" } }, "node_modules/@textlint/textlint-plugin-text": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.2.0.tgz", - "integrity": "sha512-5E39BWG9T5c0XOz5Vxdffa17FDwu9Woud29bYyq3OQ+JjwMQXSz3JPQ1MTNsJbqn0R58+ZKXfaWEZ/Gsoau5UA==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.2.1.tgz", + "integrity": "sha512-9rKR6zFfcO80cOhgUbWtcGTETe35osoyxdV5wuwf2xQLy4KTr9p1X9Jox6NjfLq6OSnOKAsiM/s31QlT6Mczlg==", "dev": true, "dependencies": { - "@textlint/text-to-ast": "^14.2.0" + "@textlint/text-to-ast": "^14.2.1" } }, "node_modules/@textlint/types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.2.0.tgz", - "integrity": "sha512-lK8HCnkNg+spOHVw1HX0AvwP1BZVlJsbL4OLIHnwfvakfUxLQFXtJ6x2asAXMNMQGqwSWKQrLBCmWZWVsDtReg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.2.1.tgz", + "integrity": "sha512-SaJsPYn7mXbInU77wbvsW277hLwmyijCS6Gld3VjBxXBYpJb9fzDliKHt1GYTYNRMtI/jQudwl13Clyt3nju5w==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.2.0" + "@textlint/ast-node-types": "^14.2.1" } }, "node_modules/@textlint/types/node_modules/@textlint/ast-node-types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz", - "integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", "dev": true }, "node_modules/@textlint/utils": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.2.0.tgz", - "integrity": "sha512-eXRygFRC1CK+BHRqIe2RRFiC8VJMpV7NwsLdBKsFMcivgNRgL6hkhhbrMI6MbPg+jdWM+nK5Z9+QpPYL9c9/pg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.2.1.tgz", + "integrity": "sha512-I8rV2jJfiVSP8EtpVSXCqISqyRPwx3GdZIIXehWn5k86cnBMt5RkPI4lvxZEbLECHsUkhQx11rC2tkOpabgUTA==", "dev": true }, "node_modules/@types/concat-stream": { @@ -1418,9 +1418,9 @@ "dev": true }, "node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz", + "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==", "dev": true }, "node_modules/fault": { @@ -6030,23 +6030,23 @@ "dev": true }, "node_modules/textlint": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.2.0.tgz", - "integrity": "sha512-f3vT1mwpHuP2IWNG7AiE7n4nRKiOI/4Rxz7wQSv6KWaCgigcwi9x4JCMWKn1gpEvC/bssKW1/G0XxzHvKybCKg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.2.1.tgz", + "integrity": "sha512-dqzQ/VKQeofwCbVgpzoE1sRUQkIU4zquNFbvtBQpUbS121w8hB51BtomCKbB42V86kDHONQYlPz4nocdaZh7ww==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.2.0", - "@textlint/ast-traverse": "^14.2.0", - "@textlint/config-loader": "^14.2.0", - "@textlint/feature-flag": "^14.2.0", - "@textlint/fixer-formatter": "^14.2.0", - "@textlint/kernel": "^14.2.0", - "@textlint/linter-formatter": "^14.2.0", - "@textlint/module-interop": "^14.2.0", - "@textlint/textlint-plugin-markdown": "^14.2.0", - "@textlint/textlint-plugin-text": "^14.2.0", - "@textlint/types": "^14.2.0", - "@textlint/utils": "^14.2.0", + "@textlint/ast-node-types": "^14.2.1", + "@textlint/ast-traverse": "^14.2.1", + "@textlint/config-loader": "^14.2.1", + "@textlint/feature-flag": "^14.2.1", + "@textlint/fixer-formatter": "^14.2.1", + "@textlint/kernel": "^14.2.1", + "@textlint/linter-formatter": "^14.2.1", + "@textlint/module-interop": "^14.2.1", + "@textlint/textlint-plugin-markdown": "^14.2.1", + "@textlint/textlint-plugin-text": "^14.2.1", + "@textlint/types": "^14.2.1", + "@textlint/utils": "^14.2.1", "debug": "^4.3.4", "file-entry-cache": "^5.0.1", "get-stdin": "^5.0.1", @@ -6172,9 +6172,9 @@ } }, "node_modules/textlint/node_modules/@textlint/ast-node-types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz", - "integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", "dev": true }, "node_modules/textlint/node_modules/brace-expansion": { diff --git a/package.json b/package.json index f1f9b2f6a35..01d1b30be43 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.0", "remark-stringify": "^11.0.0", - "textlint": "^14.2.0", + "textlint": "^14.2.1", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^5.0.13" From 3e1fcd9ae4cd99196cfdc4be9784d019db197443 Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Mon, 7 Oct 2024 10:03:09 +0200 Subject: [PATCH 08/67] Z-Wave: shorten titles to improve skimming (#35109) --- source/_integrations/zwave_js.markdown | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/source/_integrations/zwave_js.markdown b/source/_integrations/zwave_js.markdown index aacd2786d92..9853c8710bb 100644 --- a/source/_integrations/zwave_js.markdown +++ b/source/_integrations/zwave_js.markdown @@ -841,11 +841,13 @@ Additional devices may be discoverable, however only devices that have been conf Zwavejs2Mqtt was renamed Z-Wave JS UI in September 2022. They are synonymous with no difference between their capabilities. -### Can I switch between the official Z-Wave JS add-on and the Z-Wave JS UI add-on? +### Can I switch between Z-Wave JS and Z-Wave JS UI? -You can, but you cannot run them both at the same time. Only one of them can be active at the same time. +You can switch between the official Z-Wave JS add-on and the Z-Wave JS UI add-on. However, but you cannot run them both at the same time. Only one of them can be active at the same time. -### How do I switch between the official Z-Wave JS add-on and the Z-Wave JS UI add-on? +### How to switch between Z-Wave JS and Z-Wave JS UI? + +To switch between the official Z-Wave JS add-on and the Z-Wave JS UI add-on, follow these steps: Switching does not require renaming your devices. @@ -863,13 +865,14 @@ Switching does not require renaming your devices. 7. Enable the Z-Wave integration. -### What's the benefit of using Z-Wave JS UI add-on over the official add-on? +### What's the benefit of using Z-Wave JS UI add-on? +You might wonder what the benefit is of using the Z-Wave JS UI add-on instead of the official add-on. The official add-on provides the Z-Wave Server in its bare minimum variant, just enough to serve the Home Assistant integration. The Z-Wave JS UI project includes the Z-Wave JS Server for convenience but also provides a Z-Wave control panel and the ability to serve your Z-Wave network to MQTT. This allows you to use the control panel, and if you so choose, to also use MQTT at the same time. For example, some users may use MQTT to interact with Z-Wave from other devices, while the Home Assistant integration still works (as long as you keep the WS Server enabled in Z-Wave JS UI). -### Z-Wave JS UI seems to provide discovery of Home Assistant devices on its own too, now I'm confused +### Z-Wave JS UI provides discovery of HA devices on its own too, now I'm confused Correct, the Z-Wave JS UI project existed before Home Assistant had plans to move to the Z-Wave JS Driver. You should use the integration for device discovery and _not_ the MQTT discovery provided by Z-Wave JS UI. @@ -919,7 +922,7 @@ Entities will be created only after the node is ready (the interview is complete If you are certain that your device should have entities and you do not see them (even after a restart of Home Assistant Core), create an issue about your problem on the GitHub issue tracker. -### My device does not automatically update its status in HA if I control it manually +### My device doesn't automatically update its status in HA if I control it manually Your device might not send automatic status updates to the controller. While the best advice would be to update to recent Z-Wave Plus devices, there is a workaround with active polling (request the status). From e6908c46f475b6b8a6bf3335049d29e0d5c5ea4f Mon Sep 17 00:00:00 2001 From: Manu <4445816+tr4nt0r@users.noreply.github.com> Date: Mon, 7 Oct 2024 10:12:19 +0200 Subject: [PATCH 09/67] Add category To-do list and related links for Habitica integration (#35086) --- source/_integrations/habitica.markdown | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown index 3f95f86baf3..4eea9a0034a 100644 --- a/source/_integrations/habitica.markdown +++ b/source/_integrations/habitica.markdown @@ -2,7 +2,7 @@ title: Habitica description: Instructions on enabling Habitica support for your Home Assistant ha_category: - - Hub + - To-do list - Sensor ha_release: 0.78 ha_iot_class: Cloud Polling @@ -18,6 +18,15 @@ ha_codeowners: - '@tr4nt0r' ha_config_flow: true ha_integration_type: integration +related: + - docs: /integrations/todo + title: To-do list integration documentation + - docs: /integrations/#to-do-list + title: List of to-do list integrations + - docs: /dashboards/todo-list/ + title: To-do list card + - url: https://habitica.com/ + title: Habitica --- The Habitca {% term integration %} enables you to monitor your adventurer's progress and stats in Home Assistant and seamlessly integrates your to-do's and daily tasks. From c0001894aaaf908692e2f2ddded8212b5f535315 Mon Sep 17 00:00:00 2001 From: Simon Lamon <32477463+silamon@users.noreply.github.com> Date: Mon, 7 Oct 2024 10:13:43 +0200 Subject: [PATCH 10/67] Linkplay Presets (#35047) --- source/_integrations/linkplay.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/source/_integrations/linkplay.md b/source/_integrations/linkplay.md index 5b1bb5572bc..d2aa397cecf 100644 --- a/source/_integrations/linkplay.md +++ b/source/_integrations/linkplay.md @@ -18,3 +18,20 @@ ha_iot_class: Local Polling The LinkPlay {% term integrations %} for Home Assistant allows you to control various media players based on the LinkPlay protocol. The integration supports auto-discovery on your local network through [Zeroconf](/integrations/zeroconf). {% include integrations/config_flow.md %} + +## Actions + +The LinkPlay integration makes various custom actions available in addition to the [standard media player actions](/integrations/media_player/#actions). + +### Action `linkplay.play_preset` + +Play a preset on a LinkPlay media player. + +{% note %} +Companion apps, such as 4stream, allow to save music presets (for example, Spotify playlists). This action can be used to start playing these presets. +{% endnote %} + +| Data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | The speakers to target. To target all LinkPlay devices, use `all`. +| `preset_number` | no | The number of the preset to play. From 27e627811df46ba45eafcb550c51e046cd8cb7ed Mon Sep 17 00:00:00 2001 From: dxmnkd316 <46753733+dxmnkd316@users.noreply.github.com> Date: Mon, 7 Oct 2024 03:15:57 -0500 Subject: [PATCH 11/67] Update govee_ble.markdown (#35071) --- source/_integrations/govee_ble.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/govee_ble.markdown b/source/_integrations/govee_ble.markdown index 53f98d6676b..3b3d42b25ea 100644 --- a/source/_integrations/govee_ble.markdown +++ b/source/_integrations/govee_ble.markdown @@ -58,4 +58,4 @@ The Govee BLE integration will automatically discover devices once the [Bluetoot - 5183 Meat Thermometer - 5184 Meat Thermometer - 5185 Meat Thermometer -- [5198 Meat Thermometer](https://us.govee.com/products/govee-wi-fi-grilling-meat-thermometer-with-4-probes) +- 5198 Meat Thermometer From e502b11657f676b90fdbad67053d4ea2f477d311 Mon Sep 17 00:00:00 2001 From: Brett Adams Date: Mon, 7 Oct 2024 18:17:08 +1000 Subject: [PATCH 12/67] Remove missing sensors from Tesla Fleet (#35064) --- source/_integrations/tesla_fleet.markdown | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/source/_integrations/tesla_fleet.markdown b/source/_integrations/tesla_fleet.markdown index adcb96151e5..3fea2ef8a75 100644 --- a/source/_integrations/tesla_fleet.markdown +++ b/source/_integrations/tesla_fleet.markdown @@ -137,7 +137,6 @@ These are the entities available in the Tesla Fleet integration. Not all entitie |Sensor|Distance to arrival|Yes| |Sensor|Driver temperature setting|No| |Sensor|Estimate battery range|No| -|Sensor|Exterior color|No| |Sensor|Fast charger type|No| |Sensor|Ideal battery range|No| |Sensor|Inside temperature|Yes| @@ -145,23 +144,13 @@ These are the entities available in the Tesla Fleet integration. Not all entitie |Sensor|Outside temperature|Yes| |Sensor|Passenger temperature setting|No| |Sensor|Power|No| -|Sensor|Roof color|No| -|Sensor|Scheduled charging mode|No| -|Sensor|Scheduled charging start time|No| -|Sensor|Scheduled departure time|No| |Sensor|Shift state|No| |Sensor|Speed|No| |Sensor|State of charge at arrival|No| -|Sensor|Time at arrival|Yes| -|Sensor|Time at full charge|Yes| |Sensor|Time to arrival|Yes| |Sensor|Time to full charge|Yes| |Sensor|Tire pressure front left|No| |Sensor|Tire pressure front right|No| -|Sensor|Tire pressure last measured front left|No| -|Sensor|Tire pressure last measured front right|No| -|Sensor|Tire pressure last measured rear left|No| -|Sensor|Tire pressure last measured rear right|No| |Sensor|Tire pressure rear left|No| |Sensor|Tire pressure rear right|No| |Sensor|Traffic delay|No| From 7f02a3aac43028f5528ca5fa4375924873e19fb3 Mon Sep 17 00:00:00 2001 From: dxmnkd316 <46753733+dxmnkd316@users.noreply.github.com> Date: Mon, 7 Oct 2024 03:18:30 -0500 Subject: [PATCH 13/67] Update color_extractor.markdown - Fix Broken Link (#35069) --- source/_integrations/color_extractor.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/color_extractor.markdown b/source/_integrations/color_extractor.markdown index 9ad00aadf06..dcfd5c1de82 100644 --- a/source/_integrations/color_extractor.markdown +++ b/source/_integrations/color_extractor.markdown @@ -29,7 +29,7 @@ Passing the key `color_extract_url` to the {% term action %} call will download | `entity_id` | `light.shelf_leds` | The RGB capable light we'll set the color of | {% important %} -Ensure any [external URLs](/integrations/homeassistant/#allowlist_external_urls) or [external files](/docs/integrations/homeassistant/#allowlist_external_dirs) are authorized for use. You will receive error messages if this {% term integration %} is not allowed access to these external resources. +Ensure any [external URLs](/integrations/homeassistant/#allowlist_external_urls) or [external files](/integrations/homeassistant/#allowlist_external_dirs) are authorized for use. You will receive error messages if this {% term integration %} is not allowed access to these external resources. {% endimportant %} ### URL Action From 7ec1a63e89b5292dc7d44a7896641109481deff2 Mon Sep 17 00:00:00 2001 From: dxmnkd316 <46753733+dxmnkd316@users.noreply.github.com> Date: Mon, 7 Oct 2024 03:19:11 -0500 Subject: [PATCH 14/67] Update eddystone_temperature.markdown (#35068) --- source/_integrations/eddystone_temperature.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/eddystone_temperature.markdown b/source/_integrations/eddystone_temperature.markdown index 02375677339..debbb1d6028 100644 --- a/source/_integrations/eddystone_temperature.markdown +++ b/source/_integrations/eddystone_temperature.markdown @@ -15,7 +15,7 @@ related: --- The `eddystone_temperature` sensor {% term integration %} reads temperature information from Bluetooth LE advertisements transmitted by [Eddystone](https://en.wikipedia.org/wiki/Eddystone_(Google)) beacons. Your beacons must be configured to transmit UID frames (for identification) and TLM frames (for temperature). -All beacons that support the Eddystone protocol, have a temperature sensor and can transmit TLM frames are compatible with this {% term integration %}. For example [Gimbal](https://store.gimbal.com/collections/beacons/), [Estimote](https://estimote.com/) or [kontakt.io](https://kontakt.io/). For more manufacturers see [this overview](https://developers.google.com/beacons/eddystone#beacon_manufacturers) by Google. +All beacons that support the Eddystone protocol, have a temperature sensor and can transmit TLM frames are compatible with this {% term integration %}. For example [Gimbal](https://store.gimbal.com/collections/beacons/), [Estimote](https://estimote.com/) or [kontakt.io](https://kontakt.io/). ## Requirements From 936713edbcba620abef3fa4924c5d4ad91c09d22 Mon Sep 17 00:00:00 2001 From: tremor69 Date: Mon, 7 Oct 2024 10:19:42 +0200 Subject: [PATCH 15/67] Remove broken link from edl21 documentation (#35061) Co-authored-by: Tobias Klug --- source/_integrations/edl21.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_integrations/edl21.markdown b/source/_integrations/edl21.markdown index 93a579d4c09..9808e8b6c00 100644 --- a/source/_integrations/edl21.markdown +++ b/source/_integrations/edl21.markdown @@ -20,7 +20,6 @@ Compatible transceivers: - [DIY](https://wiki.volkszaehler.org/hardware/controllers/ir-schreib-lesekopf-rs232-ausgang) - [Weidmann Elektronik Schreib-/Lesekopf USB](https://shop.weidmann-elektronik.de/index.php?page=product&info=24) -- [USB IR Lesekopf EHZ Lese-Schreib-Kopf Volkszähler Hichi Smartmeter](https://www.ebay.de/itm/313884760667) Tested smart meters: From cb1576df5ff9031fcc50bb8119844836b678b62d Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Mon, 7 Oct 2024 11:18:14 +0200 Subject: [PATCH 16/67] Xiaomi Aquara: move lock docs to hub (#35115) --- .../_integrations/lock.xiaomi_aqara.markdown | 22 -------- source/_integrations/xiaomi_aqara.markdown | 52 ++++++++++++------- source/_redirects | 1 + 3 files changed, 33 insertions(+), 42 deletions(-) delete mode 100644 source/_integrations/lock.xiaomi_aqara.markdown diff --git a/source/_integrations/lock.xiaomi_aqara.markdown b/source/_integrations/lock.xiaomi_aqara.markdown deleted file mode 100644 index eaa1c9b847c..00000000000 --- a/source/_integrations/lock.xiaomi_aqara.markdown +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Xiaomi Aqara Lock" -description: "Instructions on how to setup the Xiaomi Aqara Lock within Home Assistant." -ha_category: - - Lock -ha_release: 0.71 -ha_iot_class: Local Push -ha_domain: xiaomi_aqara ---- - - -The `xiaomi aqara` lock platform allows you to get data (`changed_by` property, `verified_wrong_times` attribute) from your [Xiaomi](https://www.mi.com/en/) Aqara locks. - -An Aqara lock cannot be controlled by Home Assistant. - -The property `changed_by` provides the user/key ID of the last successful unlock. - -If someone tries to unlock the device but fails more than 3 times the `verified_wrong_times` attribute will be incremented. The counter resets on a successful unlock. - -Use of this platform requires that you have set up the [Xiaomi Aqara](/integrations/xiaomi_aqara/) component. - - diff --git a/source/_integrations/xiaomi_aqara.markdown b/source/_integrations/xiaomi_aqara.markdown index 112c1b71969..74ee9f7ac0b 100644 --- a/source/_integrations/xiaomi_aqara.markdown +++ b/source/_integrations/xiaomi_aqara.markdown @@ -84,19 +84,31 @@ name: type: string {% endconfiguration %} -### Actions +## Entities + +The Xiaomi Gateway (Aqara) integration supports the following entities. + +### Locks + +An Aqara lock cannot be controlled by Home Assistant. However, the lock entity allows you to view the following data: + +- The property `changed_by` provides the user/key ID of the last successful unlock. + +- If someone tries to unlock the device but fails more than 3 times, the `verified_wrong_times` attribute will be incremented. The counter resets on a successful unlock. + +## Actions The gateway provides the following actions: -#### Action `xiaomi_aqara.play_ringtone` +### Action `xiaomi_aqara.play_ringtone` Play a specific ringtone. The version of the gateway firmware must be `1.4.1_145` at least. Take a look at the examples below. -| Data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | -| `ringtone_id` | no | One of the allowed ringtone ids | -| `ringtone_vol` | yes | The volume in percent | +| Data attribute | Optional | Description | +| -------------- | -------- | --------------------------------------- | +| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | +| `ringtone_id` | no | One of the allowed ringtone ids | +| `ringtone_vol` | yes | The volume in percent | Allowed values of the `ringtone_id` are: @@ -128,30 +140,30 @@ Allowed values of the `ringtone_id` are: - 29 - Thinker - Custom ringtones (uploaded by the Mi Home app) starting from 10001 -#### Action `xiaomi_aqara.stop_ringtone` +### Action `xiaomi_aqara.stop_ringtone` Stops a playing ringtone immediately. -| Data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | +| Data attribute | Optional | Description | +| -------------- | -------- | --------------------------------------- | +| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | -#### Action `xiaomi_aqara.add_device` +### Action `xiaomi_aqara.add_device` Enables the join permission of the Xiaomi Aqara Gateway for 30 seconds. A new device can be added afterwards by pressing the pairing button once. -| Data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | +| Data attribute | Optional | Description | +| -------------- | -------- | --------------------------------------- | +| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | -#### Action `xiaomi_aqara.remove_device` +### Action `xiaomi_aqara.remove_device` Removes a specific device. The removal is required if a device shall be paired with another gateway. -| Data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | -| `device_id` | no | Hardware address of the device to remove | +| Data attribute | Optional | Description | +| -------------- | -------- | ---------------------------------------- | +| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | +| `device_id` | no | Hardware address of the device to remove | ## Examples diff --git a/source/_redirects b/source/_redirects index 0d93fefc6b9..1382529d9e5 100644 --- a/source/_redirects +++ b/source/_redirects @@ -174,6 +174,7 @@ layout: null /integrations/light.knx /integrations/knx#light /integrations/light.mysensors /integrations/mysensors#light /integrations/light.xiaomi_miio /integrations/xiaomi_miio/#xiaomi-philips-light +/integrations/lock.xiaomi_aqara/ /integrations/xiaomi_aqara/#locks /integrations/media_player.group /integrations/group /integrations/notify.command_line /integrations/command_line#Notify /integrations/notify.group /integrations/group#notify-groups From 2587c6ffc642ebd320b1a3ee60b184e6d57d3cc9 Mon Sep 17 00:00:00 2001 From: AlCalzone Date: Mon, 7 Oct 2024 11:20:28 +0200 Subject: [PATCH 17/67] fix: prevent linked doc headings from disappearing behind page header (#35114) --- sass/homeassistant/_overrides.scss | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sass/homeassistant/_overrides.scss b/sass/homeassistant/_overrides.scss index 3afa6de89be..3d289b8accf 100644 --- a/sass/homeassistant/_overrides.scss +++ b/sass/homeassistant/_overrides.scss @@ -861,7 +861,6 @@ a.material-card:hover { } } - h1:hover a.title-link, h2:hover a.title-link, h3:hover a.title-link, @@ -1360,9 +1359,14 @@ a.my { } } +// Prevent headings from disappearing behind the site header when linked to +h1, h2, h3, h4, h5, h6 { + position: relative; +} + :target { display: block; - position: relative; + position: absolute; top: -100px; visibility: hidden; } From 6a57e7e22b6d91d5c303f123c027556a9d23a97d Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Mon, 7 Oct 2024 13:07:10 +0200 Subject: [PATCH 18/67] Xiaomi aquara hub 2 issues accessing api: make note more prominent (#35113) --- source/_integrations/xiaomi_aqara.markdown | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/_integrations/xiaomi_aqara.markdown b/source/_integrations/xiaomi_aqara.markdown index 74ee9f7ac0b..227f72041f1 100644 --- a/source/_integrations/xiaomi_aqara.markdown +++ b/source/_integrations/xiaomi_aqara.markdown @@ -23,7 +23,12 @@ ha_integration_type: integration The **Xiaomi Gateway (Aqara)** {% term integration %} allows you to integrate [Xiaomi](https://www.mi.com/en/) Aqara-compatible devices into Home Assistant. -Please note, there are two versions of the hub: v1 and v2. v1 can be used with Home Assistant without any problems, however, v2 might be less straight forward when it comes to enabling the local API, and might even require you to open up your device in order to do so. Xiaomi has suggested this is in the pipeline. +{% note %} +There are two versions of the hub: v1 and v2. + +- v1 can be used with Home Assistant without any problems. +- v2 might be less straightforward when it comes to enabling the local API. It might even require you to open up your device to do so. Xiaomi has suggested this is in the pipeline. If you have a Hub 2 and are experiencing issues, check out the [troubleshooting](#troubleshooting) section. +{% endnote %} ## Supported devices From ff82acc69183d9a0d720586a979ad84dc02e5449 Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Mon, 7 Oct 2024 15:51:33 +0200 Subject: [PATCH 19/67] Xiaomi Aquara: move cover docs to hub page (#35120) --- source/_integrations/cover.xiaomi_aqara.markdown | 14 -------------- source/_integrations/xiaomi_aqara.markdown | 10 ++++++++++ 2 files changed, 10 insertions(+), 14 deletions(-) delete mode 100644 source/_integrations/cover.xiaomi_aqara.markdown diff --git a/source/_integrations/cover.xiaomi_aqara.markdown b/source/_integrations/cover.xiaomi_aqara.markdown deleted file mode 100644 index 296f856f0d4..00000000000 --- a/source/_integrations/cover.xiaomi_aqara.markdown +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Xiaomi Cover" -description: "Instructions on how to setup the Xiaomi cover within Home Assistant." -ha_category: - - Cover -ha_release: "0.50" -ha_iot_class: Local Push -ha_domain: xiaomi_aqara ---- - - -The `xiaomi aqara` cover platform allows you to get data from your [Xiaomi](https://www.mi.com/en/) covers. - -The requirement is that you have setup [Xiaomi aqara](/integrations/xiaomi_aqara/). diff --git a/source/_integrations/xiaomi_aqara.markdown b/source/_integrations/xiaomi_aqara.markdown index 227f72041f1..ac81d8b4dcb 100644 --- a/source/_integrations/xiaomi_aqara.markdown +++ b/source/_integrations/xiaomi_aqara.markdown @@ -93,6 +93,16 @@ name: The Xiaomi Gateway (Aqara) integration supports the following entities. +### Covers + +The cover entity allows you to control connected Aquara covers. You can do the following: + +- Open the cover. +- Close the cover. +- Stop the cover motion. +- Move the cover to a specific position. +- See the current position of the cover. + ### Locks An Aqara lock cannot be controlled by Home Assistant. However, the lock entity allows you to view the following data: From 65f1f0fa7727147b04cba44a77e0c092d330d639 Mon Sep 17 00:00:00 2001 From: G Johansson Date: Tue, 8 Oct 2024 06:56:58 +0200 Subject: [PATCH 20/67] Add note on command template for binary sensor and sensor in command_line (#35126) --- source/_integrations/command_line.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_integrations/command_line.markdown b/source/_integrations/command_line.markdown index 89a82a44436..b2875629ab0 100644 --- a/source/_integrations/command_line.markdown +++ b/source/_integrations/command_line.markdown @@ -290,6 +290,12 @@ command_line: default: 30 {% endconfiguration %} +{% note %} + +While `command` is accepting a template for `sensor` and `binary_sensor`, it's only the arguments that can be a template. This means the command name itself cannot be generated by a template, but it must be literally provided. + +{% endnote %} + ## Binary sensor To use your Command binary sensor in your installation, add the following to your {% term "`configuration.yaml`" %} file: From 90043d54d682fb348db75c61b56d22578f56e1b2 Mon Sep 17 00:00:00 2001 From: G Johansson Date: Tue, 8 Oct 2024 07:00:08 +0200 Subject: [PATCH 21/67] Use note block in Systemmonitor (#35125) --- source/_integrations/systemmonitor.markdown | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/source/_integrations/systemmonitor.markdown b/source/_integrations/systemmonitor.markdown index 63ea25a6954..b1ed8db4076 100644 --- a/source/_integrations/systemmonitor.markdown +++ b/source/_integrations/systemmonitor.markdown @@ -23,7 +23,13 @@ memory usage, CPU usage, and running processes. ## Sensors -**All entities are disabled by default, you need to enable the entities that you wish to use.** +{% note %} + +All entities are disabled by default, you need to enable the entities that you wish to use. + +All sensors are also marked as diagnostic and won't be automatically added to automatic dashboards. + +{% endnote %} ### Disks @@ -63,7 +69,11 @@ The `process` binary sensor needs to be configured by the config entry options. ## Disk usage -**Note:** The disk usage sensors do not support monitoring folder/directory sizes. Instead, it is only concerned with "disks" (more specifically mount points on Linux). +{% note %} + +The disk usage sensors do not support monitoring folder/directory sizes. Instead, it is only concerned with "disks" (more specifically mount points on Linux). + +{% endnote %} ```bash $ df -H From a6750b163f0684b3a73cbc7deedf7e37e5cfea2d Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Tue, 8 Oct 2024 08:09:41 +0200 Subject: [PATCH 22/67] Xiaomi Aquara: move binary sensor content to hub page (#35119) --- .../binary_sensor.xiaomi_aqara.markdown | 372 ------------------ source/_integrations/xiaomi_aqara.markdown | 368 +++++++++++++++++ 2 files changed, 368 insertions(+), 372 deletions(-) delete mode 100644 source/_integrations/binary_sensor.xiaomi_aqara.markdown diff --git a/source/_integrations/binary_sensor.xiaomi_aqara.markdown b/source/_integrations/binary_sensor.xiaomi_aqara.markdown deleted file mode 100644 index 08a9a3547f7..00000000000 --- a/source/_integrations/binary_sensor.xiaomi_aqara.markdown +++ /dev/null @@ -1,372 +0,0 @@ ---- -title: "Xiaomi binary sensor" -description: "Instructions on how to setup the Xiaomi binary sensors within Home Assistant." -ha_category: - - Binary sensor -ha_release: "0.50" -ha_iot_class: Local Push -ha_domain: xiaomi_aqara ---- - -The `xiaomi aqara` binary sensor platform allows you to get data from your [Xiaomi](https://www.mi.com/en/) binary sensors. - -The requirement is that you have setup the [`xiaomi aqara` integration](/integrations/xiaomi_aqara/). - -### Type of sensors supported - -| Name | Zigbee entity | Model no. | States | Event | Event key | Event values | -| ---- | ------------- | --------- | ------ | ----- | --------- | ------------ | -| Motion Sensor (1st gen) | motion | RTCGQ01LM | on, off | `xiaomi_aqara.motion` | | | -| Motion Sensor (2nd gen) | sensor_motion.aq2 | RTCGQ11LM | on, off | `xiaomi_aqara.motion` | | | -| Xiaomi Door and Window Sensor (1st gen) | magnet | MCCGQ01LM | on, off | | | | -| Aqara Door and Window Sensor (2nd gen) | sensor_magnet.aq2 | MCCGQ11LM | on, off | | | | -| Smoke Detector | smoke | JTYJ-GD-01LM/BW | on, off | | | | -| Gas Leak Detector | natgas | JTQJ-BF-01LM/BW | on, off | | | | -| Water Leak Sensor | sensor_wleak.aq1 | SJCGQ11LM | on, off | | | | -| Button (1st gen) | switch | WXKG01LM | on (through long_click_press), off | `xiaomi_aqara.click`| `click_type`| `long_click_press`, `hold`, `single`, `double` | -| Button (2nd gen) | sensor_switch.aq2, remote.b1acn01 | WXKG11LM | on (through long_click_press), off | `xiaomi_aqara.click` | `click_type` | `single`, `double`, `long_click_press`, `hold` | -| Button (2nd gen, model b) | sensor_switch.aq3 | WXKG12LM | off (always) | `xiaomi_aqara.click` | `click_type` | `single`, `double`, `long_click_press`, `shake` | -| Aqara Wireless Switch (Single) | 86sw1 | WXKG03LM | off (always) | `xiaomi_aqara.click` | `click_type` | `single` | -| Aqara Wireless Switch (Double) | 86sw2 | WXKG02LM | off (always) | `xiaomi_aqara.click` | `click_type` | `single`, `both` | -| Aqara Wireless Switch (Single) (2nd gen) | remote.b186acn01 | WXKG03LM | off (always) | `xiaomi_aqara.click` | `click_type` | `single`, `double`, `long` | -| Aqara Wireless Switch (Double) (2nd gen) | remote.b286acn01 | WXKG02LM | off (always) | `xiaomi_aqara.click` | `click_type` | `single`, `double`, `long`, `both`, `double_both`, `long_both` | -| Cube | cube | MFKZQ01LM | off (always) | `xiaomi_aqara.cube_action` | `action_type`, `action_value` (rotate) | `flip90`, `flip180`, `move`, `tap_twice`, `shake_air`, `swing`, `alert`, `free_fall`, `rotate` (degrees at action_value) | -| Vibration Sensor | vibration | DJT11LM | off (always) | `xiaomi_aqara.movement` | `movement_type` | `vibrate`, `tilt`, `free_fall` | - -### Automation examples - -#### Motion - -```yaml -- alias: "If there is motion and it's dark turn on the gateway light" - triggers: - - trigger: state - entity_id: binary_sensor.motion_sensor_158d000xxxxxc2 - from: "off" - to: "on" - conditions: - - condition: numeric_state - entity_id: sensor.illumination_34ce00xxxx11 - below: 300 - actions: - - action: light.turn_on - target: - entity_id: light.gateway_light_34ce00xxxx11 - data: - brightness: 5 - - action: automation.turn_on - target: - entity_id: automation.MOTION_OFF -- alias: "If there no motion for 5 minutes turn off the gateway light" - triggers: - - trigger: state - entity_id: binary_sensor.motion_sensor_158d000xxxxxc2 - from: "on" - to: "off" - for: - minutes: 5 - actions: - - action: light.turn_off - target: - entity_id: light.gateway_light_34ce00xxxx11 - - action: automation.turn_off - target: - entity_id: automation.Motion_off -``` - -#### Door and/or Window - -```yaml -- alias: "If the window is open turn off the radiator" - triggers: - - trigger: state - entity_id: binary_sensor.door_window_sensor_158d000xxxxxc2 - from: "off" - to: "on" - actions: - - action: climate.set_operation_mode - target: - entity_id: climate.livingroom - data: - operation_mode: "Off" -- alias: "If the window is closed for 5 minutes turn on the radiator again" - triggers: - - trigger: state - entity_id: binary_sensor.door_window_sensor_158d000xxxxxc2 - from: "on" - to: "off" - for: - minutes: 5 - actions: - - action: climate.set_operation_mode - target: - entity_id: climate.livingroom - data: - operation_mode: "Smart schedule" -- alias: "Notify if door is opened when away" - triggers: - - trigger: state - entity_id: binary_sensor.door_window_sensor_15xxxxxxc9xx6b - from: "off" - to: "on" - conditions: - - condition: state - entity_id: group.family - state: "not_home" - actions: - - action: notify.notify_person - data: - message: "The door has been opened" -``` - -#### Smoke - -```yaml -- alias: "Send notification on fire alarm" - triggers: - - trigger: state - entity_id: binary_sensor.smoke_sensor_158d0001574899 - from: "off" - to: "on" - actions: - - action: notify.html5 - data: - title: "Fire alarm!" - message: "Fire/Smoke detected!" - - action: xiaomi_aqara.play_ringtone - data: - gw_mac: xxxxxxxxxxxx - ringtone_id: 2 - ringtone_vol: 100 -``` - -#### Gas - -{% raw %} - -```yaml -- alias: "Send notification on gas alarm" - triggers: - - trigger: state - entity_id: binary_sensor.natgas_sensor_158dxxxxxxxxxx - from: "off" - to: "on" - actions: - - action: notify.html5 - data: - title: "Gas alarm!" - message: "Gas with a density of {{ state_attr('binary_sensor.natgas_sensor_158dxxxxxxxxxx', 'density') }} detected." -``` - -{% endraw %} - -#### Xiaomi Wireless Button - -As indicated in the table on top of this page there are 3 versions of the button. For the round shaped button the available events are `single`, `double`, `hold`, `long_click_press` and `long_click_release`. Aqara branded buttons are square shaped. Model WXKG11LM only supports `single`, `double`, `long_click_press`and `hold` events. WXKG12LM supports `single`, `double`, `long_click_press` and `shake` events. For the Aqara versions the delay between two clicks to generate a double click must be larger than with the round button. Clicking too quickly generates a single click event. - -```yaml -- alias: "Toggle dining light on single press" - triggers: - - trigger: event - event_type: xiaomi_aqara.click - event_data: - entity_id: binary_sensor.switch_158d000xxxxxc2 - click_type: single - actions: - - action: switch.toggle - target: - entity_id: switch.wall_switch_left_158d000xxxxx01 -- alias: "Toggle couch light on double click" - triggers: - - trigger: event - event_type: xiaomi_aqara.click - event_data: - entity_id: binary_sensor.switch_158d000xxxxxc2 - click_type: double - actions: - - action: switch.toggle - target: - entity_id: switch.wall_switch_right_158d000xxxxx01 -- alias: "Let a dog bark on long press" - triggers: - - trigger: event - event_type: xiaomi_aqara.click - event_data: - entity_id: binary_sensor.switch_158d000xxxxxc2 - click_type: long_click_press - actions: - - action: xiaomi_aqara.play_ringtone - data: - gw_mac: xxxxxxxxxxxx - ringtone_id: 8 - ringtone_vol: 8 -``` - -#### Xiaomi Cube - -Available events are `flip90`, `flip180`, `move`, `tap_twice`, `shake_air`, `swing`, `alert`, `free_fall` and `rotate`. The integration stores the last action as the attribute `last_action`. - -```yaml -- alias: "Cube event flip90" - triggers: - - trigger: event - event_type: xiaomi_aqara.cube_action - event_data: - entity_id: binary_sensor.cube_15xxxxxxxxxxxx - action_type: flip90 - actions: - - action: light.turn_on - target: - entity_id: light.gateway_light_28xxxxxxxxxx - data: - color_name: "springgreen" -- alias: "Cube event flip180" - triggers: - - trigger: event - event_type: xiaomi_aqara.cube_action - event_data: - entity_id: binary_sensor.cube_15xxxxxxxxxxxx - action_type: flip180 - actions: - - action: light.turn_on - target: - entity_id: light.gateway_light_28xxxxxxxxxx - data: - color_name: "darkviolet" -- alias: "Cube event move" - triggers: - - trigger: event - event_type: xiaomi_aqara.cube_action - event_data: - entity_id: binary_sensor.cube_15xxxxxxxxxxxx - action_type: move - actions: - - action: light.turn_on - target: - entity_id: light.gateway_light_28xxxxxxxxxx - data: - color_name: "gold" -- alias: "Cube event tap_twice" - triggers: - - trigger: event - event_type: xiaomi_aqara.cube_action - event_data: - entity_id: binary_sensor.cube_15xxxxxxxxxxxx - action_type: tap_twice - actions: - - action: light.turn_on - target: - entity_id: light.gateway_light_28xxxxxxxxxx - data: - color_name: "deepskyblue" -- alias: "Cube event shake_air" - triggers: - - trigger: event - event_type: xiaomi_aqara.cube_action - event_data: - entity_id: binary_sensor.cube_15xxxxxxxxxxxx - action_type: shake_air - actions: - - action: light.turn_on - target: - entity_id: light.gateway_light_28xxxxxxxxxx - data: - color_name: "blue" -``` - -#### Aqara Wireless Switch - -The Aqara Wireless Switch is available as single-key and double-key version. Each key behaves like the Wireless Button limited to the click event `single`. The double key version adds a third device called `binary_sensor.wall_switch_both_158xxxxxxxxx12` which reports a click event called `both` if both keys are pressed. - -{% raw %} - -```yaml -- alias: "Decrease brightness of the gateway light" - triggers: - - trigger: event - event_type: xiaomi_aqara.click - event_data: - entity_id: binary_sensor.wall_switch_left_158xxxxxxxxx12 - click_type: single - actions: - - action: light.turn_on - target: - entity_id: light.gateway_light_34xxxxxxxx13 - data: - brightness: >- - {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') %} - {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') - 60 >= 10 %} - {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') - 60}} - {% else %} - {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness')}} - {% endif %} - {% else %} - 10 - {% endif %} - -- alias: "Increase brightness of the gateway light" - triggers: - - trigger: event - event_type: xiaomi_aqara.click - event_data: - entity_id: binary_sensor.wall_switch_right_158xxxxxxxxx12 - click_type: single - actions: - - action: light.turn_on - target: - entity_id: light.gateway_light_34xxxxxxxx13 - data: - brightness: >- - {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') %} - {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') + 60 <= 255 %} - {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') + 60}} - {% else %} - {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness')}} - {% endif %} - {% else %} - 10 - {% endif %} - -- alias: "Turn off the gateway light" - triggers: - - trigger: event - event_type: xiaomi_aqara.click - event_data: - entity_id: binary_sensor.wall_switch_both_158xxxxxxxxx12 - click_type: both - actions: - - action: light.turn_off - target: - entity_id: light.gateway_light_34xxxxxxxx13 -``` - -{% endraw %} - -#### Vibration sensor - -This automation toggles the living room lamp on vibration/tilt. - -```yaml -- alias: "Turn on Living Room Lamp on vibration" - triggers: - - trigger: event - event_type: xiaomi_aqara.movement - event_data: - entity_id: binary_sensor.vibration_xxxx000000 - movement_type: vibrate - actions: - - action: light.toggle - target: - entity_id: light.living_room_lamp -- alias: "Turn on Living Room Lamp on tilt" - triggers: - - trigger: event - event_type: xiaomi_aqara.movement - event_data: - entity_id: binary_sensor.vibration_xxxx000000 - movement_type: tilt - actions: - - action: light.toggle - target: - entity_id: light.living_room_lamp -``` diff --git a/source/_integrations/xiaomi_aqara.markdown b/source/_integrations/xiaomi_aqara.markdown index ac81d8b4dcb..72c0ebd2e7d 100644 --- a/source/_integrations/xiaomi_aqara.markdown +++ b/source/_integrations/xiaomi_aqara.markdown @@ -111,6 +111,374 @@ An Aqara lock cannot be controlled by Home Assistant. However, the lock entity a - If someone tries to unlock the device but fails more than 3 times, the `verified_wrong_times` attribute will be incremented. The counter resets on a successful unlock. +### Binary sensors + +The binary sensor entities allow you to get data from your [Xiaomi](https://www.mi.com/en/) binary sensors. + +#### Type of binary sensors supported + +| Name | Zigbee entity | Model no. | States | Event | Event key | Event values | +| ---- | ------------- | --------- | ------ | ----- | --------- | ------------ | +| Motion Sensor (1st gen) | motion | RTCGQ01LM | on, off | `xiaomi_aqara.motion` | | | +| Motion Sensor (2nd gen) | sensor_motion.aq2 | RTCGQ11LM | on, off | `xiaomi_aqara.motion` | | | +| Xiaomi Door and Window Sensor (1st gen) | magnet | MCCGQ01LM | on, off | | | | +| Aqara Door and Window Sensor (2nd gen) | sensor_magnet.aq2 | MCCGQ11LM | on, off | | | | +| Smoke Detector | smoke | JTYJ-GD-01LM/BW | on, off | | | | +| Gas Leak Detector | natgas | JTQJ-BF-01LM/BW | on, off | | | | +| Water Leak Sensor | sensor_wleak.aq1 | SJCGQ11LM | on, off | | | | +| Button (1st gen) | switch | WXKG01LM | on (through long_click_press), off | `xiaomi_aqara.click`| `click_type`| `long_click_press`, `hold`, `single`, `double` | +| Button (2nd gen) | sensor_switch.aq2, remote.b1acn01 | WXKG11LM | on (through long_click_press), off | `xiaomi_aqara.click` | `click_type` | `single`, `double`, `long_click_press`, `hold` | +| Button (2nd gen, model b) | sensor_switch.aq3 | WXKG12LM | off (always) | `xiaomi_aqara.click` | `click_type` | `single`, `double`, `long_click_press`, `shake` | +| Aqara Wireless Switch (Single) | 86sw1 | WXKG03LM | off (always) | `xiaomi_aqara.click` | `click_type` | `single` | +| Aqara Wireless Switch (Double) | 86sw2 | WXKG02LM | off (always) | `xiaomi_aqara.click` | `click_type` | `single`, `both` | +| Aqara Wireless Switch (Single) (2nd gen) | remote.b186acn01 | WXKG03LM | off (always) | `xiaomi_aqara.click` | `click_type` | `single`, `double`, `long` | +| Aqara Wireless Switch (Double) (2nd gen) | remote.b286acn01 | WXKG02LM | off (always) | `xiaomi_aqara.click` | `click_type` | `single`, `double`, `long`, `both`, `double_both`, `long_both` | +| Cube | cube | MFKZQ01LM | off (always) | `xiaomi_aqara.cube_action` | `action_type`, `action_value` (rotate) | `flip90`, `flip180`, `move`, `tap_twice`, `shake_air`, `swing`, `alert`, `free_fall`, `rotate` (degrees at action_value) | +| Vibration Sensor | vibration | DJT11LM | off (always) | `xiaomi_aqara.movement` | `movement_type` | `vibrate`, `tilt`, `free_fall` | + +#### Automation examples for binary sensors + +##### Motion + +```yaml +- alias: "If there is motion and it's dark turn on the gateway light" + triggers: + - trigger: state + entity_id: binary_sensor.motion_sensor_158d000xxxxxc2 + from: "off" + to: "on" + conditions: + - condition: numeric_state + entity_id: sensor.illumination_34ce00xxxx11 + below: 300 + actions: + - action: light.turn_on + target: + entity_id: light.gateway_light_34ce00xxxx11 + data: + brightness: 5 + - action: automation.turn_on + target: + entity_id: automation.MOTION_OFF +- alias: "If there no motion for 5 minutes turn off the gateway light" + triggers: + - trigger: state + entity_id: binary_sensor.motion_sensor_158d000xxxxxc2 + from: "on" + to: "off" + for: + minutes: 5 + actions: + - action: light.turn_off + target: + entity_id: light.gateway_light_34ce00xxxx11 + - action: automation.turn_off + target: + entity_id: automation.Motion_off +``` + +##### Door and/or indow binary sensors + +```yaml +- alias: "If the window is open turn off the radiator" + triggers: + - trigger: state + entity_id: binary_sensor.door_window_sensor_158d000xxxxxc2 + from: "off" + to: "on" + actions: + - action: climate.set_operation_mode + target: + entity_id: climate.livingroom + data: + operation_mode: "Off" +- alias: "If the window is closed for 5 minutes turn on the radiator again" + triggers: + - trigger: state + entity_id: binary_sensor.door_window_sensor_158d000xxxxxc2 + from: "on" + to: "off" + for: + minutes: 5 + actions: + - action: climate.set_operation_mode + target: + entity_id: climate.livingroom + data: + operation_mode: "Smart schedule" +- alias: "Notify if door is opened when away" + triggers: + - trigger: state + entity_id: binary_sensor.door_window_sensor_15xxxxxxc9xx6b + from: "off" + to: "on" + conditions: + - condition: state + entity_id: group.family + state: "not_home" + actions: + - action: notify.notify_person + data: + message: "The door has been opened" +``` + +#### Smoke + +```yaml +- alias: "Send notification on fire alarm" + triggers: + - trigger: state + entity_id: binary_sensor.smoke_sensor_158d0001574899 + from: "off" + to: "on" + actions: + - action: notify.html5 + data: + title: "Fire alarm!" + message: "Fire/Smoke detected!" + - action: xiaomi_aqara.play_ringtone + data: + gw_mac: xxxxxxxxxxxx + ringtone_id: 2 + ringtone_vol: 100 +``` + +#### Gas + +{% raw %} + +```yaml +- alias: "Send notification on gas alarm" + triggers: + - trigger: state + entity_id: binary_sensor.natgas_sensor_158dxxxxxxxxxx + from: "off" + to: "on" + actions: + - action: notify.html5 + data: + title: "Gas alarm!" + message: "Gas with a density of {{ state_attr('binary_sensor.natgas_sensor_158dxxxxxxxxxx', 'density') }} detected." +``` + +{% endraw %} + +#### Xiaomi Wireless Button + +There are 3 versions of the Xiaomi Wireless button: + +- For the round shaped button, the available events are `single`, `double`, `hold`, `long_click_press` and `long_click_release`. +- Aqara branded buttons are square shaped. Model WXKG11LM only supports `single`, `double`, `long_click_press`and `hold` events. WXKG12LM supports `single`, `double`, `long_click_press` and `shake` events. + +For the Aqara versions, the delay between two clicks to generate a double-click must be larger than with the round button. Clicking too quickly generates a single-click event. + +```yaml +- alias: "Toggle dining light on single press" + triggers: + - trigger: event + event_type: xiaomi_aqara.click + event_data: + entity_id: binary_sensor.switch_158d000xxxxxc2 + click_type: single + actions: + - action: switch.toggle + target: + entity_id: switch.wall_switch_left_158d000xxxxx01 +- alias: "Toggle couch light on double click" + triggers: + - trigger: event + event_type: xiaomi_aqara.click + event_data: + entity_id: binary_sensor.switch_158d000xxxxxc2 + click_type: double + actions: + - action: switch.toggle + target: + entity_id: switch.wall_switch_right_158d000xxxxx01 +- alias: "Let a dog bark on long press" + triggers: + - trigger: event + event_type: xiaomi_aqara.click + event_data: + entity_id: binary_sensor.switch_158d000xxxxxc2 + click_type: long_click_press + actions: + - action: xiaomi_aqara.play_ringtone + data: + gw_mac: xxxxxxxxxxxx + ringtone_id: 8 + ringtone_vol: 8 +``` + +##### Xiaomi Cube + +Available events are `flip90`, `flip180`, `move`, `tap_twice`, `shake_air`, `swing`, `alert`, `free_fall` and `rotate`. The integration stores the last action as the attribute `last_action`. + +```yaml +- alias: "Cube event flip90" + triggers: + - trigger: event + event_type: xiaomi_aqara.cube_action + event_data: + entity_id: binary_sensor.cube_15xxxxxxxxxxxx + action_type: flip90 + actions: + - action: light.turn_on + target: + entity_id: light.gateway_light_28xxxxxxxxxx + data: + color_name: "springgreen" +- alias: "Cube event flip180" + triggers: + - trigger: event + event_type: xiaomi_aqara.cube_action + event_data: + entity_id: binary_sensor.cube_15xxxxxxxxxxxx + action_type: flip180 + actions: + - action: light.turn_on + target: + entity_id: light.gateway_light_28xxxxxxxxxx + data: + color_name: "darkviolet" +- alias: "Cube event move" + triggers: + - trigger: event + event_type: xiaomi_aqara.cube_action + event_data: + entity_id: binary_sensor.cube_15xxxxxxxxxxxx + action_type: move + actions: + - action: light.turn_on + target: + entity_id: light.gateway_light_28xxxxxxxxxx + data: + color_name: "gold" +- alias: "Cube event tap_twice" + triggers: + - trigger: event + event_type: xiaomi_aqara.cube_action + event_data: + entity_id: binary_sensor.cube_15xxxxxxxxxxxx + action_type: tap_twice + actions: + - action: light.turn_on + target: + entity_id: light.gateway_light_28xxxxxxxxxx + data: + color_name: "deepskyblue" +- alias: "Cube event shake_air" + triggers: + - trigger: event + event_type: xiaomi_aqara.cube_action + event_data: + entity_id: binary_sensor.cube_15xxxxxxxxxxxx + action_type: shake_air + actions: + - action: light.turn_on + target: + entity_id: light.gateway_light_28xxxxxxxxxx + data: + color_name: "blue" +``` + +##### Aqara Wireless Switch + +The Aqara Wireless Switch is available as single-key and double-key version. Each key behaves like the Wireless Button limited to the click event `single`. The double key version adds a third device called `binary_sensor.wall_switch_both_158xxxxxxxxx12` which reports a click event called `both` if both keys are pressed. + +{% raw %} + +```yaml +- alias: "Decrease brightness of the gateway light" + triggers: + - trigger: event + event_type: xiaomi_aqara.click + event_data: + entity_id: binary_sensor.wall_switch_left_158xxxxxxxxx12 + click_type: single + actions: + - action: light.turn_on + target: + entity_id: light.gateway_light_34xxxxxxxx13 + data: + brightness: >- + {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') %} + {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') - 60 >= 10 %} + {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') - 60}} + {% else %} + {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness')}} + {% endif %} + {% else %} + 10 + {% endif %} + +- alias: "Increase brightness of the gateway light" + triggers: + - trigger: event + event_type: xiaomi_aqara.click + event_data: + entity_id: binary_sensor.wall_switch_right_158xxxxxxxxx12 + click_type: single + actions: + - action: light.turn_on + target: + entity_id: light.gateway_light_34xxxxxxxx13 + data: + brightness: >- + {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') %} + {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') + 60 <= 255 %} + {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') + 60}} + {% else %} + {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness')}} + {% endif %} + {% else %} + 10 + {% endif %} + +- alias: "Turn off the gateway light" + triggers: + - trigger: event + event_type: xiaomi_aqara.click + event_data: + entity_id: binary_sensor.wall_switch_both_158xxxxxxxxx12 + click_type: both + actions: + - action: light.turn_off + target: + entity_id: light.gateway_light_34xxxxxxxx13 +``` + +{% endraw %} + +#### Vibration sensor + +This automation toggles the living room lamp on vibration/tilt. + +```yaml +- alias: "Turn on Living Room Lamp on vibration" + triggers: + - trigger: event + event_type: xiaomi_aqara.movement + event_data: + entity_id: binary_sensor.vibration_xxxx000000 + movement_type: vibrate + actions: + - action: light.toggle + target: + entity_id: light.living_room_lamp +- alias: "Turn on Living Room Lamp on tilt" + triggers: + - trigger: event + event_type: xiaomi_aqara.movement + event_data: + entity_id: binary_sensor.vibration_xxxx000000 + movement_type: tilt + actions: + - action: light.toggle + target: + entity_id: light.living_room_lamp +``` + ## Actions The gateway provides the following actions: From 8d32c70e6c48fc5444fa24845f81ad06b883f753 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 08:47:48 +0200 Subject: [PATCH 23/67] build(deps): bump actions/checkout from 4.2.0 to 4.2.1 (#35130) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index df32c1203be..657883371de 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out files from GitHub - uses: actions/checkout@v4.2.0 + uses: actions/checkout@v4.2.1 - name: Setting up Node.js uses: actions/setup-node@v4.0.4 with: @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out files from GitHub - uses: actions/checkout@v4.2.0 + uses: actions/checkout@v4.2.1 - name: Setting up Node.js uses: actions/setup-node@v4.0.4 with: From 047d0798b96620356bfe19e14d2297733af871da Mon Sep 17 00:00:00 2001 From: Gord <31004434+googanhiem@users.noreply.github.com> Date: Tue, 8 Oct 2024 07:48:59 +0100 Subject: [PATCH 24/67] ZBT-1 blog additions (#35128) --- ...connect-zbt1-issue-and-replacement.markdown | 13 ++++++++++--- .../2024-10-zbt1-issue/skyconnect-zbt1.png | Bin 0 -> 296795 bytes 2 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 source/images/blog/2024-10-zbt1-issue/skyconnect-zbt1.png diff --git a/source/_posts/2024-10-02-connect-zbt1-issue-and-replacement.markdown b/source/_posts/2024-10-02-connect-zbt1-issue-and-replacement.markdown index 5a611cd0fe9..c8cd612a9f7 100644 --- a/source/_posts/2024-10-02-connect-zbt1-issue-and-replacement.markdown +++ b/source/_posts/2024-10-02-connect-zbt1-issue-and-replacement.markdown @@ -11,9 +11,9 @@ og_image: /images/blog/2024-10-zbt1-issue/art.jpg --- Home Assistant Connect ZBT-1 issue and replacement -We've found an issue in Home Assistant Connect ZBT-1 that has affected a small number of customers, which appears to be the result of a faulty part incorporated in the most recent batch of ZBT-1 devices. We want to make sure everyone can get a replacement ZBT-1 and ensure they are covered far into the future. +We've found an issue in Home Assistant Connect ZBT-1 that has affected a small number of customers, which appears to be the result of a faulty part incorporated in the first production run of ZBT-1 devices. We want to make sure everyone can get a replacement ZBT-1 and ensure they are covered far into the future. -Though Home Assistant SkyConnect is identical to the ZBT-1 under the hood, it is not affected. The design is not what's at fault, but instead, a defective voltage regulator that was used in this specific batch that is causing the issue. When a ZBT-1 is inserted into certain USB-A ports, the voltage regulator can fail, fully bricking the device. We used high-quality manufacturing and quality control in this and previous batches. We are undertaking an investigation to find out how this could happen and most importantly, to avoid a repeat of anything remotely similar in the future. +Though Home Assistant SkyConnect is identical to the ZBT-1 under the hood, it is not affected. The design is not what's at fault, but instead, a defective voltage regulator that was used in this specific production run that is causing the issue. When a ZBT-1 is inserted into certain USB-A ports, the voltage regulator can fail, fully bricking the device. We used high-quality manufacturing and quality control in this and previous production runs. We are undertaking an investigation to find out how this could happen and most importantly, to avoid a repeat of anything remotely similar in the future. We're sorry for any inconvenience this may cause you. Below are details on our investigation, how devices are affected, and the replacement program. - [Background](#background) @@ -33,7 +33,10 @@ When we opened them, we found a dead voltage regulator. The mark in the outer ca We replaced the voltage regulator on the devices we tested, and the devices sprang back to life. We found our culprit, but why was it failing? As mentioned, the SkyConnect internal design and the manufacturing were effectively identical to the ZBT-1, and we received no reports of any such failures in the literally tens of thousands of them in the wild. In manufacturing runs there is always a little variance, and in this run, something went wrong with the voltage regulator that was sourced - again, we're looking into this. -It took us a couple of weeks to replicate the problem with our own units. We went down some wrong paths, but eventually found it was triggered only by certain devices, specifically certain desktop PCs (internally, we have only found one desktop that causes this failure). We have not observed the failure occur when the device has only been connected to a Home Assistant Green, Raspberry Pi, or even a Mac. If you have plugged your ZBT-1 into a different device, specifically a desktop PC, and it is not recognized by that system, inspect it for this deformation pictured above. Obviously, we want you to be able to use the device with any hardware, and even if only a small number of devices from this batch have reported issues, it is still unacceptable to us. +SkyConnect (left) and ZBT-1 (right) +

SkyConnect (left) and ZBT-1 (right) branded devices, SkyConnect are unaffected by this issue.

+ +It took us a couple of weeks to replicate the problem with our own units. We went down some wrong paths, but eventually found it was triggered only by certain devices, specifically certain desktop PCs (internally, we have only found one desktop that causes this failure). We have not observed the failure occur when the device has only been connected to a Home Assistant Green, Raspberry Pi, or even a Mac. If you have plugged your ZBT-1 into a different device, specifically a desktop PC, and it is not recognized by that system, inspect it for this deformation pictured above. Obviously, we want you to be able to use the device with any hardware, and even if only a small number of devices from this production run have reported issues, it is still unacceptable to us. ## Pausing sales @@ -47,6 +50,10 @@ If you have purchased Home Assistant Connect ZBT-1, we are working on a replacem It is a core value of ours to do things as sustainably as possible, and that's why we've provided such a long coverage period. We want to give owners with working ZBT-1s, who do not expect to use the device in a different system for the foreseeable future, the ability to keep it operating with peace of mind. +{% note %} +All ZBT-1 branded devices produced, as of October 2024, are believed to have this fault. You can tell if your device is a ZBT-1 by checking the white label on the back for “ZBT-1”. There is no need to test if your device is affected by this fault. +{% endnote %} + If it's working, keep it plugged into the device it's working with, and don't worry about a replacement until you need it. If you need or want a replacement, please contact the seller where you purchased your device, and they will arrange the return process and replacement. Replacement devices are expected by early November, and we will be prioritizing people with non-functioning devices. ## Conclusion diff --git a/source/images/blog/2024-10-zbt1-issue/skyconnect-zbt1.png b/source/images/blog/2024-10-zbt1-issue/skyconnect-zbt1.png new file mode 100644 index 0000000000000000000000000000000000000000..66e859767f8e879487eb0d70be4808c88d03080e GIT binary patch literal 296795 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%0A7=Yl0OGLQw) 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 )X+T~RVX=g88&0fY_yP~Aj?fhox zebg!%#IQvr7;u*Qmp5bj*Y7Fm`jc}Pu`n48Xm{zmz)tYCJ`N5}JVZfz&Gn-($ll>t zH{#0r<$OAhfDIYwM~XB_OjYhb{e=l8xJ0`_8LwvR=ZTuVKA8*IANIhRJgMiLvdfKt z=#N$i9CJtOTVfl;O;d}Vv<(*e{aL_-VxU6*Nf9PchMb*Uk1C$o7Z5>)nfT>uR1#th z%O~B>uB35E;QBoYkrlX_j9-y7$1>owrXAvUs%@uWoFq)o2j5siVsl`V6;wQ`guz(n z>iJ4wlwAtLWL@EnxrxY-s8n9Lw_s4vuouTNMKAeX6mQUu3}1P_-$TNm{?Re9kOPrA zg&`DI0Hxs@U;68KSB%c@8gR!A28ypFy*<<+1Js-vLmul9dXdC&k(SDUYg#e zSWx#nPzo1`{zK#V0~}Q;?wBU?yT{RLOSFtLq>|d{%LSc!QI8b3jR}r)j?7NukVW(S z>h+gAdN^NW$5@VG1pmc_>;8kh#C)$b_Wbtdiy6heAef{`yg^nzRZ#1{*$GFYz2Dw% z8sqb+qF4EamcBbpu-niAJz;Nt*ZY*}XZNZSK#)KsW?3=blylXk3yG~(&Obl{bp-BI z=XqpMl$??GOalb}eG2|%)W|wG#2k3wPWdUqC+JxBh9ydcN8{uVQ@O^I1YPlrT0owf zTxS$7{4|k&&CX%$OYz}z^S9rq%SN-g*FY8DoAw_+4HuY0rdj@ySPc6_lYedT9U^&O zbB#GIyW+~rwHk;7lZ|}o!0v9s;cCI^m6hG_!s}ucOh+!fN~msJgrwK^CaGmbE$Kvy zes>LS4yRppF3z5r+qWlXJQbq!L(Aa;K|UO{N)(!sOBqPpmg8!Lc!KEz7(u04rl9G)9cu7l6+b5(~rNCPNfC} zx+C+1o-BbHG3e{f@52=6xqw#FZnT_odT$~w#)wdxs6mv(QRC zFniyfd{HD&Q|N&8L$x-YyqAQ5&OfTR7BpftpcfK{dL#{`ZGpTid1zZSx2o_Ls+d|< zVx|AWtGG`tZ;AgyYKEzfwex-|_09axxsGgic^RdQH%e)fucUXpcyd8w_x>`8zD>~Y z^T!;2PN{3LRRJyJn5hIx86JuMn%WcdTJ&z&3nQ%~>jpZw5%3Wx=!=k7!Ygm-I0DQ(Y`}413BH-kbLS>q;NO}_0)sM(+3F6Mx&OQ?! z`U;vnQPdU@?a}H3DDtx5Kj8gP0N`9ca~WQuC^vY7946$~NG2+z{)NK(9sv>(_@yD~ zgVN&e*AV#|)N>pKYbP1)gYxTE5w_4WtC^2Pr}&K! zSNO##B|jYHy}TNsF?rs}D8`B!DTPp#=i}UNB^?qe(kPjrB%lMgQBy*`znr46x;u4) zzL9rI^k@C_pXY{_2gle?EXa_ZFr17gXC*gg%7~xx$lt0HpEN9xCJ=hrb1cMKHgA?y zOuYyDwF??+s)GmE0&VkfC& z4g1tT2c{@G&OVQm$mHJ2s87+Es@TIcBUKufkvY}B@Zx~tKI-xQK*H6?8^P{oj_^SS zmKy_rR*hL6Wgt1tPk`)U@?{Qi@M_qIm@Gp>4xF;bC)G;U7EJ0FF6kV=ejSf{MDHNx z{a(TDny}+HPefK2a#YXRKl4)&vB-i%TOySmvCbS3dTD%ymCTg~<8#3fRasApy$&ai zvgyb0a&ynJ%i1L}Nht|jF#Y9Xe9_vXng)t!ba+R7yLdcdbCxcpY10t*rcHD^L1rH* zh!);~O!@Se8MXNfT^wYeJN@^rJ-wP*XyN$sGGu&Ou!&lOlXEg`)@SUN8W$u(9>c&r z?QMO22~xsaGVxYVRCA58J>X4nifx~96LYF#ly3Ed;_aI-Wrvd1u*-s!lr|-0zx(SxlO)OwRxK3C)5qhf4IZ$ z7taRuP?vua!3A)qZOAEjz2w$p4Q!{g?+vvxW;+$dlA!1Sj*{`|G3H@pZHl`aCa64S zf*gkLmCMqj;NY_9quKJ(!2r*wCV1}`v35t5l72ChghOPMgiPd`&C!~u0?-23_d1us=Qnv_WK=}xcSaLD7sOX|okwhGs5H7)x zkMozPfV6eJ=Y?+rC^)!AwTWiS34%X5`K+El@*BK!troo#;esZl(4C!>o4w(wzkT-_ z=W{Hy2&do8IB(1k#54a;*4QJ4H-bmA6<}XJBPc!~4EuO&ABxEp5L#v1?V4PDVWmX1 zYV)9t0&79%diw=bzt@e_ZB5>*n&XkCcY6N(4;vGME8DVs#n5q0vecl<^z;Zcbu;Pw zDEox}pXr*%drV~96KvXiguvIKi^Fx!_|PFI#2P|#C%7oT zLj4hgF6dC4E{N5y%H{LNMbAtgdTuVkVO0m06Jo=^)A@W<%tf*i=S?moAaEcIR`?J9E<;0;XSA&`@i3$pdZ|G z2&q<#fz7^ODnRC7a*`(v0L)9xt7PopTErgKh0*%6B4_&+j-K;gEM_i6^raN2tvW^E zph5jy=(&XOMh?|RnK5kCo85H_ zlR9c_NpB+j4OJ7#_hd`IL}1mEd`qH-Ey7A#E$KRbnHk$eLUDn)E4t+d9Q$6rT@~qC zp0c*2ik^6mGY8Q&viEPu?Ig{lQGmyBDBf1#%yM+LR8$- zh%qGjZ0Xr?$MVJ*v*_zX3=XAJq`Tr23Y%ka6-*J2Fto=sc(_uSr-;+r-!esZIHv{p z&OfeKzzMD7r1*820Fsu;~_u z^?!nQ&!v$5j?#g8%?{3gWRjwUnSTJIT~{Ww&+(d1GXFXfeJRuou_LZ|Of&F6s{%m9 zZ#M}zvAEE_A7Vn80STY5MH^7%Ze+a)k(DAD;=f9UG%(~q;wp3y{(w6>^J`6&4a!xs z==$00dfuOJXvH$rd(+lCmDvPd+=lFM)Zh$F$pDZuZ|lBoQ>dXs*~*vakUy1Pm_gfe zHUU^hgjXchlDAS625tH9%Fdn|KOq^g84aZn*#FWm7PiZWLq9CFlsK*_(gd|HtOc6Q zqKw7A1AI;iTS^c(30uvKGGaKo$t8GldadMtJ>j?5r&UGgLRe;=^BJ00R*;q-^x;+? zdmDAHc5duwm)6bi%D<8(Dsa1Otz$yJ4lR&|v>MhQUzk>XJj>ot2ahkc87nM{4n@~+ zZJ_Pw0<+h7r(7tGz6YulC9^C^wGH~)a#d*0FGf)egcs!ZOTh-8x)*{nKP_~V{J zFeDIUg*DT`_b8w;y5(dVgb}wiC_b_G8yS_RUoqJl0pdLe6*_!;jBqH$>=^PSkz@#A zV9T;dd!p%Vzo;Br-D90V{+%a%T+_1Gtlkd^<<`Ha9~S>x#CQ9>8BwNi^ZPBAnZkwx z80S5jHjC_p&!$OF&$DvmyE5B^gZ@TjATibILJ>a~#YTO|L!GF$#3f6TpT6WNPtnr$ zqR%(0%_X1C3TP^ER9o~A`KE+qu=C0e2Qo4ZO(9tgi+y~O3Mvp-R!5;pR674o1Pl&` z&u>8x=O*3DEGIu^A&ruyB^vntXD)BD*zIy$fim;N&qRUPC?^shECGprXT~EQ$r^vW zX-}*ry#KET1S1(lm9suLBTd4s;KoKQFm2P4QJ6Z_V+r5_x7N1LMDr0~WJk8NLyjA7F*Irl<{fHIYA0jmF#Bh=!>T&7<H#*YEWWivk+XDb{uGtA5eCilJy-uigo4zHKKm8w?80zb*b9 z4GL0;b1C<}kKrQ)3|m#8FV`_N%p{c17}5?QtR1P6^<9x(STX!UHSZ`_(x`>YP>?vg z2giVM54+qw#!EyliDjLJjjooWu%I7JCZOqx6JHicI~%yUpB6DeWSc}of-0b{Yz)dq zp*dkR82s&3D)kr{I`zT@pdY5e2g4c6)9#32&K_>U2?Uq}p!0D}D6cdpm8D{? zd`UjdkkXwD%L-e`uB{FiGvU}<6l(Gx$re?Tod~aO2sMe0Z;Bgn-w@lmQY@j1smO=_ zW(sIXk~fezTa$AyD-f^RA%2qosUvh1I17n-KNM-( zrzHg7^m1|oe@vxIr`;Zp7-s<39OMX*->eI;G< z0Jk4)b?gvrMg+H;(`K)CVu->@!Im0m;4Zb!1&G2W^ll2<8iY%~w~(EvJ@r;J@7d^G z%dt17*t@+1Q73bGA(Y8~BFzpL4U#B6!H&u8Ipa1CRyx$Zzu_+)naBMGxN2~*5DHOy zR3Pb8lA`n4EYBd$Exk{#+7JWNS4BHh%wk%jw~Li+EyEFRL06{Il&rW(57d$S*2>#8 zrYTne-+5W}RvjJ7YZmPGEV=QmA!_ZXFUb%Q%x8CComhz&2=x3yp01lkC%wbML;F*Id@jq{ z%dr8)sk_ilOwGH>y!6=IxJ>}Fa=<1c>R^iVtr7Aypte6#ft4XrTzpo5YWgolt*_%3 zbYM2Zana%A_=AdY2pLw*qI-(Oslp|iNO`;DnB~TJ5^_0fERKl$tb#`Opq#b?mX*GK zhdUC(!06NbCG;`HxFcQ257lH3}H40g9@ z0~K#v*Y@cfqM)gBJS%DF0R2(_`e1-3Diq>`1Zrc)rJtxrRqb5h`!pLPKm|L~TmQAT z@QE{`ml+$)awhD97d_-oRhr|UYqG$pMDGT-A~HmWlHl{HFIE+56Q3ESNq70`Zt+G26_>d&M91UI>&H{;9_- zJ2&z&uYTTdxQ78M_!}@B%Y3F*nNxnHr`ZE!Jk0)m_cLRTTX*8mE2(3)tc9|F*xzQU zf&aO63K4ejE~}|2A6ICnWi&J{k~4-C>Ce1lGZR~SDl$7o1#}w z2I=#g$ZWg~zuNjA#O55LN?} zJ4_l7A6KDtYE*-@UOa2~AbsT&YDSl*DiX6EDyG?9{d|HR#tu>OV5a6N*1!1o{MtB{ zPJ6q-NN&cSiO@D4m!!Z#_MOR~i;HXG+Y*Z@s;SHfwXtCxDvid@9(Nu-W!+c}jP+P+ zu}_uhg6YFsZ_v4XWO|DLKyE0;Rkg!c7|gQh-Tb=K9~$Pp+Dw>v8yw(2!iw~HY>4B= zWP1I9@|_alRQ+~`E|xcljo5iA5qyx<*8_E<{Zu(6XKNUvt5i)2dwS9MKfoTWA^)FB zBK|G`Lyj=HxgfSU7U)1}lS519WlZ9X6Vf4sHsTNsiV%a&H=#k11Nlo! zxc^82MJq)9V~i6a&Db&uF46x|E5+V;F<0`AS!QKXkQQG5w(QO=_jbwdmOXt*(xObQ z_CtMBq!btU1HhmMVYK2CWH*^tsz%nP4`4Q@==V~kZuJamahX*iwt~Zi|D(S`K&-ph3PbIBdIxjRd+{k z79w=iOAYd}r(9+jsyF?H!o2?q9}saYm;r&1d*PWO)!|Y5iLxT2{A;)8xGrO=*eI@< zSxfq}gxrZQ)X$fpvc`WD6a7QOCIa!q1hxhib~qjW9^Pfl2jJ zf;?MbP&F#CHpc4|9AOYH)Q)`6!=1gxQMrH^*6UQVa5CvP`~k;GG+CSAkV!{u)HViUQ_?4n|BYaKH+h2DRooxcTt(@C2rK1$g;BsnY820{_y#WHsoDF|+%h zJ;E`|a^?VBp`XSgew)8QG{%VTThUo{lvTem-~yKw0600^l9S;EE$d8&*|hC+Jvld& zSWv!aW4M6AyDe=sKT1g>S#HGY8o~rSOObz^Hnz~OA3?T0+FPR1HjbzS3;u#T3ed=n zRAqAlfE9VL(m6|D!%*Hx)jsoC^Tw7HFb5SX2(cCA`T40ii?hn3Kg=R#DLpLe6`^?Z zk&*{DXKR0WRI`o%ESLR|?^Oi{D7=FSkIR3zoBqFG!CTsNu$`NWeTOJShG(Zp5eKLD z#chx19~@#ESFzlW&DHYfo&x5C^{M!n35Ffp*~;lbzhPsEWFXZ&_+X-9w);8n4F!pM z{pgjf)5Rzb$CW#{kNf{%W@Lktn^nv(1;F?eU&RQdidirtmO1Jj?T?$l(rF*&vmtI& z*wmmH68Lkx$o@^*<8It%;_tv#=^`O)w=~rtw?G_EEF>r^&$~gF$9L2-gij)A+EXmN zIbKo0NRx)i8+$CUM9|8irKKbu*q@+;9Hdc9{_ZCkq$Vr*MK_wSS&v*SPNDzPVode^ zDG~^AhcAl5*?ZeFODu=*?IJydbw@oQHlE-*UP3uk+e%H4y5~z?);%|LL!6E;$L)QX zcOO|1o68+Ru>$UCTA!4_QZT$Ssw%j6L>LK*+GGwR9O`}?)~U0_by6ZS(#g!~MVOl8 zXM;&$GW0&?1GaG0m>_FF!WG9JRLg=0L~&IQ01Fv`_Hd<9S`#gtkU703;v+4-D|;KF zNV5YHyfi?dInzO!Iwt^do|0VOmwj9AAXX(jjY)czS5Yf_&9;T{^E9(WL}?(aGbaZU zlx>fhh(DEi{MdqX3TkhLFD25VM92Up!q?6A{1q&)9o;B(1kg)#St zf9*tw`C5OEIf5l;ak<8CHky@X>H5QEdYa?LCb+H_8y)kvgl)Sg2d#$Czm6*Uj^rm~kJ-TV#zLXN)x5s))}1H|6C9To9i@THT978uZdc%ne z8X}_$ZM)UBPptisIh~`)Za+DI+r`Ds;#$I+7G+xp%FIrtuiEd!IJbRyMZi7yp_NhX zo*Lk0)O^t)&`cB(Y18fbx5ZfFJ_Gb zF$?^MtY5OlgZKpAYOSm62^ViOW1JuprD2M^7ycbpLYN>rh3nR^d!z#)YKkXwX$YFR zXmg?wmi2_3E>qeKkAFVZ#Ap7fjSkVXud{`!MY;0C_v6I%N-PffHj8d0yl<;%zBTw9 z6yLDfMmgD}Hu6LlETt)`#i~=&gzR1yPm`ZH=E!BW$&79X56bE(__kF36h>Z-7$-L< zjPb5W`CEnsy%a`vIz%Dp^QckvEF_Ssq_Fym92((2jbAsMEFZXAC4Hxa1I#6ygtl0Z z8n7joVm?>R8+dt%ps%UJki+yXwYOM?NIP82e0g>_Ev=gc?H@Z30ZzqmN?S)>wN-ZJ zjzFFWEQ0!vu`?_P$j|F>!F4ZIO^)76XuPiMB8hy|t z4_AdgO*)r99i_3Dmwx1}J@uef5Sse|iF%X_^S+5OLBh^&U^ef)0|`BKLj=0tP3Ov&H51kaPn4!Bk-IBFi6+87k|kx`q_-EZ zwIgEtyaOtwgjlh-zF37i+7p55ID-w;IvFY8{C|}38_3nwZz>C_hMpvRpLgQt+jJ`c z%U9FpsLIIsg?4GfY*M+gEJLXUO1H$9DhFDrfNHFM{{G{OG#~ODo=U&gP ze0X^>6d7nHyWog(y5t&opAX-q!=!2tPCJt~U2^tS?tb!6iyXIIZFbPIewC{7we2Er zym0i)D{SXg(3Lywh`n8OW?!&}fZ&3!5cHgbWa(x}%`4M^sFbVEnd4)Cgmo z$T&C$d8d50@Cgw?XTxee8a)Bc$EZ@^4PxyVoRF+~0nkStJTv z`f65n)erlFL_~zc>FZ{0WpOw}M3GpZm?|rY2BSV&Sy+YhWlvcZDaIyrQU1jJpdvpU z^+XmlF!L&TDDHYlZqk)sQ{=gMTO8$c@OXSHaoKv78NDxMvE&Zg)d!qbj>F3d)ZiS{ z+bkquy3ADs4au>(OlO#&<#PO~G$xxQNzKvK<@XpC!5q)^F`Yc_IVvecT`*RZ7A9!9HNlrp4y=t9yZ8&u~NB}=Vt1xc(7rdNB zxeSxk3>8Le8WBArqo?pG&*0DZiXxmMP2*h=?K7^y3{KF{ zEFC~CJ>|*cU-C{>Pr@fR)$PH}VS$#)OiQwNSf;7tlm;RjW!_4auQXg~f9Ba>4?gHW z$YFMk!Ss9I;Q5L|XLkZS!=|$FdZQ#Fs&V?V3f-+$#LP&i;(*De2Pl<)ed;fyEdL(r z&El?K=Y5nY3^npnn8MJm#LZ|0b_~c20>y>Ng_c}g>4^8fbeb#}#5Mt>`-aC)`5I0*E9Bk*tousomM>PDSV)hUda?EDiOzDJ+%Bg zDFKrj4fZ9B=99+6I`L@U2M0(Wr<`H>O)4(esUa$GQ1QJ>3JZw<)@3*D38?~{1Gj_2 zVc#wNqj?rpSo(<*cR$qlqx)SfV7VD}`8_A16c0FYDecA0PPA=~X;Q_C0A^qhNk3R> zER^{6P8y;^hmb+S*td&?fMvA~JydAziZ(z^na~59lnr6uHE8{`pJ~6*#OlE-lXR<^ zwdXXYR_V1axd^f5*L@vvqlE|1pIFi;fX`jQACN%}0H9PENB&zIBX5p65>~8wd1#`; zi2nx5^)ZEDS*NG>ecydWPOTbq!E8CY=`N|wl#SjpeJ;bG0=;h`SLxUe?k_Xc<%lK> z7;a4)Zf(qSSJ%}J2P#sW+p6*mR)rh04;rl8cnD7$<^e8Jw4%vJ!Lb0=eJmC-tdC`u z?h|Tc`u+6c3m2olhv9NX3Nigv9k`>`rKhC?>6>{vztQxDhSr;3n*hrUu{MNQ)uzVv zJROLDaNV0$A?O=V1ptbxgqbtPv31swO`0;$()n%o#vnWC<7v&u!Nw+h$j`qGAEfuC zbKo8~o`BPu-Y^RXkQOn>Dve+FY3`W_5zmAH&ygQeQSF{0!0A|-f9dP^(%9b?f|i3t zEPT^0fB*Gchld*%`+*uQ=f?NR2o0ltidpebfS82Mqykvtxb#gb}z47s5rh~oaP>UkiF6XkRp6}q5BhX&Lb z^uy47!`@?QQs&*X z*RzkN=+}v1D+qKsbptzZVy1Y&;X%kjco!(C0@npa2trAY&5=*pYtWJxZDW&CZPMKp zabkquit>ONboV)yt4=TJ-R}DC)s_M{S75bf3RFC;9E_^+e6?bA)P_}zs=e4UgdnYf zf7^(wK=-&W{S{A8xBa=kUAbuAX^|d75uc zXMk)_&#UJ(-Rxr9asSRDJqSAtC7m zPU}kdTTj1O4XLvd|9t2RGxyEPv81`2k<#<00L#GBi4+KXtP1ew*@@+?Gn5?!7Eqgr ze0^MWZepL&ak5L(SSpm{hF(a7^2l%}0ok}9mcw^Bv%y%0(m@B&J%+AIYdG4Q*jhigp~wI|d`qyYrMClB9%Nn>$V`LbiRDWVxz0$<>(}5}XbW)K0PAEp5 z0@rfM{Yp&3>ZAb;l{_^ADxxnmcudChcP|b%a zh)^R>>n-InBGVM+j1&gi&SKnnzZrOXJCm;B_k#^aeti6bT{X&4T{P~@GLl7t=fA!L zo7X(3OlGG(#=1_!fEml#ToSz5PXxwtsfiwSq?I}dslz!MgnktwIYq&{U;ot{PUc_a zHCEr?s8VLG{&!w@_(mZQ+XWa>T4%{WF9~7ts!WZo&Zi+RR)wc4NovGbmsT2MIX1$` zkwKVFVGDmn?|vTk?WQS2&O?iAJYIk6V1fROS2%ldygw1%u7HR4bA!9E6wqL%a94lP zoA#&85vgPOv_a+yts+l;NQ3Gk+Z(~L?=o|hCOS_5Ta~N4Yn}KS9_r31dp&?y0>nEK za_^I=+;2WUb3DCQLa_v6$;u{KO5R{cHDKCzbD5d#ug@rnf_@@d)?^~q{1TJZMAV(e z;dd{G42-n}`)kZNrpi%=E9?h#&t9b&DZG=a2P3fvR@dv6`MN#`$q(BKgz=gfK+tR4Kt}@<@3W zEQrp1+5g?HR(T4yR1tfa!bB3F;bRp8{^=*=(>Mq7q@_`k@B5S%JKpbMOvy9xSHWnn zIs0iJe3bFIo)PyzbJ7VanA1xFvDUNDyeOZ#qx}EceiX2<${kqeL zm+aKYqAW_F45l78%Np<7s4U40$0yV_zVeVh_~cpyGW|pn8k@zErZ37Vz888o3f%a0 zFKtbf)IL+CHXN7QQp7XW)HqkJm+isN@Zh01uOw4VL}593Ez;jY_7>X;Ec)Dq45DMo zn592Hp5!i6(y8$8soAC6s(U>jzL^y+iyNu-`t0>7De;u@bs^0V+29vF_*;~BrG_kE zlF|U5i-R&wuCCxU7sqUE%7!=vdnOA`lCkPmh{7ql(G;UlyX#g?>N1i=A+6X`LJ3mP z7|0VG>ET>#xw4du?T<`_k(vc7QXz5XFdTL-!jO$@+jWp8dAOcniedLv5Ht#mY)&R? zA>Y|cp2au(F)hh%!pK&Ckq*|AYLkOxI=0MQJeSDyRdlEi02E#h26I&93CwN$5>+eU zlp^CA>9fy1WG5mcHQp!FNRc%A**Z<=Ilel{cp5>c80y$guxJHvnf~81<$VR6c-73i zhOXZS$kw<&e_B5xV%=sUFMadXI&a%vZUaE(^uyKIASzU#$r2T4tB=L|`&SxPruimk zR+hJU(qdFw^Ak{a+vJDDFwL7!Wqd&=wGjfQI$SH8%^q291<_IZvIUV&ZrwN_lJ?I& z8`?W#NEdc`h1t47@9iCJBN>OXzl5epK?``ykYR(-jQ3XD@pr8|!j8mNPGC}6HnA{I za8-d{FtUMQnRZ5SY)Rv?XmQM{>{Kua!uf{>liTT+OG85bg%<*}YwL(#i44+o`|^lh zq?klPfmiUt#7+uj@=*YxCbu8YHW{rvgC{qGx{Z$~!Q-UY7i zHCw|U2ckP@@B%xcxv$(ZJ|jC$Hii(y)%RKAY-oQ)$E&0>KyvzzQ85U_`Ud3W)KCJw zoc^QDzA^#dS;VCQ^;~*xw3E5VKDY98A9Y6XVR;mJeZyjPUV&A|iHcK+cAw@(dxMsR zYKTBy-Jysw7Z0ipQ(UAUZF90e)vVdeN>|AJ1QHuGCz$&4)Z9^t9Wvqjy?D^+jxBj_ z2pjJdTo73=g7`sO{)=1y*mrr0WSvg><-yo4T&#?|=)N$+T+HMop=uw{b1>9HcyX%D z-iQvnm#LDguWvX5Z~~9bqGZvjr4+!D?YWGf2pH??jXz05<_=0-GKg!H>9ASt!@DI> z42CTULHhTwFd9HZ%t`W{xQqAfDmu`rLF!jIZQJbUl^qX;BuuXUs*MkHIXrZ4!QQ2^ z@BOJ@civ6W@6JPL>epc(Qkdg$h34#Ba4?<#i^4G*aH|2xg{TR)M5*r3dMGN$0wJxC zy&k_;$RRYSk9A0oIQY?f(S2)Ggx_*e-R|rt2azy{eaJr))O1grUa3#80CCpZHWbc!+BlyM)S3e_?WCh zl;`Ly>&`hjNs@Eq+F5u6)W+zj6bRP-PJ-3sGwU}^LSLzHdI!k1xsK=5CO9?lnQk67 zT5)BqPgkP*y$5Vn!44c7W`H8ff6!e0zd0p3g~Z82&cmGXnM5x-@9s-Pt_l5piLreH zS*Z1DqYVxRk@y=~Um}>}G*UGX-gqHfu~6!X!3_@*I`RmN4H5tQVPnMk%&SAiPthyn-);i0l)S~@(jf}S)E%rlFLj(F89I+f zwo_E@`nNnoQ%o@f^KqLsOzuwr2jhlsk=?8^Xqu3`zk0pg<$GjRgPF7D&F9JWV{AS(6S>gv}yKB z%Ys8ldsphFp5U{iBIEc+Pb8Kdg9!NGCm6Jg8m`(9oCrn=J1Nz7>co2Mo%aj=bIsLz z6>av#g5dfopb_DP3{ZcMe!jo2f#7uGLTg1{Mka;`-VW|RpZ*>-==euc=kdl`{EGA2 z8`qb-Ta^s_^H%krV%06XM~jF3#FWc>{gG9%hDcnEM9H5(N+fWPv6@^P@W@2jn$38j z5zl<7_+RA=4$WIol;RyOr+z<_x@ylJ>6Alk!w9Yg7h^#>We<`uTQY-V>wqHG81UJ@ zF3w#Z%s8k(*WLmdyn!q4UAnG-A{)ew;o|;<^0DVa^O0$nh0HM3e^Y3%#jdPF0Y=xj zdzdyn#o1F*he%E7D>jmV26n288u^ia!%GWinV)S&>hR0I#Rj_nsNgRFt6OJ_>&&oh zQ7={pkqyhGc8tl~h?e$o9v1c+?3Hjs8YW@f=ph%H`%)?g=KhZzhWOqiGYlRAK6#T;E}K93&!|_jbY36Ee+@BGa9|-vkIQzQ@RUh@ zdT_*BsEsayMrRpPds72HjHJ}mPj3H&tKP%5hjl9h(Ycf?MJH7Eu$U-BtFtlnPwe^? zt&0d@R;Ki}4Ox!-u;krQJq@-&CPCN(3(TXY2T|xPC)LX;2;@MW@*Kl;--JgnLy64& za3&^?9-!{Y$jbb0#lmU*kU(dVlyDAfnGPWfp}qK*V8AjZq`flr<>Upo;#{8;#thCH zpYgCz0W>_R+ekr`=z=c|0jF8Gpj1Zukn5FvFla2O zG+G}cWRPNQ^Mtz8#k?2L-|!%SmR0%RII%N((imJ=WJabWJ0h+ zhmwaEt_B3=n1Zfj2(Eu~_ebi=A#M$!(1Scw12{*>^PPEJDM7Z@#4aA@Q+tm`)kIAD zq@d_w=#iQTZ>u&seVD%31~H5QiWCmlS@OaN=39I90mrZ=9_i z*8}i}DF`#4!X)(M#ZfDC`Le;n3~E=18o2LFj!pXIs{mf*j>AK1fq6}`C{GL;UV}-!!G>0l;yX#5r}zvzUl4+^RI}q!W2$< zLH10_#v`(FX>%klhbsDcnDEugX`clVtY5E_&*~&DlndXZaX?o+F<7F=nQI>9n1)@t{=C zY4>B%kDw#)>IzH>vvY~+oOXz=JNOA!KS+sB2IJ}9JDB_*0Ng+$zvy&dxdS12NPbp% z8Kq7^W<@A%L8=h+uh$G^@3F9k=_=uWs$scReG*y$Ij|ho-~xWhB+Ni!=y0bmNRBIA z8Jd{sWFt{+1sxr)vy;WZ!rmrf2CTQY0Slc6!s$+lN>y2ZLToK|@KEer7s4d!MHmn( z(Z^N7Tb_M%-O;4>fh9y~@5azcrAh$gmTQI%)56B3;EM_jxINXwdM;9#XOu$dM8PD? zJsh$B(goD0(lUcuJ_oQOlkiOZ5es9GP67jKgTVTt1eTMZ53i~?$`*p{PD&93e%d1}-!$+5hD(m%D&Y!%g-CZaQZ=wfDqneva4cjL zp15B$ub-J*(|uaM@82S8a$iDlDtEcthjp%jMIRP%Wnd-7U?&3Qk?PKK&c#cH1*JSC zIJxeF?ZgV3&__O=04&F0t?c#GZTH>DdRT=)hT|3Hw1B#Bc(5E?7ch@cf zYlE%o*GtaiPOzv4;G`RMm(aztnoJ%ki&Qx+{Y8_U6zRT}fHgZ)z$(+OMj)JiOdZcd z!gYlgdBssuxPdJJtBAy6c^Lp}r#pc4*o|wsh80DrUBXWTYF9@ey`PS%HLTnwoLYtdzE%C7 z=Mom>Wl*ibfujy>}n)_d1y z<8EDRU)n@V6TbBe+I%^e@F=QSe+aCI-&FiUIII-0urSi~i!HsFI=Jt`vaaHZ1i2Ld z!2IWQ-|@g5CUAzIFg}QLG$B(+@xG)ZWiqhNfQI$s9r!E+ur@Ma8B-cEO$RSG_%g7_ zt7$!~|G+4mP}6-M2i}ZSYztszHQkGJ;)6#_Lf2Ced@=^Y^lu((PHWn$FqbDoTgrwe2BdYde+RAq_Jxvzl0hjsl+ z0M>hGq#85!=;vc8SrJ{TiZIgY@GUZNGUyZQifOh0)=~fqtAs3L17Nwd44$cx@|*c& z8H!?c66|H~CSXaF_h4Xcum=SKN7aPFz=98}D$>1d=H+5mse%mOJLy+CMGmDa-1keK z%mQt?p9iodrBd^yzK6IV9$3_5o&+pvSW&?5F*Q;(uq-;*lfc>!d(8Yvo3E+YeJ5Mh zSFaL!K|9ul=AE6RCKMY9Sm9tjCjsl#WD*KaN*)Ya*^gB%rJKqPpT#!}G|XuiVqE0| zQL7qQOn%1yuT8?U(=s7f30LobN}%3HKK0mdEAft$opA4PGSMhNh2#va*p+-@dOtqR z9Lz{|C$O0Od^D?)2vRC`C5uv}w1l1!&1ggqgUtqbQtu+L_@4+fG-54+V*u9EufOqz zBHd>gja8sm+7^+-T>)ZHO&AMN;3&k^8bVahv50jCu$Y;1yGkVIz&hN($|dwGmAwi% zKun1Pp@sO-K5;H?bXp-^nBpi{hwI{YY_aDYCOCJX?w<@SxUkMR{K){;UXR|LYgl+& z^D2D;mS!fKgn_GRtNQ;|!}BM&h~*67$7y zsR(k=estcJrB66^G&c{kBLNHkwj-IE!$qM;%{k$024Y2OPDHu~tzZVJO;^%sf=!YX z`z)t4_>jnU+*y$0k^v>bWU<#E2)7rKpYOc$<;B^3knOL2G(|jWRBV?z6eQ7zL)ds2 zxeCl8f=LVK`yy8j^-m`Ti)c)7`EvoRhjBVpZwO{dibsiGI0}~OoTc!+LtN7xUaauB zhn!Tjs{i@?6zR@iGUU*sP;fNm5*|3Q9gf74l^1x{r>d`YkBdt2d{(XD2mtH!n*pqM z0j!4sEcmdNB0Wh<9wrkl!2p)UFdNgbrg05Biz{nbdDomX6Q))o`esEDI27cvd?8?M zl)x(Durhx*4!pA%GSvspd6whesEb)wR`&9t*8>f(+)&Jc4j&-RJ=NSMCaagy$$DVgapiDhJgQ`+M zBONZoG*t4 zvh3Bg&mATqbDsq)X;=}}@H>0w_FLN&h4I86pmYnWsv#6Rt$QzS5u`*VlHJp~oOmh{ z1c@UgEpgK35Tsg(y4NkuNnC^D1tn1$9(Zy*5joem%Ev4~rx7**-iQWdS^Qc_j(bL#E}1&+$X`q;oqrRrhC3Ru}laHAp= zl-riCkDbQ4(U$wnuS^>N>x=}f`O3^~w*gqaC9tXnR^pR(5YQkm7P`4<3anOL!p)(T z)YOO76*98Y4Jw`XEqquM>k<~Zj}$mc);QZ}29tgpM47M29r@7Di3A#9}}(g zidBffTB`?EM*%E`nekCJfOQ9_<`7Qdr{-p8sH%J}5r7$er~*G4HE*~h+oZP&wTUlW z3g^3F723Bt%1C#_VfE7NNu6R)Tt+D%RAMWBY8#$bs!NN0S~QBh5*pi~9T`WbUH?X` zG6~aZ75-WV$!tw2u0iovv0q=M5|4{7P)uI(VO0bU0WAC0wPd`qjI1UGmOjJJ8B<@sYU!|@U18^Y_DO~n8U_}#%Me(q z{H#Lt6Y~Vt?K4ldw-1dC;SCLpjg4Kgb?aDYs~SVSl*Y7a+OvrT30MlsqlLu;ek%pAmSkbk>F&VMT$x4m?-Z= zCNIDfc4Vr zPgF|o0ZcT^H2B0i#6zl_qYiEzjTOj}Cc5g%z7;d!iv)fvwyyjRIAvgw zR_QzS0s`wJ0P8(Y%~8PtWoyWwWQH`l#I>uHEut*^UEu2X%xNoU6y-e+1g(@0D}a?I zKNrA?zauQH=VLBmbztbc5V;kEx#EiRxCN`w8W+cDT+qqM`Q zzF-nQCUJ1<^vpH{`P?<$*EZOO`y6Zj7WDQ8Qqa^C!{iB%c!`9TAQH{0N+4wZyz_=| zP|p!LY|$x-V<50zo_+o4h*v1Y>$w|)Tw8vQ>5rJyiv3**?kK30)g_7hK^7Jg_&L%& z5{@2@xX}_=|6R>}|3IxqU@_30!1{E4Vt!>t7M9E0CO#>zyM;DVxpNdRv#VJl)s}^| z*%nqKuzX*NST00Y0_&OgkRsVWECNer5=L+3;lb@?{vO^*k6?>tACg2%KB?lRdtf6*76X+WmM7h=CiJyNk_IPy_ zz`|U@s{LWyY9J~9TU*H2NfmqEWoI!FE1;F078jvd23AUutVnlEFQpNShlI5RtP}sk z60kZt_>hpmTA81is74&tlht5$yMdLQ?t`3>6Vlx0SSjKm%hmv1wdxZ7O+GBhL&64N zDgRM6B>X4=Ym0&P8Gr>5C!`j)u{1__y6t`w3v%F=apzY4Fi>QZ#HmIRSW^O)hJ;^# z{wX3KPk~f~V#nk22OzR4T~@}T z!U_9TuX-l3HB=%oO#SolL??(p081JaLgY-TDoi%~stgXIY97uLe2S!gO4=U4;#0x} z1djIhwMo4Rtxlwza77?m;+_Ms;sst2Sn_1q;*KF9kyQfg-2zzu2Mepe09F`S0M?#c z=3#9USTj#niR_}B8ihvgu;RRDtk@bHTpu_JUYS^}6v=<%Q$hoa@{rILR`OvL!0Ik7 ztbURq2MZhaG8t9cx|Q*&-#N8JF9J}9H1O069GhUSSguW`It#12@L_%a>1h|FqB#T> zEvyteCC@eOoHQG-NQOYnaEw+LSlQ`(4C&6!XV{bz1yRF*Wg`fz8*f~AqY~vKf>aUk zm4c<>>e!cqoX8@}RF5M1Qv5tFb`m}|L?D8*Eb~PRtFKSj5m-uLD#Yc^cxOy5BOn~? zj<*b~P#v%qA`Z*I+F8_~fLkbl^{;!@H;{ov6YG+_dp<>=dlf^%$(bj6TAD(Zb#pQ6 zT-#8+-WYMIrDVxmO1WuZaW3Jp9uj`e1bzk!P<*1-V3o8#Cl?Thf0rul&S}>B1Q7vJrOv%0AM}%reBh}6V~ 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 literal 0 HcmV?d00001 From 2ad74c2cd80eb3aa97f55d44697c2854ff1ba055 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 08:49:12 +0200 Subject: [PATCH 25/67] build(deps-dev): bump sorbet-runtime from 0.5.11597 to 0.5.11600 (#35132) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index c1ca0553cb5..fec48627a20 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -149,7 +149,7 @@ GEM rack-protection (= 4.0.0) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - sorbet-runtime (0.5.11597) + sorbet-runtime (0.5.11600) stringex (2.8.6) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) From 30ffc3325fbaf0100289d25d3fe84c590944fc59 Mon Sep 17 00:00:00 2001 From: "Steven B." <51370195+sdb9696@users.noreply.github.com> Date: Tue, 8 Oct 2024 08:49:32 +0100 Subject: [PATCH 26/67] Update ring docs for in-home chime switch (#35123) Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- source/_integrations/ring.markdown | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/source/_integrations/ring.markdown b/source/_integrations/ring.markdown index 208e2b19814..93be02d8b42 100644 --- a/source/_integrations/ring.markdown +++ b/source/_integrations/ring.markdown @@ -41,7 +41,9 @@ There is currently support for the following device types within Home Assistant: - [Button](#button) - [Camera](#camera) - [Saving the videos captured by your Ring Door Bell](#saving-the-videos-captured-by-your-ring-door-bell) +- [Event](#event) - [Sensor](#sensor) +- [Siren](#siren) - [Switch](#switch) - [Light](#light) - [Number](#number) @@ -159,9 +161,17 @@ Once you have enabled the [Ring integration](/integrations/ring), you can start The volume sensors are being replaced with the number entity which allows setting the volume. You should migrate any automations using the volume sensors to the number entity by release 2025.4.0. +## Siren + +- Adds a siren entity for every camera that supports a siren. Note the siren will only turn on for 30 seconds before automatically turning off. +- Adds a siren entity for chimes to play the test sound. + ## Switch -Once you have enabled the [Ring integration](/integrations/ring), you can start using the switch platform. This will add a switch for every camera that supports a siren. Note the siren will only turn on for 30 seconds before automatically turning off. +Once you have enabled the [Ring integration](/integrations/ring), you can start using the switch platform. + +- Motion detection - Switches motion detection on and off for cameras. +- In-home chime - Switches on and off a mechanical or digital chime connected to a ring doorbell. ## Light From 5545a16cfb2ce0351ec9275bef296716d7edc611 Mon Sep 17 00:00:00 2001 From: Rich Infante Date: Tue, 8 Oct 2024 03:50:44 -0400 Subject: [PATCH 27/67] Update Ambient Weather local integration documentation (#34640) --- source/_integrations/ambient_station.markdown | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/source/_integrations/ambient_station.markdown b/source/_integrations/ambient_station.markdown index 4d47a8ddee0..a5c5a7f2808 100644 --- a/source/_integrations/ambient_station.markdown +++ b/source/_integrations/ambient_station.markdown @@ -30,8 +30,9 @@ generate both, simply utilize the profile section of ## Local API Option This integration communicates with Ambient Weather PWS units via the Ambient Weather -Cloud. Users desiring a local option are encouraged to explore the -[Ecowitt](https://www.ecowitt.com) family of devices, which are able to read RF signals -directly from the PWS and transmit them to a variety of other applications, including -[`ecowitt2mqtt`](https://github.com/bachya/ecowitt2mqtt) (which supports -[MQTT Discovery](/integrations/mqtt/#mqtt-discovery)), or the built-in [Ecowitt](/integrations/ecowitt/) integration. +Cloud. Users desiring a local option can utilize +[`ecowitt2mqtt`](https://github.com/bachya/ecowitt2mqtt#input-data-formats) +in `ambient_weather` mode, (which supports [MQTT Discovery](/integrations/mqtt/#mqtt-discovery)). + +Another option is to explore the [Ecowitt](https://www.ecowitt.com) family of devices, +which support the built-in [Ecowitt](/integrations/ecowitt/) integration. From 3e3bb09cd0f8a3113da2b101a58ae39b26025a94 Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Tue, 8 Oct 2024 15:52:32 +0200 Subject: [PATCH 28/67] Xiaomi move light to hub docs (#35137) * Xiaomi Aquara: move light to hub docs * Undo formatting changes * Update source/_integrations/xiaomi_aqara.markdown Co-authored-by: Klaas Schoute --------- Co-authored-by: Klaas Schoute --- source/_integrations/light.xiaomi_aqara.markdown | 15 --------------- source/_integrations/xiaomi_aqara.markdown | 12 +++++++++++- 2 files changed, 11 insertions(+), 16 deletions(-) delete mode 100644 source/_integrations/light.xiaomi_aqara.markdown diff --git a/source/_integrations/light.xiaomi_aqara.markdown b/source/_integrations/light.xiaomi_aqara.markdown deleted file mode 100644 index 4989d4c6cf0..00000000000 --- a/source/_integrations/light.xiaomi_aqara.markdown +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Xiaomi Light" -description: "Instructions on how to setup the Xiaomi light within Home Assistant." -ha_category: - - Light -ha_release: "0.50" -ha_iot_class: Local Push -ha_domain: xiaomi_aqara ---- - - -The `xiaomi aqara` light platform allows you to control the internal light of the Xiaomi gateway. The integration will be loaded automatically and provides a device called `light.gateway_light_28ffffffffff`. - -The requirement is that you have setup [Xiaomi aqara](/integrations/xiaomi_aqara/). - diff --git a/source/_integrations/xiaomi_aqara.markdown b/source/_integrations/xiaomi_aqara.markdown index 72c0ebd2e7d..e0afd661155 100644 --- a/source/_integrations/xiaomi_aqara.markdown +++ b/source/_integrations/xiaomi_aqara.markdown @@ -95,7 +95,7 @@ The Xiaomi Gateway (Aqara) integration supports the following entities. ### Covers -The cover entity allows you to control connected Aquara covers. You can do the following: +The cover entity allows you to control connected Aquara covers. You can do the following: - Open the cover. - Close the cover. @@ -103,6 +103,16 @@ The cover entity allows you to control connected Aquara covers. You can do the - Move the cover to a specific position. - See the current position of the cover. +### Lights + +The light entity allows you to control the internal light of the Xiaomi gateway. The entity is called `light.gateway_light_28ffffffffff`. You can do the following: + +- Turn the light on and off. +- Set the brightness. +- Set the color using HS or RGB color coding. + +The requirement is that you have setup [Xiaomi aqara](/integrations/xiaomi_aqara/). + ### Locks An Aqara lock cannot be controlled by Home Assistant. However, the lock entity allows you to view the following data: From 5033a94e0b081a20e40086748230b41bf0bfa270 Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Tue, 8 Oct 2024 15:54:34 +0200 Subject: [PATCH 29/67] Xiaomi Aqara: Move switch to hub docs (#35141) * Xiaomi Aqara: Move switch to hub docs * Tweak --- source/_integrations/switch.xiaomi_aqara.markdown | 13 ------------- source/_integrations/xiaomi_aqara.markdown | 4 ++++ 2 files changed, 4 insertions(+), 13 deletions(-) delete mode 100644 source/_integrations/switch.xiaomi_aqara.markdown diff --git a/source/_integrations/switch.xiaomi_aqara.markdown b/source/_integrations/switch.xiaomi_aqara.markdown deleted file mode 100644 index 06789827df8..00000000000 --- a/source/_integrations/switch.xiaomi_aqara.markdown +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Xiaomi Switch" -description: "Instructions on how to set up the Xiaomi switch within Home Assistant." -ha_category: - - Switch -ha_release: "0.50" -ha_iot_class: Local Push -ha_domain: xiaomi_aqara ---- - -The `xiaomi_aqara` switch platform allows you to get data from your [Xiaomi aqara](https://www.mi.com/en/) switches. - -The requirement is that you have set up [Xiaomi aqara](/integrations/xiaomi_aqara/). diff --git a/source/_integrations/xiaomi_aqara.markdown b/source/_integrations/xiaomi_aqara.markdown index e0afd661155..412955c355a 100644 --- a/source/_integrations/xiaomi_aqara.markdown +++ b/source/_integrations/xiaomi_aqara.markdown @@ -489,6 +489,10 @@ This automation toggles the living room lamp on vibration/tilt. entity_id: light.living_room_lamp ``` +## Switches + +The switch entity allows you to get data from your [Xiaomi aqara](https://www.mi.com/en/) switches and to switch between states. + ## Actions The gateway provides the following actions: From 4b0d1187260089071a4d63d21305ea62f4362b9b Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Tue, 8 Oct 2024 15:55:09 +0200 Subject: [PATCH 30/67] Xiaomi Aquara hub: convert large table to list (#35134) --- source/_integrations/xiaomi_aqara.markdown | 130 ++++++++++++++++++--- 1 file changed, 111 insertions(+), 19 deletions(-) diff --git a/source/_integrations/xiaomi_aqara.markdown b/source/_integrations/xiaomi_aqara.markdown index 412955c355a..7722f3c349b 100644 --- a/source/_integrations/xiaomi_aqara.markdown +++ b/source/_integrations/xiaomi_aqara.markdown @@ -127,26 +127,118 @@ The binary sensor entities allow you to get data from your [Xiaomi](https://www. #### Type of binary sensors supported -| Name | Zigbee entity | Model no. | States | Event | Event key | Event values | -| ---- | ------------- | --------- | ------ | ----- | --------- | ------------ | -| Motion Sensor (1st gen) | motion | RTCGQ01LM | on, off | `xiaomi_aqara.motion` | | | -| Motion Sensor (2nd gen) | sensor_motion.aq2 | RTCGQ11LM | on, off | `xiaomi_aqara.motion` | | | -| Xiaomi Door and Window Sensor (1st gen) | magnet | MCCGQ01LM | on, off | | | | -| Aqara Door and Window Sensor (2nd gen) | sensor_magnet.aq2 | MCCGQ11LM | on, off | | | | -| Smoke Detector | smoke | JTYJ-GD-01LM/BW | on, off | | | | -| Gas Leak Detector | natgas | JTQJ-BF-01LM/BW | on, off | | | | -| Water Leak Sensor | sensor_wleak.aq1 | SJCGQ11LM | on, off | | | | -| Button (1st gen) | switch | WXKG01LM | on (through long_click_press), off | `xiaomi_aqara.click`| `click_type`| `long_click_press`, `hold`, `single`, `double` | -| Button (2nd gen) | sensor_switch.aq2, remote.b1acn01 | WXKG11LM | on (through long_click_press), off | `xiaomi_aqara.click` | `click_type` | `single`, `double`, `long_click_press`, `hold` | -| Button (2nd gen, model b) | sensor_switch.aq3 | WXKG12LM | off (always) | `xiaomi_aqara.click` | `click_type` | `single`, `double`, `long_click_press`, `shake` | -| Aqara Wireless Switch (Single) | 86sw1 | WXKG03LM | off (always) | `xiaomi_aqara.click` | `click_type` | `single` | -| Aqara Wireless Switch (Double) | 86sw2 | WXKG02LM | off (always) | `xiaomi_aqara.click` | `click_type` | `single`, `both` | -| Aqara Wireless Switch (Single) (2nd gen) | remote.b186acn01 | WXKG03LM | off (always) | `xiaomi_aqara.click` | `click_type` | `single`, `double`, `long` | -| Aqara Wireless Switch (Double) (2nd gen) | remote.b286acn01 | WXKG02LM | off (always) | `xiaomi_aqara.click` | `click_type` | `single`, `double`, `long`, `both`, `double_both`, `long_both` | -| Cube | cube | MFKZQ01LM | off (always) | `xiaomi_aqara.cube_action` | `action_type`, `action_value` (rotate) | `flip90`, `flip180`, `move`, `tap_twice`, `shake_air`, `swing`, `alert`, `free_fall`, `rotate` (degrees at action_value) | -| Vibration Sensor | vibration | DJT11LM | off (always) | `xiaomi_aqara.movement` | `movement_type` | `vibrate`, `tilt`, `free_fall` | +List of supported binary sensors, including the following properties (if available): name, model no., Zigbee entity, states, and, event, event, key, and event values. -#### Automation examples for binary sensors +- **Motion Sensor (1st gen)** + - Model no.: RTCGQ01LM + - Zigbee entity: motion + - States: on, off + - Event: `xiaomi_aqara.motion` + +- **Motion Sensor (2nd gen)** + - Model no.: RTCGQ11LM + - Zigbee entity: sensor_motion.aq2 + - States: on, off + - Event: `xiaomi_aqara.motion` + +- **Xiaomi Door and Window Sensor (1st gen)** + - Model no.: MCCGQ01LM + - Zigbee entity: magnet + - States: on, off + +- **Aqara Door and Window Sensor (2nd gen)** + - Model no.: MCCGQ11LM + - Zigbee entity: sensor_magnet.aq2 + - States: on, off + +- **Smoke Detector** + - Model no.: JTYJ-GD-01LM/BW + - Zigbee entity: smoke + - States: on, off + +- **Gas Leak Detector** + - Model no.: JTQJ-BF-01LM/BW + - Zigbee entity: natgas + - States: on, off + +- **Water Leak Sensor** + - Model no.: SJCGQ11LM + - Zigbee entity: sensor_wleak.aq1 + - States: on, off + +- **Button (1st gen)** + - Model no.: WXKG01LM + - Zigbee entity: switch + - States: on (through long_click_press), off + - Event: `xiaomi_aqara.click` + - Event key: `click_type` + - Event values: `long_click_press`, `hold`, `single`, `double` + +- **Button (2nd gen)** + - Model no.: WXKG11LM + - Zigbee entity: sensor_switch.aq2, remote.b1acn01 + - States: on (through long_click_press), off + - Event: `xiaomi_aqara.click` + - Event key: `click_type` + - Event values: `single`, `double`, `long_click_press`, `hold` + +- **Button (2nd gen, model b)** + - Model no.: WXKG12LM + - Zigbee entity: sensor_switch.aq3 + - States: off (always) + - Event: `xiaomi_aqara.click` + - Event key: `click_type` + - Event values: `single`, `double`, `long_click_press`, `shake` + +- **Aqara Wireless Switch (Single)** + - Model no.: WXKG03LM + - Zigbee entity: 86sw1 + - States: off (always) + - Event: `xiaomi_aqara.click` + - Event key: `click_type` + - Event values: `single` + +- **Aqara Wireless Switch (Double)** + - Model no.: WXKG02LM + - Zigbee entity: 86sw2 + - States: off (always) + - Event: `xiaomi_aqara.click` + - Event key: `click_type` + - Event values: `single`, `both` + +- **Aqara Wireless Switch (Single) (2nd gen)** + - Model no.: WXKG03LM + - Zigbee entity: remote.b186acn01 + - States: off (always) + - Event: `xiaomi_aqara.click` + - Event key: `click_type` + - Event values: `single`, `double`, `long` + +- **Aqara Wireless Switch (Double) (2nd gen)** + - Model no.: WXKG02LM + - Zigbee entity: remote.b286acn01 + - States: off (always) + - Event: `xiaomi_aqara.click` + - Event key: `click_type` + - Event values: `single`, `double`, `long`, `both`, `double_both`, `long_both` + +- **Cube** + - Model no.: MFKZQ01LM + - Zigbee entity: cube + - States: off (always) + - Event: `xiaomi_aqara.cube_action` + - Event key: `action_type`, `action_value` (rotate) + - Event values: `flip90`, `flip180`, `move`, `tap_twice`, `shake_air`, `swing`, `alert`, `free_fall`, `rotate` (degrees at action_value) + +- **Vibration Sensor** + - Model no.: DJT11LM + - Zigbee entity: vibration + - States: off (always) + - Event: `xiaomi_aqara.movement` + - Event key: `movement_type` + - Event values: `vibrate`, `tilt`, `free_fall` + +#### Automation examples for binary sensors ##### Motion From a2b4f9ee867bc1c5fb7047418355105c89a895dd Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Tue, 8 Oct 2024 17:20:16 +0200 Subject: [PATCH 31/67] Xiaomi Aquara: move sensor into hub docs (#35138) --- source/_integrations/xiaomi_aqara.markdown | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/source/_integrations/xiaomi_aqara.markdown b/source/_integrations/xiaomi_aqara.markdown index 7722f3c349b..22ee825b4a8 100644 --- a/source/_integrations/xiaomi_aqara.markdown +++ b/source/_integrations/xiaomi_aqara.markdown @@ -581,6 +581,23 @@ This automation toggles the living room lamp on vibration/tilt. entity_id: light.living_room_lamp ``` +### Sensors + +The sensor entity allows you to read data from your [Xiaomi](https://www.mi.com/en/) sensors. + +The following sensor types are supported: + +- Battery level (in percentage) +- Bed activity / vibration (in micrometers) +- Coordination +- Humidity (in percentage) +- Illumination (in lux) +- Power consumed (in kWh) +- Power load (in Watt) +- Pressure (in hPa) +- Temperature (depends on UI settings, Celsius or Fahrenheit) +- Tilt angle + ## Switches The switch entity allows you to get data from your [Xiaomi aqara](https://www.mi.com/en/) switches and to switch between states. From 87b1bccafa588f3e2d3db8da5c5d7078f317588e Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Wed, 9 Oct 2024 09:25:35 +0200 Subject: [PATCH 32/67] Xiaomi Aqara: add missing redirects after docs page consolidation (#35148) --- source/_redirects | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_redirects b/source/_redirects index 1382529d9e5..d072f999938 100644 --- a/source/_redirects +++ b/source/_redirects @@ -160,6 +160,7 @@ layout: null /integrations/binary_sensor.modbus /integrations/modbus/#configuring-binary-sensor-entities /integrations/binary_sensor.mysensors /integrations/mysensors#binary-sensor /integrations/binary_sensor.template /integrations/template/#binary_sensor +/integrations/binary_sensor.xiaomi_aqara/ /integrations/xiaomi_aqara/#binary-sensor /integrations/climate.knx /integrations/knx#climate /integrations/climate.modbus/ /integrations/modbus/#configuring-climate-entities /integrations/climate.mysensors /integrations/mysensors#climate @@ -167,6 +168,7 @@ layout: null /integrations/cover.group /integrations/group /integrations/cover.knx /integrations/knx#cover /integrations/cover.mysensors /integrations/mysensors#cover +/integrations/cover.xiaomi_aqara/ /integrations/xiaomi_aqara/#covers /integrations/device_tracker.mysensors /integrations/mysensors#device-tracker /integrations/fan.group /integrations/group /integrations/fan.xiaomi_miio /integrations/xiaomi_miio/#xiaomi-air-purifier-air-humidifier-and-standing-fan @@ -174,6 +176,7 @@ layout: null /integrations/light.knx /integrations/knx#light /integrations/light.mysensors /integrations/mysensors#light /integrations/light.xiaomi_miio /integrations/xiaomi_miio/#xiaomi-philips-light +/integrations/light.xiaomi_aqara/ /integrations/xiaomi_aqara/#lights /integrations/lock.xiaomi_aqara/ /integrations/xiaomi_aqara/#locks /integrations/media_player.group /integrations/group /integrations/notify.command_line /integrations/command_line#Notify @@ -188,10 +191,12 @@ layout: null /integrations/sensor.mysensors /integrations/mysensors#sensor /integrations/sensor.websocket_api /integrations/websocket_api/#track-current-connections /integrations/sensor.xiaomi_miio /integrations/xiaomi_miio +/integrations/sensor.xiaomi_aqara/ /integrations/xiaomi_aqara/#sensors /integrations/switch.command_line /integrations/command_line#Switch /integrations/switch.knx /integrations/knx#switch /integrations/switch.modbus /integrations/modbus/#configuring-switch-entities /integrations/switch.mysensors /integrations/mysensors#switch +/integrations/switch.xiaomi_aqara/ /integrations/xiaomi_aqara/#switches /integrations/switch.pca /integrations/elv/ /integrations/switch.xiaomi_miio /integrations/xiaomi_miio/#xiaomi-smart-wifi-socket-and-smart-power-strip /integrations/vacuum.xiaomi_miio /integrations/xiaomi_miio/#xiaomi-mi-robot-vacuum From 32b8196d25aa07a14d0cc637ce77c918906a454f Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:00:33 +0200 Subject: [PATCH 33/67] Xiaomi Miio: convert tables to lists to improve readability and display on mobile (#35143) --- source/_integrations/xiaomi_miio.markdown | 688 +++++++++++----------- 1 file changed, 350 insertions(+), 338 deletions(-) diff --git a/source/_integrations/xiaomi_miio.markdown b/source/_integrations/xiaomi_miio.markdown index 52e4dd3963c..c35ff5c3768 100644 --- a/source/_integrations/xiaomi_miio.markdown +++ b/source/_integrations/xiaomi_miio.markdown @@ -82,17 +82,44 @@ The most common problems are: The `xiaomi_miio` gateway {% term integration %} allows you to control the gateway and its connected subdevices. -### Supported Xiaomi gateway models: +### Supported Xiaomi gateway models -| Gateway name | Zigbee id | model | supported | -| ------------------ | ------------------- | ------------------------ | ------------------------------ | -| Chinese version | lumi.gateway.v3 | DGNWG02LM | yes | -| European version | lumi.gateway.mieu01 | ZHWG11LM-763 / DGNWQ05LM | yes (cloud credentials needed) | -| Aqara hub | lumi.gateway.aqhm01 | ZHWG11LM | yes | -| Mijia Zigbee 3.0 | lumi.gateway.mgl03 | ZNDMWG03LM | yes | -| Aqara AC Companion | lumi.acpartner.v1 | KTBL01LM | untested | -| Mi AC Companion | lumi.acpartner.v2 | KTBL02LM | untested | -| Aqara AC Companion | lumi.acpartner.v3 | KTBL11LM | yes | +The following list shows the Gateway name, the model number, the Zigbee ID, and whether the model is supported or not in Home Assistant. + +- **Chinese version** + - Model: DGNWG02LM + - Zigbee ID: lumi.gateway.v3 + - Supported: Yes + +- **European version** + - Model: ZHWG11LM-763 / DGNWQ05LM + - Zigbee ID: lumi.gateway.mieu01 + - Supported: Yes (cloud credentials needed) + +- **Aqara hub** + - Model: ZHWG11LM + - Zigbee ID: lumi.gateway.aqhm01 + - Supported: Yes + +- **Mijia Zigbee 3.0** + - Model: ZNDMWG03LM + - Zigbee ID: lumi.gateway.mgl03 + - Supported: Yes + +- **Aqara AC Companion** + - Model: KTBL01LM + - Zigbee ID: lumi.acpartner.v1 + - Supported: Untested + +- **Mi AC Companion** + - Model: KTBL02LM + - Zigbee ID: lumi.acpartner.v2 + - Supported: Untested + +- **Aqara AC Companion** + - Model: KTBL11LM + - Zigbee ID: lumi.acpartner.v3 + - Supported: Yes Some gateways (lumi.gateway.mieu01) do not support getting the connected subdevices locally. For those gateways, cloud credentials can be specified during the config flow and the "Use cloud to get connected subdevices" can be enabled in the options flow (after setting up the {% term integration %}, click Configuration in the sidebar, then click Integrations and then click Options on the already set up Xiaomi Miio Gateway {% term integration %}). The connected subdevices will then be retrieved from the Xiaomi Miio cloud (internet), control and status updates of those subdevices will then further take place over local network connection. A re-authentication flow may be triggered when no cloud credentials are provided yet and are needed for that particular gateway model. @@ -111,65 +138,107 @@ Not yet implemented features (but possible): These subdevices are fully implemented in HomeAssistant: -| Subdevice name | Zigbee id | model | features | -| -------------------------------- | --------------------- | ---------- | ------------------------------------------------ | -| Weather sensor | lumi.sensor_ht | WSDCGQ01LM | readout `temperature` and `humidity` | -| Weather sensor | lumi.weather.v1 | WSDCGQ11LM | readout `temperature`, `humidity` and `pressure` | -| Wall switch single | lumi.ctrl_ln1 | QBKG11LM | load_power, status, turn_on, turn_off, toggle | -| Wall switch single | lumi.ctrl_ln1.aq1 | QBKG11LM | load_power, status, turn_on, turn_off, toggle | -| Wall switch no neutral | lumi.ctrl_neutral1.v1 | QBKG04LM | status, turn_on, turn_off, toggle | -| Wall switch double | lumi.ctrl_ln2 | QBKG12LM | load_power, status, turn_on, turn_off, toggle | -| Wall switch double | lumi.ctrl_ln2.aq1 | QBKG12LM | load_power, status, turn_on, turn_off, toggle | -| Wall switch double no neutral | lumi.ctrl_neutral2 | QBKG03LM | status, turn_on, turn_off, toggle | -| D1 wall switch triple | lumi.switch.n3acn3 | QBKG26LM | load_power, status, turn_on, turn_off, toggle | -| D1 wall switch triple no neutral | lumi.switch.l3acn3 | QBKG25LM | load_power, status, turn_on, turn_off, toggle | -| Wall outlet | lumi.ctrl_86plug.v1 | QBCZ11LM | status, turn_on, turn_off, toggle | -| Wall outlet | lumi.ctrl_86plug.aq1 | QBCZ11LM | load_power, status, turn_on, turn_off, toggle | -| Plug | lumi.plug | ZNCZ02LM | load_power, status, turn_on, turn_off, toggle | -| Relay | lumi.relay.c2acn01 | LLKZMK11LM | load_power, status, turn_on, turn_off, toggle | -| Smart bulb E27 | lumi.light.aqcn02 | ZNLDP12LM | on/off, brightness, color temperature | -| IKEA smart bulb E27 white | ikea.light.led1545g12 | LED1545G12 | on/off, brightness, color temperature | -| IKEA smart bulb E27 white | ikea.light.led1546g12 | LED1546G12 | on/off, brightness, color temperature | -| IKEA smart bulb E12 white | ikea.light.led1536g5 | LED1536G5 | on/off, brightness, color temperature | -| IKEA smart bulb GU10 white | ikea.light.led1537r6 | LED1537R6 | on/off, brightness, color temperature | -| IKEA smart bulb E27 white | ikea.light.led1623g12 | LED1623G12 | on/off, brightness, color temperature | -| IKEA smart bulb GU10 white | ikea.light.led1650r5 | LED1650R5 | on/off, brightness, color temperature | -| IKEA smart bulb E12 white | ikea.light.led1649c5 | LED1649C5 | on/off, brightness, color temperature | +- **Weather sensor (WSDCGQ01LM)** + - Zigbee ID: `lumi.sensor_ht` + - Features: readout `temperature` and `humidity` +- **Weather sensor (WSDCGQ11LM)** + - Zigbee ID: `lumi.weather.v1` + - Features: readout `temperature`, `humidity` and `pressure` +- **Wall switch single (QBKG11LM)** + - Zigbee ID: `lumi.ctrl_ln1` + - Features: load_power, status, turn_on, turn_off, toggle +- **Wall switch single (QBKG11LM)** + - Zigbee ID: `lumi.ctrl_ln1.aq1` + - Features: load_power, status, turn_on, turn_off, toggle +- **Wall switch no neutral (QBKG04LM)** + - Zigbee ID: `lumi.ctrl_neutral1.v1` + - Features: status, turn_on, turn_off, toggle +- **Wall switch double (QBKG12LM)** + - Zigbee ID: `lumi.ctrl_ln2` + - Features: load_power, status, turn_on, turn_off, toggle +- **Wall switch double (QBKG12LM)** + - Zigbee ID: `lumi.ctrl_ln2.aq1` + - Features: load_power, status, turn_on, turn_off, toggle +- **Wall switch double no neutral (QBKG03LM)** + - Zigbee ID: `lumi.ctrl_neutral2` + - Features: status, turn_on, turn_off, toggle +- **D1 wall switch triple (QBKG26LM)** + - Zigbee ID: `lumi.switch.n3acn3` + - Features: load_power, status, turn_on, turn_off, toggle +- **D1 wall switch triple no neutral (QBKG25LM)** + - Zigbee ID: `lumi.switch.l3acn3` + - Features: load_power, status, turn_on, turn_off, toggle +- **Wall outlet (QBCZ11LM)** + - Zigbee ID: `lumi.ctrl_86plug.v1` + - Features: status, turn_on, turn_off, toggle +- **Wall outlet (QBCZ11LM)** + - Zigbee ID: `lumi.ctrl_86plug.aq1` + - Features: load_power, status, turn_on, turn_off, toggle +- **Plug (ZNCZ02LM)** + - Zigbee ID: `lumi.plug` + - Features: load_power, status, turn_on, turn_off, toggle +- **Relay (LLKZMK11LM)** + - Zigbee ID: `lumi.relay.c2acn01` + - Features: load_power, status, turn_on, turn_off, toggle +- **Smart bulb E27 (ZNLDP12LM)** + - Zigbee ID: `lumi.light.aqcn02` + - Features: on/off, brightness, color temperature +- **IKEA smart bulb E27 white (LED1545G12)** + - Zigbee ID: `ikea.light.led1545g12` + - Features: on/off, brightness, color temperature +- **IKEA smart bulb E27 white (LED1546G12)** + - Zigbee ID: `ikea.light.led1546g12` + - Features: on/off, brightness, color temperature +- **IKEA smart bulb E12 white (LED1536G5)** + - Zigbee ID: `ikea.light.led1536g5` + - Features: on/off, brightness, color temperature +- **IKEA smart bulb GU10 white (LED1537R6)** + - Zigbee ID: `ikea.light.led1537r6` + - Features: on/off, brightness, color temperature +- **IKEA smart bulb E27 white (LED1623G12)** + - Zigbee ID: `ikea.light.led1623g12` + - Features: on/off, brightness, color temperature +- **IKEA smart bulb GU10 white (LED1650R5)** + - Zigbee ID: `ikea.light.led1650r5` + - Features: on/off, brightness, color temperature +- **IKEA smart bulb E12 white (LED1649C5)** + - Zigbee ID: `ikea.light.led1649c5` + - Features: on/off, brightness, color temperature ### Recognized subdevices (not yet implemented) These subdevices are recognized by the python-miio code but are still being worked on (not yet implemented). -| Subdevice name | Zigbee id | model | -| ------------------------------ | ----------------------- | --------------- | -| Button | lumi.sensor_switch | WXKG01LM | -| Button | lumi.sensor_switch.aq2 | WXKG11LM 2015 | -| Button | lumi.sensor_switch.aq3 | WXKG12LM | -| Button | lumi.remote.b1acn01 | WXKG11LM 2018 | -| Cube | lumi.sensor_cube.v1 | MFKZQ01LM | -| Cube | lumi.sensor_cube.aqgl01 | MFKZQ01LM | -| Motion sensor | lumi.sensor_motion | RTCGQ01LM | -| Motion sensor | lumi.sensor_motion.aq2 | RTCGQ11LM | -| Door sensor | lumi.sensor_magnet | MCCGQ01LM | -| Door sensor | lumi.sensor_magnet.aq2 | MCCGQ11LM | -| Vibration sensor | lumi.vibration.aq1 | DJT11LM | -| Honeywell smoke detector | lumi.sensor_smoke | JTYJ-GD-01LM/BW | -| Honeywell natural gas detector | lumi.sensor_natgas | JTQJ-BF-01LM/BW | -| Water leak sensor | lumi.sensor_wleak.aq1 | SJCGQ11LM | -| Remote switch single | lumi.sensor_86sw1.v1 | WXKG03LM 2016 | -| Remote switch single | lumi.remote.b186acn01 | WXKG03LM 2018 | -| D1 remote switch single | lumi.remote.b186acn02 | WXKG06LM | -| Remote switch double | lumi.sensor_86sw2.v1 | WXKG02LM 2016 | -| Remote switch double | lumi.remote.b286acn01 | WXKG02LM 2018 | -| D1 remote switch double | lumi.remote.b286acn02 | WXKG07LM | -| Curtain | lumi.curtain | ZNCLDJ11LM | -| Curtain | lumi.curtain.aq2 | ZNGZDJ11LM | -| Curtain B1 | lumi.curtain.hagl04 | ZNCLDJ12LM | -| Door lock S1 | lumi.lock.aq1 | ZNMS11LM | -| Door lock S2 | lumi.lock.acn02 | ZNMS12LM | -| Door lock S2 pro | lumi.lock.acn03 | ZNMS13LM | -| Vima cylinder lock | lumi.lock.v1 | A6121 | -| Thermostat S2 | lumi.airrtc.tcpecn02 | KTWKQ03ES | +The list shows the device name, the model number, and the Zigbee ID. + +- **Button** (WXKG01LM): `lumi.sensor_switch` +- **Button** (WXKG11LM 2015): `lumi.sensor_switch.aq2` +- **Button** (WXKG12LM): `lumi.sensor_switch.aq3` +- **Button** (WXKG11LM 2018): `lumi.remote.b1acn01` +- **Cube** (MFKZQ01LM): `lumi.sensor_cube.v1` +- **Cube** (MFKZQ01LM): `lumi.sensor_cube.aqgl01` +- **Motion sensor** (RTCGQ01LM): `lumi.sensor_motion` +- **Motion sensor** (RTCGQ11LM): `lumi.sensor_motion.aq2` +- **Door sensor** (MCCGQ01LM): `lumi.sensor_magnet` +- **Door sensor** (MCCGQ11LM): `lumi.sensor_magnet.aq2` +- **Vibration sensor** (DJT11LM): `lumi.vibration.aq1` +- **Honeywell smoke detector** (JTYJ-GD-01LM/BW): `lumi.sensor_smoke` +- **Honeywell natural gas detector** (JTQJ-BF-01LM/BW): `lumi.sensor_natgas` +- **Water leak sensor** (SJCGQ11LM): `lumi.sensor_wleak.aq1` +- **Remote switch single** (WXKG03LM 2016): `lumi.sensor_86sw1.v1` +- **Remote switch single** (WXKG03LM 2018): `lumi.remote.b186acn01` +- **D1 remote switch single** (WXKG06LM): `lumi.remote.b186acn02` +- **Remote switch double** (WXKG02LM 2016): `lumi.sensor_86sw2.v1` +- **Remote switch double** (WXKG02LM 2018): `lumi.remote.b286acn01` +- **D1 remote switch double** (WXKG07LM): `lumi.remote.b286acn02` +- **Curtain** (ZNCLDJ11LM): `lumi.curtain` +- **Curtain** (ZNGZDJ11LM): `lumi.curtain.aq2` +- **Curtain B1** (ZNCLDJ12LM): `lumi.curtain.hagl04` +- **Door lock S1** (ZNMS11LM): `lumi.lock.aq1` +- **Door lock S2** (ZNMS12LM): `lumi.lock.acn02` +- **Door lock S2 pro** (ZNMS13LM): `lumi.lock.acn03` +- **Vima cylinder lock** (A6121): `lumi.lock.v1` +- **Thermostat S2** (KTWKQ03ES): `lumi.airrtc.tcpecn02` ## Xiaomi device tracker (Xiaomi Mi WiFi Repeater 2) @@ -203,57 +272,53 @@ The Air Purifiers, Air Humidifiers and Standing Fans use multiple platforms to a Supported devices: -| Name | Model | Model no. | -| ---------------------- | ----------------------- | ------------ | -| Air Purifier | zhimi.airpurifier.v1 | | -| Air Purifier 2 | zhimi.airpurifier.v2 | FJY4006CN | -| Air Purifier V3 | zhimi.airpurifier.v3 | | -| Air Purifier V5 | zhimi.airpurifier.v5 | | -| Air Purifier Pro | zhimi.airpurifier.v6 | | -| Air Purifier Pro V7 | zhimi.airpurifier.v7 | | -| Air Purifier 2 (mini) | zhimi.airpurifier.m1 | | -| Air Purifier (mini) | zhimi.airpurifier.m2 | | -| Air Purifier MA1 | zhimi.airpurifier.ma1 | | -| Air Purifier MA2 | zhimi.airpurifier.ma2 | | -| Air Purifier 2S | zhimi.airpurifier.mc1 | | -| Air Purifier Super | zhimi.airpurifier.sa1 | | -| Air Purifier Super 2 | zhimi.airpurifier.sa2 | | -| Air Purifier 3 (2019) | zhimi.airpurifier.ma4 | AC-M6-SC | -| Air Purifier 3H (2019) | zhimi.airpurifier.mb3 | | -| Air Purifier Pro H | zhimi.airpurifier.va1 | | -| Air Purifier Pro H EU | zhimi.airpurifier.vb2 | | -| Air Purifier 3C | zhimi.airpurifier.mb4 | | -| Air Purifier 3C | zhimi.airp.mb4a | | -| Air Purifier ZA1 | zhimi.airpurifier.za1 | | -| Air Purifier 4 | zhimi.airp.mb5 | AC-M16-SC | -| Air Purifier 4 PRO | zhimi.airp.vb4 | AC-M15-SC | -| Air Fresh A1 | dmaker.airfresh.a1 | MJXFJ-150-A1 | -| Air Fresh VA2 | zhimi.airfresh.va2 | | -| Air Fresh VA4 | zhimi.airfresh.va4 | | -| Air Fresh T2017 | dmaker.airfresh.t2017 | MJXFJ-300-G1 | -| Air Humidifier | zhimi.humidifier.v1 | | -| Air Humidifier CA1 | zhimi.humidifier.ca1 | | -| Air Humidifier CA4 | zhimi.humidifier.ca4 | | -| Air Humidifier CB1 | zhimi.humidifier.cb1 | | -| Air Humidifier JSQ | deerma.humidifier.jsq | | -| Air Humidifier JSQ1 | deerma.humidifier.jsq1 | | -| Air Humidifier MJJSQ | deerma.humidifier.mjjsq | | -| Standing Fan 1X | dmaker.fan.p5 | | -| Inverter Pedestal Fan | zhimi.fan.za1 | | -| Standing Fan 2 | zhimi.fan.za3 | | -| Standing Fan 2S | zhimi.fan.za4 | | -| Standing Fan | zhimi.fan.sa1 | | -| DC Pedestal Fan | zhimi.fan.v2 | | -| DC Pedestal Fan | zhimi.fan.v3 | | -| Standing Fan 1C | dmaker.fan.1c | | -| Tower Fan | dmaker.fan.p9 | | -| Standing Fan 2 | dmaker.fan.p10 | | -| Standing Fan Pro | dmaker.fan.p11 | | -| Standing Fan 3 | zhimi.fan.za5 | | +The list includes device name, model number (if available), and model. -### Features - -### Air Purifier 2 (zhimi.airpurifier.v2) +- **Air Purifier**: `zhimi.airpurifier.v1` +- **Air Purifier 2** (FJY4006CN): `zhimi.airpurifier.v2` +- **Air Purifier V3**: `zhimi.airpurifier.v3` +- **Air Purifier V5**: `zhimi.airpurifier.v5` +- **Air Purifier Pro**: `zhimi.airpurifier.v6` +- **Air Purifier Pro V7**: `zhimi.airpurifier.v7` +- **Air Purifier 2 (mini)**: `zhimi.airpurifier.m1` +- **Air Purifier (mini)**: `zhimi.airpurifier.m2` +- **Air Purifier MA1**: `zhimi.airpurifier.ma1` +- **Air Purifier MA2**: `zhimi.airpurifier.ma2` +- **Air Purifier 2S**: `zhimi.airpurifier.mc1` +- **Air Purifier Super**: `zhimi.airpurifier.sa1` +- **Air Purifier Super 2**: `zhimi.airpurifier.sa2` +- **Air Purifier 3 (2019) (AC-M6-SC)**: `zhimi.airpurifier.ma4` +- **Air Purifier 3H (2019)**: `zhimi.airpurifier.mb3` +- **Air Purifier Pro H**: `zhimi.airpurifier.va1` +- **Air Purifier Pro H EU**: `zhimi.airpurifier.vb2` +- **Air Purifier 3C**: `zhimi.airpurifier.mb4` +- **Air Purifier 3C**: `zhimi.airp.mb4a` +- **Air Purifier ZA1**: `zhimi.airpurifier.za1` +- **Air Purifier 4 (AC-M16-SC)**: `zhimi.airp.mb5` +- **Air Purifier 4 PRO (AC-M15-SC)**: `zhimi.airp.vb4` +- **Air Fresh A1 (MJXFJ-150-A1)**: `dmaker.airfresh.a1` +- **Air Fresh VA2**: `zhimi.airfresh.va2` +- **Air Fresh VA4**: `zhimi.airfresh.va4` +- **Air Fresh T2017 (MJXFJ-300-G1)**: `dmaker.airfresh.t2017` +- **Air Humidifier**: `zhimi.humidifier.v1` +- **Air Humidifier CA1**: `zhimi.humidifier.ca1` +- **Air Humidifier CA4**: `zhimi.humidifier.ca4` +- **Air Humidifier CB1**: `zhimi.humidifier.cb1` +- **Air Humidifier JSQ**: `deerma.humidifier.jsq` +- **Air Humidifier JSQ1**: `deerma.humidifier.jsq1` +- **Air Humidifier MJJSQ**: `deerma.humidifier.mjjsq` +- **Standing Fan 1X**: `dmaker.fan.p5` +- **Inverter Pedestal Fan**: `zhimi.fan.za1` +- **Standing Fan 2**: `zhimi.fan.za3` +- **Standing Fan 2S**: `zhimi.fan.za4` +- **Standing Fan**: `zhimi.fan.sa1` +- **DC Pedestal Fan**: `zhimi.fan.v2` +- **DC Pedestal Fan**: `zhimi.fan.v3` +- **Standing Fan 1C**: `dmaker.fan.1c` +- **Tower Fan**: `dmaker.fan.p9` +- **Standing Fan 2**: `dmaker.fan.p10` +- **Standing Fan Pro**: `dmaker.fan.p11` +- **Standing Fan 3**: `zhimi.fan.za5` - Power (on, off) - Operation modes (Auto, Silent, Favorite, Idle) @@ -275,16 +340,14 @@ Supported devices: - Sensor entities -| Sensor | Description | Enabled by default | -| ------------------------- | ------------------------------------------------------------- | ------------------ | -| Filter Lifetime Remaining | The remaining life of the filter | True | -| Filter Use | Filter usage time in hours | True | -| Humidity | The current humidity measured | True | -| Motor Speed | The current motor speed measured in rpm | True | -| PM2.5 | The current particulate matter 2.5 measured | True | -| Purify Volume | The volume of purified air in qubic meter | False | -| Temperature | The current temperature measured | True | -| Use Time | The accumulative number of seconds the device has been in use | False | +- **Filter Lifetime Remaining**: The remaining life of the filter. Enabled by default. +- **Filter Use**: Filter usage time in hours. Enabled by default. +- **Humidity**: The current humidity measured. Enabled by default. +- **Motor Speed**: The current motor speed measured in rpm. Enabled by default. +- **PM2.5**: The current particulate matter 2.5 measured. Enabled by default. +- **Purify Volume**: The volume of purified air in cubic meter. Disabled by default. +- **Temperature**: The current temperature measured. Enabled by default. +- **Use Time**: The accumulative number of seconds the device has been in use. Disabled by default. - Switch entities @@ -315,19 +378,16 @@ Supported devices: | Volume | Set the volume | - Sensor entities - -| Sensor | Description | Enabled by default | -| --------------------- | ------------------------------------------------------------- | ------------------ | -| Filter Life Remaining | The remaining lifetime of the filter | True | -| Filter Use | Filter usage time in hours | True | -| Humidity | The current humidity measured | True | -| Illuminance | The current illuminance measured | True | -| Motor Speed | The current motor speed measured in rpm | True | -| PM2.5 | The current particulate matter 2.5 measured | True | -| Purify Volume | The volume of purified air in qubic meter | False | -| Second Motor Speed | The current second motor speed measured in rpm | True | -| Temperature | The current temperature measured | True | -| Use Time | The accumulative number of seconds the device has been in use | False | + - **Filter Life Remaining**: The remaining lifetime of the filter. Enabled by default. + - **Filter Use**: Filter usage time in hours. Enabled by default. + - **Humidity**: The current humidity measured. Enabled by default. + - **Illuminance**: The current illuminance measured. Enabled by default. + - **Motor Speed**: The current motor speed measured in rpm. Enabled by default. + - **PM2.5**: The current particulate matter 2.5 measured. Enabled by default. + - **Purify Volume**: The volume of purified air in cubic meter. Disabled by default. + - **Second Motor Speed**: The current second motor speed measured in rpm. Enabled by default. + - **Temperature**: The current temperature measured. Enabled by default. + - **Use Time**: The accumulative number of seconds the device has been in use. Disabled by default. - Switch entities @@ -353,18 +413,15 @@ Supported devices: | Volume | Set the volume | - Sensor entities - -| Sensor | Description | Enabled by default | -| ------------------------- | ------------------------------------------------------------- | ------------------ | -| Filter Lifetime Remaining | The remaining lifetime of the filter | True | -| Filter Use | Filter usage time in hours | True | -| Humidity | The current humidity measured | True | -| Illuminance | The current illuminance measured | True | -| Motor Speed | The current motor speed measured in rpm | True | -| PM2.5 | The current particulate matter 2.5 measured | True | -| Second Motor Speed | The current second motor speed measured in rpm | True | -| Temperature | The current temperature measured | True | -| Use Time | The accumulative number of seconds the device has been in use | False | + - **Filter Lifetime Remaining**: The remaining lifetime of the filter. Enabled by default. + - **Filter Use**: Filter usage time in hours. Enabled by default. + - **Humidity**: The current humidity measured. Enabled by default. + - **Illuminance**: The current illuminance measured. Enabled by default. + - **Motor Speed**: The current motor speed measured in rpm. Enabled by default. + - **PM2.5**: The current particulate matter 2.5 measured. Enabled by default. + - **Second Motor Speed**: The current second motor speed measured in rpm. Enabled by default. + - **Temperature**: The current temperature measured. Enabled by default. + - **Use Time**: The accumulative number of seconds the device has been in use. Disabled by default. - Switch entities @@ -396,17 +453,14 @@ Supported devices: | Favorite Level | Set the favorite level | - Sensor entities - -| Sensor | Description | Enabled by default | -| ------------------------- | --------------------------------------------------------------- | ------------------ | -| Filter Lifetime Remaining | The remaining lifetime of the filter | True | -| Filter Use | Filter usage time in hours | True | -| Humidity | The current humidity measured | True | -| Motor Speed | The current motor speed measured in rpm | True | -| PM2.5 | The current particulate matter 2.5 measured | True | -| Temperature | The current temperature measured | True | -| Illuminance | The current illuminance meassured on top of the device 0-200lux | True | -| Use Time | The accumulative number of seconds the device has been in use | False | + - **Filter Lifetime Remaining**: The remaining lifetime of the filter. Enabled by default. + - **Filter Use**: Filter usage time in hours. Enabled by default. + - **Humidity**: The current humidity measured. Enabled by default. + - **Motor Speed**: The current motor speed measured in rpm. Enabled by default. + - **PM2.5**: The current particulate matter 2.5 measured. Enabled by default. + - **Temperature**: The current temperature measured. Enabled by default. + - **Illuminance**: The current illuminance measured on top of the device (0-200 lux). Enabled by default. + - **Use Time**: The accumulative number of seconds the device has been in use. Disabled by default. - Switch entities @@ -432,16 +486,13 @@ Supported devices: | Favorite Level | Set the favorite level | - Sensor entities - -| Sensor | Description | Enabled by default | -| ------------------------- | ------------------------------------------------------------- | ------------------ | -| Filter Lifetime Remaining | The remaining lifetime of the filter | True | -| Filter Use | Filter usage time in hours | True | -| Humidity | The current humidity measured | True | -| Motor Speed | The current motor speed measured in rpm | True | -| PM2.5 | The current particulate matter 2.5 measured | True | -| Temperature | The current temperature measured | True | -| Use Time | The accumulative number of seconds the device has been in use | False | + - **Filter Lifetime Remaining**: The remaining lifetime of the filter. Enabled by default. + - **Filter Use**: Filter usage time in hours. Enabled by default. + - **Humidity**: The current humidity measured. Enabled by default. + - **Motor Speed**: The current motor speed measured in rpm. Enabled by default. + - **PM2.5**: The current particulate matter 2.5 measured. Enabled by default. + - **Temperature**: The current temperature measured. Enabled by default. + - **Use Time**: The accumulative number of seconds the device has been in use. Disabled by default. - Switch entities @@ -452,7 +503,7 @@ Supported devices: | Learn Mode | Turn on/off the learn mode | | LED | Turn on/off the LED | -### Air Purifier 3/3H (2019) (zhimi.airpurifier.ma4/zhimi.airpurifier.mb3) +### Air Purifier 3/3H (2019) (zhimi.airpurifier.ma4, zhimi.airpurifier.mb3) This model uses newer MiOT communication protocol. @@ -474,17 +525,14 @@ This model uses newer MiOT communication protocol. | LED Brightness | Controls the brightness of the LEDs (bright, dim, off) | - Sensor entities - -| Sensor | Description | Enabled by default | -| ------------------------- | ------------------------------------------------------------- | ------------------ | -| Filter Lifetime Remaining | The remaining lifetime of the filter | True | -| Filter Use | Filter usage time in hours | True | -| Humidity | The current humidity measured | True | -| Motor Speed | The current motor speed measured in rpm | True | -| PM2.5 | The current particulate matter 2.5 measured | True | -| Purify Volume | The volume of purified air in qubic meter | False | -| Temperature | The current temperature measured | True | -| Use Time | The accumulative number of seconds the device has been in use | False | + - **Filter Lifetime Remaining**: The remaining lifetime of the filter. Enabled by default. + - **Filter Use**: Filter usage time in hours. Enabled by default. + - **Humidity**: The current humidity measured. Enabled by default. + - **Motor Speed**: The current motor speed measured in rpm. Enabled by default. + - **PM2.5**: The current particulate matter 2.5 measured. Enabled by default. + - **Purify Volume**: The volume of purified air in cubic meter. Disabled by default. + - **Temperature**: The current temperature measured. Enabled by default. + - **Use Time**: The accumulative number of seconds the device has been in use. Disabled by default. - Switch entities @@ -493,7 +541,7 @@ This model uses newer MiOT communication protocol. | Buzzer | Turn on/off the buzzer | | Child Lock | Turn on/off the child lock | -### Air Purifier Pro H/Pro H EU (zhimi.airpurifier.va1/zhimi.airpurifier.vb2) +### Air Purifier Pro H, Pro H EU (zhimi.airpurifier.va1, zhimi.airpurifier.vb2) - Power (on, off) - Operation modes (Auto, Silent, Favorite, Fan) @@ -513,17 +561,14 @@ This model uses newer MiOT communication protocol. | LED Brightness | Controls the brightness of the LEDs (bright, dim, off) | - Sensor entities - -| Sensor | Description | Enabled by default | -| ------------------------- | ------------------------------------------------------------- | ------------------ | -| Filter Lifetime Remaining | The remaining lifetime of the filter | True | -| Filter Use | Filter usage time in hours | True | -| Humidity | The current humidity measured | True | -| Motor Speed | The current motor speed measured in rpm | True | -| PM2.5 | The current particulate matter 2.5 measured | True | -| Purify Volume | The volume of purified air in qubic meter | False | -| Temperature | The current temperature measured | True | -| Use Time | The accumulative number of seconds the device has been in use | False | + - **Filter Lifetime Remaining**: The remaining lifetime of the filter. Enabled by default. + - **Filter Use**: Filter usage time in hours. Enabled by default. + - **Humidity**: The current humidity measured. Enabled by default. + - **Motor Speed**: The current motor speed measured in rpm. Enabled by default. + - **PM2.5**: The current particulate matter 2.5 measured. Enabled by default. + - **Purify Volume**: The volume of purified air in cubic meter. Disabled by default. + - **Temperature**: The current temperature measured. Enabled by default. + - **Use Time**: The accumulative number of seconds the device has been in use. Disabled by default. - Switch entities @@ -532,7 +577,7 @@ This model uses newer MiOT communication protocol. | Buzzer | Turn on/off the buzzer | | Child Lock | Turn on/off the child lock | -### Air Purifier 3C (zhimi.airpurifier.mb4/zhimi.airp.mb4a) +### Air Purifier 3C (zhimi.airpurifier.mb4, zhimi.airp.mb4a) - Power (on, off) - Operation modes (Auto, Silent, Favorite) @@ -544,13 +589,10 @@ This model uses newer MiOT communication protocol. | LED Brightness | Set the LED brightness | - Sensor entities - -| Sensor | Description | Enabled by default | -| ------------------------- | ------------------------------------------- | ------------------ | -| Filter Lifetime Remaining | The remaining lifetime of the filter | True | -| Filter Use | Filter usage time in hours | True | -| Motor Speed | The current motor speed measured in rpm | True | -| PM2.5 | The current particulate matter 2.5 measured | True | + - **Filter Lifetime Remaining**: The remaining lifetime of the filter. Enabled by default. + - **Filter Use**: Filter usage time in hours. Enabled by default. + - **Motor Speed**: The current motor speed measured in rpm. Enabled by default. + - **PM2.5**: The current particulate matter 2.5 measured. Enabled by default. - Switch entities @@ -570,16 +612,13 @@ This model uses newer MiOT communication protocol. | Favorite Level | Set the favorite level | - Sensor entities - -| Sensor | Description | Enabled by default | -| ------------------------- | -------------------------------------------------------------- | ------------------ | -| Filter Lifetime Remaining | The remaining lifetime of the filter | True | -| Filter Use | Filter usage time in hours | True | -| Motor Speed | The current motor speed measured in rpm | True | -| PM2.5 | The current particulate matter 2.5 measured | True | -| Humidity | The current humidity measured | True | -| Temperature | The current temperature measured | True | -| TVOC | The current concentration of Total Organic Volatile Components | True | + - **Filter Lifetime Remaining**: The remaining lifetime of the filter. Enabled by default. + - **Filter Use**: Filter usage time in hours. Enabled by default. + - **Humidity**: The current humidity measured. Enabled by default. + - **Motor Speed**: The current motor speed measured in rpm. Enabled by default. + - **PM2.5**: The current particulate matter 2.5 measured. Enabled by default. + - **Temperature**: The current temperature measured. Enabled by default. + - **TVOC**: The current concentration of Total Organic Volatile Components. Enabled by default. - Switch entities @@ -604,18 +643,16 @@ This model uses newer MiOT communication protocol. - `extra_features` - `use_time` - `button_pressed` -- Sensor entities -| Sensor | Description | Enabled by default | -| ------------------------- | ------------------------------------------------------------- | ------------------ | -| PM2.5 | The current particulate matter 2.5 measured | True | -| Illuminance | The current illuminance measured | True | -| Filter Lifetime Remaining | The remaining lifetime of the filter | True | -| Filter Use | Filter usage time in hours | True | -| Motor Speed | The current motor speed measured in rpm | True | -| Second Motor Speed | The current second motor speed measured in rpm | True | -| Purify Volume | The volume of purified air in qubic meter | False | -| Use Time | The accumulative number of seconds the device has been in use | False | +- Sensor entities + - **Filter Lifetime Remaining**: The remaining lifetime of the filter. Enabled by default. + - **Filter Use**: Filter usage time in hours. Enabled by default. + - **Illuminance**: The current illuminance measured. Enabled by default. + - **Motor Speed**: The current motor speed measured in rpm. Enabled by default. + - **PM2.5**: The current particulate matter 2.5 measured. Enabled by default. + - **Purify Volume**: The volume of purified air in cubic meter. Disabled by default. + - **Second Motor Speed**: The current second motor speed measured in rpm. Enabled by default. + - **Use Time**: The accumulative number of seconds the device has been in use. Disabled by default. - Switch entities @@ -625,7 +662,7 @@ This model uses newer MiOT communication protocol. | Child Lock | Turn on/off the child lock | | LED | Turn on/off the LED | -### Air Purifier 4/4 PRO (zhimi.airp.mb5/zhimi.airp.vb4) +### Air Purifier 4/4 PRO (zhimi.airp.mb5, zhimi.airp.vb4) These models use newer MiOT communication protocol. @@ -646,18 +683,15 @@ These models use newer MiOT communication protocol. | LED Brightness | Controls the brightness of the Display (bright, dim, off) | - Sensor entities - -| Sensor | Description | Enabled by default | -| ------------------------- | ------------------------------------------------------ | ------------------ | -| Filter Lifetime Remaining | The remaining lifetime of the filter in % | True | -| Filter Time Left | The remaining lifetime of the filter in days | True | -| Filter Use | Filter usage time in hours | True | -| Humidity | The current humidity measured | True | -| Motor Speed | The current motor speed measured in rpm | True | -| PM2.5 | The current particulate matter 2.5 measured | True | -| PM10 | The current particulate matter 10 measured(4 PRO only) | True | -| Purify Volume | The volume of purified air in qubic meter | False | -| Temperature | The current temperature measured | True | + - **Filter Lifetime Remaining**: The remaining lifetime of the filter in %. Enabled by default. + - **Filter Time Left**: The remaining lifetime of the filter in days. Enabled by default. + - **Filter Use**: Filter usage time in hours. Enabled by default. + - **Humidity**: The current humidity measured. Enabled by default. + - **Motor Speed**: The current motor speed measured in rpm. Enabled by default. + - **PM2.5**: The current particulate matter 2.5 measured. Enabled by default. + - **PM10**: The current particulate matter 10 measured (4 PRO only). Enabled by default. + - **Purify Volume**: The volume of purified air in cubic meter. Disabled by default. + - **Temperature**: The current temperature measured. Enabled by default. - Switch entities @@ -711,17 +745,14 @@ These models use newer MiOT communication protocol. - Attributes (fan platform) - `use_time` - `extra_features` -- Sensor entities - -| Sensor | Description | Enabled by default | -| ------------------------- | ------------------------------------------------------------- | ------------------ | -| Carbon Dioxide | The current carbon dioxide measured in ppm | True | -| Filter Lifetime Remaining | The remaining lifetime of the filter | True | -| Filter Use | Filter usage time in hours | True | -| Humidity | The current humidity measured | True | -| PM2.5 | The current particulate matter 2.5 measured | True | -| Temperature | The current temperature measured | True | -| Use Time | The accumulative number of seconds the device has been in use | False | +- Sensor entities| + - **Carbon Dioxide**: The current carbon dioxide measured in ppm. Enabled by default. + - **Filter Lifetime Remaining**: The remaining lifetime of the filter. Enabled by default. + - **Filter Use**: Filter usage time in hours. Enabled by default. + - **Humidity**: The current humidity measured. Enabled by default. + - **PM2.5**: The current particulate matter 2.5 measured. Enabled by default. + - **Temperature**: The current temperature measured. Enabled by default. + - **Use Time**: The accumulative number of seconds the device has been in use. Disabled by default. - Select entities @@ -776,38 +807,26 @@ These models use newer MiOT communication protocol. - Power (on, off) - Operation modes (Auto, Sleep, Favorite) - Binary sensor entities - -| Binary sensor | Description | -| --------------------- | -------------------------------------- | -| Auxiliary Heat Status | Indicates if the heater is actually on | + - **Auxiliary Heat Status**: Indicates if the heater is actually on - Button entities - -| Button | Description | -| ------------------ | ---------------------------------------------------- | -| Reset Dust Filter | Resets filter lifetime and usage of the dust filter | -| Reset Upper Filter | Resets filter lifetime and usage of the upper filter | + - **Reset Dust Filter**: Resets filter lifetime and usage of the dust filter + - **Reset Upper Filter**: Resets filter lifetime and usage of the upper filter - Select entities - -| Select | Description | -| -------------------- | -------------------------------------------------------------- | -| Auxiliary Heat Level | Controls the level of the heater (Low, Medium, High) | -| Display Orientation | Controls the orientation of the display (Forward, Left, Right) | + - **Auxiliary Heat Level**: Controls the level of the heater (Low, Medium, High) + - **Display Orientation**: Controls the orientation of the display (Forward, Left, Right) - Sensor entities - -| Sensor | Description | -| ------------------------------------ | -------------------------------------------------- | -| Carbon Dioxide | The current carbon dioxide in ppm | -| Dust filter lifetime remaining | The remaining lifetime of the dust filter | -| Dust filter lifetime remaining days | The remaining lifetime of the dust filter in days | -| Upper filter lifetime remaining | The remaining lifetime of the upper filter | -| Upper filter lifetime remaining days | The remaining lifetime of the upper filter in days | -| PM2.5 | The current particulate matter 2.5 | -| Temperature | The current outside temperature | -| Control Speed | The current motor speed in rpm | -| Favorite Speed | The favorite motor speed in rpm | + - **Carbon Dioxide**: The current carbon dioxide in ppm + - **Dust filter lifetime remaining**: The remaining lifetime of the dust filter + - **Dust filter lifetime remaining days**: The remaining lifetime of the dust filter in days + - **Upper filter lifetime remaining**: The remaining lifetime of the upper filter + - **Upper filter lifetime remaining days**: The remaining lifetime of the upper filter in days + - **PM2.5**: The current particulate matter 2.5 + - **Temperature**: The current outside temperature + - **Control Speed**: The current motor speed in rpm + - **Favorite Speed**: The favorite motor speed in rpm - Switch entities @@ -846,13 +865,10 @@ These models use newer MiOT communication protocol. | LED Brightness | Controls the brightness of the LEDs (bright, dim, off) | - Sensor entities - -| Sensor | Description | Enabled by default | -| ----------- | ------------------------------------------------------------- | ------------------ | -| Humidity | The current humidity measured | True | -| Temperature | The current temperature measured | True | -| Use Time | The accumulative number of seconds the device has been in use | False | -| Water Level | The current water level percentage measured | True | + - **Humidity**: The current humidity measured. Enabled by default. + - **Temperature**: The current temperature measured. Enabled by default. + - **Use Time**: The accumulative number of seconds the device has been in use. Disabled by default. + - **Water Level**: The current water level percentage measured. Enabled by default. - Switch entities @@ -889,13 +905,10 @@ These models use newer MiOT communication protocol. | LED Brightness | Controls the brightness of the LEDs (bright, dim, off) | - Sensor entities - -| Sensor | Description | Enabled by default | -| ----------- | ------------------------------------------------------------- | ------------------ | -| Humidity | The current humidity measured | True | -| Temperature | The current temperature measured | True | -| Use Time | The accumulative number of seconds the device has been in use | False | -| Water Level | The current water level percentage measured | True | + - **Humidity**: The current humidity measured. Enabled by default. + - **Temperature**: The current temperature measured. Enabled by default. + - **Use Time**: The accumulative number of seconds the device has been in use. Disabled by default. + - **Water Level**: The current water level percentage measured. Enabled by default. - Switch entities @@ -939,14 +952,11 @@ These models use newer MiOT communication protocol. | LED Brightness | Controls the brightness of the LEDs (bright, dim, off) | - Sensor entities - -| Sensor | Description | Enabled by default | -| ------------ | ------------------------------------------------------------- | ------------------ | -| Actual Speed | The current motor speed measured in rpm | True | -| Humidity | The current humidity measured | True | -| Temperature | The current temperature measured | True | -| Use Time | The accumulative number of seconds the device has been in use | False | -| Water Level | The current water level percentage measured | True | + - **Actual Speed**: The current motor speed measured in rpm. Enabled by default. + - **Humidity**: The current humidity measured. Enabled by default. + - **Temperature**: The current temperature measured. Enabled by default. + - **Use Time**: The accumulative number of seconds the device has been in use. Disabled by default. + - **Water Level**: The current water level percentage measured. Enabled by default. - Switch entities @@ -989,13 +999,10 @@ Clean mode and Motor speed can only be set when the device is turned on. | LED Brightness | Controls the brightness of the LEDs (bright, dim, off) | - Sensor entities - -| Sensor | Description | Enabled by default | -| ----------- | ------------------------------------------------------------- | ------------------ | -| Humidity | The current humidity measured | True | -| Temperature | The current temperature measured | True | -| Use Time | The accumulative number of seconds the device has been in use | False | -| Water Level | The current water level percentage measured | True | + - **Humidity**: The current humidity measured. Enabled by default. + - **Temperature**: The current temperature measured. Enabled by default. + - **Use Time**: The accumulative number of seconds the device has been in use. Disabled by default. + - **Water Level**: The current water level percentage measured. Enabled by default. - Switch entities @@ -1005,7 +1012,7 @@ Clean mode and Motor speed can only be set when the device is turned on. | Child Lock | Turn on/off the child lock | | Dry Mode | Turn on/off the dry mode | -### Air Humidifier JSQ/JSQ1/MJJSQ (deerma.humidifier.jsq/deerma.humidifier.jsq1/deerma.humidifier.mjjsq) +### Air Humidifier JSQ/JSQ1/MJJSQ (deerma.humidifier.jsq, deerma.humidifier.jsq1, deerma.humidifier.mjjsq) - On, Off - Operation modes (low, medium, high, humidity) @@ -1027,13 +1034,10 @@ Clean mode and Motor speed can only be set when the device is turned on. | Water Tank | Indicates whether the water tank is connected or not | | Water Tank Empty | Indicates whether the water tank is empty or not | -- Sensor entities - -| Sensor | Description | Enabled by default | -| ----------- | ------------------------------------------------------------- | ------------------ | -| Humidity | The current humidity measured | True | -| Temperature | The current temperature measured | True | -| Use Time | The accumulative number of seconds the device has been in use | False | +- Sensor entities| + - **Humidity**: The current humidity measured. Enabled by default. + - **Temperature**: The current temperature measured. Enabled by default. + - **Use Time**: The accumulative number of seconds the device has been in use. Disabled by default. - Switch entities @@ -1139,7 +1143,7 @@ Clean mode and Motor speed can only be set when the device is turned on. | Child Lock | Turn on/off the Child Lock | | LED | Turn on/off the LED | -### Tower Fan/Standing Fan 2/Standing Fan Pro (dmaker.fan.p9/dmaker.fan.p10/dmaker.fan.p11) +### Tower Fan/Standing Fan 2/Standing Fan Pro (dmaker.fan.p9, dmaker.fan.p10, dmaker.fan.p11) - Power (on, off) - Operation modes (Normal, Nature) @@ -1486,11 +1490,17 @@ In addition to all of the actions provided by the `vacuum` {% term integration % Start the cleaning operation in the areas selected for the number of repeats indicated. -| Data attribute | Optional | Description | -| ---------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `entity_id` | no | Only act on a specific robot | -| `zone` | no | List of zones. Each zone is an array of four integer values. These values represent two sets of x- and y-axis coordinates that describe the beginning and ending points of a square or rectangle cleaning zone. For example, `[[23510,25311,25110,26361]]` creates a box that starts in one corner at the 23510, 25311 (x- and y-axis) coordinates and then is expanded diagonally to the 25110, 26361 coordinates to create a rectangular cleaning zone. | -| `repeats` | no | Number of cleaning repeats for each zone between 1 and 3. | +- **Data attribute**: `entity_id` + - **Description**: Only act on a specific robot. + - **Optional**: No. + +- **Data attribute**: `zone` + - **Description**: List of zones. Each zone is an array of four integer values. These values represent two sets of x- and y-axis coordinates that describe the beginning and ending points of a square or rectangle cleaning zone. For example, `[[23510,25311,25110,26361]]` creates a box that starts in one corner at the 23510, 25311 (x- and y-axis) coordinates and then is expanded diagonally to the 25110, 26361 coordinates to create a rectangular cleaning zone. + - **Optional**: No. + +- **Data attribute**: `repeats` + - **Description**: Number of cleaning repeats for each zone between 1 and 3. + - **Optional**: No. Example of `xiaomi_miio.vacuum_clean_zone` use: @@ -1565,10 +1575,12 @@ automation: Clean the specified segment/room. A room is identified by a number. Instructions on how to find the valid room numbers and determine what rooms they map to, read the section [Retrieving room numbers](#retrieving-room-numbers). -| Data attribute | Optional | Description | -| ---------------------- | -------- | ----------------------------------------------------- | -| `entity_id` | no | Only act on a specific robot | -| `segments` | no | List of segment numbers or one single segment number. | +- **Data attribute**: `entity_id` + - **Description**: Only act on a specific robot. + - **Optional**: No. +- **Data attribute**: `segments` + - **Description**: List of segment numbers or one single segment number. + - **Optional**: No. Example of `xiaomi_miio.vacuum_clean_segment` use: @@ -1624,11 +1636,15 @@ automation: Go the specified coordinates. -| Data attribute | Optional | Description | -| ---------------------- | -------- | ----------------------------------------------------------------------- | -| `entity_id` | no | Only act on a specific robot | -| `x_coord` | no | X-coordinate, integer value. The dock is located at x-coordinate 25500. | -| `y_coord` | no | Y-coordinate, integer value. The dock is located at y-coordinate 25500. | +- **Data attribute**: `entity_id` + - **Description**: Only act on a specific robot. + - **Optional**: No. +- **Data attribute**: `x_coord` + - **Description**: X-coordinate, integer value. The dock is located at x-coordinate 25500. + - **Optional**: No. +- **Data attribute**: `y_coord` + - **Description**: Y-coordinate, integer value. The dock is located at y-coordinate 25500. + - **Optional**: No. Note: If your vacuum is in motion and does not respond to the `xiaomi_miio.vacuum_goto` command, call the `vacuum.pause` or `vacuum.stop` action first. @@ -1648,27 +1664,23 @@ Exit the remote control mode of the robot. | ---------------------- | -------- | ---------------------------- | | `entity_id` | no | Only act on a specific robot | -### Action `xiaomi_miio.vacuum_remote_control_move` +### Action `xiaomi_miio.vacuuNm_remote_control_move` Remote control the robot. Please ensure you first set it in remote control mode with `remote_control_start`. -| Data attribute | Optional | Description | -| ---------------------- | -------- | --------------------------------------------------------- | -| `entity_id` | no | Only act on a specific robot | -| `velocity` | no | Speed: between -0.29 and 0.29 | -| `rotation` | no | Rotation: between -179 degrees and 179 degrees | -| `duration` | no | The number of milliseconds that the robot should move for | +- `entity_id`: Only act on a specific robot. Not optional. +- `velocity`: Speed: between -0.29 and 0.29. Not optional. +- `rotation`: Rotation: between -179 degrees and 179 degrees. Not optional. +- `duration`: The number of milliseconds that the robot should move for. Not optional. ### Action `xiaomi_miio.vacuum_remote_control_move_step` Enter remote control mode, make one move, stop, and exit remote control mode. -| Data attribute | Optional | Description | -| ---------------------- | -------- | --------------------------------------------------------- | -| `entity_id` | no | Only act on a specific robot | -| `velocity` | no | Speed: between -0.29 and 0.29 | -| `rotation` | no | Rotation: between -179 degrees and 179 degrees | -| `duration` | no | The number of milliseconds that the robot should move for | +- **entity_id**: Only act on a specific robot. Not optional. +- **velocity**: Speed: between -0.29 and 0.29. Not optional. +- **rotation**: Rotation: between -179 degrees and 179 degrees. Not optional. +- **duration**: The number of milliseconds that the robot should move for. Not optional. ### Buttons From 750875be33843382250f2710ea7d5a7d0d5db3c8 Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:52:05 +0200 Subject: [PATCH 34/67] Unifi: Convert table with long unbreakable term into list (#35135) --- source/_integrations/unifiprotect.markdown | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/source/_integrations/unifiprotect.markdown b/source/_integrations/unifiprotect.markdown index 84cbf0d32c5..84e987f2f07 100644 --- a/source/_integrations/unifiprotect.markdown +++ b/source/_integrations/unifiprotect.markdown @@ -260,10 +260,15 @@ The {% term integrations %} provides two proxy views to proxy media content from These URLs work great when trying to send notifications. Home Assistant will automatically sign the URLs and make them safe for external consumption if used in an {% term automation %} or [notify action](/integrations/notify/). -| View URL | Description | -| ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `/api/unifiprotect/thumbnail/{nvr_id}/{event_id}` | Proxies a JPEG event thumbnail from UniFi Protect. | -| `/api/unifiprotect/video/{nvr_id}/{camera_id}/{start}/{end}` | Proxies a MP4 video clip from UniFi Protect for a specific camera. Start and end must be in [ISO 8601 format](https://www.iso.org/iso-8601-date-and-time-format.html). | +Two URLs for proxy API endpoints: + +`/api/unifiprotect/thumbnail/{nvr_id}/{event_id}:` + +- Proxies a JPEG event thumbnail from UniFi Protect. + +`/api/unifiprotect/video/{nvr_id}/{camera_id}/{start}/{end}`: + +- Proxies a MP4 video clip from UniFi Protect for a specific camera. Start and end must be in [ISO 8601 format](https://www.iso.org/iso-8601-date-and-time-format.html). `nvr_id` can either be the UniFi Protect ID of your NVR or the config entry ID for your UniFi Protect {% term integrations %}. `camera_id` can either be the UniFi Protect ID of your camera or an entity ID of any {% term entity %} provided by the UniFi Protect {% term integrations %} that can be reversed to a UniFi Protect camera (i.e., an entity ID of a detected object sensor). From b36b1f0afeac218b54e50fbfbb861269007b7d11 Mon Sep 17 00:00:00 2001 From: Hmmbob <33529490+hmmbob@users.noreply.github.com> Date: Wed, 9 Oct 2024 14:19:37 +0200 Subject: [PATCH 35/67] Fix example (#35151) --- source/_dashboards/heading.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_dashboards/heading.markdown b/source/_dashboards/heading.markdown index 7ddeb9284e8..3c325d36a6f 100644 --- a/source/_dashboards/heading.markdown +++ b/source/_dashboards/heading.markdown @@ -23,7 +23,7 @@ heading: Living room icon: mdi:sofa badges: - type: entity - entity_id: sensor.living_room_sensor_temperature + entity: sensor.living_room_sensor_temperature color: red - type: entity entity: sensor.living_room_sensor_humidity From 9d3894847ff62f000b5eb76b4157482792189a85 Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:36:52 +0200 Subject: [PATCH 36/67] RFLink: merge switch into main docs (#35158) --- source/_integrations/rflink.markdown | 133 ++++++++++++++++++ source/_integrations/switch.rflink.markdown | 144 -------------------- source/_redirects | 1 + 3 files changed, 134 insertions(+), 144 deletions(-) delete mode 100644 source/_integrations/switch.rflink.markdown diff --git a/source/_integrations/rflink.markdown b/source/_integrations/rflink.markdown index 22f0842d610..18c90de5bd8 100644 --- a/source/_integrations/rflink.markdown +++ b/source/_integrations/rflink.markdown @@ -219,3 +219,136 @@ This will give you output looking like this: 17-03-07 20:12:05 DEBUG (MainThread) [rflink.protocol] got event: {'version': '1.1', 'firmware': 'RFLink Gateway', 'revision': '45', 'hardware': 'Nodo RadioFrequencyLink', 'id': 'rflink'} 17-03-07 20:12:05 DEBUG (MainThread) [homeassistant.components.rflink] event of type unknown: {'version': '1.1', 'firmware': 'RFLink Gateway', 'revision': '45', 'hardware': 'Nodo RadioFrequencyLink', 'id': 'rflink'} ``` + +## Switch + +The RFLink integration does not know the difference between a `switch`, a `binary_sensor`, and a `light`. Therefore all switchable devices are automatically added as `light` by default. + +RFLink binary_sensor/switch/light ID's are composed of: protocol, id, switch/channel. For example: `newkaku_0000c6c2_1`. + +Once the ID of a switch is known, it can be used to configure it as a switch type in HA and, for example, to add it to a different group or configure a nice name. + +Configuring devices as switch : + +```yaml +# Example configuration.yaml entry +switch: + - platform: rflink + devices: + newkaku_0000c6c2_1: {} + conrad_00785c_0a: {} +``` + +{% configuration %} +device_defaults: + description: The defaults for the devices. + required: false + type: map + keys: + fire_event: + description: Set default `fire_event` for RFLink switch devices (see below). + required: false + default: False + type: boolean + signal_repetitions: + description: Set default `signal_repetitions` for RFLink switch devices (see below). + required: false + default: 1 + type: integer +devices: + description: A list of switches. + required: false + type: list + keys: + rflink_ids: + description: RFLink ID of the device + required: true + type: map + keys: + name: + description: Name for the device. + required: false + default: RFLink ID + type: string + aliases: + description: Alternative RFLink ID's this device is known by. + required: false + type: [list, string] + group_aliases: + description: "`aliases` which only respond to group commands." + required: false + type: [list, string] + no_group_aliases: + description: "`aliases` which do not respond to group commands." + required: false + type: [list, string] + fire_event: + description: Fire a `button_pressed` event if this device is turned on or off. + required: false + default: false + type: boolean + signal_repetitions: + description: Set default `signal_repetitions` for RFLink switch devices (see below). + required: false + default: 1 + type: integer + group: + description: Allow switch to respond to group commands (ALLON/ALLOFF). + required: false + default: true + type: boolean + aliases: + description: Alternative RFLink ID's this device is known by. + required: false + type: [list, string] + group_aliases: + description: "`aliases` which only respond to group commands." + required: false + type: [list, string] + no_group_aliases: + description: "`aliases` which do not respond to group commands." + required: false + type: [list, string] +{% endconfiguration %} + +### Switch state + +Initially, the state of a switch is unknown. When the switch is turned on or off (via frontend or wireless remote) the state is known and will be shown in the frontend. + +Sometimes a switch is controlled by multiple wireless remotes, each remote has its own code programmed in the switch. To allow tracking of the state when switched via other remotes add the corresponding remote codes as aliases: + +```yaml +# Example configuration.yaml entry +switch: + - platform: rflink + devices: + newkaku_0000c6c2_1: + name: Ceiling fan + aliases: + - newkaku_000000001_2 + - kaku_000001_a +``` + +Any on/off command from any alias ID updates the current state of the switch. However, when sending a command through the frontend only the primary ID is used. + +### Device support + +See [device support](/integrations/rflink/#device-support) + +#### Additional configuration examples + +Multiple switches with signal repetitions and custom names + +```yaml +# Example configuration.yaml entry +switch: + - platform: rflink + device_defaults: + fire_event: true + signal_repetitions: 2 + devices: + newkaku_0000c6c2_1: + name: Ceiling fan + conrad_00785c_0a: + name: Motion sensor kitchen +``` diff --git a/source/_integrations/switch.rflink.markdown b/source/_integrations/switch.rflink.markdown deleted file mode 100644 index 3494cf7af1c..00000000000 --- a/source/_integrations/switch.rflink.markdown +++ /dev/null @@ -1,144 +0,0 @@ ---- -title: "RFLink Switch" -description: "Instructions on how to integrate RFLink switches into Home Assistant." -ha_category: - - Switch -ha_iot_class: Assumed State -ha_release: 0.38 -ha_domain: rflink ---- - -The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example, the [Nodo RFLink Gateway](https://www.nodo-shop.nl/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). - -First, you have to set up your [RFLink hub](/integrations/rflink/). - -The RFLink integration does not know the difference between a `switch`, a `binary_sensor` and a `light`. Therefore all switchable devices are automatically added as `light` by default. - -RFLink binary_sensor/switch/light ID's are composed of: protocol, id, switch/channel. For example: `newkaku_0000c6c2_1`. - -Once the ID of a switch is known, it can be used to configure it as a switch type in HA and, for example, to add it to a different group or configure a nice name. - -Configuring devices as switch : - -```yaml -# Example configuration.yaml entry -switch: - - platform: rflink - devices: - newkaku_0000c6c2_1: {} - conrad_00785c_0a: {} -``` - -{% configuration %} -device_defaults: - description: The defaults for the devices. - required: false - type: map - keys: - fire_event: - description: Set default `fire_event` for RFLink switch devices (see below). - required: false - default: False - type: boolean - signal_repetitions: - description: Set default `signal_repetitions` for RFLink switch devices (see below). - required: false - default: 1 - type: integer -devices: - description: A list of switches. - required: false - type: list - keys: - rflink_ids: - description: RFLink ID of the device - required: true - type: map - keys: - name: - description: Name for the device. - required: false - default: RFLink ID - type: string - aliases: - description: Alternative RFLink ID's this device is known by. - required: false - type: [list, string] - group_aliases: - description: "`aliases` which only respond to group commands." - required: false - type: [list, string] - no_group_aliases: - description: "`aliases` which do not respond to group commands." - required: false - type: [list, string] - fire_event: - description: Fire a `button_pressed` event if this device is turned on or off. - required: false - default: false - type: boolean - signal_repetitions: - description: Set default `signal_repetitions` for RFLink switch devices (see below). - required: false - default: 1 - type: integer - group: - description: Allow switch to respond to group commands (ALLON/ALLOFF). - required: false - default: true - type: boolean - aliases: - description: Alternative RFLink ID's this device is known by. - required: false - type: [list, string] - group_aliases: - description: "`aliases` which only respond to group commands." - required: false - type: [list, string] - no_group_aliases: - description: "`aliases` which do not respond to group commands." - required: false - type: [list, string] -{% endconfiguration %} - -## Switch state - -Initially, the state of a switch is unknown. When the switch is turned on or off (via frontend or wireless remote) the state is known and will be shown in the frontend. - -Sometimes a switch is controlled by multiple wireless remotes, each remote has its own code programmed in the switch. To allow tracking of the state when switched via other remotes add the corresponding remote codes as aliases: - -```yaml -# Example configuration.yaml entry -switch: - - platform: rflink - devices: - newkaku_0000c6c2_1: - name: Ceiling fan - aliases: - - newkaku_000000001_2 - - kaku_000001_a -``` - -Any on/off command from any alias ID updates the current state of the switch. However, when sending a command through the frontend only the primary ID is used. - -## Device support - -See [device support](/integrations/rflink/#device-support) - -### Additional configuration examples - -Multiple switches with signal repetitions and custom names - -```yaml -# Example configuration.yaml entry -switch: - - platform: rflink - device_defaults: - fire_event: true - signal_repetitions: 2 - devices: - newkaku_0000c6c2_1: - name: Ceiling fan - conrad_00785c_0a: - name: Motion sensor kitchen -``` diff --git a/source/_redirects b/source/_redirects index d072f999938..1853f53d68c 100644 --- a/source/_redirects +++ b/source/_redirects @@ -196,6 +196,7 @@ layout: null /integrations/switch.knx /integrations/knx#switch /integrations/switch.modbus /integrations/modbus/#configuring-switch-entities /integrations/switch.mysensors /integrations/mysensors#switch +/integrations/switch.rflink /integrations/rflink/#switch /integrations/switch.xiaomi_aqara/ /integrations/xiaomi_aqara/#switches /integrations/switch.pca /integrations/elv/ /integrations/switch.xiaomi_miio /integrations/xiaomi_miio/#xiaomi-smart-wifi-socket-and-smart-power-strip From 02cf7ff6b7d797204d281ea51201056db91e277a Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:54:08 +0200 Subject: [PATCH 37/67] RFLink: merge sensor into main docs (#35157) --- source/_integrations/rflink.markdown | 132 +++++++++++++++++- source/_integrations/sensor.rflink.markdown | 143 -------------------- source/_redirects | 1 + 3 files changed, 132 insertions(+), 144 deletions(-) delete mode 100644 source/_integrations/sensor.rflink.markdown diff --git a/source/_integrations/rflink.markdown b/source/_integrations/rflink.markdown index 18c90de5bd8..a3804995efe 100644 --- a/source/_integrations/rflink.markdown +++ b/source/_integrations/rflink.markdown @@ -220,6 +220,136 @@ This will give you output looking like this: 17-03-07 20:12:05 DEBUG (MainThread) [homeassistant.components.rflink] event of type unknown: {'version': '1.1', 'firmware': 'RFLink Gateway', 'revision': '45', 'hardware': 'Nodo RadioFrequencyLink', 'id': 'rflink'} ``` +## Sensors + +After configuring the RFLink hub, sensors will be automatically discovered and added. + +RFLink sensor ID's are composed of: protocol, id and type (optional). For example: `alectov1_0334_temp`. Some sensors emit multiple types of data. Each will be created as its own. + +Once the ID of a sensor is known, it can be used to configure the sensor in Home Assistant, for example to add it to a different group or configure a nice name. + +Configuring a device as a sensor: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: rflink + devices: + alectov1_0334_temp: {} +``` + +{% configuration %} +automatic_add: + description: Automatically add new/unconfigured devices to Home Assistant if detected. + required: false + default: true + type: boolean +devices: + description: A list of sensors. + required: false + type: list + keys: + rflink_ids: + description: RFLink ID of the device + required: true + type: map + keys: + name: + description: Name for the device. + required: false + default: RFLink ID + type: string + sensor_type: + description: Override automatically detected type of sensor. For list of [values](/integrations/sensor.rflink/#sensors-types) see below. + required: true + type: string + unit_of_measurement: + description: Override automatically detected unit of sensor. + required: false + type: string + aliases: + description: "Alternative RFLink ID's this device is known by." + required: false + type: [list, string] +{% endconfiguration %} + +### Sensor types + +Sensor type values: + +- average_windspeed +- barometric_pressure +- battery +- co2_air_quality +- command +- current_phase_1 +- current_phase_2 +- current_phase_3 +- distance +- doorbell_melody +- firmware +- hardware +- humidity +- humidity_status +- kilowatt +- light_intensity +- meter_value +- noise_level +- rain_rate +- revision +- temperature +- timestamp +- total_rain +- uv_intensity +- version +- voltage +- watt +- weather_forecast +- windchill +- winddirection +- windgusts +- windspeed +- windtemp + +### Hiding/ignoring sensors + +Sensors are added automatically when the RFLink gateway intercepts a wireless command in the ether. To prevent cluttering the frontend use any of these methods: + +- Disable automatically adding of unconfigured new sensors (set `automatic_add` to `false`). +- [Ignore devices on a platform level](/integrations/rflink/#ignoring-devices) + +### Device support + +See [device support](/integrations/rflink/#device-support) + +### Additional configuration examples + +Multiple sensors with `automatic_add` disabled and `aliases` + +```yaml +# Example configuration.yaml entry +sensor: + - platform: rflink + automatic_add: false + devices: + oregontemp_0d93_temp: + sensor_type: temperature + oregontemp_0d93_bat: + sensor_type: battery + tunex_c001_temp: + sensor_type: temperature + aliases: + - xiron_4001_temp + tunex_c001_hum: + sensor_type: humidity + aliases: + - xiron_4001_hum + tunex_c001_bat: + sensor_type: battery + aliases: + - xiron_4001_bat +``` + ## Switch The RFLink integration does not know the difference between a `switch`, a `binary_sensor`, and a `light`. Therefore all switchable devices are automatically added as `light` by default. @@ -351,4 +481,4 @@ switch: name: Ceiling fan conrad_00785c_0a: name: Motion sensor kitchen -``` +``` \ No newline at end of file diff --git a/source/_integrations/sensor.rflink.markdown b/source/_integrations/sensor.rflink.markdown deleted file mode 100644 index f35003e244d..00000000000 --- a/source/_integrations/sensor.rflink.markdown +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: "RFLink Sensor" -description: "Instructions on how to integrate RFLink sensors into Home Assistant." -ha_category: - - Sensor -ha_iot_class: Local Push -ha_release: 0.38 -ha_domain: rflink ---- - -The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). - -## Configuration - -First, you have to set up your [RFLink hub](/integrations/rflink/). - -After configuring the RFLink hub, sensors will be automatically discovered and added. - -RFLink sensor ID's are composed of: protocol, id and type (optional). For example: `alectov1_0334_temp`. Some sensors emit multiple types of data. Each will be created as its own. - -Once the ID of a sensor is known, it can be used to configure the sensor in Home Assistant, for example to add it to a different group or configure a nice name. - -Configuring a device as a sensor: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: rflink - devices: - alectov1_0334_temp: {} -``` - -{% configuration %} -automatic_add: - description: Automatically add new/unconfigured devices to Home Assistant if detected. - required: false - default: true - type: boolean -devices: - description: A list of sensors. - required: false - type: list - keys: - rflink_ids: - description: RFLink ID of the device - required: true - type: map - keys: - name: - description: Name for the device. - required: false - default: RFLink ID - type: string - sensor_type: - description: Override automatically detected type of sensor. For list of [values](/integrations/sensor.rflink/#sensors-types) see below. - required: true - type: string - unit_of_measurement: - description: Override automatically detected unit of sensor. - required: false - type: string - aliases: - description: "Alternative RFLink ID's this device is known by." - required: false - type: [list, string] -{% endconfiguration %} - -## Sensor types - -Sensor type values: - -- average_windspeed -- barometric_pressure -- battery -- co2_air_quality -- command -- current_phase_1 -- current_phase_2 -- current_phase_3 -- distance -- doorbell_melody -- firmware -- hardware -- humidity -- humidity_status -- kilowatt -- light_intensity -- meter_value -- noise_level -- rain_rate -- revision -- temperature -- timestamp -- total_rain -- uv_intensity -- version -- voltage -- watt -- weather_forecast -- windchill -- winddirection -- windgusts -- windspeed -- windtemp - -## Hiding/ignoring sensors - -Sensors are added automatically when the RFLink gateway intercepts a wireless command in the ether. To prevent cluttering the frontend use any of these methods: - -- Disable automatically adding of unconfigured new sensors (set `automatic_add` to `false`). -- [Ignore devices on a platform level](/integrations/rflink/#ignoring-devices) - -## Device support - -See [device support](/integrations/rflink/#device-support) - -## Additional configuration examples - -Multiple sensors with `automatic_add` disabled and `aliases` - -```yaml -# Example configuration.yaml entry -sensor: - - platform: rflink - automatic_add: false - devices: - oregontemp_0d93_temp: - sensor_type: temperature - oregontemp_0d93_bat: - sensor_type: battery - tunex_c001_temp: - sensor_type: temperature - aliases: - - xiron_4001_temp - tunex_c001_hum: - sensor_type: humidity - aliases: - - xiron_4001_hum - tunex_c001_bat: - sensor_type: battery - aliases: - - xiron_4001_bat -``` diff --git a/source/_redirects b/source/_redirects index 1853f53d68c..9875c38b75e 100644 --- a/source/_redirects +++ b/source/_redirects @@ -189,6 +189,7 @@ layout: null /integrations/sensor.knx /integrations/knx#sensor /integrations/sensor.modbus /integrations/modbus/#configuring-sensor-entities /integrations/sensor.mysensors /integrations/mysensors#sensor +/integrations/sensor.rflink /integrations/rflink/#sensor /integrations/sensor.websocket_api /integrations/websocket_api/#track-current-connections /integrations/sensor.xiaomi_miio /integrations/xiaomi_miio /integrations/sensor.xiaomi_aqara/ /integrations/xiaomi_aqara/#sensors From e80a7a887e82babfa53ef483bb2b0a2b546deb91 Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:07:09 +0200 Subject: [PATCH 38/67] RFLink: Merge light into main docs (#35155) --- source/_integrations/light.rflink.markdown | 171 --------------------- source/_integrations/rflink.markdown | 160 +++++++++++++++++++ source/_redirects | 1 + 3 files changed, 161 insertions(+), 171 deletions(-) delete mode 100644 source/_integrations/light.rflink.markdown diff --git a/source/_integrations/light.rflink.markdown b/source/_integrations/light.rflink.markdown deleted file mode 100644 index f73430a268b..00000000000 --- a/source/_integrations/light.rflink.markdown +++ /dev/null @@ -1,171 +0,0 @@ ---- -title: "RFLink Light" -description: "Instructions on how to integrate RFLink lights into Home Assistant." -ha_category: - - Light -ha_iot_class: Assumed State -ha_release: 0.38 -ha_domain: rflink ---- - -The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). - -First, you have to set up your [RFLink hub](/integrations/rflink/). - -After configuring the RFLink hub, lights will be automatically discovered and added. - -RFLink binary_sensor/switch/light ID's are composed of: protocol, id, switch/channel. For example: `newkaku_0000c6c2_1`. - -Once the ID of a light is known, it can be used to configure the light in HA, for example to add it to a different group or configure a nice name. - -Configuring devices as a light: - -```yaml -# Example configuration.yaml entry -light: - - platform: rflink - devices: - NewKaku_02a48800_0: {} - newkaku_0000c6c2_1: {} - Ansluta_ce30_0: {} - Maclean_0d82_01: {} -``` - -{% configuration %} -device_defaults: - description: The defaults for the devices. - required: false - type: map - keys: - fire_event: - description: Set default `fire_event` for RFLink switch devices (see below). - required: false - default: False - type: boolean - signal_repetitions: - description: Set default `signal_repetitions` for RFLink switch devices (see below). - required: false - default: 1 - type: integer -automatic_add: - description: Automatically add new/unconfigured devices to Home Assistant if detected. - required: false - default: true - type: boolean -devices: - description: A list of lights. - required: false - type: list - keys: - rflink_ids: - description: RFLink ID of the device - required: true - type: map - keys: - name: - description: Name for the device. - required: false - default: RFLink ID - type: string - type: - description: "Override automatically detected type of the light device, can be: switchable, dimmable, hybrid or toggle. See [Light Types](/integrations/light.rflink/#light-types) below." - required: false - default: switchable - type: string - aliases: - description: Alternative RFLink ID's this device is known by. - required: false - type: [list, string] - group_aliases: - description: "`aliases` which only respond to group commands." - required: false - type: [list, string] - no_group_aliases: - description: "`aliases` which do not respond to group commands." - required: false - type: [list, string] - fire_event: - description: Fire a `button_pressed` event if this device is turned on or off. - required: false - default: false - type: boolean - signal_repetitions: - description: Repeat every RFLink command this number of times. - required: false - default: 1 - type: integer - group: - description: Allow light to respond to group commands (ALLON/ALLOFF). - required: false - default: true - type: boolean -{% endconfiguration %} - -### Light state - -Initially the state of a light is unknown. When the light is turned on or off (via frontend or remote) the state is known and will be shown in the frontend. - -Sometimes a light is controlled by multiple remotes, each remote has its own code programmed in the light. To allow tracking of the state when switched via other remotes add the corresponding remote codes as aliases: - -```yaml -# Example configuration.yaml entry -light: - - platform: rflink - devices: - newkaku_0000c6c2_1: - aliases: - - newkaku_000000001_2 - - kaku_000001_a -``` - -Any on/off command from any alias ID updates the current state of the light. However when sending a command through the frontend only the primary ID is used. - -### Light types - -Light devices can come in different forms. Some only switch on and off, other support dimming. Dimmable devices might not always respond nicely to repeated `on` command as they turn into a pulsating state until `on` is pressed again (for example KlikAanKlikUit). The RFLink integration support three types of lights to make things work in every situation: - -- *Hybrid*: This type sends a `dim` followed by an an `on` command; and `off` commands. This will make dimmable devices turn on at the requested dim level and on/off devices on. One caveat is this type is not compatible with signal repetition as multiple `on` signals will cause dimmers to go into disco mode. -- *Switchable*: Device type that sends only `on` and `off` commands. It work for both on/off and dimmable type switches. However dimmables might have issues with signal repetition (see above). -- *Dimmable*: Sends only `dim` and `off` commands. This does not work on on/off type devices as they don't understand the `dim` command. For dimmers this does not cause issues with signal repetitions. -- *Toggle*: Device type that sends only `on` commands to turn on or off the device. Some switches like for example Livolo light switches use the same 'on' command to switch on and switch off the lights. If the light is on and 'on' gets sent, the light will turn off and if the light is off and 'on' gets sent, the light will turn on. If the device has an unknown state, it will assume it is off by default. - -By default new lights are assigned the `switchable` type. Protocol supporting dimming are assigned the `hybrid` type. Currently only `newkaku` protocol is detected as dimmable. Please refer to Device Support to get your dimmers supported. - -### Hiding/ignoring lights - -Lights are added automatically when the RFLink gateway intercepts a wireless command in the ether. To prevent cluttering the frontend use any of these methods: - -- Disable automatically adding of unconfigured new sensors (set `automatic_add` to `false`). -- Hide unwanted devices using [customizations](/getting-started/customizing-devices/) -- [Ignore devices on a platform level](/integrations/rflink/#ignoring-devices) - -### Device support - -See [device support](/integrations/rflink/#device-support) - -### Additional configuration examples - -Multiple lights with `signal_repetitions` and custom names - -```yaml -# Example configuration.yaml entry -light: - - platform: rflink - device_defaults: - fire_event: true - signal_repetitions: 2 - automatic_add: true - devices: - NewKaku_02a48800_0: - name: Kitchen - type: hybrid - newkaku_0000c6c2_1: - name: Living room - aliases: - - newkaku_000000001_2 - - kaku_000001_a - Ansluta_ce30_0: - name: Kitchen Under Counter Lights - Maclean_0d82_01: - name: Bedroom Lamp -``` diff --git a/source/_integrations/rflink.markdown b/source/_integrations/rflink.markdown index a3804995efe..14a9860f979 100644 --- a/source/_integrations/rflink.markdown +++ b/source/_integrations/rflink.markdown @@ -220,6 +220,166 @@ This will give you output looking like this: 17-03-07 20:12:05 DEBUG (MainThread) [homeassistant.components.rflink] event of type unknown: {'version': '1.1', 'firmware': 'RFLink Gateway', 'revision': '45', 'hardware': 'Nodo RadioFrequencyLink', 'id': 'rflink'} ``` +## Lights + +After configuring the RFLink hub, lights will be automatically discovered and added. + +RFLink binary_sensor/switch/light ID's are composed of: protocol, id, switch/channel. For example: `newkaku_0000c6c2_1`. + +Once the ID of a light is known, it can be used to configure the light in HA, for example to add it to a different group or configure a nice name. + +Configuring devices as a light: + +```yaml +# Example configuration.yaml entry +light: + - platform: rflink + devices: + NewKaku_02a48800_0: {} + newkaku_0000c6c2_1: {} + Ansluta_ce30_0: {} + Maclean_0d82_01: {} +``` + +{% configuration %} +device_defaults: + description: The defaults for the devices. + required: false + type: map + keys: + fire_event: + description: Set default `fire_event` for RFLink switch devices (see below). + required: false + default: False + type: boolean + signal_repetitions: + description: Set default `signal_repetitions` for RFLink switch devices (see below). + required: false + default: 1 + type: integer +automatic_add: + description: Automatically add new/unconfigured devices to Home Assistant if detected. + required: false + default: true + type: boolean +devices: + description: A list of lights. + required: false + type: list + keys: + rflink_ids: + description: RFLink ID of the device + required: true + type: map + keys: + name: + description: Name of the device. + required: false + default: RFLink ID + type: string + type: + description: "Override automatically detected type of the light device, can be: switchable, dimmable, hybrid or toggle. See [Light Types](/integrations/light.rflink/#light-types) below." + required: false + default: switchable + type: string + aliases: + description: Alternative RFLink ID's this device is known by. + required: false + type: [list, string] + group_aliases: + description: "`aliases` which only respond to group commands." + required: false + type: [list, string] + no_group_aliases: + description: "`aliases` which do not respond to group commands." + required: false + type: [list, string] + fire_event: + description: Fire a `button_pressed` event when this device is turned on or off. + required: false + default: false + type: boolean + signal_repetitions: + description: Repeat every RFLink command this number of times. + required: false + default: 1 + type: integer + group: + description: Allow light to respond to group commands (ALLON/ALLOFF). + required: false + default: true + type: boolean +{% endconfiguration %} + +### Light state + +Initially the state of a light is unknown. When the light is turned on or off (via frontend or remote) the state is known and will be shown in the frontend. + +Sometimes a light is controlled by multiple remotes, each remote has its own code programmed in the light. To allow tracking of the state when switched via other remotes add the corresponding remote codes as aliases: + +```yaml +# Example configuration.yaml entry +light: + - platform: rflink + devices: + newkaku_0000c6c2_1: + aliases: + - newkaku_000000001_2 + - kaku_000001_a +``` + +Any on/off command from any alias ID updates the current state of the light. However when sending a command through the frontend only the primary ID is used. + +### Light types + +Light devices can come in different forms. Some only switch on and off, other support dimming. Dimmable devices might not always respond nicely to repeated `on` command as they turn into a pulsating state until `on` is pressed again (for example KlikAanKlikUit). The RFLink integration support three types of lights to make things work in every situation: + +- *Hybrid*: This type sends a `dim` followed by an `on` command; and `off` commands. This will make dimmable devices turn on at the requested dim level and on/off devices on. One caveat is this type is not compatible with signal repetition as multiple `on` signals will cause dimmers to go into disco mode. +- *Switchable*: Device type that sends only `on` and `off` commands. It works for both on/off and dimmable type switches. However, dimmable devices might have issues with signal repetition (see above). +- *Dimmable*: Sends only `dim` and `off` commands. This does not work on on/off type devices as they don't understand the `dim` command. For dimmers this does not cause issues with signal repetitions. +- *Toggle*: Device type that sends only `on` commands to turn on or off the device. Some switches like for example Livolo light switches use the same 'on' command to switch on and switch off the lights. If the light is on and 'on' gets sent, the light will turn off and if the light is off and 'on' gets sent, the light will turn on. If the device has an unknown state, it will assume it is off by default. + +By default new lights are assigned the `switchable` type. Protocol supporting dimming are assigned the `hybrid` type. Currently only `newkaku` protocol is detected as dimmable. Please refer to Device Support to get your dimmers supported. + +### Hiding/ignoring lights + +Lights are added automatically when the RFLink gateway intercepts a wireless command in the ether. To prevent cluttering the frontend use any of these methods: + +- Disable automatically adding of unconfigured new sensors (set `automatic_add` to `false`). +- Hide unwanted devices using [customizations](/getting-started/customizing-devices/) +- [Ignore devices on a platform level](/integrations/rflink/#ignoring-devices) + +### Device support + +See [device support](/integrations/rflink/#device-support) + +### Additional configuration examples + +Multiple lights with `signal_repetitions` and custom names + +```yaml +# Example configuration.yaml entry +light: + - platform: rflink + device_defaults: + fire_event: true + signal_repetitions: 2 + automatic_add: true + devices: + NewKaku_02a48800_0: + name: Kitchen + type: hybrid + newkaku_0000c6c2_1: + name: Living room + aliases: + - newkaku_000000001_2 + - kaku_000001_a + Ansluta_ce30_0: + name: Kitchen Under Counter Lights + Maclean_0d82_01: + name: Bedroom Lamp +``` + ## Sensors After configuring the RFLink hub, sensors will be automatically discovered and added. diff --git a/source/_redirects b/source/_redirects index 9875c38b75e..5ddf9c1d3c3 100644 --- a/source/_redirects +++ b/source/_redirects @@ -175,6 +175,7 @@ layout: null /integrations/light.group /integrations/group /integrations/light.knx /integrations/knx#light /integrations/light.mysensors /integrations/mysensors#light +/integrations/light.rflink /integrations/rflink#light /integrations/light.xiaomi_miio /integrations/xiaomi_miio/#xiaomi-philips-light /integrations/light.xiaomi_aqara/ /integrations/xiaomi_aqara/#lights /integrations/lock.xiaomi_aqara/ /integrations/xiaomi_aqara/#locks From 3586da8a6a172541a7adaa54f218e664f72a4d6c Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:17:21 +0200 Subject: [PATCH 39/67] RFLink: move binary sensor into main docs (#35153) --- .../binary_sensor.rflink.markdown | 91 ------------------- source/_integrations/rflink.markdown | 80 +++++++++++++++- source/_redirects | 1 + 3 files changed, 80 insertions(+), 92 deletions(-) delete mode 100644 source/_integrations/binary_sensor.rflink.markdown diff --git a/source/_integrations/binary_sensor.rflink.markdown b/source/_integrations/binary_sensor.rflink.markdown deleted file mode 100644 index d7fe8e07747..00000000000 --- a/source/_integrations/binary_sensor.rflink.markdown +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: "RFLink binary sensor" -description: "Instructions on how to integrate RFLink binary sensors into Home Assistant." -ha_category: - - Binary sensor -ha_iot_class: Local Push -ha_release: 0.81 -ha_domain: rflink ---- - -The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). - -First, you have to set up your [RFLink hub](/integrations/rflink/). - -The RFLink integration does not know the difference between a `binary_sensor`, a `switch` and a `light`. Therefore all switchable devices are automatically added as `light` by default. - -RFLink binary_sensor/switch/light ID's are composed of: protocol, id, switch/channel. For example: `newkaku_0000c6c2_1`. - -Once the ID of a binary sensor is known, it can be used to configure it as a binary sensor type in Home Assistant, for example, to hide it or configure a nice name. - -Configuring a device as a binary sensor: - -```yaml -# Example configuration.yaml entry -binary_sensor: - - platform: rflink - devices: - pt2262_00174754_0: {} -``` - -{% configuration %} -devices: - description: A list of binary sensors. - required: false - type: list - keys: - rflink_ids: - description: RFLink ID of the device - required: true - type: map - keys: - name: - description: Name for the device. - required: false - default: RFLink ID - type: string - aliases: - description: Alternative RFLink ID's this device is known by. - required: false - type: list - device_class: - description: Sets the [class of the device](/integrations/binary_sensor/), changing the device state and icon that is displayed on the frontend. - required: false - type: string - off_delay: - description: For sensors that only sends 'On' state updates, this variable sets a delay after which the sensor state will be updated back to 'Off'. - required: false - type: integer - force_update: - description: Sends update events even if the value has not changed. Useful for sensors that only sends `On`. - required: false - type: boolean - default: false -{% endconfiguration %} - -### Sensor state - -Initially, the state of a binary sensor is unknown. When a sensor update is received, the state is known and will be shown in the frontend. - -### Device support - -See [device support](/integrations/rflink/#device-support) - -### Additional configuration examples - -Multiple sensors with custom name and device class and set off_delay - -```yaml -# Example configuration.yaml entry -binary_sensor: - - platform: rflink - devices: - pt2262_00174754_0: - name: PIR Entrance - device_class: motion - off_delay: 5 - pt2262_00174758_0: - name: PIR Living Room - device_class: motion - off_delay: 5 -``` diff --git a/source/_integrations/rflink.markdown b/source/_integrations/rflink.markdown index 14a9860f979..537053a5e63 100644 --- a/source/_integrations/rflink.markdown +++ b/source/_integrations/rflink.markdown @@ -178,7 +178,6 @@ cover: This configuration uses `0a0a0a` to control the inverted shutter (send UP to close and Down to open) and listen commands sent by `0f1f2f` remote control. - ### Device support Even though a lot of devices are supported by RFLink, not all have been tested/implemented. If you have a device supported by RFLink but not by this integration please consider testing and adding support yourself. @@ -219,6 +218,85 @@ This will give you output looking like this: 17-03-07 20:12:05 DEBUG (MainThread) [rflink.protocol] got event: {'version': '1.1', 'firmware': 'RFLink Gateway', 'revision': '45', 'hardware': 'Nodo RadioFrequencyLink', 'id': 'rflink'} 17-03-07 20:12:05 DEBUG (MainThread) [homeassistant.components.rflink] event of type unknown: {'version': '1.1', 'firmware': 'RFLink Gateway', 'revision': '45', 'hardware': 'Nodo RadioFrequencyLink', 'id': 'rflink'} ``` +## Binary sensor + +The RFLink integration does not know the difference between a `binary_sensor`, a `switch`, and a `light`. Therefore, all switchable devices are automatically added as `light` by default. + +RFLink binary_sensor/switch/light IDs are composed of: protocol, id, switch/channel. For example: `newkaku_0000c6c2_1`. + +Once the ID of a binary sensor is known, it can be used to configure it as a binary sensor type in Home Assistant, for example, to hide it or configure a nice name. + +Configuring a device as a binary sensor: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: rflink + devices: + pt2262_00174754_0: {} +``` + +{% configuration %} +devices: + description: A list of binary sensors. + required: false + type: list + keys: + rflink_ids: + description: RFLink ID of the device + required: true + type: map + keys: + name: + description: Name for the device. + required: false + default: RFLink ID + type: string + aliases: + description: Alternative RFLink IDs this device is known by. + required: false + type: list + device_class: + description: Sets the [class of the device](/integrations/binary_sensor/), changing the device state and icon that is displayed on the frontend. + required: false + type: string + off_delay: + description: For sensors that only sends 'On' state updates, this variable sets a delay after which the sensor state will be updated back to 'Off'. + required: false + type: integer + force_update: + description: Sends update events even if the value has not changed. Useful for sensors that only sends `On`. + required: false + type: boolean + default: false +{% endconfiguration %} + +### Sensor state + +Initially, the state of a binary sensor is unknown. When a sensor update is received, the state is known and will be shown in the frontend. + +### Device support + +See [device support](/integrations/rflink/#device-support) + +### Additional configuration examples + +Multiple sensors with custom name and device class and set off_delay + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: rflink + devices: + pt2262_00174754_0: + name: PIR Entrance + device_class: motion + off_delay: 5 + pt2262_00174758_0: + name: PIR Living Room + device_class: motion + off_delay: 5 +``` ## Lights diff --git a/source/_redirects b/source/_redirects index 5ddf9c1d3c3..3ddda810763 100644 --- a/source/_redirects +++ b/source/_redirects @@ -159,6 +159,7 @@ layout: null /integrations/binary_sensor.knx /integrations/knx#binary-sensor /integrations/binary_sensor.modbus /integrations/modbus/#configuring-binary-sensor-entities /integrations/binary_sensor.mysensors /integrations/mysensors#binary-sensor +/integrations/binary_sensor.rflink /integrations/rflink/#binary-sensor /integrations/binary_sensor.template /integrations/template/#binary_sensor /integrations/binary_sensor.xiaomi_aqara/ /integrations/xiaomi_aqara/#binary-sensor /integrations/climate.knx /integrations/knx#climate From 3d8df1ee70e5bbf018a00cfdc9bdd39c53088be8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 9 Oct 2024 11:27:16 -0400 Subject: [PATCH 40/67] Put S3 Box 3 first in tutorial (#35159) --- .../s3_box_voice_assistant.markdown | 74 +++++++++---------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/source/voice_control/s3_box_voice_assistant.markdown b/source/voice_control/s3_box_voice_assistant.markdown index 800756712c5..7f2078d46a2 100644 --- a/source/voice_control/s3_box_voice_assistant.markdown +++ b/source/voice_control/s3_box_voice_assistant.markdown @@ -41,43 +41,6 @@ Before you can use this device with Home Assistant, you need to install a bit of {% tabbed_block %} -- title: Using the ESP32-S3-BOX - content: | - - 1. Make sure this page is opened in a Chromium-based browser on a **desktop**. The software installation does not work with a tablet or phone. - - - If your browser does not support web serial, you will see a warning message indicating this instead of a button. - - - - - - **For advanced users**: The configuration files are available on GitHub: - - [ESP32-S3-BOX config on GitHub](https://github.com/esphome/wake-word-voice-assistants/blob/main/esp32-s3-box/esp32-s3-box.yaml) - - 2. To connect the ESP32-S3-BOX to your computer, follow these steps: - - In the pop-up window, view the available ports. - - Plug the USB-C cable into the ESP32-S3-BOX and connect it to your computer. - 3. Select **Install Voice Assistant**, then **Install**. - - Once the installation is complete, select **Next**. - - Add the ESP32-S3-BOX to your Wi-Fi: - - When prompted, select your network from the list and enter the credentials to your 2.4 GHz Wi-Fi network. - - Select **Connect**. - - The ESP32-S3-BOX now joined your network. Select **Add to Home Assistant**. - 4. This opens the **My** link to Home Assistant. - - If you have not used My Home Assistant before, you will need to configure it. If your Home Assistant URL is not accessible on `http://homeassistant.local:8123`, replace it with the URL to your Home Assistant instance. - - Open the link. - ![Open My link](/images/assist/esp32-atom-flash-06.png) - 5. Select **OK**. - ![Set up ESPHome](/images/assist/esp32-atom-flash-07.png) - 6. To add the newly discovered device, select the ESP32-S3-BOX from the list. - - Add your ESP32-S3-BOX to a room and select **Finish**. - 7. You should now see the **ESPHome** integration. - ![New ESPHome device discovered](/images/assist/m5stack-atom-echo-discovered-33.png) - 8. Select the **ESPHome** integration. Under **Devices**, you should see the **ESP32-S3-BOX** listed. - ![ESP32-S3-BOX-3 discovered](/images/assist/s32-s3-box-3-discovered.png) - - - Your ESP32-S3-BOX is connected to Home Assistant over Wi-Fi. You can now move it to any place in your home with a USB power supply. - - title: Using the ESP32-S3-BOX-3(B) content: | @@ -124,6 +87,43 @@ Before you can use this device with Home Assistant, you need to install a bit of - Your ESP32-S3-BOX is connected to Home Assistant over Wi-Fi. You can now move it to any place in your home with a USB power supply. +- title: Using the ESP32-S3-BOX + content: | + + 1. Make sure this page is opened in a Chromium-based browser on a **desktop**. The software installation does not work with a tablet or phone. + + - If your browser does not support web serial, you will see a warning message indicating this instead of a button. + + + + + - **For advanced users**: The configuration files are available on GitHub: + - [ESP32-S3-BOX config on GitHub](https://github.com/esphome/wake-word-voice-assistants/blob/main/esp32-s3-box/esp32-s3-box.yaml) + + 2. To connect the ESP32-S3-BOX to your computer, follow these steps: + - In the pop-up window, view the available ports. + - Plug the USB-C cable into the ESP32-S3-BOX and connect it to your computer. + 3. Select **Install Voice Assistant**, then **Install**. + - Once the installation is complete, select **Next**. + - Add the ESP32-S3-BOX to your Wi-Fi: + - When prompted, select your network from the list and enter the credentials to your 2.4 GHz Wi-Fi network. + - Select **Connect**. + - The ESP32-S3-BOX now joined your network. Select **Add to Home Assistant**. + 4. This opens the **My** link to Home Assistant. + - If you have not used My Home Assistant before, you will need to configure it. If your Home Assistant URL is not accessible on `http://homeassistant.local:8123`, replace it with the URL to your Home Assistant instance. + - Open the link. + ![Open My link](/images/assist/esp32-atom-flash-06.png) + 5. Select **OK**. + ![Set up ESPHome](/images/assist/esp32-atom-flash-07.png) + 6. To add the newly discovered device, select the ESP32-S3-BOX from the list. + - Add your ESP32-S3-BOX to a room and select **Finish**. + 7. You should now see the **ESPHome** integration. + ![New ESPHome device discovered](/images/assist/m5stack-atom-echo-discovered-33.png) + 8. Select the **ESPHome** integration. Under **Devices**, you should see the **ESP32-S3-BOX** listed. + ![ESP32-S3-BOX-3 discovered](/images/assist/s32-s3-box-3-discovered.png) + + - Your ESP32-S3-BOX is connected to Home Assistant over Wi-Fi. You can now move it to any place in your home with a USB power supply. + - title: Using the ESP32-S3-BOX-Lite content: | From 35ba62bc0022a360877ce78ce1de6a46f281d8a5 Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Wed, 9 Oct 2024 21:13:02 +0200 Subject: [PATCH 41/67] RFLink: merge cover into main docs (#35154) --- source/_integrations/cover.rflink.markdown | 234 --------------------- source/_integrations/rflink.markdown | 228 +++++++++++++++++++- source/_redirects | 1 + 3 files changed, 228 insertions(+), 235 deletions(-) delete mode 100644 source/_integrations/cover.rflink.markdown diff --git a/source/_integrations/cover.rflink.markdown b/source/_integrations/cover.rflink.markdown deleted file mode 100644 index 9655c399107..00000000000 --- a/source/_integrations/cover.rflink.markdown +++ /dev/null @@ -1,234 +0,0 @@ ---- -title: "RFLink Cover" -description: "Instructions on how to integrate RFLink Somfy RTS and KAKU ASUN-650 covers into Home Assistant." -ha_category: - - Cover -ha_iot_class: Assumed State -ha_release: 0.55 -ha_domain: rflink ---- - -The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). - -First, you have to set up your [RFLink hub](/integrations/rflink/). - -After configuring the RFLink hub, covers will be automatically discovered and added. Except the Somfy RTS devices. - -## Setting up a Somfy RTS device - -You have to add the Somfy RTS manually with the supplied RFlinkLoader (Windows only). - -Press the Learn button on the original Somfy remote enter the following code within 3 seconds. Your blinds will go up and down shortly: - -```text -10;RTS;02FFFF;0412;3;PAIR; -``` - -Your blinds will go up and down again. This means your RFLink is now paired with your RTS motor. -To check this enter the following code again and see if there is a record. - -```text -10;RTSSHOW; -``` - -```text -RTS Record: 0 Address: FFFFFF RC: FFFF -RTS Record: 1 Address: FFFFFF RC: FFFF -RTS Record: 2 Address: FFFFFF RC: FFFF -RTS Record: 3 Address: 02FFFF RC: 0018 -RTS Record: 4 Address: FFFFFF RC: FFFF -RTS Record: 5 Address: FFFFFF RC: FFFF -RTS Record: 6 Address: FFFFFF RC: FFFF -RTS Record: 7 Address: FFFFFF RC: FFFF -RTS Record: 8 Address: FFFFFF RC: FFFF -RTS Record: 9 Address: FFFFFF RC: FFFF -RTS Record: 10 Address: FFFFFF RC: FFFF -RTS Record: 11 Address: FFFFFF RC: FFFF -RTS Record: 12 Address: FFFFFF RC: FFFF -RTS Record: 13 Address: FFFFFF RC: FFFF -RTS Record: 14 Address: FFFFFF RC: FFFF -RTS Record: 15 Address: FFFFFF RC: FFFF -``` - -After configuring the RFLink Somfy RTS you have to add the cover to the {% term "`configuration.yaml`" %} file like any other RFlink device. - -RFLink cover ID's are composed of: protocol, id, and gateway. For example: `RTS_0100F2_0`. - -Once the ID of a cover is known, it can be used to configure the cover in Home Assistant, for example, to add it to a different group or set a nice name. - -Configuring devices as a cover: - -```yaml -# Example configuration.yaml entry -cover: - - platform: rflink - devices: - RTS_0100F2_0: {} - bofumotor_455201_0f: {} -``` - -{% configuration %} -device_defaults: - description: The defaults for the devices. - required: false - type: map - keys: - fire_event: - description: Set default `fire_event` for RFLink cover devices. - required: false - default: false - type: boolean - signal_repetitions: - description: Set default `signal_repetitions` for RFLink cover devices. - required: false - default: 1 - type: integer -devices: - description: A list of covers. - required: false - type: list - keys: - rflink_ids: - description: RFLink ID of the device - required: true - type: map - keys: - name: - description: Name for the device. - required: false - default: RFLink ID - type: string - aliases: - description: Alternative RFLink ID's this device is known by. - required: false - type: [list, string] - fire_event: - description: Fire a `button_pressed` event if this device is turned on or off. - required: false - default: False - type: boolean - signal_repetitions: - description: The number of times every RFLink command should repeat. - required: false - type: integer - group: - description: Allow light to respond to group commands (ALLON/ALLOFF). - required: false - default: true - type: boolean - group_aliases: - description: The `aliases` which only respond to group commands. - required: false - type: [list, string] - no_group_aliases: - description: The `aliases` which do not respond to group commands. - required: false - type: [list, string] - type: - description: The option to invert (`inverted`) on/off commands sent to the RFLink device or not (`standard`). - required: false - type: string -{% endconfiguration %} - -## Setting up a KAKU ASUN-650 device - -In RFLink, the ON and DOWN command are used to close the cover and the OFF and UP command are used to open the cover. The KAKU (COCO) ASUN-650 works the other way around, it uses the ON command to open the cover and the OFF command to close the cover. - -The RFLink cover device has a property named `type` that takes 2 values: - -- `standard`: Do not invert the on/off commands sent to the RFLink device. -- `inverted`: Invert the on/off commands sent to the RFLink device. - -The following configuration example shows how to use the `type` property: - -```yaml -# Example configuration.yaml entry that shows how to -# use the type property. -cover: - - platform: rflink - devices: - newkaku_xxxxxxxx_x: - name: kaku_inverted_by_type - type: inverted - newkaku_xxxxxxxx_y: - name: kaku_not_inverted_by_type - type: standard - newkaku_xxxxxxxx_z: - name: kaku_inverted_by_default - nonkaku_yyyyyyyy_x: - name: non_kaku_inverted_by_type - type: inverted - nonkaku_yyyyyyyy_y: - name: non_kaku_not_inverted_by_type - type: standard - nonkaku_yyyyyyyy_z: - name: non_kaku_not_inverted_by_default -``` - -The configuration above shows that the `type` property may be omitted. When the ID starts with `newkaku`, the integration will make sure that the on and off commands are inverted. When the ID does not start with `newkaku`, the on and off commands are not inverted. - -## Setting up a non-RTS cover - -Configure `automatic_add` for the light domain (yes, the light domain) -```yaml -# Example configuration.yaml entry -light: - - platform: rflink - automatic_add: true -``` - -When you press the remote buttons, a new light will show up in {% my entities title="the list of entities" %}. - -Also you can enable rflink logs and look for the device_id, for example: `dooya_v4_654321_0f` or `brelmotor_3b35c7_47`. - -```yaml -# Example configuration.yaml entry -logger: - logs: - rflink: debug - homeassistant.components.rflink: debug -``` - -Once the `device_id` is known, the light domain configuration can be removed and configure the device as a cover: - -```yaml -# Example configuration.yaml entry -cover: - - platform: rflink - devices: - dooya_v4_654321_0f: - name: "Room blinds" -``` - -## Device support - -See [device support](/integrations/rflink/#device-support). - -## Additional configuration examples - -Multiple covers with custom names and aliases - -```yaml -# Example configuration.yaml entry -cover: - - platform: rflink - devices: - RTS_0A8720_0: - name: enanos - aliases: - - rts_31e53f_01 - - rts_32e53f_01 - RTS_30E542_0: - name: comedor - aliases: - - rts_33e53f_01 - - rts_fa872e_01 - RTS_33E542_0: - name: dormitorio - aliases: - - rts_30e53f_01 - - rts_32e53f_01 - RTS_32E542_0: - name: habitaciones - fire_event: true -``` diff --git a/source/_integrations/rflink.markdown b/source/_integrations/rflink.markdown index 537053a5e63..9e0f3857e12 100644 --- a/source/_integrations/rflink.markdown +++ b/source/_integrations/rflink.markdown @@ -218,6 +218,7 @@ This will give you output looking like this: 17-03-07 20:12:05 DEBUG (MainThread) [rflink.protocol] got event: {'version': '1.1', 'firmware': 'RFLink Gateway', 'revision': '45', 'hardware': 'Nodo RadioFrequencyLink', 'id': 'rflink'} 17-03-07 20:12:05 DEBUG (MainThread) [homeassistant.components.rflink] event of type unknown: {'version': '1.1', 'firmware': 'RFLink Gateway', 'revision': '45', 'hardware': 'Nodo RadioFrequencyLink', 'id': 'rflink'} ``` + ## Binary sensor The RFLink integration does not know the difference between a `binary_sensor`, a `switch`, and a `light`. Therefore, all switchable devices are automatically added as `light` by default. @@ -298,6 +299,229 @@ binary_sensor: off_delay: 5 ``` +## Cover + +After configuring the RFLink hub, covers will be automatically discovered and added. Except the Somfy RTS devices. + +### Setting up a Somfy RTS device + +You have to add the Somfy RTS manually with the supplied RFlinkLoader (Windows only). + +Press the Learn button on the original Somfy remote enter the following code within 3 seconds. Your blinds will go up and down shortly: + +```text +10;RTS;02FFFF;0412;3;PAIR; +``` + +Your blinds will go up and down again. This means your RFLink is now paired with your RTS motor. +To check this enter the following code again and see if there is a record. + +```text +10;RTSSHOW; +``` + +```text +RTS Record: 0 Address: FFFFFF RC: FFFF +RTS Record: 1 Address: FFFFFF RC: FFFF +RTS Record: 2 Address: FFFFFF RC: FFFF +RTS Record: 3 Address: 02FFFF RC: 0018 +RTS Record: 4 Address: FFFFFF RC: FFFF +RTS Record: 5 Address: FFFFFF RC: FFFF +RTS Record: 6 Address: FFFFFF RC: FFFF +RTS Record: 7 Address: FFFFFF RC: FFFF +RTS Record: 8 Address: FFFFFF RC: FFFF +RTS Record: 9 Address: FFFFFF RC: FFFF +RTS Record: 10 Address: FFFFFF RC: FFFF +RTS Record: 11 Address: FFFFFF RC: FFFF +RTS Record: 12 Address: FFFFFF RC: FFFF +RTS Record: 13 Address: FFFFFF RC: FFFF +RTS Record: 14 Address: FFFFFF RC: FFFF +RTS Record: 15 Address: FFFFFF RC: FFFF +``` + +After configuring the RFLink Somfy RTS you have to add the cover to the {% term "`configuration.yaml`" %} file like any other RFlink device. + +RFLink cover ID's are composed of: protocol, id, and gateway. For example: `RTS_0100F2_0`. + +Once the ID of a cover is known, it can be used to configure the cover in Home Assistant, for example, to add it to a different group or set a nice name. + +Configuring devices as a cover: + +```yaml +# Example configuration.yaml entry +cover: + - platform: rflink + devices: + RTS_0100F2_0: {} + bofumotor_455201_0f: {} +``` + +{% configuration %} +device_defaults: + description: The defaults for the devices. + required: false + type: map + keys: + fire_event: + description: Set default `fire_event` for RFLink cover devices. + required: false + default: false + type: boolean + signal_repetitions: + description: Set default `signal_repetitions` for RFLink cover devices. + required: false + default: 1 + type: integer +devices: + description: A list of covers. + required: false + type: list + keys: + rflink_ids: + description: RFLink ID of the device + required: true + type: map + keys: + name: + description: Name for the device. + required: false + default: RFLink ID + type: string + aliases: + description: Alternative RFLink ID's this device is known by. + required: false + type: [list, string] + fire_event: + description: Fire a `button_pressed` event if this device is turned on or off. + required: false + default: False + type: boolean + signal_repetitions: + description: The number of times every RFLink command should repeat. + required: false + type: integer + group: + description: Allow light to respond to group commands (ALLON/ALLOFF). + required: false + default: true + type: boolean + group_aliases: + description: The `aliases` which only respond to group commands. + required: false + type: [list, string] + no_group_aliases: + description: The `aliases` which do not respond to group commands. + required: false + type: [list, string] + type: + description: The option to invert (`inverted`) on/off commands sent to the RFLink device or not (`standard`). + required: false + type: string +{% endconfiguration %} + +### Setting up a KAKU ASUN-650 device + +In RFLink, the ON and DOWN command are used to close the cover and the OFF and UP command are used to open the cover. The KAKU (COCO) ASUN-650 works the other way around, it uses the ON command to open the cover and the OFF command to close the cover. + +The RFLink cover device has a property named `type` that takes 2 values: + +- `standard`: Do not invert the on/off commands sent to the RFLink device. +- `inverted`: Invert the on/off commands sent to the RFLink device. + +The following configuration example shows how to use the `type` property: + +```yaml +# Example configuration.yaml entry that shows how to +# use the type property. +cover: + - platform: rflink + devices: + newkaku_xxxxxxxx_x: + name: kaku_inverted_by_type + type: inverted + newkaku_xxxxxxxx_y: + name: kaku_not_inverted_by_type + type: standard + newkaku_xxxxxxxx_z: + name: kaku_inverted_by_default + nonkaku_yyyyyyyy_x: + name: non_kaku_inverted_by_type + type: inverted + nonkaku_yyyyyyyy_y: + name: non_kaku_not_inverted_by_type + type: standard + nonkaku_yyyyyyyy_z: + name: non_kaku_not_inverted_by_default +``` + +The configuration above shows that the `type` property may be omitted. When the ID starts with `newkaku`, the integration will make sure that the on and off commands are inverted. When the ID does not start with `newkaku`, the on and off commands are not inverted. + +### Setting up a non-RTS cover + +Configure `automatic_add` for the light domain (yes, the light domain) +```yaml +# Example configuration.yaml entry +light: + - platform: rflink + automatic_add: true +``` + +When you press the remote buttons, a new light will show up in {% my entities title="the list of entities" %}. + +Also you can enable rflink logs and look for the device_id, for example: `dooya_v4_654321_0f` or `brelmotor_3b35c7_47`. + +```yaml +# Example configuration.yaml entry +logger: + logs: + rflink: debug + homeassistant.components.rflink: debug +``` + +Once the `device_id` is known, the light domain configuration can be removed and configure the device as a cover: + +```yaml +# Example configuration.yaml entry +cover: + - platform: rflink + devices: + dooya_v4_654321_0f: + name: "Room blinds" +``` + +### Device support + +See [device support](/integrations/rflink/#device-support). + +## Additional configuration examples + +Multiple covers with custom names and aliases + +```yaml +# Example configuration.yaml entry +cover: + - platform: rflink + devices: + RTS_0A8720_0: + name: enanos + aliases: + - rts_31e53f_01 + - rts_32e53f_01 + RTS_30E542_0: + name: comedor + aliases: + - rts_33e53f_01 + - rts_fa872e_01 + RTS_33E542_0: + name: dormitorio + aliases: + - rts_30e53f_01 + - rts_32e53f_01 + RTS_32E542_0: + name: habitaciones + fire_event: true +``` + ## Lights After configuring the RFLink hub, lights will be automatically discovered and added. @@ -719,4 +943,6 @@ switch: name: Ceiling fan conrad_00785c_0a: name: Motion sensor kitchen -``` \ No newline at end of file +``` + + diff --git a/source/_redirects b/source/_redirects index 3ddda810763..b982a447ed6 100644 --- a/source/_redirects +++ b/source/_redirects @@ -169,6 +169,7 @@ layout: null /integrations/cover.group /integrations/group /integrations/cover.knx /integrations/knx#cover /integrations/cover.mysensors /integrations/mysensors#cover +/integrations/cover.rflink /integrations/rflink/#cover /integrations/cover.xiaomi_aqara/ /integrations/xiaomi_aqara/#covers /integrations/device_tracker.mysensors /integrations/mysensors#device-tracker /integrations/fan.group /integrations/group From de63504ea6cbf4daa636a93e808c998ac074958b Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Thu, 10 Oct 2024 06:19:54 +0200 Subject: [PATCH 42/67] Xiaomi: merge camera and router pages (#35147) * Xiaomi: merge camera and router pages * Add redirect --- .../device_tracker.xiaomi.markdown | 47 ----------- source/_integrations/xiaomi.markdown | 80 +++++++++++++++---- source/_redirects | 1 + 3 files changed, 67 insertions(+), 61 deletions(-) delete mode 100644 source/_integrations/device_tracker.xiaomi.markdown diff --git a/source/_integrations/device_tracker.xiaomi.markdown b/source/_integrations/device_tracker.xiaomi.markdown deleted file mode 100644 index f37f831aa00..00000000000 --- a/source/_integrations/device_tracker.xiaomi.markdown +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: "Xiaomi router" -description: "Instructions on how to integrate Xiaomi routers into Home Assistant." -ha_category: - - Presence detection -ha_release: 0.36 -ha_domain: xiaomi ---- - -The `xiaomi` platform offers presence detection by looking at connected devices to a [Xiaomi](http://miwifi.com) router. - -## Setup - -To use an Xiaomi router in your installation, add the following to your {% term "`configuration.yaml`" %} file: - -```yaml -# Example configuration.yaml entry -device_tracker: - - platform: xiaomi - host: YOUR_ROUTER_IP - password: YOUR_ADMIN_PASSWORD -``` - -{% configuration %} -host: - description: "The IP address of your router, e.g., `192.168.0.1`." - required: true - type: string -username: - description: The admin username. - required: false - default: admin - type: string -password: - description: The password for the admin account. - required: true - type: string -{% endconfiguration %} - -See the [device tracker integration page](/integrations/device_tracker/) for instructions how to configure the people to be tracked. - -### Compatibility test - -To ensure that your router is compatible, navigate to `http://YOUR_ROUTER_IP/api/misystem/devicelist`. -You should see a listing of the device currently connected to your router. - -However, some users report that even when the previous URL does not work, they have been able to integrate their Mi Router 3 in Home Assistant. E.g., some users with the Mi Router 3 and firmware version 2.10.46 Stable have integrated their routers successfully and an alternative URL to test integration with is `http://YOUR_ROUTER_IP/cgi-bin/luci/api/misystem/devicelist`. Navigating to this page should show the `{"code":401,"msg":"Invalid token"}` message. diff --git a/source/_integrations/xiaomi.markdown b/source/_integrations/xiaomi.markdown index bdaa7eb0e54..a015dfffa38 100644 --- a/source/_integrations/xiaomi.markdown +++ b/source/_integrations/xiaomi.markdown @@ -1,8 +1,9 @@ --- title: Xiaomi -description: Instructions on how to integrate a video feed (via FFmpeg) as a camera within Home Assistant. +description: Instructions on how to integrate a video feed (via FFmpeg) as a camera as well as a router within Home Assistant. ha_category: - Camera + - Presence detection ha_release: 0.72 ha_iot_class: Local Polling ha_domain: xiaomi @@ -10,22 +11,31 @@ ha_platforms: - camera - device_tracker ha_integration_type: integration +related: + - docs: /docs/configuration/ + title: configuration.yaml file --- -The `Xiaomi` camera platform allows you to utilize Xiaomi Cameras within Home Assistant. +This section shows you how to integrate a [Xiaomi router](http://miwifi.com) or a Xiaomi camera into Home Assistant. -To successfully implement this platform, the Home Assistant host should be capable of multiple simultaneous reads. For every concurrent Home Assistant user, a connection will be made to the camera every 10 seconds. This should normally not be a problem. +## Camera -## Preparing the device +The **Xiaomi** camera integration allows you to utilize Xiaomi cameras within Home Assistant. -In order to integrate the camera with Home Assistant, it is necessary to install a custom firmware on the device. Instructions for doing so can be found for each models. +### Prerequisites -- [Yi 720p](https://github.com/fritz-smh/yi-hack) -- [Yi Home 17CN / 27US / 47US / 1080p Home / Dome / 1080p Dome](https://github.com/shadow-1/yi-hack-v3) -- [Recent Yi 1080p Home / 1080p Dome](https://github.com/roleoroleo/yi-hack-MStar) -- [Xiaofang 1080p Camera](https://github.com/samtap/fang-hacks) +- To successfully implement this integration, the Home Assistant host should be capable of multiple simultaneous reads. + - For every concurrent Home Assistant user, a connection will be made to the camera every 10 seconds. This should normally not be a problem. -Once installed, please ensure that you have enabled FTP. +#### Preparing the device + +1. In order to integrate the camera with Home Assistant, it is necessary to install a custom firmware on the device. + - To install the firmware, follow the steps in the model-specific documentation: + - [Yi 720p](https://github.com/fritz-smh/yi-hack) + - [Yi Home 17CN / 27US / 47US / 1080p Home / Dome / 1080p Dome](https://github.com/shadow-1/yi-hack-v3) + - [Recent Yi 1080p Home / 1080p Dome](https://github.com/roleoroleo/yi-hack-MStar) + - [Xiaofang 1080p Camera](https://github.com/samtap/fang-hacks) +2. Once installed, make sure you have enabled FTP. {% warning %} Currently, version 0.1.4-beta2 of the custom firmware is the highest supported. Firmwares higher than this version use [Pure-FTPd](https://www.pureftpd.org/project/pure-ftpd), which has a bug that prevents FFmpeg from correctly rendering video files. @@ -43,9 +53,9 @@ The live stream writing by the camera is not a supported format when Home Assist If you enabled RTSP server, you can connect to your camera via other Home Assistant camera platforms. However, this RTSP server disables the ability to use the supremely-useful Mi Home app. In order to maintain both Home Assistant compatibility _and_ the native app, this platform retrieves videos via FTP. {% endtip %} -## Configuring the platform +### Configuration -To enable the platform, add the following lines to your`configuration.yaml` file: +To enable the camera, add the following lines to your {% term "`configuration.yaml`" %} file: ```yaml camera: @@ -93,7 +103,7 @@ ffmpeg_arguments: The default for `path:` will not work with all cameras. It may be needed that you add that key with the exact path for your device. {% endimportant %} -## Image quality +### Image quality Any option supported by [`ffmpeg` camera](/integrations/camera.ffmpeg/) can be utilized via the `ffmpeg_arguments` configuration parameter. @@ -109,7 +119,8 @@ camera: path: /home/camera/feed ffmpeg_arguments: "-vf scale=800:450" ``` -## Hostname template + +### Hostname template The hostname/IP address can be provided either a value or from the existing {% term entity %} attributes. @@ -122,3 +133,44 @@ camera: password: 1234 path: /tmp/sd/record ``` + +## Router + +The **Xiaomi** router integration offers presence detection by looking at connected devices to a [Xiaomi](http://miwifi.com) router. + +### Configuration + +To use an Xiaomi router in your installation, add the following to your {% term "`configuration.yaml`" %} file: + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: xiaomi + host: YOUR_ROUTER_IP + password: YOUR_ADMIN_PASSWORD +``` + +{% configuration %} +host: + description: "The IP address of your router, e.g., `192.168.0.1`." + required: true + type: string +username: + description: The admin username. + required: false + default: admin + type: string +password: + description: The password for the admin account. + required: true + type: string +{% endconfiguration %} + +See the [device tracker integration page](/integrations/device_tracker/) for instructions how to configure the people to be tracked. + +### Compatibility test + +To ensure that your router is compatible, navigate to `http://YOUR_ROUTER_IP/api/misystem/devicelist`. +You should see a listing of the device currently connected to your router. + +However, some users report that even when the previous URL does not work, they have been able to integrate their Mi Router 3 in Home Assistant. E.g., some users with the Mi Router 3 and firmware version 2.10.46 Stable have integrated their routers successfully and an alternative URL to test integration with is `http://YOUR_ROUTER_IP/cgi-bin/luci/api/misystem/devicelist`. Navigating to this page should show the `{"code":401,"msg":"Invalid token"}` message. diff --git a/source/_redirects b/source/_redirects index b982a447ed6..4c0cd5e3b16 100644 --- a/source/_redirects +++ b/source/_redirects @@ -172,6 +172,7 @@ layout: null /integrations/cover.rflink /integrations/rflink/#cover /integrations/cover.xiaomi_aqara/ /integrations/xiaomi_aqara/#covers /integrations/device_tracker.mysensors /integrations/mysensors#device-tracker +/integrations/device_tracker.xiaomi/ /integrations/xiaomi/#router /integrations/fan.group /integrations/group /integrations/fan.xiaomi_miio /integrations/xiaomi_miio/#xiaomi-air-purifier-air-humidifier-and-standing-fan /integrations/light.group /integrations/group From f9b7ac9c3ea3f1b7898940fafc3b39989e1c0f15 Mon Sep 17 00:00:00 2001 From: Ian Date: Wed, 9 Oct 2024 22:01:17 -0700 Subject: [PATCH 43/67] Correct entity-filter.markdown (#35163) The entity filter card uses the common checkConditionsMet() function to evaluate conditions. That function only returns true if every condition is met, not if any one condition is met: https://github.com/home-assistant/frontend/blob/23a33b10a1027dc58df50472eb23d277b1b508fb/src/panels/lovelace/common/validate-condition.ts#L169 --- source/_dashboards/entity-filter.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_dashboards/entity-filter.markdown b/source/_dashboards/entity-filter.markdown index 64b57545829..cbee335116c 100644 --- a/source/_dashboards/entity-filter.markdown +++ b/source/_dashboards/entity-filter.markdown @@ -95,7 +95,7 @@ state_filter: ## Conditions options -You can specify multiple `conditions`, in which case the entity will be displayed if it matches any condition. +You can specify multiple `conditions`, in which case the entity will be displayed if it matches every condition. ### State From 6b0215f180d3b75841141b3c81445c4251c34e18 Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:13:43 +0200 Subject: [PATCH 44/67] Xiaomi: fix typos (#35164) --- source/_integrations/rflink.markdown | 43 ++++++++++++++-------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/source/_integrations/rflink.markdown b/source/_integrations/rflink.markdown index 9e0f3857e12..f84dee5ad9e 100644 --- a/source/_integrations/rflink.markdown +++ b/source/_integrations/rflink.markdown @@ -22,12 +22,12 @@ related: The `rflink` {% term integration %} supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example, the [Nodo RFLink Gateway](https://www.nodo-shop.nl/21-rflink-). RFLink Gateway is an Arduino Mega firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). -The 433 MHz spectrum is used by many manufacturers mostly using their own protocol/standard and includes devices like: light switches, blinds, weather stations, alarms and various other sensors. +The 433 MHz spectrum is used by many manufacturers. Mostly using their own protocol/standard, they use this spectrum to communicate with devices such as light switches, blinds, weather stations, alarms, and various other sensors. -RFLink Gateway supports a number of RF frequencies, using a wide range of low-cost hardware. [Their website](https://www.rflink.nl) provides details for various RF transmitters, receivers and transceiver modules for 433MHz, 868MHz and 2.4 GHz. +The RFLink Gateway supports a number of RF frequencies, using a wide range of low-cost hardware. [Their website](https://www.rflink.nl) provides details for various RF transmitters, receivers, and transceiver modules for 433MHz, 868MHz, and 2.4 GHz. {% note %} -Versions later than R44 add support for IKEA Ansluta, Philips Living Colors Gen1 and MySensors devices. +Versions later than R44 add support for IKEA Ansluta, Philips Living Colors Gen1, and MySensors devices. {% endnote %} A complete list of devices supported by RFLink can be found [here](https://www.rflink.nl/devlist.php). @@ -62,7 +62,7 @@ wait_for_ack: default: true type: boolean ignore_devices: - description: List of device id's to ignore. Supports wildcards (`*`, `?`). + description: List of device IDs to ignore. Supports wildcards (`*`, `?`). required: false type: [list, string] reconnect_interval: @@ -94,6 +94,7 @@ rflink: TCP mode allows you to connect to an RFLink device over a TCP/IP network. This is useful if placing the RFLink device next to the HA server is not optimal or desired (eg: bad reception). The following command can be used to expose the USB/serial interface over TCP on a different host (Linux). The arguments are separated by spaces, further info on all arguments can be found for example [on the Debian manpages](https://manpages.debian.org/stretch/socat/socat.1.en.html). + - `/dev/ttyACM0,b57600,rawer` specifies the device location, a `b57600` 57600 baud rate, and `rawer` causes socat to ignore control sequences sent via the port (for example, it makes socat pass all information 'rawest form', rather than picking up control characters such as control-C which would close socat). - `TCP-LISTEN:1234,reuseaddr,range=192.168.0.0/16` listens on IPV4 on the specified port (1234, change as suits your needs), the details behind the `reuseaddr` option [are fairly complex](https://stackoverflow.com/a/3233022/1049701) but it allows faster reconnects from the client (Home Assistant) in case of connection drops. An important security option is `range=192.168.0.0/16`, which specifies that socat should only accept connections from a certain range of IP addresses - the /16 subnet mask specifies a range from 192.168.0.0 to 192.168.255.255. Change this as required for your LAN network. @@ -138,7 +139,7 @@ sensor: [RFLink Switches](/integrations/switch.rflink/) and [RFLink Binary Sensors](/integrations/binary_sensor.rflink/) cannot be added automatically. -The RFLink integration does not know the difference between a binary sensor, a switch and a light. Therefore all switchable devices are automatically added as light by default. However, once the ID of a switch is known, it can be used to configure it as a switch or a binary sensor type in Home Assistant, for example, to add it to a different group or configure a nice name. +The RFLink integration does not know the difference between a binary sensor, a switch and a light. Therefore, all switchable devices are automatically added as light by default. However, once the ID of a switch is known, it can be used to configure it as a switch or a binary sensor type in Home Assistant, for example, to add it to a different group or configure a nice name. ### Ignoring devices @@ -190,7 +191,7 @@ If you find a device is recognized differently, with different protocols or the - The`rflink` Python module is an asyncio transport/protocol which is setup to fire a callback for every (valid/supported) packet received by the RFLink gateway. - This integration uses this callback to distribute 'rflink packet events' over [Home Assistant's event bus](/docs/configuration/events/) which can be subscribed to by entities/platform implementations. -- The platform implementation takes care of creating new devices (if enabled) for unseen incoming packet ID's. +- The platform implementation takes care of creating new devices (if enabled) for unseen incoming packet IDs. - Device entities take care of matching to the packet ID, interpreting and performing actions based on the packet contents. Common entity logic is maintained in this main component. ### Debug Logging @@ -249,7 +250,7 @@ devices: type: map keys: name: - description: Name for the device. + description: Name of the device. required: false default: RFLink ID type: string @@ -341,7 +342,7 @@ RTS Record: 15 Address: FFFFFF RC: FFFF After configuring the RFLink Somfy RTS you have to add the cover to the {% term "`configuration.yaml`" %} file like any other RFlink device. -RFLink cover ID's are composed of: protocol, id, and gateway. For example: `RTS_0100F2_0`. +RFLink cover IDs are composed of: protocol, id, and gateway. For example: `RTS_0100F2_0`. Once the ID of a cover is known, it can be used to configure the cover in Home Assistant, for example, to add it to a different group or set a nice name. @@ -383,12 +384,12 @@ devices: type: map keys: name: - description: Name for the device. + description: Name of the device. required: false default: RFLink ID type: string aliases: - description: Alternative RFLink ID's this device is known by. + description: Alternative RFLink IDs this device is known by. required: false type: [list, string] fire_event: @@ -526,7 +527,7 @@ cover: After configuring the RFLink hub, lights will be automatically discovered and added. -RFLink binary_sensor/switch/light ID's are composed of: protocol, id, switch/channel. For example: `newkaku_0000c6c2_1`. +RFLink binary_sensor/switch/light IDs are composed of: protocol, id, switch/channel. For example: `newkaku_0000c6c2_1`. Once the ID of a light is known, it can be used to configure the light in HA, for example to add it to a different group or configure a nice name. @@ -585,7 +586,7 @@ devices: default: switchable type: string aliases: - description: Alternative RFLink ID's this device is known by. + description: Alternative RFLink IDs this device is known by. required: false type: [list, string] group_aliases: @@ -686,7 +687,7 @@ light: After configuring the RFLink hub, sensors will be automatically discovered and added. -RFLink sensor ID's are composed of: protocol, id and type (optional). For example: `alectov1_0334_temp`. Some sensors emit multiple types of data. Each will be created as its own. +RFLink sensor IDs are composed of: protocol, ID and type (optional). For example: `alectov1_0334_temp`. Some sensors emit multiple types of data. Each will be created as its own. Once the ID of a sensor is known, it can be used to configure the sensor in Home Assistant, for example to add it to a different group or configure a nice name. @@ -717,7 +718,7 @@ devices: type: map keys: name: - description: Name for the device. + description: Name of the device. required: false default: RFLink ID type: string @@ -730,7 +731,7 @@ devices: required: false type: string aliases: - description: "Alternative RFLink ID's this device is known by." + description: "Alternative RFLink IDs this device is known by." required: false type: [list, string] {% endconfiguration %} @@ -814,9 +815,9 @@ sensor: ## Switch -The RFLink integration does not know the difference between a `switch`, a `binary_sensor`, and a `light`. Therefore all switchable devices are automatically added as `light` by default. +The RFLink integration does not know the difference between a `switch`, a `binary_sensor`, and a `light`. Therefore, all switchable devices are automatically added as `light` by default. -RFLink binary_sensor/switch/light ID's are composed of: protocol, id, switch/channel. For example: `newkaku_0000c6c2_1`. +RFLink binary_sensor/switch/light IDs are composed of: protocol, id, switch/channel. For example: `newkaku_0000c6c2_1`. Once the ID of a switch is known, it can be used to configure it as a switch type in HA and, for example, to add it to a different group or configure a nice name. @@ -858,12 +859,12 @@ devices: type: map keys: name: - description: Name for the device. + description: Name of the device. required: false default: RFLink ID type: string aliases: - description: Alternative RFLink ID's this device is known by. + description: Alternative RFLink IDs this device is known by. required: false type: [list, string] group_aliases: @@ -890,7 +891,7 @@ devices: default: true type: boolean aliases: - description: Alternative RFLink ID's this device is known by. + description: Alternative RFLink IDs this device is known by. required: false type: [list, string] group_aliases: @@ -907,7 +908,7 @@ devices: Initially, the state of a switch is unknown. When the switch is turned on or off (via frontend or wireless remote) the state is known and will be shown in the frontend. -Sometimes a switch is controlled by multiple wireless remotes, each remote has its own code programmed in the switch. To allow tracking of the state when switched via other remotes add the corresponding remote codes as aliases: +Sometimes a switch is controlled by multiple wireless remotes. Each remote has its own code programmed in the switch. To allow tracking of the state when switched via other remotes, add the corresponding remote codes as aliases: ```yaml # Example configuration.yaml entry From eaf975cc9596e68c5c23d22b3ed94741ebca556f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 10:32:01 +0200 Subject: [PATCH 45/67] build(deps-dev): bump prism from 1.1.0 to 1.2.0 (#35176) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index fec48627a20..09c758989ba 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -91,7 +91,7 @@ GEM racc pathutil (0.16.2) forwardable-extended (~> 2.6) - prism (1.1.0) + prism (1.2.0) public_suffix (6.0.1) racc (1.8.1) rack (3.1.7) From a634cb44ce7d48a6d6f94537a98ce5ff777da880 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Fri, 11 Oct 2024 18:25:15 +0200 Subject: [PATCH 46/67] 2024.10.2 (#35180) --- _config.yml | 4 +- .../_posts/2024-10-02-release-202410.markdown | 190 ++++++++++++++++++ source/changelogs/core-2024.10.markdown | 189 +++++++++++++++++ 3 files changed, 381 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index 853add2be68..e8bd60c9831 100644 --- a/_config.yml +++ b/_config.yml @@ -108,8 +108,8 @@ social: # Home Assistant release details current_major_version: 2024 current_minor_version: 10 -current_patch_version: 1 -date_released: 2024-10-04 +current_patch_version: 2 +date_released: 2024-10-11 # 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/source/_posts/2024-10-02-release-202410.markdown b/source/_posts/2024-10-02-release-202410.markdown index 3222a7f8fd8..173668b3952 100644 --- a/source/_posts/2024-10-02-release-202410.markdown +++ b/source/_posts/2024-10-02-release-202410.markdown @@ -54,6 +54,7 @@ Enjoy the release! - [YAML-editor improvements](#yaml-editor-improvements) - [Patch releases](#patch-releases) - [2024.10.1 - October 4](#2024101---october-4) + - [2024.10.2 - October 11](#2024102---october-11) - [Need help? Join the community!](#need-help-join-the-community) - [Backward-incompatible changes](#backward-incompatible-changes) - [All changes](#all-changes) @@ -495,6 +496,195 @@ every Friday. [@robinostlund]: https://github.com/robinostlund [@tl-sl]: https://github.com/tl-sl +### 2024.10.2 - October 11 + +- Fix Island status in Teslemetry ([@Bre77] - [#127504]) +- Bump pyblu to 1.0.3 ([@LouisChrist] - [#127571]) +- Bump aiostreammagic to 2.5.0 ([@noahhusby] - [#127595]) +- Bump opower to 0.8.2 ([@tronikos] - [#127598]) +- Fix wake up in Tesla Fleet ([@Bre77] - [#127615]) +- Update Radarr config flow to standardize ports ([@Khabi] - [#127620]) +- Bump fyta_cli to 0.6.7 ([@dontinelli] - [#127650]) +- Revert "Fix enum lookup (#125220)" ([@cdce8p] - [#127680]) +- Fix problems with automatic management of Schlage locks ([@dknowles2] - [#127689]) +- Fix typo in HDMI CEC ([@joostlek] - [#127714]) +- Fix Withings log message ([@joostlek] - [#127716]) +- Bump NYT Games to 0.4.3 ([@joostlek] - [#127717]) +- Bump airgradient to 0.9.1 ([@joostlek] - [#127718]) +- Add translation string for Withings wrong account ([@joostlek] - [#127719]) +- Increase connection timeout in CalDAV ([@mib1185] - [#127727]) +- Migrate SMA unique id to str ([@rklomp] - [#127732]) +- Remove stale references in squeezebox services.yaml ([@rajlaud] - [#127739]) +- Fix Aurora integration casts longitude and latitude to integer ([@johangus65] - [#127740]) +- Bump python-linkplay to 0.0.15 ([@silamon] - [#127748]) +- Fix custom account config flow setup ([@rjmarques] - [#127750]) +- Bump solarlog_cli to 0.3.1 ([@dontinelli] - [#127753]) +- Update DoorBirdPy to 3.0.3 ([@frenck] - [#126949]) +- Bump DoorBirdPy to 3.0.4 ([@bdraco] - [#127760]) +- Bump pychromecast to 14.0.3 ([@emontnemery] - [#127778]) +- Fix aurora alert sensor always Off ([@johangus65] - [#127780]) +- Update aioairzone-cloud to v0.6.6 ([@Noltari] - [#127789]) +- Bump pysmlight to v0.1.3 ([@tl-sl] - [#127804]) +- Fix incorrect string in amberlectric ([@epenet] - [#127807]) +- Add missing and fix incorrect translation string in alarmdecoder ([@epenet] - [#127814]) +- Fix incorrect translation string in analytics_insights ([@epenet] - [#127815]) +- Add missing and fix incorrect translation string in aurora ([@epenet] - [#127818]) +- Fix incorrect translation string in azure event hub ([@epenet] - [#127820]) +- Correct cleanup of sensor statistics repairs ([@emontnemery] - [#127826]) +- Add missing translation string in blebox ([@epenet] - [#127827]) +- Fix incorrect translation string in bryant_evolution ([@epenet] - [#127830]) +- Add missing and fix incorrect translation string in duotecno ([@epenet] - [#127834]) +- Reverse unintended change of unique_id for solarlog ([@dontinelli] - [#127845]) +- Bump `pytouchlinesl` to 0.1.8 ([@jnsgruk] - [#127859]) +- Fix wrong DPTypes returned by Tuya's cloud ([@azerty9971] - [#127860]) +- Add missing translation string in AVM Fritz!Smarthome ([@mib1185] - [#127864]) +- Fix merge_response template not mutate original object ([@gjohansson-ST] - [#127865]) +- Don't error with missing information in systemmonitor diagnostics ([@gjohansson-ST] - [#127868]) +- Bump holidays library to 0.58 ([@gjohansson-ST] - [#127876]) +- Bump pyeconet to 0.1.23 ([@dcmeglio] - [#127896]) +- Add missing translation string in otbr ([@epenet] - [#127909]) +- Add missing translation string in yamaha_musiccast ([@epenet] - [#127912]) +- Add support of due date calculation for grey dailies in Habitica integration ([@tr4nt0r] - [#127923]) +- Bump `imgw_pib` library to version 1.0.6 ([@bieniu] - [#127925]) +- Bump python-kasa to 0.7.5 ([@sdb9696] - [#127934]) +- Fix discovery of WMS WebControl pro by using IP address ([@mback2k] - [#127939]) +- Update pywmspro to 0.2.1 to fix handling of unknown products ([@mback2k] - [#127942]) +- Fix europe authentication in Fujitsu FGLair ([@crevetor] - [#127947]) +- Bump motionblindsble to 0.1.2 ([@LennP] - [#127954]) +- Fix zwave_js config validation for values ([@raman325] - [#127972]) +- Fix firmware version parsing in venstar ([@epenet] - [#127974]) +- Bump pyduotecno to 2024.10.0 ([@Cereal2nd] - [#127979]) +- Increase tplink climate precision ([@rytilahti] - [#127996]) +- Add missing translation string in solarlog ([@dontinelli] - [#128015]) +- Fix missing reauth name translation placeholder in ring integration ([@sdb9696] - [#128048]) +- Add missing translation string for re-auth flows ([@mib1185] - [#128055]) +- Update xknxproject to 3.8.1 ([@farmio] - [#128057]) +- Fix casing on Powerview Gen3 zeroconf discovery ([@kingy444] - [#128076]) +- Fix ring realtime events ([@sdb9696] - [#128083]) +- Increase Hydrawise polling interval to 60 seconds ([@dknowles2] - [#128090]) +- Update frontend to 20241002.3 ([@bramkragten] - [#128106]) +- Bump aioautomower to 2024.10.0 ([@Thomas55555] - [#128137]) +- Fix license script for ftfy ([@cdce8p] - [#128138]) +- Fix regression in Opower that was introduced in 2024.10.0 ([@tronikos] - [#128141]) +- Bump opower to 0.8.3 ([@tronikos] - [#128144]) +- Remove some redundant code in Opower's coordinator from the fix in #128141 ([@tronikos] - [#128150]) +- Fix preset handling issue in ViCare ([@CFenner] - [#128167]) +- Fix model in Husqvarna Automower ([@Thomas55555] - [#128168]) + +[#126782]: https://github.com/home-assistant/core/pull/126782 +[#126949]: https://github.com/home-assistant/core/pull/126949 +[#127504]: https://github.com/home-assistant/core/pull/127504 +[#127566]: https://github.com/home-assistant/core/pull/127566 +[#127571]: https://github.com/home-assistant/core/pull/127571 +[#127595]: https://github.com/home-assistant/core/pull/127595 +[#127598]: https://github.com/home-assistant/core/pull/127598 +[#127615]: https://github.com/home-assistant/core/pull/127615 +[#127620]: https://github.com/home-assistant/core/pull/127620 +[#127650]: https://github.com/home-assistant/core/pull/127650 +[#127680]: https://github.com/home-assistant/core/pull/127680 +[#127689]: https://github.com/home-assistant/core/pull/127689 +[#127714]: https://github.com/home-assistant/core/pull/127714 +[#127716]: https://github.com/home-assistant/core/pull/127716 +[#127717]: https://github.com/home-assistant/core/pull/127717 +[#127718]: https://github.com/home-assistant/core/pull/127718 +[#127719]: https://github.com/home-assistant/core/pull/127719 +[#127727]: https://github.com/home-assistant/core/pull/127727 +[#127732]: https://github.com/home-assistant/core/pull/127732 +[#127739]: https://github.com/home-assistant/core/pull/127739 +[#127740]: https://github.com/home-assistant/core/pull/127740 +[#127748]: https://github.com/home-assistant/core/pull/127748 +[#127750]: https://github.com/home-assistant/core/pull/127750 +[#127753]: https://github.com/home-assistant/core/pull/127753 +[#127760]: https://github.com/home-assistant/core/pull/127760 +[#127778]: https://github.com/home-assistant/core/pull/127778 +[#127780]: https://github.com/home-assistant/core/pull/127780 +[#127789]: https://github.com/home-assistant/core/pull/127789 +[#127804]: https://github.com/home-assistant/core/pull/127804 +[#127807]: https://github.com/home-assistant/core/pull/127807 +[#127814]: https://github.com/home-assistant/core/pull/127814 +[#127815]: https://github.com/home-assistant/core/pull/127815 +[#127818]: https://github.com/home-assistant/core/pull/127818 +[#127820]: https://github.com/home-assistant/core/pull/127820 +[#127826]: https://github.com/home-assistant/core/pull/127826 +[#127827]: https://github.com/home-assistant/core/pull/127827 +[#127830]: https://github.com/home-assistant/core/pull/127830 +[#127834]: https://github.com/home-assistant/core/pull/127834 +[#127845]: https://github.com/home-assistant/core/pull/127845 +[#127859]: https://github.com/home-assistant/core/pull/127859 +[#127860]: https://github.com/home-assistant/core/pull/127860 +[#127864]: https://github.com/home-assistant/core/pull/127864 +[#127865]: https://github.com/home-assistant/core/pull/127865 +[#127868]: https://github.com/home-assistant/core/pull/127868 +[#127876]: https://github.com/home-assistant/core/pull/127876 +[#127896]: https://github.com/home-assistant/core/pull/127896 +[#127909]: https://github.com/home-assistant/core/pull/127909 +[#127912]: https://github.com/home-assistant/core/pull/127912 +[#127923]: https://github.com/home-assistant/core/pull/127923 +[#127925]: https://github.com/home-assistant/core/pull/127925 +[#127934]: https://github.com/home-assistant/core/pull/127934 +[#127939]: https://github.com/home-assistant/core/pull/127939 +[#127942]: https://github.com/home-assistant/core/pull/127942 +[#127947]: https://github.com/home-assistant/core/pull/127947 +[#127954]: https://github.com/home-assistant/core/pull/127954 +[#127972]: https://github.com/home-assistant/core/pull/127972 +[#127974]: https://github.com/home-assistant/core/pull/127974 +[#127979]: https://github.com/home-assistant/core/pull/127979 +[#127996]: https://github.com/home-assistant/core/pull/127996 +[#128015]: https://github.com/home-assistant/core/pull/128015 +[#128048]: https://github.com/home-assistant/core/pull/128048 +[#128055]: https://github.com/home-assistant/core/pull/128055 +[#128057]: https://github.com/home-assistant/core/pull/128057 +[#128076]: https://github.com/home-assistant/core/pull/128076 +[#128083]: https://github.com/home-assistant/core/pull/128083 +[#128090]: https://github.com/home-assistant/core/pull/128090 +[#128106]: https://github.com/home-assistant/core/pull/128106 +[#128137]: https://github.com/home-assistant/core/pull/128137 +[#128138]: https://github.com/home-assistant/core/pull/128138 +[#128141]: https://github.com/home-assistant/core/pull/128141 +[#128144]: https://github.com/home-assistant/core/pull/128144 +[#128150]: https://github.com/home-assistant/core/pull/128150 +[#128167]: https://github.com/home-assistant/core/pull/128167 +[#128168]: https://github.com/home-assistant/core/pull/128168 +[@Bre77]: https://github.com/Bre77 +[@CFenner]: https://github.com/CFenner +[@Cereal2nd]: https://github.com/Cereal2nd +[@Khabi]: https://github.com/Khabi +[@LennP]: https://github.com/LennP +[@LouisChrist]: https://github.com/LouisChrist +[@Noltari]: https://github.com/Noltari +[@Thomas55555]: https://github.com/Thomas55555 +[@azerty9971]: https://github.com/azerty9971 +[@bdraco]: https://github.com/bdraco +[@bieniu]: https://github.com/bieniu +[@bramkragten]: https://github.com/bramkragten +[@cdce8p]: https://github.com/cdce8p +[@crevetor]: https://github.com/crevetor +[@dcmeglio]: https://github.com/dcmeglio +[@dknowles2]: https://github.com/dknowles2 +[@dontinelli]: https://github.com/dontinelli +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@farmio]: https://github.com/farmio +[@frenck]: https://github.com/frenck +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@jnsgruk]: https://github.com/jnsgruk +[@johangus65]: https://github.com/johangus65 +[@joostlek]: https://github.com/joostlek +[@kingy444]: https://github.com/kingy444 +[@mback2k]: https://github.com/mback2k +[@mib1185]: https://github.com/mib1185 +[@noahhusby]: https://github.com/noahhusby +[@rajlaud]: https://github.com/rajlaud +[@raman325]: https://github.com/raman325 +[@rjmarques]: https://github.com/rjmarques +[@rklomp]: https://github.com/rklomp +[@rytilahti]: https://github.com/rytilahti +[@sdb9696]: https://github.com/sdb9696 +[@silamon]: https://github.com/silamon +[@tl-sl]: https://github.com/tl-sl +[@tr4nt0r]: https://github.com/tr4nt0r +[@tronikos]: https://github.com/tronikos + ## Need help? Join the community! Home Assistant has a great community of users who are all more than willing diff --git a/source/changelogs/core-2024.10.markdown b/source/changelogs/core-2024.10.markdown index 5cd7257901e..412d376ce19 100644 --- a/source/changelogs/core-2024.10.markdown +++ b/source/changelogs/core-2024.10.markdown @@ -1187,6 +1187,195 @@ For a summary in a more readable format: [@robinostlund]: https://github.com/robinostlund [@tl-sl]: https://github.com/tl-sl +## Release 2024.10.2 - October 11 + +- Fix Island status in Teslemetry ([@Bre77] - [#127504]) +- Bump pyblu to 1.0.3 ([@LouisChrist] - [#127571]) +- Bump aiostreammagic to 2.5.0 ([@noahhusby] - [#127595]) +- Bump opower to 0.8.2 ([@tronikos] - [#127598]) +- Fix wake up in Tesla Fleet ([@Bre77] - [#127615]) +- Update Radarr config flow to standardize ports ([@Khabi] - [#127620]) +- Bump fyta_cli to 0.6.7 ([@dontinelli] - [#127650]) +- Revert "Fix enum lookup (#125220)" ([@cdce8p] - [#127680]) +- Fix problems with automatic management of Schlage locks ([@dknowles2] - [#127689]) +- Fix typo in HDMI CEC ([@joostlek] - [#127714]) +- Fix Withings log message ([@joostlek] - [#127716]) +- Bump NYT Games to 0.4.3 ([@joostlek] - [#127717]) +- Bump airgradient to 0.9.1 ([@joostlek] - [#127718]) +- Add translation string for Withings wrong account ([@joostlek] - [#127719]) +- Increase connection timeout in CalDAV ([@mib1185] - [#127727]) +- Migrate SMA unique id to str ([@rklomp] - [#127732]) +- Remove stale references in squeezebox services.yaml ([@rajlaud] - [#127739]) +- Fix Aurora integration casts longitude and latitude to integer ([@johangus65] - [#127740]) +- Bump python-linkplay to 0.0.15 ([@silamon] - [#127748]) +- Fix custom account config flow setup ([@rjmarques] - [#127750]) +- Bump solarlog_cli to 0.3.1 ([@dontinelli] - [#127753]) +- Update DoorBirdPy to 3.0.3 ([@frenck] - [#126949]) +- Bump DoorBirdPy to 3.0.4 ([@bdraco] - [#127760]) +- Bump pychromecast to 14.0.3 ([@emontnemery] - [#127778]) +- Fix aurora alert sensor always Off ([@johangus65] - [#127780]) +- Update aioairzone-cloud to v0.6.6 ([@Noltari] - [#127789]) +- Bump pysmlight to v0.1.3 ([@tl-sl] - [#127804]) +- Fix incorrect string in amberlectric ([@epenet] - [#127807]) +- Add missing and fix incorrect translation string in alarmdecoder ([@epenet] - [#127814]) +- Fix incorrect translation string in analytics_insights ([@epenet] - [#127815]) +- Add missing and fix incorrect translation string in aurora ([@epenet] - [#127818]) +- Fix incorrect translation string in azure event hub ([@epenet] - [#127820]) +- Correct cleanup of sensor statistics repairs ([@emontnemery] - [#127826]) +- Add missing translation string in blebox ([@epenet] - [#127827]) +- Fix incorrect translation string in bryant_evolution ([@epenet] - [#127830]) +- Add missing and fix incorrect translation string in duotecno ([@epenet] - [#127834]) +- Reverse unintended change of unique_id for solarlog ([@dontinelli] - [#127845]) +- Bump `pytouchlinesl` to 0.1.8 ([@jnsgruk] - [#127859]) +- Fix wrong DPTypes returned by Tuya's cloud ([@azerty9971] - [#127860]) +- Add missing translation string in AVM Fritz!Smarthome ([@mib1185] - [#127864]) +- Fix merge_response template not mutate original object ([@gjohansson-ST] - [#127865]) +- Don't error with missing information in systemmonitor diagnostics ([@gjohansson-ST] - [#127868]) +- Bump holidays library to 0.58 ([@gjohansson-ST] - [#127876]) +- Bump pyeconet to 0.1.23 ([@dcmeglio] - [#127896]) +- Add missing translation string in otbr ([@epenet] - [#127909]) +- Add missing translation string in yamaha_musiccast ([@epenet] - [#127912]) +- Add support of due date calculation for grey dailies in Habitica integration ([@tr4nt0r] - [#127923]) +- Bump `imgw_pib` library to version 1.0.6 ([@bieniu] - [#127925]) +- Bump python-kasa to 0.7.5 ([@sdb9696] - [#127934]) +- Fix discovery of WMS WebControl pro by using IP address ([@mback2k] - [#127939]) +- Update pywmspro to 0.2.1 to fix handling of unknown products ([@mback2k] - [#127942]) +- Fix europe authentication in Fujitsu FGLair ([@crevetor] - [#127947]) +- Bump motionblindsble to 0.1.2 ([@LennP] - [#127954]) +- Fix zwave_js config validation for values ([@raman325] - [#127972]) +- Fix firmware version parsing in venstar ([@epenet] - [#127974]) +- Bump pyduotecno to 2024.10.0 ([@Cereal2nd] - [#127979]) +- Increase tplink climate precision ([@rytilahti] - [#127996]) +- Add missing translation string in solarlog ([@dontinelli] - [#128015]) +- Fix missing reauth name translation placeholder in ring integration ([@sdb9696] - [#128048]) +- Add missing translation string for re-auth flows ([@mib1185] - [#128055]) +- Update xknxproject to 3.8.1 ([@farmio] - [#128057]) +- Fix casing on Powerview Gen3 zeroconf discovery ([@kingy444] - [#128076]) +- Fix ring realtime events ([@sdb9696] - [#128083]) +- Increase Hydrawise polling interval to 60 seconds ([@dknowles2] - [#128090]) +- Update frontend to 20241002.3 ([@bramkragten] - [#128106]) +- Bump aioautomower to 2024.10.0 ([@Thomas55555] - [#128137]) +- Fix license script for ftfy ([@cdce8p] - [#128138]) +- Fix regression in Opower that was introduced in 2024.10.0 ([@tronikos] - [#128141]) +- Bump opower to 0.8.3 ([@tronikos] - [#128144]) +- Remove some redundant code in Opower's coordinator from the fix in #128141 ([@tronikos] - [#128150]) +- Fix preset handling issue in ViCare ([@CFenner] - [#128167]) +- Fix model in Husqvarna Automower ([@Thomas55555] - [#128168]) + +[#126782]: https://github.com/home-assistant/core/pull/126782 +[#126949]: https://github.com/home-assistant/core/pull/126949 +[#127504]: https://github.com/home-assistant/core/pull/127504 +[#127566]: https://github.com/home-assistant/core/pull/127566 +[#127571]: https://github.com/home-assistant/core/pull/127571 +[#127595]: https://github.com/home-assistant/core/pull/127595 +[#127598]: https://github.com/home-assistant/core/pull/127598 +[#127615]: https://github.com/home-assistant/core/pull/127615 +[#127620]: https://github.com/home-assistant/core/pull/127620 +[#127650]: https://github.com/home-assistant/core/pull/127650 +[#127680]: https://github.com/home-assistant/core/pull/127680 +[#127689]: https://github.com/home-assistant/core/pull/127689 +[#127714]: https://github.com/home-assistant/core/pull/127714 +[#127716]: https://github.com/home-assistant/core/pull/127716 +[#127717]: https://github.com/home-assistant/core/pull/127717 +[#127718]: https://github.com/home-assistant/core/pull/127718 +[#127719]: https://github.com/home-assistant/core/pull/127719 +[#127727]: https://github.com/home-assistant/core/pull/127727 +[#127732]: https://github.com/home-assistant/core/pull/127732 +[#127739]: https://github.com/home-assistant/core/pull/127739 +[#127740]: https://github.com/home-assistant/core/pull/127740 +[#127748]: https://github.com/home-assistant/core/pull/127748 +[#127750]: https://github.com/home-assistant/core/pull/127750 +[#127753]: https://github.com/home-assistant/core/pull/127753 +[#127760]: https://github.com/home-assistant/core/pull/127760 +[#127778]: https://github.com/home-assistant/core/pull/127778 +[#127780]: https://github.com/home-assistant/core/pull/127780 +[#127789]: https://github.com/home-assistant/core/pull/127789 +[#127804]: https://github.com/home-assistant/core/pull/127804 +[#127807]: https://github.com/home-assistant/core/pull/127807 +[#127814]: https://github.com/home-assistant/core/pull/127814 +[#127815]: https://github.com/home-assistant/core/pull/127815 +[#127818]: https://github.com/home-assistant/core/pull/127818 +[#127820]: https://github.com/home-assistant/core/pull/127820 +[#127826]: https://github.com/home-assistant/core/pull/127826 +[#127827]: https://github.com/home-assistant/core/pull/127827 +[#127830]: https://github.com/home-assistant/core/pull/127830 +[#127834]: https://github.com/home-assistant/core/pull/127834 +[#127845]: https://github.com/home-assistant/core/pull/127845 +[#127859]: https://github.com/home-assistant/core/pull/127859 +[#127860]: https://github.com/home-assistant/core/pull/127860 +[#127864]: https://github.com/home-assistant/core/pull/127864 +[#127865]: https://github.com/home-assistant/core/pull/127865 +[#127868]: https://github.com/home-assistant/core/pull/127868 +[#127876]: https://github.com/home-assistant/core/pull/127876 +[#127896]: https://github.com/home-assistant/core/pull/127896 +[#127909]: https://github.com/home-assistant/core/pull/127909 +[#127912]: https://github.com/home-assistant/core/pull/127912 +[#127923]: https://github.com/home-assistant/core/pull/127923 +[#127925]: https://github.com/home-assistant/core/pull/127925 +[#127934]: https://github.com/home-assistant/core/pull/127934 +[#127939]: https://github.com/home-assistant/core/pull/127939 +[#127942]: https://github.com/home-assistant/core/pull/127942 +[#127947]: https://github.com/home-assistant/core/pull/127947 +[#127954]: https://github.com/home-assistant/core/pull/127954 +[#127972]: https://github.com/home-assistant/core/pull/127972 +[#127974]: https://github.com/home-assistant/core/pull/127974 +[#127979]: https://github.com/home-assistant/core/pull/127979 +[#127996]: https://github.com/home-assistant/core/pull/127996 +[#128015]: https://github.com/home-assistant/core/pull/128015 +[#128048]: https://github.com/home-assistant/core/pull/128048 +[#128055]: https://github.com/home-assistant/core/pull/128055 +[#128057]: https://github.com/home-assistant/core/pull/128057 +[#128076]: https://github.com/home-assistant/core/pull/128076 +[#128083]: https://github.com/home-assistant/core/pull/128083 +[#128090]: https://github.com/home-assistant/core/pull/128090 +[#128106]: https://github.com/home-assistant/core/pull/128106 +[#128137]: https://github.com/home-assistant/core/pull/128137 +[#128138]: https://github.com/home-assistant/core/pull/128138 +[#128141]: https://github.com/home-assistant/core/pull/128141 +[#128144]: https://github.com/home-assistant/core/pull/128144 +[#128150]: https://github.com/home-assistant/core/pull/128150 +[#128167]: https://github.com/home-assistant/core/pull/128167 +[#128168]: https://github.com/home-assistant/core/pull/128168 +[@Bre77]: https://github.com/Bre77 +[@CFenner]: https://github.com/CFenner +[@Cereal2nd]: https://github.com/Cereal2nd +[@Khabi]: https://github.com/Khabi +[@LennP]: https://github.com/LennP +[@LouisChrist]: https://github.com/LouisChrist +[@Noltari]: https://github.com/Noltari +[@Thomas55555]: https://github.com/Thomas55555 +[@azerty9971]: https://github.com/azerty9971 +[@bdraco]: https://github.com/bdraco +[@bieniu]: https://github.com/bieniu +[@bramkragten]: https://github.com/bramkragten +[@cdce8p]: https://github.com/cdce8p +[@crevetor]: https://github.com/crevetor +[@dcmeglio]: https://github.com/dcmeglio +[@dknowles2]: https://github.com/dknowles2 +[@dontinelli]: https://github.com/dontinelli +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@farmio]: https://github.com/farmio +[@frenck]: https://github.com/frenck +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@jnsgruk]: https://github.com/jnsgruk +[@johangus65]: https://github.com/johangus65 +[@joostlek]: https://github.com/joostlek +[@kingy444]: https://github.com/kingy444 +[@mback2k]: https://github.com/mback2k +[@mib1185]: https://github.com/mib1185 +[@noahhusby]: https://github.com/noahhusby +[@rajlaud]: https://github.com/rajlaud +[@raman325]: https://github.com/raman325 +[@rjmarques]: https://github.com/rjmarques +[@rklomp]: https://github.com/rklomp +[@rytilahti]: https://github.com/rytilahti +[@sdb9696]: https://github.com/sdb9696 +[@silamon]: https://github.com/silamon +[@tl-sl]: https://github.com/tl-sl +[@tr4nt0r]: https://github.com/tr4nt0r +[@tronikos]: https://github.com/tronikos + [#102371]: https://github.com/home-assistant/core/pull/102371 [#106570]: https://github.com/home-assistant/core/pull/106570 [#112806]: https://github.com/home-assistant/core/pull/112806 From 896af73d5476daafbf994598bded341a34b7ba4f Mon Sep 17 00:00:00 2001 From: Darren Griffin Date: Fri, 11 Oct 2024 18:30:04 +0100 Subject: [PATCH 47/67] Update people to reflect missing users from blog posts (#35178) --- source/_data/people.yml | 10 +++++++++- source/_includes/post/author.html | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/source/_data/people.yml b/source/_data/people.yml index a26451c9c2b..5eecd1608bf 100644 --- a/source/_data/people.yml +++ b/source/_data/people.yml @@ -20,7 +20,7 @@ Madelena Mak: Guy Sie: name: Guy Sie - github: GuySie + github: guysie Gordon Cameron: name: Gordon Cameron @@ -77,3 +77,11 @@ Zac West: Klaas Schoute: name: Klaas Schoute github: klaasnicolaas + +Joakim Sørensen: + name: Joakim Sørensen + github: ludeeus + +Andy Gill: + name: Andy Gill + github: ncandyg \ No newline at end of file diff --git a/source/_includes/post/author.html b/source/_includes/post/author.html index c75bb03c2e8..d56156d0288 100644 --- a/source/_includes/post/author.html +++ b/source/_includes/post/author.html @@ -8,7 +8,7 @@ {% if author %} {% assign person = site.data.people[author] %} {% if person %} - {{ person.name }} {{ person.name }} {% else %} From f1ce65283056cf9dec85c93d5597856487a86c67 Mon Sep 17 00:00:00 2001 From: Jan Bouwhuis Date: Sun, 13 Oct 2024 07:21:46 +0200 Subject: [PATCH 48/67] Improve the documentation on the accepted states on `state_topic` for MQTT entities (#35197) * Improve the documentation on the accepted states on `state_topic` for MQTT entities * FIx formatting * Follow up on code review * Color attribute explain formatting * Use json example * More follow up --- .../alarm_control_panel.mqtt.markdown | 2 +- .../_integrations/binary_sensor.mqtt.markdown | 2 +- source/_integrations/cover.mqtt.markdown | 2 +- .../device_tracker.mqtt.markdown | 2 +- source/_integrations/fan.mqtt.markdown | 2 +- source/_integrations/humidifier.mqtt.markdown | 2 +- source/_integrations/light.mqtt.markdown | 32 +++++++++++++++++-- source/_integrations/switch.mqtt.markdown | 8 ++--- 8 files changed, 39 insertions(+), 13 deletions(-) diff --git a/source/_integrations/alarm_control_panel.mqtt.markdown b/source/_integrations/alarm_control_panel.mqtt.markdown index 34a8c53c8db..05445561fd2 100644 --- a/source/_integrations/alarm_control_panel.mqtt.markdown +++ b/source/_integrations/alarm_control_panel.mqtt.markdown @@ -250,7 +250,7 @@ retain: type: boolean default: false state_topic: - description: The MQTT topic subscribed to receive state updates. A "None" payload resets to an `unknown` state. An empty payload is ignored. + description: "The MQTT topic subscribed to receive state updates. A \"None\" payload resets to an `unknown` state. An empty payload is ignored. Valid state payloads are: `armed_away`, `armed_custom_bypass`, `armed_home`, `armed_night`, `armed_vacation`, `arming`, `disarmed`, `disarming` `pending` and `triggered`." required: true type: string supported_features: diff --git a/source/_integrations/binary_sensor.mqtt.markdown b/source/_integrations/binary_sensor.mqtt.markdown index 4899572be9b..b791220e774 100644 --- a/source/_integrations/binary_sensor.mqtt.markdown +++ b/source/_integrations/binary_sensor.mqtt.markdown @@ -198,7 +198,7 @@ qos: type: integer default: 0 state_topic: - description: The MQTT topic subscribed to receive sensor's state. + description: The MQTT topic subscribed to receive sensor's state. Valid states are `OFF` and `ON`. Custom `OFF` and `ON` values can be set with the `payload_off` and `payload_on` config options. required: true type: string unique_id: diff --git a/source/_integrations/cover.mqtt.markdown b/source/_integrations/cover.mqtt.markdown index 6c093b95415..bdf32a63c2b 100644 --- a/source/_integrations/cover.mqtt.markdown +++ b/source/_integrations/cover.mqtt.markdown @@ -261,7 +261,7 @@ state_stopped: type: string default: stopped state_topic: - description: The MQTT topic subscribed to receive cover state messages. State topic can only read (`open`, `opening`, `closed`, `closing` or `stopped`) state. A "None" payload resets to an `unknown` state. An empty payload is ignored. + description: The MQTT topic subscribed to receive cover state messages. State topic can only read a (`open`, `opening`, `closed`, `closing` or `stopped`) state. A "None" payload resets to an `unknown` state. An empty payload is ignored. required: false type: string tilt_closed_value: diff --git a/source/_integrations/device_tracker.mqtt.markdown b/source/_integrations/device_tracker.mqtt.markdown index 625f1c56405..e36c0db84ba 100644 --- a/source/_integrations/device_tracker.mqtt.markdown +++ b/source/_integrations/device_tracker.mqtt.markdown @@ -177,7 +177,7 @@ source_type: required: false type: string state_topic: - description: The MQTT topic subscribed to receive device tracker state changes. The states defined in `state_topic` override the location states defined by the `json_attributes_topic`. This state override is turned inactive if the `state_topic` receives a message containing `payload_reset`. The `state_topic` can only be omitted if `json_attributes_topic` is used. An empty payload is ignored. + description: The MQTT topic subscribed to receive device tracker state changes. The states defined in `state_topic` override the location states defined by the `json_attributes_topic`. This state override is turned inactive if the `state_topic` receives a message containing `payload_reset`. The `state_topic` can only be omitted if `json_attributes_topic` is used. An empty payload is ignored. Valid payloads are `not_home`, `home` or any other custom location or zone name. Payloads for `not_home`, `home` can be overridden with the `payload_not_home`and `payload_home` config options. required: false type: string unique_id: diff --git a/source/_integrations/fan.mqtt.markdown b/source/_integrations/fan.mqtt.markdown index afe35bebd41..e55468f9bd0 100644 --- a/source/_integrations/fan.mqtt.markdown +++ b/source/_integrations/fan.mqtt.markdown @@ -296,7 +296,7 @@ speed_range_min: type: integer default: 1 state_topic: - description: The MQTT topic subscribed to receive state updates. A "None" payload resets to an `unknown` state. An empty payload is ignored. + 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: diff --git a/source/_integrations/humidifier.mqtt.markdown b/source/_integrations/humidifier.mqtt.markdown index ad043a83901..7e228d764e9 100644 --- a/source/_integrations/humidifier.mqtt.markdown +++ b/source/_integrations/humidifier.mqtt.markdown @@ -277,7 +277,7 @@ retain: type: boolean default: true state_topic: - description: The MQTT topic subscribed to receive state updates. A "None" payload resets to an `unknown` state. An empty payload is ignored. + description: The MQTT topic subscribed to receive state updates. A "None" payload resets to an `unknown` state. An empty payload is ignored. Valid state payloads are `OFF` and `ON`. Custom `OFF` and `ON` values can be set with the `payload_off` and `payload_on` config options. required: false type: string state_value_template: diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown index e9179af08c9..4811d924e0d 100644 --- a/source/_integrations/light.mqtt.markdown +++ b/source/_integrations/light.mqtt.markdown @@ -363,11 +363,11 @@ schema: type: string default: default state_topic: - description: The MQTT topic subscribed to receive state updates. A "None" payload resets to an `unknown` state. An empty payload is ignored. + 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`, `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-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`." required: false type: template unique_id: @@ -708,7 +708,7 @@ schema: type: string default: default state_topic: - description: The MQTT topic subscribed to receive state updates. A "None" payload resets to an `unknown` state. An empty payload is ignored. + 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 type: string supported_color_modes: @@ -726,6 +726,32 @@ white_scale: default: 255 {% endconfiguration %} +*The `color` attribute dict in the JSON state payload should contain the following keys based on the `color_mode`: + +- `hs`: + - `h`: The hue value + - `s`: The saturation value +- `xy`: + - `x`: X color value + - `y`: Y color value +- `rgb`: + - `r`: Red color value + - `g`: Green color value + - `b`: Blue color value +- `rgbw`: + - `r`: Red color value + - `g`: Green color value + - `b`: Blue color value + - `w`: White value +- `rgbww`: + - `r`: Red color value + - `g`: Green color value + - `b`: Blue color value + - `c`: Cool white value + - `w`: Warm white value + +More details about the different colors, color modes and range values [can be found here](https://www.home-assistant.io/integrations/light/). + {% important %} Make sure that your topics match exact. `some-topic/` and `some-topic` are different topics. {% endimportant %} diff --git a/source/_integrations/switch.mqtt.markdown b/source/_integrations/switch.mqtt.markdown index c3619c78b2d..b413675da0b 100644 --- a/source/_integrations/switch.mqtt.markdown +++ b/source/_integrations/switch.mqtt.markdown @@ -203,14 +203,14 @@ state_off: description: The payload that represents the `off` state. Used when value that represents `off` state in the `state_topic` is different from value that should be sent to the `command_topic` to turn the device `off`. required: false type: string - default: "`payload_off` if defined, else OFF" + default: "`payload_off` if defined, else `OFF`" state_on: description: The payload that represents the `on` state. Used when value that represents `on` state in the `state_topic` is different from value that should be sent to the `command_topic` to turn the device `on`. required: false type: string - default: "`payload_on` if defined, else ON" + default: "`payload_on` if defined, else `ON`" state_topic: - description: The MQTT topic subscribed to receive state updates. A "None" payload resets to an `unknown` state. An empty payload is ignored. + 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 unique_id: @@ -260,7 +260,7 @@ For a check, you can use the command line tools `mosquitto_pub` shipped with `mo mosquitto_pub -h 127.0.0.1 -t home/bedroom/switch1/available -m "online" ``` -We can simulate the switch being turned on by publishing the "ON" command message: +We can simulate the switch being turned on by publishing the `ON` command message: ```bash mosquitto_pub -h 127.0.0.1 -t home/bedroom/switch1/set -m "ON" From ae9e0b8c1dc9fef6681d2ca60eecd4febf2e1aeb Mon Sep 17 00:00:00 2001 From: Vincent Rischmann Date: Sun, 13 Oct 2024 16:22:28 +0200 Subject: [PATCH 49/67] Fix template syntax in imap.markdown (#35203) --- source/_integrations/imap.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_integrations/imap.markdown b/source/_integrations/imap.markdown index c1403b4e91d..eb34b77664f 100644 --- a/source/_integrations/imap.markdown +++ b/source/_integrations/imap.markdown @@ -145,7 +145,7 @@ Increasing the default maximum message size (2048 bytes) could have a negative i ```yaml template: - - triggers: + - trigger: - trigger: event event_type: "imap_content" id: "custom_event" @@ -229,7 +229,7 @@ The following example shows the usage of the IMAP email content sensor to scan t ```yaml template: - - triggers: + - trigger: - trigger: event event_type: "imap_content" id: "custom_event" @@ -267,7 +267,7 @@ Below is the template sensor which extracts the information from the body of the ```yaml template: - - triggers: + - trigger: - trigger: event event_type: "imap_content" id: "custom_event" @@ -316,7 +316,7 @@ The example below will only set the state to the subject of the email of templat ```yaml template: - - triggers: + - trigger: - trigger: event event_type: "imap_content" id: "custom_event" From 3a55705786a501767056fad6e9373e3e2d3d547b Mon Sep 17 00:00:00 2001 From: Valvin Date: Mon, 14 Oct 2024 08:48:20 +0200 Subject: [PATCH 50/67] docs(renault): add pack information (#35093) * docs(renault): add pack information From this issue: https://github.com/home-assistant/core/issues/119095 * Update renault.markdown * tiny rephrase to make it clearer that these packs are subsriptions --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/renault.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/renault.markdown b/source/_integrations/renault.markdown index 138f4b0d56a..a403dfc3044 100644 --- a/source/_integrations/renault.markdown +++ b/source/_integrations/renault.markdown @@ -38,6 +38,8 @@ This integration provides the following platforms: All vehicles linked to the account should then get added as devices, with sensors added as linked entity. +In some situations, some of the features may require a subscription such as the *Pack EV Remote Control* and/or the *Pack Smart Navigation* subscription. + ## Actions ### Action `renault.ac_start` From 10d6443dd00d1de3981a0978a5a317b4febe6b00 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 09:14:12 +0200 Subject: [PATCH 51/67] build(deps-dev): bump ruby-lsp from 0.19.1 to 0.20.0 (#35215) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 22273a694f3..6c0529719f7 100644 --- a/Gemfile +++ b/Gemfile @@ -11,7 +11,7 @@ group :development do # > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189 gem 'sassc', '2.1.0' gem 'rubocop', '1.66.1' - gem 'ruby-lsp', '0.19.1' + gem 'ruby-lsp', '0.20.0' gem 'rackup', '2.1.0' end diff --git a/Gemfile.lock b/Gemfile.lock index 09c758989ba..2542a3e32bb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -125,9 +125,9 @@ GEM unicode-display_width (>= 2.4.0, < 3.0) rubocop-ast (1.32.3) parser (>= 3.3.1.0) - ruby-lsp (0.19.1) + ruby-lsp (0.20.0) language_server-protocol (~> 3.17.0) - prism (>= 1.1, < 2.0) + prism (>= 1.2, < 2.0) rbs (>= 3, < 4) sorbet-runtime (>= 0.5.10782) ruby-progressbar (1.13.0) @@ -149,7 +149,7 @@ GEM rack-protection (= 4.0.0) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - sorbet-runtime (0.5.11600) + sorbet-runtime (0.5.11602) stringex (2.8.6) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -176,7 +176,7 @@ DEPENDENCIES rackup (= 2.1.0) rake (= 13.2.1) rubocop (= 1.66.1) - ruby-lsp (= 0.19.1) + ruby-lsp (= 0.20.0) sass-globbing (= 1.1.5) sassc (= 2.1.0) sinatra (= 4.0.0) From 2ee573978a60c8ecb30e228459364655fbc4c136 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 09:15:19 +0200 Subject: [PATCH 52/67] build(deps-dev): bump sass-embedded from 1.79.4 to 1.79.5 (#35214) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 2542a3e32bb..ef3ab512a49 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -134,9 +134,10 @@ GEM ruby2_keywords (0.0.5) safe_yaml (1.0.5) sass (3.4.25) - sass-embedded (1.79.4) + sass-embedded (1.79.5-arm64-darwin) + google-protobuf (~> 4.27) + sass-embedded (1.79.5-x86_64-linux-gnu) google-protobuf (~> 4.27) - rake (>= 13) sass-globbing (1.1.5) sass (>= 3.1) sassc (2.1.0) From 547ed43267a96fac951f7932d7ba8d08affb484c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 09:27:57 +0200 Subject: [PATCH 53/67] build(deps): bump rack from 3.1.7 to 3.1.8 (#35216) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index ef3ab512a49..0f920d34559 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -94,7 +94,7 @@ GEM prism (1.2.0) public_suffix (6.0.1) racc (1.8.1) - rack (3.1.7) + rack (3.1.8) rack-protection (4.0.0) base64 (>= 0.1.0) rack (>= 3.0.0, < 4) From 95609413d8e72b89b1676decb0ec6d89daac2b6f Mon Sep 17 00:00:00 2001 From: Andrew Jackson Date: Mon, 14 Oct 2024 11:10:14 +0100 Subject: [PATCH 54/67] Add polling times to Mealie integration (#35222) --- source/_integrations/mealie.markdown | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/_integrations/mealie.markdown b/source/_integrations/mealie.markdown index 4ecf532504f..dd9810f0eb0 100644 --- a/source/_integrations/mealie.markdown +++ b/source/_integrations/mealie.markdown @@ -36,7 +36,7 @@ You create your API token on your Mealie installation: ## Available calendars -The integration will create a calendar for every type of meal plan: +The integration will create a calendar for every type of meal plan, which are updated once an hour: - Breakfast - Lunch @@ -45,11 +45,12 @@ The integration will create a calendar for every type of meal plan: ## Shopping Lists -The integration will create a to-do list for every Mealie shopping list. +The integration will create a to-do list for every Mealie shopping list, which are updated every 5 minutes. ## Sensors -The integration provides the following sensors for the statistics: +The integration provides the following sensors for the statistics, which are updated every 15 minutes: + - number of recipes - categories (such as beverage, dessert, Italian, seafood) - tags (such as alcohol) From 5150cfec1c8b8e3c8c141ff40376604e8aadf0ab Mon Sep 17 00:00:00 2001 From: Andrew Jackson Date: Mon, 14 Oct 2024 11:10:58 +0100 Subject: [PATCH 55/67] Add polling interval details to Mastodon (#35221) --- source/_integrations/mastodon.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/mastodon.markdown b/source/_integrations/mastodon.markdown index 40149c2e01e..52749e335b8 100644 --- a/source/_integrations/mastodon.markdown +++ b/source/_integrations/mastodon.markdown @@ -28,7 +28,7 @@ If you want to grant only required accesses, uncheck all checkboxes then check o ## Sensors -The integration will create sensors for the Mastodon account showing total followers, following, and posts. +The integration will create sensors for the Mastodon account showing total followers, following, and posts. Sensors are updated once an hour. ## Notifications From bf7ce6b6739d57976e4febe2710b71ab42517ca4 Mon Sep 17 00:00:00 2001 From: tronikos Date: Mon, 14 Oct 2024 03:59:41 -0700 Subject: [PATCH 56/67] Mention command_and_search model for Google Cloud STT (#35219) --- source/_integrations/google_cloud.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/google_cloud.markdown b/source/_integrations/google_cloud.markdown index 0eab263d392..b563d98644d 100644 --- a/source/_integrations/google_cloud.markdown +++ b/source/_integrations/google_cloud.markdown @@ -148,7 +148,7 @@ Speech-to-text is priced based on the amount of audio successfully processed by {% configuration %} stt_model: - description: "One of the transcription models [here](https://cloud.google.com/speech-to-text/docs/transcription-model). Defaults to `latest_short`." + description: "One of the transcription models [here](https://cloud.google.com/speech-to-text/docs/transcription-model). Defaults to `latest_short` because this is the recommended one. If you get: `400 Invalid recognition 'config': The requested model is currently not supported for language : ` try changing this to the legacy `command_and_search`." required: false type: string {% endconfiguration %} From 797adb81145478463a67faa6a1dba7da2d0082d2 Mon Sep 17 00:00:00 2001 From: Noah Husby <32528627+noahhusby@users.noreply.github.com> Date: Tue, 15 Oct 2024 02:22:38 -0400 Subject: [PATCH 57/67] Update Cambirdge Audio supported devices (#35238) * Update Cambirdge Audio supported devices * Add Edge NQ --- source/_integrations/cambridge_audio.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/cambridge_audio.markdown b/source/_integrations/cambridge_audio.markdown index 5afd9171bc2..b217670e7f4 100644 --- a/source/_integrations/cambridge_audio.markdown +++ b/source/_integrations/cambridge_audio.markdown @@ -33,6 +33,8 @@ This integration allows you to connect the following devices: - Cambridge Audio 851N - Cambridge Audio MXN10 - Cambridge Audio AXN10 +- Cambridge Audio EXN100 +- Cambridge Audio Edge NQ Older, RS-232 serial-based amplifiers like the [CXA series](https://www.cambridgeaudio.com/usa/en/products/hi-fi/cx-series-2/cxa81) use a different protocol and are not currently supported. From 6b3f7e6b5aa6409c1b2ce27cef628fe2a3852375 Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Tue, 15 Oct 2024 08:25:34 +0200 Subject: [PATCH 58/67] update example (#35233) --- source/_integrations/feedreader.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/feedreader.markdown b/source/_integrations/feedreader.markdown index ef4cd5504b2..6d4d8a4e5d0 100644 --- a/source/_integrations/feedreader.markdown +++ b/source/_integrations/feedreader.markdown @@ -78,4 +78,4 @@ hass.bus.listen(EVENT_FEEDREADER, event_listener) To get started developing custom integrations, please refer to the [developers](/developers) documentation -For a drop in packaged complete example of Feedreader, you can use the [PodCast notifier](https://github.com/CCOSTAN/Home-AssistantConfig/blob/master/config/packages/hasspodcast.yaml). +For a drop in packaged complete example of Feedreader, you can use the [PodCast notifier](https://github.com/CCOSTAN/Home-AssistantConfig/blob/22c19375ac5dcb49e0648aa16c431537407aa5e4/config/packages/hasspodcast.yaml). From f8fb3c12988044da7d468c62cb7e3e26567399b0 Mon Sep 17 00:00:00 2001 From: Cody Cutrer Date: Tue, 15 Oct 2024 00:30:11 -0600 Subject: [PATCH 59/67] Document missing `hue` and `sat` variables in MQTT Template Schema Light (#34624) They're shown in one of the examples, but not explicitly listed as available. --- source/_integrations/light.mqtt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown index 4811d924e0d..fdc64843bd4 100644 --- a/source/_integrations/light.mqtt.markdown +++ b/source/_integrations/light.mqtt.markdown @@ -960,7 +960,7 @@ command_off_template: 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`, `flash`, `transition` and `effect`. Values `red`, `green`, `blue`, `brightness` are provided as integers from range 0-255. Value of `color_temp` is provided as integer representing mired units." + 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 units." required: true type: template command_topic: From 21f59cc019fe667ad3f03a56b5dec0c21c0598f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 08:37:22 +0200 Subject: [PATCH 60/67] build(deps-dev): bump sorbet-runtime from 0.5.11602 to 0.5.11604 (#35250) --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 0f920d34559..2e62fb3367d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -150,7 +150,7 @@ GEM rack-protection (= 4.0.0) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - sorbet-runtime (0.5.11602) + sorbet-runtime (0.5.11604) stringex (2.8.6) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) From f72583883341f367dcca3443762c749f128b8164 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 08:37:37 +0200 Subject: [PATCH 61/67] build(deps-dev): bump rubocop from 1.66.1 to 1.67.0 (#35249) --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 6c0529719f7..333d0306a4b 100644 --- a/Gemfile +++ b/Gemfile @@ -10,7 +10,7 @@ group :development do gem 'stringex', '2.8.6' # > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189 gem 'sassc', '2.1.0' - gem 'rubocop', '1.66.1' + gem 'rubocop', '1.67.0' gem 'ruby-lsp', '0.20.0' gem 'rackup', '2.1.0' end diff --git a/Gemfile.lock b/Gemfile.lock index 2e62fb3367d..c9df1c68da7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -113,7 +113,7 @@ GEM regexp_parser (2.9.2) rexml (3.3.8) rouge (4.4.0) - rubocop (1.66.1) + rubocop (1.67.0) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) @@ -176,7 +176,7 @@ DEPENDENCIES nokogiri (= 1.16.7) rackup (= 2.1.0) rake (= 13.2.1) - rubocop (= 1.66.1) + rubocop (= 1.67.0) ruby-lsp (= 0.20.0) sass-globbing (= 1.1.5) sassc (= 2.1.0) From 58738c425aeab11813bd6ec3e37faa9d5b02aa81 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 08:45:08 +0200 Subject: [PATCH 62/67] build(deps-dev): bump ruby-lsp from 0.20.0 to 0.20.1 (#35263) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 333d0306a4b..e40b8611dad 100644 --- a/Gemfile +++ b/Gemfile @@ -11,7 +11,7 @@ group :development do # > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189 gem 'sassc', '2.1.0' gem 'rubocop', '1.67.0' - gem 'ruby-lsp', '0.20.0' + gem 'ruby-lsp', '0.20.1' gem 'rackup', '2.1.0' end diff --git a/Gemfile.lock b/Gemfile.lock index c9df1c68da7..df3cc18864e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -125,7 +125,7 @@ GEM unicode-display_width (>= 2.4.0, < 3.0) rubocop-ast (1.32.3) parser (>= 3.3.1.0) - ruby-lsp (0.20.0) + ruby-lsp (0.20.1) language_server-protocol (~> 3.17.0) prism (>= 1.2, < 2.0) rbs (>= 3, < 4) @@ -177,7 +177,7 @@ DEPENDENCIES rackup (= 2.1.0) rake (= 13.2.1) rubocop (= 1.67.0) - ruby-lsp (= 0.20.0) + ruby-lsp (= 0.20.1) sass-globbing (= 1.1.5) sassc (= 2.1.0) sinatra (= 4.0.0) From 5229bcbe02285226f607136a1b868ba19720c6f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 08:46:03 +0200 Subject: [PATCH 63/67] build(deps-dev): bump sass-embedded from 1.79.5 to 1.80.1 (#35262) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index df3cc18864e..ebc1bf9d8ee 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -134,10 +134,10 @@ GEM ruby2_keywords (0.0.5) safe_yaml (1.0.5) sass (3.4.25) - sass-embedded (1.79.5-arm64-darwin) - google-protobuf (~> 4.27) - sass-embedded (1.79.5-x86_64-linux-gnu) - google-protobuf (~> 4.27) + sass-embedded (1.80.1-arm64-darwin) + google-protobuf (~> 4.28) + sass-embedded (1.80.1-x86_64-linux-gnu) + google-protobuf (~> 4.28) sass-globbing (1.1.5) sass (>= 3.1) sassc (2.1.0) From f2babcaa4874791842a8742fb5ea811fbb650e7a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 18 Oct 2024 09:20:08 +0200 Subject: [PATCH 64/67] build(deps-dev): bump sorbet-runtime from 0.5.11604 to 0.5.11608 (#35277) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index ebc1bf9d8ee..318b9770090 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -150,7 +150,7 @@ GEM rack-protection (= 4.0.0) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - sorbet-runtime (0.5.11604) + sorbet-runtime (0.5.11608) stringex (2.8.6) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) From 6ca30173ca6e5045f1a4d176b0e9b16027abaab8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 18 Oct 2024 09:20:43 +0200 Subject: [PATCH 65/67] build(deps-dev): bump sass-embedded from 1.80.1 to 1.80.2 (#35276) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 318b9770090..3058c6cba04 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -134,9 +134,9 @@ GEM ruby2_keywords (0.0.5) safe_yaml (1.0.5) sass (3.4.25) - sass-embedded (1.80.1-arm64-darwin) + sass-embedded (1.80.2-arm64-darwin) google-protobuf (~> 4.28) - sass-embedded (1.80.1-x86_64-linux-gnu) + sass-embedded (1.80.2-x86_64-linux-gnu) google-protobuf (~> 4.28) sass-globbing (1.1.5) sass (>= 3.1) From 4cce052beb3a79dddf7f6ee1d50c8069e88f9b34 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Fri, 18 Oct 2024 17:08:10 +0200 Subject: [PATCH 66/67] 2024.10.3 (#35282) --- _config.yml | 4 +- .../_posts/2024-10-02-release-202410.markdown | 53 +++++++++++++++++++ source/changelogs/core-2024.10.markdown | 52 ++++++++++++++++++ 3 files changed, 107 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index e8bd60c9831..9ec2cc56df4 100644 --- a/_config.yml +++ b/_config.yml @@ -108,8 +108,8 @@ social: # Home Assistant release details current_major_version: 2024 current_minor_version: 10 -current_patch_version: 2 -date_released: 2024-10-11 +current_patch_version: 3 +date_released: 2024-10-18 # 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/source/_posts/2024-10-02-release-202410.markdown b/source/_posts/2024-10-02-release-202410.markdown index 173668b3952..08eed388d92 100644 --- a/source/_posts/2024-10-02-release-202410.markdown +++ b/source/_posts/2024-10-02-release-202410.markdown @@ -55,6 +55,7 @@ Enjoy the release! - [Patch releases](#patch-releases) - [2024.10.1 - October 4](#2024101---october-4) - [2024.10.2 - October 11](#2024102---october-11) + - [2024.10.3 - October 18](#2024103---october-18) - [Need help? Join the community!](#need-help-join-the-community) - [Backward-incompatible changes](#backward-incompatible-changes) - [All changes](#all-changes) @@ -685,6 +686,58 @@ every Friday. [@tr4nt0r]: https://github.com/tr4nt0r [@tronikos]: https://github.com/tronikos +### 2024.10.3 - October 18 + +- Update home-assistant-bluetooth to 1.13.0 ([@cdce8p] - [#127691]) +- Fix printer uptime fluctuations in IPP ([@mib1185] - [#127725]) +- Improve discovery of WMS WebControl pro by updating IP address ([@mback2k] - [#128007]) +- Use the same ZHA database path during startup and when loading device triggers ([@puddly] - [#128130]) +- Fix playing media via roku ([@ctalkington] - [#128133]) +- Bump yt-dlp to 2024.10.07 ([@joostlek] - [#128182]) +- Fix daikin entities not refreshing quickly ([@adampetrovic] - [#128230]) +- Keep the provided name when creating a tag ([@silamon] - [#128240]) +- Update aioairzone to v0.9.4 ([@Noltari] - [#127792]) +- Update aioairzone to v0.9.5 ([@Noltari] - [#128265]) +- Bump gcal_sync to 6.1.6 ([@allenporter] - [#128270]) +- Bump solarlog_cli to 0.3.2 ([@dontinelli] - [#128293]) +- Bump pyblu to 1.0.4 ([@LouisChrist] - [#128482]) +- Increase Z-Wave fallback thermostat range to 0-50 C ([@MindFreeze] - [#128543]) +- Bump pyotgw to 2.2.2 ([@mvn23] - [#128594]) + +[#126782]: https://github.com/home-assistant/core/pull/126782 +[#127566]: https://github.com/home-assistant/core/pull/127566 +[#127691]: https://github.com/home-assistant/core/pull/127691 +[#127725]: https://github.com/home-assistant/core/pull/127725 +[#127792]: https://github.com/home-assistant/core/pull/127792 +[#128007]: https://github.com/home-assistant/core/pull/128007 +[#128130]: https://github.com/home-assistant/core/pull/128130 +[#128133]: https://github.com/home-assistant/core/pull/128133 +[#128176]: https://github.com/home-assistant/core/pull/128176 +[#128182]: https://github.com/home-assistant/core/pull/128182 +[#128230]: https://github.com/home-assistant/core/pull/128230 +[#128240]: https://github.com/home-assistant/core/pull/128240 +[#128265]: https://github.com/home-assistant/core/pull/128265 +[#128270]: https://github.com/home-assistant/core/pull/128270 +[#128293]: https://github.com/home-assistant/core/pull/128293 +[#128482]: https://github.com/home-assistant/core/pull/128482 +[#128543]: https://github.com/home-assistant/core/pull/128543 +[#128594]: https://github.com/home-assistant/core/pull/128594 +[@LouisChrist]: https://github.com/LouisChrist +[@MindFreeze]: https://github.com/MindFreeze +[@Noltari]: https://github.com/Noltari +[@adampetrovic]: https://github.com/adampetrovic +[@allenporter]: https://github.com/allenporter +[@cdce8p]: https://github.com/cdce8p +[@ctalkington]: https://github.com/ctalkington +[@dontinelli]: https://github.com/dontinelli +[@frenck]: https://github.com/frenck +[@joostlek]: https://github.com/joostlek +[@mback2k]: https://github.com/mback2k +[@mib1185]: https://github.com/mib1185 +[@mvn23]: https://github.com/mvn23 +[@puddly]: https://github.com/puddly +[@silamon]: https://github.com/silamon + ## Need help? Join the community! Home Assistant has a great community of users who are all more than willing diff --git a/source/changelogs/core-2024.10.markdown b/source/changelogs/core-2024.10.markdown index 412d376ce19..737bde2a00c 100644 --- a/source/changelogs/core-2024.10.markdown +++ b/source/changelogs/core-2024.10.markdown @@ -1376,6 +1376,58 @@ For a summary in a more readable format: [@tr4nt0r]: https://github.com/tr4nt0r [@tronikos]: https://github.com/tronikos +## Release 2024.10.3 - October 18 + +- Update home-assistant-bluetooth to 1.13.0 ([@cdce8p] - [#127691]) +- Fix printer uptime fluctuations in IPP ([@mib1185] - [#127725]) +- Improve discovery of WMS WebControl pro by updating IP address ([@mback2k] - [#128007]) +- Use the same ZHA database path during startup and when loading device triggers ([@puddly] - [#128130]) +- Fix playing media via roku ([@ctalkington] - [#128133]) +- Bump yt-dlp to 2024.10.07 ([@joostlek] - [#128182]) +- Fix daikin entities not refreshing quickly ([@adampetrovic] - [#128230]) +- Keep the provided name when creating a tag ([@silamon] - [#128240]) +- Update aioairzone to v0.9.4 ([@Noltari] - [#127792]) +- Update aioairzone to v0.9.5 ([@Noltari] - [#128265]) +- Bump gcal_sync to 6.1.6 ([@allenporter] - [#128270]) +- Bump solarlog_cli to 0.3.2 ([@dontinelli] - [#128293]) +- Bump pyblu to 1.0.4 ([@LouisChrist] - [#128482]) +- Increase Z-Wave fallback thermostat range to 0-50 C ([@MindFreeze] - [#128543]) +- Bump pyotgw to 2.2.2 ([@mvn23] - [#128594]) + +[#126782]: https://github.com/home-assistant/core/pull/126782 +[#127566]: https://github.com/home-assistant/core/pull/127566 +[#127691]: https://github.com/home-assistant/core/pull/127691 +[#127725]: https://github.com/home-assistant/core/pull/127725 +[#127792]: https://github.com/home-assistant/core/pull/127792 +[#128007]: https://github.com/home-assistant/core/pull/128007 +[#128130]: https://github.com/home-assistant/core/pull/128130 +[#128133]: https://github.com/home-assistant/core/pull/128133 +[#128176]: https://github.com/home-assistant/core/pull/128176 +[#128182]: https://github.com/home-assistant/core/pull/128182 +[#128230]: https://github.com/home-assistant/core/pull/128230 +[#128240]: https://github.com/home-assistant/core/pull/128240 +[#128265]: https://github.com/home-assistant/core/pull/128265 +[#128270]: https://github.com/home-assistant/core/pull/128270 +[#128293]: https://github.com/home-assistant/core/pull/128293 +[#128482]: https://github.com/home-assistant/core/pull/128482 +[#128543]: https://github.com/home-assistant/core/pull/128543 +[#128594]: https://github.com/home-assistant/core/pull/128594 +[@LouisChrist]: https://github.com/LouisChrist +[@MindFreeze]: https://github.com/MindFreeze +[@Noltari]: https://github.com/Noltari +[@adampetrovic]: https://github.com/adampetrovic +[@allenporter]: https://github.com/allenporter +[@cdce8p]: https://github.com/cdce8p +[@ctalkington]: https://github.com/ctalkington +[@dontinelli]: https://github.com/dontinelli +[@frenck]: https://github.com/frenck +[@joostlek]: https://github.com/joostlek +[@mback2k]: https://github.com/mback2k +[@mib1185]: https://github.com/mib1185 +[@mvn23]: https://github.com/mvn23 +[@puddly]: https://github.com/puddly +[@silamon]: https://github.com/silamon + [#102371]: https://github.com/home-assistant/core/pull/102371 [#106570]: https://github.com/home-assistant/core/pull/106570 [#112806]: https://github.com/home-assistant/core/pull/112806 From 3dd3f5daf62a46e8e29bb8f281caab2723261306 Mon Sep 17 00:00:00 2001 From: "A. Lochotzke" Date: Fri, 18 Oct 2024 17:26:24 +0200 Subject: [PATCH 67/67] Update mqtt.markdown (#35284) --- source/_integrations/mqtt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown index 71486e19b5e..3538aabbbb1 100644 --- a/source/_integrations/mqtt.markdown +++ b/source/_integrations/mqtt.markdown @@ -215,7 +215,7 @@ MQTT Birth and Last Will messages can be customized or disabled from the UI. To ## Testing your setup -The `mosquitto` broker package ships command line tools (often as `*-clients` package) to send and receive MQTT messages. For sending test messages to a broker running on `localhost`, to can use [`mosquitto_pub`](https://mosquitto.org/man/mosquitto_pub-1.html), check the example below: +The `mosquitto` broker package ships command line tools (often as `*-clients` package) to send and receive MQTT messages. For sending test messages to a broker running on `localhost`, you can use [`mosquitto_pub`](https://mosquitto.org/man/mosquitto_pub-1.html), check the example below: ```bash mosquitto_pub -h 127.0.0.1 -t homeassistant/switch/1/on -m "Switch is ON"