From 18ca55963f68412bf487f01b99938a1e206600e8 Mon Sep 17 00:00:00 2001 From: Marco Colombo Date: Mon, 19 Sep 2022 14:36:50 +0300 Subject: [PATCH 01/53] Add brand (#24163) --- source/_integrations/led_ble.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/led_ble.markdown b/source/_integrations/led_ble.markdown index e8803452fc6..8fbaec6d290 100644 --- a/source/_integrations/led_ble.markdown +++ b/source/_integrations/led_ble.markdown @@ -42,6 +42,7 @@ These devices have been sold under many brands, including: - ILC - LEDBlue - LED BLE +- Magic Blue - MCWOFI - PHOPOLLO - RESHAKE From 91453cbef241453431239fbfe2f17f7aa672f4df Mon Sep 17 00:00:00 2001 From: Justin Vanderhooft Date: Mon, 19 Sep 2022 08:01:25 -0400 Subject: [PATCH 02/53] Add number platform to Melnor Bluetooth docs (#24162) --- source/_integrations/melnor.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/melnor.markdown b/source/_integrations/melnor.markdown index 465866dff9a..f69941bf072 100644 --- a/source/_integrations/melnor.markdown +++ b/source/_integrations/melnor.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@vanstinator' ha_domain: melnor ha_platforms: + - number - sensor - switch ha_integration_type: integration From dfcd2c61894b3a79c3b614e0cbc797741ab628da Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Mon, 19 Sep 2022 15:45:06 +0200 Subject: [PATCH 03/53] Add some hints to Synology DSM (#24176) --- source/_integrations/synology_dsm.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_integrations/synology_dsm.markdown b/source/_integrations/synology_dsm.markdown index 25684887cac..8ed6c549f18 100644 --- a/source/_integrations/synology_dsm.markdown +++ b/source/_integrations/synology_dsm.markdown @@ -25,7 +25,7 @@ ha_platforms: ha_integration_type: integration --- -The Synology DSM sensor platform provides access to various statistics from your [Synology NAS](https://www.synology.com) as well as cameras from the [Surveillance Station](https://www.synology.com/en-us/surveillance). +The Synology DSM integration provides access to various statistics from your [Synology NAS](https://www.synology.com) (_DSM 5.x and higher_) as well as cameras from the [Surveillance Station](https://www.synology.com/en-us/surveillance). {% include integrations/config_flow.md %} @@ -52,6 +52,8 @@ Due to the nature of the Synology DSM API, it is required to grant the user admi When creating the user, it is possible to deny access to all locations and applications. By doing this, the user will not be able to login to the web interface or view any of the files on the Synology NAS. It is still able to read the utilization and storage information using the API. +If you want to add cameras from [Surveillance Station](https://www.synology.com/en-us/surveillance), the user needs application permission for [Surveillance Station](https://www.synology.com/en-us/surveillance). + ### If you utilize 2-Step Verification or Two Factor Authentication (2FA) with your Synology NAS If you have the "Enforce 2-step verification for the following users" option checked under **Control Panel > User > Advanced > 2-Step Verification**, you'll need to configure the 2-step verification/one-time password (OTP) for the user you just created before the credentials for this user will work with Home Assistant. From 7f4ab79782d34e1cfb0fdd065aae9206aeeed647 Mon Sep 17 00:00:00 2001 From: kerta1n <36344851+kerta1n@users.noreply.github.com> Date: Mon, 19 Sep 2022 09:52:46 -0400 Subject: [PATCH 04/53] Docker Compose V2 changes (#24177) --- source/_includes/installation/container.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_includes/installation/container.md b/source/_includes/installation/container.md index cf5097142b6..7b1685a619b 100644 --- a/source/_includes/installation/container.md +++ b/source/_includes/installation/container.md @@ -51,7 +51,7 @@ If you change the configuration you have to restart the server. To do that you h content: | ```bash - docker-compose restart + docker compose restart ``` {% endtabbed_block %} @@ -59,19 +59,19 @@ If you change the configuration you have to restart the server. To do that you h ### Docker Compose
- - In order to use `docker-compose` you first need to [install `docker-compose`](https://docs.docker.com/compose/install/) on your system. + + `docker compose` should [already be installed](https://www.docker.com/blog/announcing-compose-v2-general-availability/) on your system. If not, you can [manually](https://docs.docker.com/compose/install/linux/) install it.
-As the Docker command becomes more complex, switching to `docker-compose` can be preferable and support automatically restarting on failure or system restart. Create a `docker-compose.yml` file: +As the Docker command becomes more complex, switching to `docker compose` can be preferable and support automatically restarting on failure or system restart. Create a `compose.yml` file: {% include installation/container/compose.md %} Start it by running: ```bash -docker-compose up -d +docker compose up -d ``` Once the Home Assistant Container is running Home Assistant should be accessible using `http://:8123` (replace with the hostname or IP of the system). You can continue with onboarding. From 6e5f4a08e306918e254f3f914506ec49b96ca3ef Mon Sep 17 00:00:00 2001 From: Hedda Date: Tue, 20 Sep 2022 02:06:26 +0200 Subject: [PATCH 05/53] Add guidance for dealing with Bluetooth interference (#23688) Co-authored-by: J. Nick Koston --- source/_integrations/bluetooth.markdown | 42 ++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/source/_integrations/bluetooth.markdown b/source/_integrations/bluetooth.markdown index cd4edf6f346..9599b1de385 100644 --- a/source/_integrations/bluetooth.markdown +++ b/source/_integrations/bluetooth.markdown @@ -128,10 +128,42 @@ Deleting the config entry for this integration will release control of the adapt ### Bluetooth interference with other devices -Devices that are using the 2.4 GHz band, like Wi-Fi, Zigbee, and USB3 devices (and their cable connections) are known to affect Bluetooth reception. Especially external SSD drives with USB3 cables are known to block the Bluetooth signal. Also, metal casings can decrease the Bluetooth performance of internal Bluetooth Adapters. +Sources of interference for radios can lead to transmission/reception loss or connection problems and show symptoms such as errors/failures when sending and receiving Bluetooth messages that can cause significant degradation in performance. Below are some basic but essential tips for getting a good setup starting point to achieve better signal quality, coverage, and extended range. -The following tips may improve reception of the Bluetooth Adapter: +Following all these optimization tips below should significantly improve the reception of your Bluetooth radio adapter. The below insights describe working around the well-known limitations of low-power 2.4 GHz digital radio. It can resolve or avoid many known issues caused by interference or poor placement of your Bluetooth radio adapter or devices. -- Try to place USB3 devices (SSD, etc.) as far away as possible from your Bluetooth Adapter, e.g., by using an extension cable. -- Use a USB3 extension cable with proper shielding and ferrite clamps. -- Use a (good quality) external Bluetooth adapter with an antenna. +Computers, peripherals, and devices generate [electromagnetic interference (also known as EMI/EMI/RMI)](https://en.wikipedia.org/wiki/Electromagnetic_interference), which can interfere with signals transmissions on the 2.4 GHz radio band frequency, and degrade the wireless communication with your Bluetooth adapter/devices. + +For example, unshielded USB 3 port and their cables are especially infamously known to affect 2.4 GHz radio reception. Place your Bluetooth adapter far away as possible from any potential sources of EMI/EMI/RMI by using a long, adequately shielded USB extension cable. + +#### Simple actions that should improve most Bluetooth setups and common root causes of interference + +- Bluetooth adapter hardware: + - Bad performance from old/outdated Bluetooth adapter hardware or poor Bluetooth adapter antenna: + - Buy and use a supported Bluetooth USB adapter based on newer/modern chip hardware. + - Consider a Bluetooth adapter that has an external antenna. + - While older adapters might work, they could have obsolete hardware or old firmware, which prevents reliable operation. + - Poor or outdated Bluetooth adapter firmware on the Bluetooth adapter: + - Update to the latest Bluetooth chip firmware on the Bluetooth adapter. Updating firmware is usually straightforward if the manufacturer or the chip maker provides one. +- Bluetooth adapters are RFI sensitive and can be very susceptible to all types of EMI/EMF interference: + - Poor placement of the Bluetooth adapter or wrong orientation of Bluetooth adapter antenna: + - Use a long USB extension cable to place the Bluetooth adapter away from interference and obstacles. + - Ensure the USB extension cable is adequately shielded (thick cables usually have this). + - A USB extension cable makes orienting the Bluetooth adapter/antenna easier. + - Try different physical placement and orientations of the Bluetooth adapter or its antenna: + - The optimal placement of the Bluetooth adapter is close to the middle of the house as possible. + - Try to place the Bluetooth adapter at some distance away from walls, ceilings, and floors. + - Try different orientations of the adapter's external antenna (or whole Bluetooth adapter). + - USB 3.0 ports/computers/peripherals are known culprits of RFI/EMI/EMF disruption. (See Ref. [1](https://www.usb.org/sites/default/files/327216.pdf) and [2](https://www.unit3compliance.co.uk/2-4ghz-intra-system-or-self-platform-interference-demonstration/)). + - Make sure to only connect the Bluetooth USB adapter to a USB 2.0 port (and not to a USB 3.x port). + - If your computer only has a USB 3.x port then connect the adapter via a powered USB 2.0 hub: + - A USB 2.0 hub will convert USB 3.0 to a USB 2.0 port and avoid USB 3.0 EMF. + - A USB 2.0 hub that uses an external power supply will ensure power requirements are fulfilled. + - Shield any unshielded computers/peripherals/devices by adding all-metal enclosures/chassis/casings. + - Single-board-computers and USB 3.x hard drives are especially known as source of EMF/EMI/RFI. + - Be aware metal casings can decrease the performance of internal/built-in Bluetooth adapters. + - Also, be sure to use adequately shielded USB cables for any such peripherals/devices too. + - 2.4 GHz RF Interference (RFI) from Wi-Fi Routers and Wi-Fi Access Points or other devices: + - While Bluetooth is designed to coexist with Wi-Fi, its stronger signal can interfere. + - To play it safe, try to place your Bluetooth adapter away from Wi-Fi access points. + - Place Bluetooth adapters far away from electrical/power wires/cables, power supplies, and household appliances. From b7ecea939732e1a922ae330095a0a7f5bf49df2f Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 20 Sep 2022 01:20:56 +0000 Subject: [PATCH 06/53] Embed Matter workshop video --- ...29-matter-in-home-assistant-workshop-announcement.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_posts/2022-05-29-matter-in-home-assistant-workshop-announcement.markdown b/source/_posts/2022-05-29-matter-in-home-assistant-workshop-announcement.markdown index 1af915b0990..5d183df08ab 100644 --- a/source/_posts/2022-05-29-matter-in-home-assistant-workshop-announcement.markdown +++ b/source/_posts/2022-05-29-matter-in-home-assistant-workshop-announcement.markdown @@ -12,7 +12,9 @@ categories: og_image: /images/blog/2022-05-matter-in-home-assistant-workshop-announcement/social.png --- -Decorative header. + + + ## [The workshop instructions can be found here.](/matter-june-22) From 3896980244c3cb5176ab25f7bbbef5b17f7f1fa6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Sep 2022 16:53:46 +0200 Subject: [PATCH 07/53] Bump textlint from 12.2.1 to 12.2.2 (#24185) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 328 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 166 insertions(+), 164 deletions(-) diff --git a/package-lock.json b/package-lock.json index f66dc1a71c2..d975887287c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "remark-lint-fenced-code-flag": "^3.1.1", "remark-lint-no-shell-dollars": "^3.1.1", "remark-stringify": "^10.0.2", - "textlint": "^12.2.1", + "textlint": "^12.2.2", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^3.0.3" @@ -228,44 +228,44 @@ "dev": true }, "node_modules/@textlint/ast-node-types": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-12.2.1.tgz", - "integrity": "sha512-NXYza6aG1+LdZ4g83gjRhDht+gdrTjJYkdcQhpvzNCtTar/sVpaykkauRcAKLhkIWrQpfb311pfMlU6qNDW76Q==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-12.2.2.tgz", + "integrity": "sha512-VQAXUSGdmEajHXrMxeM9ZTS8UBJSVB0ghJFHpFfqYKlcDsjIqClSmTprY6521HoCoSLoUIGBxTC3jQyUMJFIWw==", "dev": true }, "node_modules/@textlint/ast-tester": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-12.2.1.tgz", - "integrity": "sha512-QGg7wxFLpsEAb7uxYPAO6F/QxDoX50wQ8aQ378RbpcQK57J9r9TQfV5Sieuta5dJORUrrMIuIrP4qU7P+1YyUw==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-12.2.2.tgz", + "integrity": "sha512-l5VP2LG+cFCjVvBR3uRrXBeoElKLic2rG+tTQUsH/rywh3TeeDKsHZBk1gGz8kAHVoeEuuH7lx0Wu8AjP4AqGw==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^12.2.1", + "@textlint/ast-node-types": "^12.2.2", "debug": "^4.3.4" } }, "node_modules/@textlint/ast-traverse": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-12.2.1.tgz", - "integrity": "sha512-uwppnDZRmRhH8R4WrkKAvwAbKcYux2yG/XqKlADuFd2T4hSMTlZOBLxDvXohLKY617HHM32/G99HJlmFFvP4GA==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-12.2.2.tgz", + "integrity": "sha512-ROd6W9P76DFA9hv7wCf1+Dc6aehLcsd0/3qKerQN/Luc3B2ek+/qJbGgWeAEsSBKl9LVLJhTBydmdgOAHrVjwA==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^12.2.1" + "@textlint/ast-node-types": "^12.2.2" } }, "node_modules/@textlint/feature-flag": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-12.2.1.tgz", - "integrity": "sha512-Vwn1VKaqNvhMteXNdvk+5duGzlG0MwSjkufU3AVaBQsS4SH4dchSvULpKc+r4BOTSzybNappN0APEcMjOx0Lxg==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-12.2.2.tgz", + "integrity": "sha512-L0v/ZjxmdzRXygja1WiXBjA2ZczvU3cG6qkwME4JGKwUsbEa9UzpwD8i3yBoO7ISkjkMpPM5BYD3AtJgQpCuEg==", "dev": true }, "node_modules/@textlint/fixer-formatter": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-12.2.1.tgz", - "integrity": "sha512-Y4FT2zVyYCxZCJ19tdfhBKr/FtCDP03iW+gfF6zHAjQaNPEGUU7ZfVUBJVVYBWOuHT/Zk22kcJZVFSINacPybQ==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-12.2.2.tgz", + "integrity": "sha512-uKJScqlJvIP9ttVxSq4632kYUjeEhsqc1mLmbViFd+H+GGtrKMwhHYI4zs9/6PQQxE1sUy6dBVkh/LAjgqOaUA==", "dev": true, "dependencies": { - "@textlint/module-interop": "^12.2.1", - "@textlint/types": "^12.2.1", + "@textlint/module-interop": "^12.2.2", + "@textlint/types": "^12.2.2", "chalk": "^4.1.2", "debug": "^4.3.4", "diff": "^4.0.2", @@ -277,33 +277,33 @@ } }, "node_modules/@textlint/kernel": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-12.2.1.tgz", - "integrity": "sha512-imKBeglOKVwsVmrCDzIHf8uiYXtEy0VFyPPb7GYiLhA2pImh59QOtuoPiMT0h8ctV5Aa2konOQVV6jM+JJ9xkQ==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-12.2.2.tgz", + "integrity": "sha512-rDa//HGBQh2BTcJvsgMDP1WRaVxwa57zeE6FPXUdaIA41GGKupQq9GXX8P0PcAVo9gxzOFnMrtbBw7mkQYu4hQ==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^12.2.1", - "@textlint/ast-tester": "^12.2.1", - "@textlint/ast-traverse": "^12.2.1", - "@textlint/feature-flag": "^12.2.1", - "@textlint/source-code-fixer": "^12.2.1", - "@textlint/types": "^12.2.1", - "@textlint/utils": "^12.2.1", + "@textlint/ast-node-types": "^12.2.2", + "@textlint/ast-tester": "^12.2.2", + "@textlint/ast-traverse": "^12.2.2", + "@textlint/feature-flag": "^12.2.2", + "@textlint/source-code-fixer": "^12.2.2", + "@textlint/types": "^12.2.2", + "@textlint/utils": "^12.2.2", "debug": "^4.3.4", "deep-equal": "^1.1.1", "structured-source": "^3.0.2" } }, "node_modules/@textlint/linter-formatter": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-12.2.1.tgz", - "integrity": "sha512-xfVRM+DRrJzBswzrYpmNDJDfapYyogOGlwOXb9Omc7/MvipVreG0WvtgSgxchJ+1nPJwsOPES8PAgQYcPR20+Q==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-12.2.2.tgz", + "integrity": "sha512-R4/n02lNPqiTT1WuxBe4Lh1vUZUME020y+cD8fDn++GR4QlEcWaWWaYNz5ZDtRJ6Li9CYnc6MC6uf2jnTcmFXw==", "dev": true, "dependencies": { "@azu/format-text": "^1.0.1", "@azu/style-format": "^1.0.0", - "@textlint/module-interop": "^12.2.1", - "@textlint/types": "^12.2.1", + "@textlint/module-interop": "^12.2.2", + "@textlint/types": "^12.2.2", "chalk": "^4.1.2", "debug": "^4.3.4", "is-file": "^1.0.0", @@ -319,13 +319,14 @@ } }, "node_modules/@textlint/markdown-to-ast": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-12.2.1.tgz", - "integrity": "sha512-p+LlVcrgHnSNEWWflYU412uu+v4Cejs6hmI4SgZCheNg4u7Ik78aKgpe4jT5BhjLSBZ/KP6IrJxtCUOoJIUWmQ==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-12.2.2.tgz", + "integrity": "sha512-OP0cnGCzt8Bbfhn8fO/arQSHBhmuXB4maSXH8REJAtKRpTADWOrbuxAOaI9mjQ7EMTDiml02RZ9MaELQAWAsqQ==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^12.2.1", + "@textlint/ast-node-types": "^12.2.2", "debug": "^4.3.4", + "mdast-util-gfm-autolink-literal": "^0.1.0", "remark-footnotes": "^3.0.0", "remark-frontmatter": "^3.0.0", "remark-gfm": "^1.0.0", @@ -653,61 +654,61 @@ } }, "node_modules/@textlint/module-interop": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-12.2.1.tgz", - "integrity": "sha512-/SixwKngWuTvVl9AArK4FEWGrNAwD7/ABvLCy/pdFprljnUa87P5JvSi7/v1PjpAXcnMQ2r04wDJjegs9oblBA==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-12.2.2.tgz", + "integrity": "sha512-3OVZDJ8GCgQ3V+dm5btCwhZhJUEO5xR7jEMI6i9n1/gA6yePBM4b1qT1gwYUItthNRFqy6q5x4zTx9MKqBGVGg==", "dev": true }, "node_modules/@textlint/source-code-fixer": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-12.2.1.tgz", - "integrity": "sha512-yNkWcTxCcoz24b64rGUVDr2MzQdv3I1o2o7HuphCmGlAQztVzMGvY/GNzqUWW42+k8S0zRq3Saxz1XoMUvR5UA==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-12.2.2.tgz", + "integrity": "sha512-wk/8MmF3m1U9IAqGrvR0yehHsRGDfXuVAkXSahyRmafSwn88p8oS/iY6qDjECADVXJEnuRuxOcQ1GPlKM/eFOg==", "dev": true, "dependencies": { - "@textlint/types": "^12.2.1", + "@textlint/types": "^12.2.2", "debug": "^4.3.4" } }, "node_modules/@textlint/text-to-ast": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-12.2.1.tgz", - "integrity": "sha512-NcuFa8iQglIMBQ1OaR1IYAIYJfBcTACVD0YtPGrdN0gkqC8TEfP5xIldiSxhkWiLPr3TQ4Mg7d6Ev5RH67n7pA==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-12.2.2.tgz", + "integrity": "sha512-LgCqy1y4oQfDws6rqYSlQaYyiIGRQHcGMT+ukbpBkwEtzzh9urbr6NIeVnHhEuZUITl+pZCHyHeKF2/RlGsn6Q==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^12.2.1" + "@textlint/ast-node-types": "^12.2.2" } }, "node_modules/@textlint/textlint-plugin-markdown": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-12.2.1.tgz", - "integrity": "sha512-BAjkVPMO5fzf6n5M5SwgHNyTwByE86BmjaNpBDhKNcSBctUnfX7nLCvQY8mGMkvefHufyi3oWIqDcZoZQn0PYQ==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-12.2.2.tgz", + "integrity": "sha512-ougYCuGavxCPwsFZZ/fCGzoaMxwvy2yM1siKa7Ra9chZHjxtj3y76m0QtJkboFcz/FEZV8tqh96T9Bq/4jD+nQ==", "dev": true, "dependencies": { - "@textlint/markdown-to-ast": "^12.2.1" + "@textlint/markdown-to-ast": "^12.2.2" } }, "node_modules/@textlint/textlint-plugin-text": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-12.2.1.tgz", - "integrity": "sha512-8Dt1Sn9AdqvweVxCLvlj1IC+pDxPRpdgERY6FzD6kLNpMAyl7luVWtpql19CvTYlxhPUHRxsETDBkRCQFClXsw==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-12.2.2.tgz", + "integrity": "sha512-0HLOr9kQRXKqEcZvIaNAnOhixNfTSpveOHBuhHepByDXkXcUrb+BJdxZzhtgVu4twBAR3qJ3KYhDE8XPHc9iDg==", "dev": true, "dependencies": { - "@textlint/text-to-ast": "^12.2.1" + "@textlint/text-to-ast": "^12.2.2" } }, "node_modules/@textlint/types": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-12.2.1.tgz", - "integrity": "sha512-nOQ3udAz9ulDZgETFY3vr3R+ubL2cevPLA3GmDs29ErvIHfK3pD+PpyO/OsS7HZKXolmpuMonVA9+J9Jybf3/Q==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-12.2.2.tgz", + "integrity": "sha512-fmKH9w8O3XOvIvf3cPNI7PWdJScRIiJYJ5VsoIMp/o41Hlkt5m//MObfAPYpQ/3nuXhzlB05kfRUxyj/NvcPAQ==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^12.2.1" + "@textlint/ast-node-types": "^12.2.2" } }, "node_modules/@textlint/utils": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-12.2.1.tgz", - "integrity": "sha512-e4jDM6bMZddFi48e5CzbvnG9ombeK2ZkjLnCaSWalJI3NTlCDm/ZDqfaqac/YPFbzoRQMqNkaoTW/9GZVjr6Hg==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-12.2.2.tgz", + "integrity": "sha512-74p3VWj5KlmXs+gFRJALEuUsyt/Sz4t91KQ//LAX1zNTY/aK0nk8LxipUcDZeBHArn3Gh5nf3SwlTgUZ7jvNrQ==", "dev": true }, "node_modules/@types/concat-stream": { @@ -1443,9 +1444,9 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dev": true, "dependencies": { "function-bind": "^1.1.1", @@ -5291,22 +5292,22 @@ "dev": true }, "node_modules/textlint": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-12.2.1.tgz", - "integrity": "sha512-e6xKNLbTt10KbnG0x3eVE7l8A7uOC9bj0Hc8cWk6VoLffjrdw4o8kJjWVIspNzfb0kUEs2dBKgXZo0ob4tMWAg==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-12.2.2.tgz", + "integrity": "sha512-+xORGVnAceaP3+77vGuALOtnNNtexh8VK9ssAK2r3vAr0iMApSMyvGaXousbsfLiwK5L/X0X/78yJDvXwGQPjA==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^12.2.1", - "@textlint/ast-traverse": "^12.2.1", - "@textlint/feature-flag": "^12.2.1", - "@textlint/fixer-formatter": "^12.2.1", - "@textlint/kernel": "^12.2.1", - "@textlint/linter-formatter": "^12.2.1", - "@textlint/module-interop": "^12.2.1", - "@textlint/textlint-plugin-markdown": "^12.2.1", - "@textlint/textlint-plugin-text": "^12.2.1", - "@textlint/types": "^12.2.1", - "@textlint/utils": "^12.2.1", + "@textlint/ast-node-types": "^12.2.2", + "@textlint/ast-traverse": "^12.2.2", + "@textlint/feature-flag": "^12.2.2", + "@textlint/fixer-formatter": "^12.2.2", + "@textlint/kernel": "^12.2.2", + "@textlint/linter-formatter": "^12.2.2", + "@textlint/module-interop": "^12.2.2", + "@textlint/textlint-plugin-markdown": "^12.2.2", + "@textlint/textlint-plugin-text": "^12.2.2", + "@textlint/types": "^12.2.2", + "@textlint/utils": "^12.2.2", "debug": "^4.3.4", "deep-equal": "^1.1.1", "file-entry-cache": "^5.0.1", @@ -6377,44 +6378,44 @@ "dev": true }, "@textlint/ast-node-types": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-12.2.1.tgz", - "integrity": "sha512-NXYza6aG1+LdZ4g83gjRhDht+gdrTjJYkdcQhpvzNCtTar/sVpaykkauRcAKLhkIWrQpfb311pfMlU6qNDW76Q==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-12.2.2.tgz", + "integrity": "sha512-VQAXUSGdmEajHXrMxeM9ZTS8UBJSVB0ghJFHpFfqYKlcDsjIqClSmTprY6521HoCoSLoUIGBxTC3jQyUMJFIWw==", "dev": true }, "@textlint/ast-tester": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-12.2.1.tgz", - "integrity": "sha512-QGg7wxFLpsEAb7uxYPAO6F/QxDoX50wQ8aQ378RbpcQK57J9r9TQfV5Sieuta5dJORUrrMIuIrP4qU7P+1YyUw==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-12.2.2.tgz", + "integrity": "sha512-l5VP2LG+cFCjVvBR3uRrXBeoElKLic2rG+tTQUsH/rywh3TeeDKsHZBk1gGz8kAHVoeEuuH7lx0Wu8AjP4AqGw==", "dev": true, "requires": { - "@textlint/ast-node-types": "^12.2.1", + "@textlint/ast-node-types": "^12.2.2", "debug": "^4.3.4" } }, "@textlint/ast-traverse": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-12.2.1.tgz", - "integrity": "sha512-uwppnDZRmRhH8R4WrkKAvwAbKcYux2yG/XqKlADuFd2T4hSMTlZOBLxDvXohLKY617HHM32/G99HJlmFFvP4GA==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-12.2.2.tgz", + "integrity": "sha512-ROd6W9P76DFA9hv7wCf1+Dc6aehLcsd0/3qKerQN/Luc3B2ek+/qJbGgWeAEsSBKl9LVLJhTBydmdgOAHrVjwA==", "dev": true, "requires": { - "@textlint/ast-node-types": "^12.2.1" + "@textlint/ast-node-types": "^12.2.2" } }, "@textlint/feature-flag": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-12.2.1.tgz", - "integrity": "sha512-Vwn1VKaqNvhMteXNdvk+5duGzlG0MwSjkufU3AVaBQsS4SH4dchSvULpKc+r4BOTSzybNappN0APEcMjOx0Lxg==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-12.2.2.tgz", + "integrity": "sha512-L0v/ZjxmdzRXygja1WiXBjA2ZczvU3cG6qkwME4JGKwUsbEa9UzpwD8i3yBoO7ISkjkMpPM5BYD3AtJgQpCuEg==", "dev": true }, "@textlint/fixer-formatter": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-12.2.1.tgz", - "integrity": "sha512-Y4FT2zVyYCxZCJ19tdfhBKr/FtCDP03iW+gfF6zHAjQaNPEGUU7ZfVUBJVVYBWOuHT/Zk22kcJZVFSINacPybQ==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-12.2.2.tgz", + "integrity": "sha512-uKJScqlJvIP9ttVxSq4632kYUjeEhsqc1mLmbViFd+H+GGtrKMwhHYI4zs9/6PQQxE1sUy6dBVkh/LAjgqOaUA==", "dev": true, "requires": { - "@textlint/module-interop": "^12.2.1", - "@textlint/types": "^12.2.1", + "@textlint/module-interop": "^12.2.2", + "@textlint/types": "^12.2.2", "chalk": "^4.1.2", "debug": "^4.3.4", "diff": "^4.0.2", @@ -6426,33 +6427,33 @@ } }, "@textlint/kernel": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-12.2.1.tgz", - "integrity": "sha512-imKBeglOKVwsVmrCDzIHf8uiYXtEy0VFyPPb7GYiLhA2pImh59QOtuoPiMT0h8ctV5Aa2konOQVV6jM+JJ9xkQ==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-12.2.2.tgz", + "integrity": "sha512-rDa//HGBQh2BTcJvsgMDP1WRaVxwa57zeE6FPXUdaIA41GGKupQq9GXX8P0PcAVo9gxzOFnMrtbBw7mkQYu4hQ==", "dev": true, "requires": { - "@textlint/ast-node-types": "^12.2.1", - "@textlint/ast-tester": "^12.2.1", - "@textlint/ast-traverse": "^12.2.1", - "@textlint/feature-flag": "^12.2.1", - "@textlint/source-code-fixer": "^12.2.1", - "@textlint/types": "^12.2.1", - "@textlint/utils": "^12.2.1", + "@textlint/ast-node-types": "^12.2.2", + "@textlint/ast-tester": "^12.2.2", + "@textlint/ast-traverse": "^12.2.2", + "@textlint/feature-flag": "^12.2.2", + "@textlint/source-code-fixer": "^12.2.2", + "@textlint/types": "^12.2.2", + "@textlint/utils": "^12.2.2", "debug": "^4.3.4", "deep-equal": "^1.1.1", "structured-source": "^3.0.2" } }, "@textlint/linter-formatter": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-12.2.1.tgz", - "integrity": "sha512-xfVRM+DRrJzBswzrYpmNDJDfapYyogOGlwOXb9Omc7/MvipVreG0WvtgSgxchJ+1nPJwsOPES8PAgQYcPR20+Q==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-12.2.2.tgz", + "integrity": "sha512-R4/n02lNPqiTT1WuxBe4Lh1vUZUME020y+cD8fDn++GR4QlEcWaWWaYNz5ZDtRJ6Li9CYnc6MC6uf2jnTcmFXw==", "dev": true, "requires": { "@azu/format-text": "^1.0.1", "@azu/style-format": "^1.0.0", - "@textlint/module-interop": "^12.2.1", - "@textlint/types": "^12.2.1", + "@textlint/module-interop": "^12.2.2", + "@textlint/types": "^12.2.2", "chalk": "^4.1.2", "debug": "^4.3.4", "is-file": "^1.0.0", @@ -6468,13 +6469,14 @@ } }, "@textlint/markdown-to-ast": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-12.2.1.tgz", - "integrity": "sha512-p+LlVcrgHnSNEWWflYU412uu+v4Cejs6hmI4SgZCheNg4u7Ik78aKgpe4jT5BhjLSBZ/KP6IrJxtCUOoJIUWmQ==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-12.2.2.tgz", + "integrity": "sha512-OP0cnGCzt8Bbfhn8fO/arQSHBhmuXB4maSXH8REJAtKRpTADWOrbuxAOaI9mjQ7EMTDiml02RZ9MaELQAWAsqQ==", "dev": true, "requires": { - "@textlint/ast-node-types": "^12.2.1", + "@textlint/ast-node-types": "^12.2.2", "debug": "^4.3.4", + "mdast-util-gfm-autolink-literal": "^0.1.0", "remark-footnotes": "^3.0.0", "remark-frontmatter": "^3.0.0", "remark-gfm": "^1.0.0", @@ -6690,61 +6692,61 @@ } }, "@textlint/module-interop": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-12.2.1.tgz", - "integrity": "sha512-/SixwKngWuTvVl9AArK4FEWGrNAwD7/ABvLCy/pdFprljnUa87P5JvSi7/v1PjpAXcnMQ2r04wDJjegs9oblBA==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-12.2.2.tgz", + "integrity": "sha512-3OVZDJ8GCgQ3V+dm5btCwhZhJUEO5xR7jEMI6i9n1/gA6yePBM4b1qT1gwYUItthNRFqy6q5x4zTx9MKqBGVGg==", "dev": true }, "@textlint/source-code-fixer": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-12.2.1.tgz", - "integrity": "sha512-yNkWcTxCcoz24b64rGUVDr2MzQdv3I1o2o7HuphCmGlAQztVzMGvY/GNzqUWW42+k8S0zRq3Saxz1XoMUvR5UA==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-12.2.2.tgz", + "integrity": "sha512-wk/8MmF3m1U9IAqGrvR0yehHsRGDfXuVAkXSahyRmafSwn88p8oS/iY6qDjECADVXJEnuRuxOcQ1GPlKM/eFOg==", "dev": true, "requires": { - "@textlint/types": "^12.2.1", + "@textlint/types": "^12.2.2", "debug": "^4.3.4" } }, "@textlint/text-to-ast": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-12.2.1.tgz", - "integrity": "sha512-NcuFa8iQglIMBQ1OaR1IYAIYJfBcTACVD0YtPGrdN0gkqC8TEfP5xIldiSxhkWiLPr3TQ4Mg7d6Ev5RH67n7pA==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-12.2.2.tgz", + "integrity": "sha512-LgCqy1y4oQfDws6rqYSlQaYyiIGRQHcGMT+ukbpBkwEtzzh9urbr6NIeVnHhEuZUITl+pZCHyHeKF2/RlGsn6Q==", "dev": true, "requires": { - "@textlint/ast-node-types": "^12.2.1" + "@textlint/ast-node-types": "^12.2.2" } }, "@textlint/textlint-plugin-markdown": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-12.2.1.tgz", - "integrity": "sha512-BAjkVPMO5fzf6n5M5SwgHNyTwByE86BmjaNpBDhKNcSBctUnfX7nLCvQY8mGMkvefHufyi3oWIqDcZoZQn0PYQ==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-12.2.2.tgz", + "integrity": "sha512-ougYCuGavxCPwsFZZ/fCGzoaMxwvy2yM1siKa7Ra9chZHjxtj3y76m0QtJkboFcz/FEZV8tqh96T9Bq/4jD+nQ==", "dev": true, "requires": { - "@textlint/markdown-to-ast": "^12.2.1" + "@textlint/markdown-to-ast": "^12.2.2" } }, "@textlint/textlint-plugin-text": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-12.2.1.tgz", - "integrity": "sha512-8Dt1Sn9AdqvweVxCLvlj1IC+pDxPRpdgERY6FzD6kLNpMAyl7luVWtpql19CvTYlxhPUHRxsETDBkRCQFClXsw==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-12.2.2.tgz", + "integrity": "sha512-0HLOr9kQRXKqEcZvIaNAnOhixNfTSpveOHBuhHepByDXkXcUrb+BJdxZzhtgVu4twBAR3qJ3KYhDE8XPHc9iDg==", "dev": true, "requires": { - "@textlint/text-to-ast": "^12.2.1" + "@textlint/text-to-ast": "^12.2.2" } }, "@textlint/types": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-12.2.1.tgz", - "integrity": "sha512-nOQ3udAz9ulDZgETFY3vr3R+ubL2cevPLA3GmDs29ErvIHfK3pD+PpyO/OsS7HZKXolmpuMonVA9+J9Jybf3/Q==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-12.2.2.tgz", + "integrity": "sha512-fmKH9w8O3XOvIvf3cPNI7PWdJScRIiJYJ5VsoIMp/o41Hlkt5m//MObfAPYpQ/3nuXhzlB05kfRUxyj/NvcPAQ==", "dev": true, "requires": { - "@textlint/ast-node-types": "^12.2.1" + "@textlint/ast-node-types": "^12.2.2" } }, "@textlint/utils": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-12.2.1.tgz", - "integrity": "sha512-e4jDM6bMZddFi48e5CzbvnG9ombeK2ZkjLnCaSWalJI3NTlCDm/ZDqfaqac/YPFbzoRQMqNkaoTW/9GZVjr6Hg==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-12.2.2.tgz", + "integrity": "sha512-74p3VWj5KlmXs+gFRJALEuUsyt/Sz4t91KQ//LAX1zNTY/aK0nk8LxipUcDZeBHArn3Gh5nf3SwlTgUZ7jvNrQ==", "dev": true }, "@types/concat-stream": { @@ -7320,9 +7322,9 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -9990,22 +9992,22 @@ "dev": true }, "textlint": { - "version": "12.2.1", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-12.2.1.tgz", - "integrity": "sha512-e6xKNLbTt10KbnG0x3eVE7l8A7uOC9bj0Hc8cWk6VoLffjrdw4o8kJjWVIspNzfb0kUEs2dBKgXZo0ob4tMWAg==", + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-12.2.2.tgz", + "integrity": "sha512-+xORGVnAceaP3+77vGuALOtnNNtexh8VK9ssAK2r3vAr0iMApSMyvGaXousbsfLiwK5L/X0X/78yJDvXwGQPjA==", "dev": true, "requires": { - "@textlint/ast-node-types": "^12.2.1", - "@textlint/ast-traverse": "^12.2.1", - "@textlint/feature-flag": "^12.2.1", - "@textlint/fixer-formatter": "^12.2.1", - "@textlint/kernel": "^12.2.1", - "@textlint/linter-formatter": "^12.2.1", - "@textlint/module-interop": "^12.2.1", - "@textlint/textlint-plugin-markdown": "^12.2.1", - "@textlint/textlint-plugin-text": "^12.2.1", - "@textlint/types": "^12.2.1", - "@textlint/utils": "^12.2.1", + "@textlint/ast-node-types": "^12.2.2", + "@textlint/ast-traverse": "^12.2.2", + "@textlint/feature-flag": "^12.2.2", + "@textlint/fixer-formatter": "^12.2.2", + "@textlint/kernel": "^12.2.2", + "@textlint/linter-formatter": "^12.2.2", + "@textlint/module-interop": "^12.2.2", + "@textlint/textlint-plugin-markdown": "^12.2.2", + "@textlint/textlint-plugin-text": "^12.2.2", + "@textlint/types": "^12.2.2", + "@textlint/utils": "^12.2.2", "debug": "^4.3.4", "deep-equal": "^1.1.1", "file-entry-cache": "^5.0.1", diff --git a/package.json b/package.json index b163f9ba7cd..1da45b259a6 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "remark-lint-fenced-code-flag": "^3.1.1", "remark-lint-no-shell-dollars": "^3.1.1", "remark-stringify": "^10.0.2", - "textlint": "^12.2.1", + "textlint": "^12.2.2", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^3.0.3" From 9a4c6d35e15b27158347ec63fdd879454bb8a59b Mon Sep 17 00:00:00 2001 From: AlexSchmitz222 Date: Tue, 20 Sep 2022 20:34:22 +0200 Subject: [PATCH 08/53] Update sms.markdown (#24186) --- source/_integrations/sms.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_integrations/sms.markdown b/source/_integrations/sms.markdown index 44483158788..660af3713c3 100644 --- a/source/_integrations/sms.markdown +++ b/source/_integrations/sms.markdown @@ -117,15 +117,15 @@ You will need a USB GSM stick modem or device like SIM800L v2 connected via USB ### List of modems known to work - [SIM800C HAT form factor](https://www.amazon.com/gp/product/B07PQLRCNR/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) Make sure to `enable_uart=1` on your `config.txt` boot file. - [SIM800C](https://www.amazon.com/gp/product/B087Z6F953/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1) -- [Huawei E3372-510](https://www.amazon.com/gp/product/B01N6P3HI2/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)( -Need to unlock it using [this guide](http://blog.asiantuntijakaveri.fi/2015/07/convert-huawei-e3372h-153-from.html)) -- [Huawei E3531](https://www.amazon.com/Modem-Huawei-Unlocked-Caribbean-Desbloqueado/dp/B011YZZ6Q2/ref=sr_1_1?keywords=Huawei+E3531&qid=1581447800&sr=8-1) +- [Huawei E3372](https://www.amazon.com/gp/product/B01N6P3HI2/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)( +Note: E3372h-153 and E3372h-510 need to be unlocked [this guide](http://blog.asiantuntijakaveri.fi/2015/07/convert-huawei-e3372h-153-from.html), The Huawei E3372h-320 won't work at all, since it is locked down too much) +- [Huawei E3531](https://www.amazon.com/Modem-Huawei-Unlocked-Caribbean-Desbloqueado/dp/B011YZZ6Q2/ref=sr_1_1?keywords=Huawei+E3531&qid=1581447800&sr=8-1) (note: Devices with firmare versions 22.XX need to be unlocked using [this guide](https://community.home-assistant.io/t/trouble-setting-up-huawei-e3531s-2-with-sms-notifications-via-gsm-modem-integration/462737/9?u=alexschmitz222)) - [Huawei E3272](https://www.amazon.com/Huawei-E3272s-506-Unlocked-Americas-Europe/dp/B00HBL51OQ) - ZTE K3565-Z ### List of modems known to NOT work -- No known modems +- Huawei E3372h-320 ### List of modems that may work From ed4f6abf7929924d94c1dc1c6ae626b4a9c0ec53 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 20 Sep 2022 09:21:33 -1000 Subject: [PATCH 09/53] Add iBeacon integration (#24178) --- source/_integrations/ibeacon.markdown | 52 +++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 source/_integrations/ibeacon.markdown diff --git a/source/_integrations/ibeacon.markdown b/source/_integrations/ibeacon.markdown new file mode 100644 index 00000000000..28554056a3b --- /dev/null +++ b/source/_integrations/ibeacon.markdown @@ -0,0 +1,52 @@ +--- +title: iBeacon Tracker +description: Instructions on how to integrate iBeacon devices into Home Assistant. +ha_category: + - Presence Detection + - Device Tracker + - Sensor +ha_release: 2022.10 +ha_iot_class: Local Push +ha_domain: ibeacon +ha_platforms: + - device_tracker + - sensor +ha_bluetooth: true +ha_config_flow: true +ha_integration_type: integration +--- + +{% include integrations/config_flow.md %} + +iBeacon devices will be automatically detected and added as they are discovered once the integration has been added via the UI. + +iBeacon Devices are tracked by a combination of the following data: + +- UUID (universally unique identifier) is a 128-bit identifier that is generally set the same for all iBeacons at the same physical location. +- Major is an integer to differentiate between iBeacons with the same UUID. +- Minor is an integer to differentiate between iBeacons with the same UUID and Major value. +- MAC address (except for devices with a randomized MAC address) + +Consider setting up your iBeacons with a schema similar to the following: + +- uuid=UUID major=1000 minor=1000 Downstairs Front Room +- uuid=UUID major=1000 minor=1001 Downstairs Bathroom +- uuid=UUID major=2000 minor=1001 Upstairs Main Bedroom +- uuid=UUID major=2000 minor=1002 Upstairs Guest Bedroom +- uuid=UUID major=3000 minor=1000 Attic + +iBeacon devices that do not have stable Major and Minor values are not supported. The system automatically removes iBeacon devices with unstable Major and Minor values once ten (10) or more Major and Minor values have been seen with the same UUID from an iBeacon device with a fixed MAC address. + +## Fixed MAC address iBeacons + +iBeacons with a fixed MAC address will get their own set of entities for each UUID, major, minor, and MAC address combination, enabling distance and presence detection per physical device basis. In this type of setup, it is permissible to have multiple iBeacons broadcasting the same UUID, Major, and Minor combination as long as you do not exceed five devices. + +## Random MAC address iBeacons + +iBeacons with a random MAC address will be combined into a single set of entities once the integration discovers the same UUID, Major, and Minor combination has been seen coming from 10 or more MAC addresses. This allows distance and presence detection based on the last reporting data. When using random MAC addresses, only one device must broadcast the unique UUID, Major, and Minor combination. + +## Sensors + +The integration will create an Estimated Distance sensor by default. This estimated distance assumes perfect RF conditions and line of sight between the iBeacon and the Bluetooth adapter. Estimated distance is generally only helpful to tell if the iBeacon is in the immediate vicinity, near, or far away from the adapter. If the system has multiple adapters, the adapter with the best RSSI value for the iBeacon will be the one reporting the distance. As this can change, checking the source attribute when considering the distance is essential. + + From 758ab4f7a11fa1b2fc2f72cd1153a597d1f6f785 Mon Sep 17 00:00:00 2001 From: Phill Price Date: Wed, 21 Sep 2022 09:29:56 +0100 Subject: [PATCH 10/53] Formatting Changes (#24196) --- source/_integrations/timer.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/timer.markdown b/source/_integrations/timer.markdown index 793b3bc01e8..d8002cb77cd 100644 --- a/source/_integrations/timer.markdown +++ b/source/_integrations/timer.markdown @@ -22,7 +22,7 @@ You can also click the following button to be redirected to the Helpers page of {% my helpers badge %} -To be able to add Helpers via the user interface you should have default_config: in your configuration.yaml, it should already be there by default unless you removed it. If you removed default_config: from your configuration, you must add timer: to your configuration.yaml first, then you can use the UI. +To be able to add Helpers via the user interface you should have `default_config:` in your `configuration.yaml`, it should already be there by default unless you removed it. If you removed `default_config:` from your configuration, you must add `timer:` to your `configuration.yaml` first, then you can use the UI. Timers can also be configured via configuration.yaml: To add a timer to your installation, add the following to your `configuration.yaml` file: From 839f69393a5f8fe3eb22dfd3e315916d51b79f15 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Wed, 21 Sep 2022 03:30:21 -0600 Subject: [PATCH 11/53] Remove docs for deprecated Flu Near You integration (#24170) Co-authored-by: Franck Nijhof --- CODEOWNERS | 1 - source/_integrations/flunearyou.markdown | 44 ------------------------ source/_redirects | 1 + 3 files changed, 1 insertion(+), 45 deletions(-) delete mode 100644 source/_integrations/flunearyou.markdown diff --git a/CODEOWNERS b/CODEOWNERS index a550850e14b..662ee3501de 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -200,7 +200,6 @@ source/_integrations/flick_electric.markdown @ZephireNZ source/_integrations/flipr.markdown @cnico source/_integrations/flo.markdown @dmulcahey source/_integrations/flume.markdown @ChrisMandich @bdraco @jeeftor -source/_integrations/flunearyou.markdown @bachya source/_integrations/flux_led.markdown @icemanch @bdraco source/_integrations/forecast_solar.markdown @klaasnicolaas @frenck source/_integrations/forked_daapd.markdown @uvjustin diff --git a/source/_integrations/flunearyou.markdown b/source/_integrations/flunearyou.markdown deleted file mode 100644 index 4eda32f7dc7..00000000000 --- a/source/_integrations/flunearyou.markdown +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Flu Near You -description: Instructions on how to use Flu Near You data within Home Assistant -ha_category: - - Health -ha_release: 0.83 -ha_iot_class: Cloud Polling -ha_codeowners: - - '@bachya' -ha_domain: flunearyou -ha_config_flow: true -ha_platforms: - - diagnostics - - sensor -ha_integration_type: integration ---- - -
- This integration is pending removal from Home Assistant and will be no longer available as of Home Assistant 2022.10. -
- -The `flunearyou` sensor platform allows users in the United States and its -territories to get information regarding reported flu symptoms from [Flu Near -You](https://flunearyou.org/). The platform can return user-reported information as well reports from the -Center for Disease Control (CDC). - -{% include integrations/config_flow.md %} - -## Sensor Types - -### User Report - -* Number of reported cases of [Avian Flu](https://www.cdc.gov/flu/avianflu/index.htm) symptoms -* Number of reported cases of [Dengue](https://www.cdc.gov/dengue/index.html) symptoms -* Number of reported cases of [Flu](https://www.cdc.gov/flu/) symptoms -* Number of reported cases of [Flu-like](https://en.wikipedia.org/wiki/Influenza-like_illness) symptoms -* Number of reported cases of [Leptospirosis](https://www.cdc.gov/leptospirosis/index.html) symptoms -* Total number of reported cases with symptoms -* Number of reported cases with no symptoms - -### CDC Report - -* Current CDC level for the state -* Current CDC "Level 2" for the state diff --git a/source/_redirects b/source/_redirects index 985d07ee29e..302391c0bc1 100644 --- a/source/_redirects +++ b/source/_redirects @@ -435,6 +435,7 @@ /integrations/envirophat /more-info/removed-integration 301 /integrations/essent /more-info/removed-integration 301 /integrations/fedex /more-info/removed-integration 301 +/integrations/flunearyou /more-info/removed-integration 301 /integrations/fortigate /more-info/removed-integration 301 /integrations/fritzbox_netmonitor /more-info/removed-integration 301 /integrations/garmin_connect /more-info/removed-integration 301 From b22056c9812b49dadb74d81a2303d90663ea5aa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Wed, 21 Sep 2022 18:53:29 +0200 Subject: [PATCH 12/53] Update sign CLA URL (#24175) --- source/developers/cla_sign.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/cla_sign.html b/source/developers/cla_sign.html index 8921dbd91bc..3099af1dd17 100644 --- a/source/developers/cla_sign.html +++ b/source/developers/cla_sign.html @@ -471,7 +471,7 @@ description: "The Home Assistant contributor license agreement (CLA) signature p } $.ajax({ type: "POST", - url: "https://cla.home-assistant.io/sign", + url: "https://service-hub-bots.home-assistant.io/cla-sign", data: JSON.stringify(payload), contentType: "application/json", }).done(function(data){ From 4ecafbfa517bde597441362a8422419f86039fa8 Mon Sep 17 00:00:00 2001 From: Cromefire_ Date: Wed, 21 Sep 2022 19:41:40 +0200 Subject: [PATCH 13/53] Add HZW1004 ro supported panasonic TVs (#24202) --- source/_integrations/panasonic_viera.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/panasonic_viera.markdown b/source/_integrations/panasonic_viera.markdown index 57e8c78a33a..d91e60310a3 100644 --- a/source/_integrations/panasonic_viera.markdown +++ b/source/_integrations/panasonic_viera.markdown @@ -159,5 +159,6 @@ The list with all known valid keys can be found [here](https://github.com/floria - TX-P42VT30E - TX-P50GT30Y - TX-P50GT60E +- TX-65HZ1000W If your model is not on the list, give it a test. If everything works correctly, then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.io/blob/current/source/_integrations/panasonic_viera.markdown). From 760a16ec32da23607d4e172704cdeb40796a58b5 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 21 Sep 2022 16:31:12 -0400 Subject: [PATCH 14/53] Promote State of the Open Home (#24203) --- source/images/frontpage/hacktoberfest.png | Bin 129205 -> 0 bytes .../frontpage/state-of-the-open-home-2022.png | Bin 0 -> 26269 bytes source/index.html | 10 +++++++++- 3 files changed, 9 insertions(+), 1 deletion(-) delete mode 100644 source/images/frontpage/hacktoberfest.png create mode 100644 source/images/frontpage/state-of-the-open-home-2022.png diff --git a/source/images/frontpage/hacktoberfest.png b/source/images/frontpage/hacktoberfest.png deleted file mode 100644 index b8bc641a3499875eb4deb0cfab587e323fa5f5c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129205 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 Y4;qAzASEpq{r~^~07*qoM6N<$f=sWW@Bjb+ literal 0 HcmV?d00001 diff --git a/source/index.html b/source/index.html index a2db2cb28e5..16b66ca833f 100644 --- a/source/index.html +++ b/source/index.html @@ -89,7 +89,15 @@ feedback: false
- + +
Date: Thu, 22 Sep 2022 09:05:10 +0200 Subject: [PATCH 15/53] update API credentials info (#24212) --- source/_integrations/smappee.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/smappee.markdown b/source/_integrations/smappee.markdown index 4c3c64f4822..8674ea52933 100644 --- a/source/_integrations/smappee.markdown +++ b/source/_integrations/smappee.markdown @@ -59,7 +59,7 @@ Switch entities are created for each Smappee Switch and Smappee Comfort Plug. ## Cloud API configuration -To use the Smappee cloud integration you need a personal `client_id` and `client_secret` and add these to your `configuration.yaml` file. The `client_id` and `client_secret` can be obtained by contacting [info@smappee.com](mailto:info@smappee.com) and require a recurring monthly fee. +To use the Smappee cloud integration you need a personal `client_id` and `client_secret` and add these to your `configuration.yaml` file. For personal use, access to the API is free and credentials can be obtained by contacting [support@smappee.com](mailto:support@smappee.com). For commercial usage, it is based on a recurring fee and credentials can be obtained by contacting [info@smappee.com](mailto:info@smappee.com). For any information about the use of the API please refer to the [Smappee API space](https://smappee.atlassian.net/wiki/spaces/DEVAPI/overview). ```yaml From 0505d4128ca0e03d0cc90d9762243767383a8a08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Sep 2022 09:10:20 +0200 Subject: [PATCH 16/53] Bump commonmarker from 0.23.5 to 0.23.6 (#24208) 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 06b0f6c847b..65491dff267 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -5,7 +5,7 @@ GEM public_suffix (>= 2.0.2, < 6.0) chunky_png (1.4.0) colorator (1.1.0) - commonmarker (0.23.5) + commonmarker (0.23.6) compass (1.0.3) chunky_png (~> 1.2) compass-core (~> 1.0.2) From e92776c0967437db929d04f976ecfc2e52a28cb6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Sep 2022 09:14:42 +0200 Subject: [PATCH 17/53] Bump actions/stale from 5 to 6 (#24211) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Franck Nijhof --- .github/workflows/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index d4ceb357057..48ade5355e7 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -11,7 +11,7 @@ jobs: pull-requests: write runs-on: ubuntu-latest steps: - - uses: actions/stale@v5 + - uses: actions/stale@v6.0.0 if: ${{ github.repository_owner == 'home-assistant' }} with: repo-token: ${{ secrets.GITHUB_TOKEN }} From b236034c36d93e35453443dcbd50fb4bd5566043 Mon Sep 17 00:00:00 2001 From: Ernst Klamer Date: Thu, 22 Sep 2022 09:20:05 +0200 Subject: [PATCH 18/53] Add Kegtron documentation (#24172) --- source/_integrations/kegtron.markdown | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 source/_integrations/kegtron.markdown diff --git a/source/_integrations/kegtron.markdown b/source/_integrations/kegtron.markdown new file mode 100644 index 00000000000..6ebb06d660b --- /dev/null +++ b/source/_integrations/kegtron.markdown @@ -0,0 +1,24 @@ +--- +title: Kegtron +description: Instructions on how to integrate Kegtron Smart Keg Monitor (Gen 1) into Home Assistant. +ha_category: + - Sensor +ha_bluetooth: true +ha_release: 2022.10 +ha_iot_class: Local Push +ha_codeowners: + - '@Ernst79' +ha_domain: kegtron +ha_config_flow: true +ha_platforms: + - sensor +ha_integration_type: integration +--- + +Integrates [Kegtron](https://kegtron.com/) Smart Keg Monitor (Gen 1) devices into Home Assistant. + +{% include integrations/config_flow.md %} + +The Kegtron integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional. + +The integration only supports Smart Keg Monitor devices of the 1st generation (KT-100 and KT-200), which communicate data with Bluetooth LE. From 6ee415ecdea8b1f48435651272f11ff7429ef8a1 Mon Sep 17 00:00:00 2001 From: Fabrizio Leonelli Date: Thu, 22 Sep 2022 09:35:40 +0200 Subject: [PATCH 19/53] Update statistics.markdown's change* platform (#24213) --- source/_integrations/statistics.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_integrations/statistics.markdown b/source/_integrations/statistics.markdown index 7786c557bcd..850aeca44f4 100644 --- a/source/_integrations/statistics.markdown +++ b/source/_integrations/statistics.markdown @@ -43,9 +43,9 @@ The following characteristics are supported for `sensor` source sensors: | `average_linear` | The average value of stored measurements under consideration of the time distances between them. A linear interpolation is applied per measurement pair. Good suited to observe a source sensor with non-periodic sensor updates and when continuous behavior is represented by the measurements (e.g. outside temperature). | `average_step` | The average value of stored measurements under consideration of the time distances between them. LOCF (last observation carried forward weighting) is applied, meaning, that the old value is assumed between two measurements. The resulting step function represents well the behavior of non-continuous behavior, like the set temperature of a boiler. | `average_timeless` | The average value of stored measurements. This method assumes that all measurements are equally spaced and, therefore, time is ignored and a simple average of values is computed. Equal to `mean`. -| `change_sample` | The average change per sample. The difference between the oldest and newest measurement is divided by the number of in-between measurements (n-1). -| `change_second` | The average change per second. The difference between the oldest and newest measurement is divided by seconds between them. -| `change` | The difference between the oldest and newest measurement. +| `change_sample` | The average change per sample. The difference between the newest and the oldest measurement is divided by the number of in-between measurements (n-1). +| `change_second` | The average change per second. The difference between the newest and the oldest measurement is divided by seconds between them. +| `change` | The difference between the newest and the oldest measurement. | `count` | The number of stored source sensor readings. This number is limited by `sampling_size` and can be low within the bounds of `max_age`. | `datetime_newest` | The timestamp of the newest measurement. | `datetime_oldest` | The timestamp of the oldest measurement. From 95949fe40fc9e7cc6ec1b364c1e14d651873bd44 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 22 Sep 2022 03:38:52 -0400 Subject: [PATCH 20/53] Remove Google Analytics (#24204) --- _config.yml | 2 +- source/_includes/google_analytics.html | 13 ------------- source/_includes/javascripts/scripts.html | 7 ------- 3 files changed, 1 insertion(+), 21 deletions(-) delete mode 100644 source/_includes/google_analytics.html diff --git a/_config.yml b/_config.yml index a3b9345251c..6ef0398ccd8 100644 --- a/_config.yml +++ b/_config.yml @@ -91,7 +91,7 @@ twitter_user: balloob twitter_tweet_button: true # Google Analytics -google_analytics_tracking_id: UA-57927901-1 +# google_analytics_tracking_id: UA-57927901-1 # Facebook Like facebook_like: true diff --git a/source/_includes/google_analytics.html b/source/_includes/google_analytics.html deleted file mode 100644 index 4d4d5969060..00000000000 --- a/source/_includes/google_analytics.html +++ /dev/null @@ -1,13 +0,0 @@ -{% if site.google_analytics_tracking_id %} - -{% endif %} diff --git a/source/_includes/javascripts/scripts.html b/source/_includes/javascripts/scripts.html index 92a1615098c..68dea471f5a 100644 --- a/source/_includes/javascripts/scripts.html +++ b/source/_includes/javascripts/scripts.html @@ -1,10 +1,3 @@ - - From 193492d99d9cfee486384cf3a0ec0f17373a2861 Mon Sep 17 00:00:00 2001 From: Mike Degatano Date: Thu, 22 Sep 2022 03:48:16 -0400 Subject: [PATCH 21/53] Unsupported restart policy information (#24206) --- .../unsupported/restart_policy.markdown | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 source/more-info/unsupported/restart_policy.markdown diff --git a/source/more-info/unsupported/restart_policy.markdown b/source/more-info/unsupported/restart_policy.markdown new file mode 100644 index 00000000000..3cb7a53943c --- /dev/null +++ b/source/more-info/unsupported/restart_policy.markdown @@ -0,0 +1,26 @@ +--- +title: "Restart policy" +description: "More information on why changing the docker restart policy for containers marks the system as unsupported." +--- + +## The issue + +Supervisor needs to start the containers it manages for addons, plugins and Home Assistant in the +correct order after a system reboot. Changing the restart policy it sets on those containers may +cause them to start in the wrong order and create errors. + +## The solution + +If the restart policy of observer was changed, fix it from the host shell with this: + +```sh +docker update hassio_observer --restart always +``` + +For everything else, the restart policy can be fixed with the following command: + +```sh +docker update --restart no +``` + +The supervisor log should contain a list of container names with incorrect restart policies. From dfd0b22a21caeb56c8f99471a0a407e258b57195 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 22 Sep 2022 04:30:50 -0400 Subject: [PATCH 22/53] 2022.9.6 (#24209) Co-authored-by: Franck Nijhof --- _config.yml | 4 +- .../_posts/2022-09-07-release-20229.markdown | 85 +++++++++++++++++++ 2 files changed, 87 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index 6ef0398ccd8..b7d33f37c21 100644 --- a/_config.yml +++ b/_config.yml @@ -107,8 +107,8 @@ social: # Home Assistant release details current_major_version: 2022 current_minor_version: 9 -current_patch_version: 5 -date_released: 2022-09-18 +current_patch_version: 6 +date_released: 2022-09-22 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/source/_posts/2022-09-07-release-20229.markdown b/source/_posts/2022-09-07-release-20229.markdown index bb0fc40afa9..a73060a0612 100644 --- a/source/_posts/2022-09-07-release-20229.markdown +++ b/source/_posts/2022-09-07-release-20229.markdown @@ -42,6 +42,7 @@ Now I know that everyone usually expects [@frenck] to be writing these release n - [Release 2022.9.3 - September 13](#release-202293---september-13) - [Release 2022.9.4 - September 14](#release-202294---september-14) - [Release 2022.9.5 - September 18](#release-202295---september-18) +- [Release 2022.9.6 - September 22](#release-202296---september-22) - [Need help? Join the community](#need-help-join-the-community) - [Breaking Changes](#breaking-changes) - [All changes](#all-changes) @@ -602,6 +603,90 @@ The following integrations are now available via the Home Assistant UI: [yalexs_ble docs]: /integrations/yalexs_ble/ [zwave_js docs]: /integrations/zwave_js/ +## Release 2022.9.6 - September 22 + +- Handle Modalias missing from the bluetooth adapter details on older BlueZ ([@bdraco] - [#78716]) ([bluetooth docs]) +- Refactor MQTT tests to use modern platform schema part 1 ([@jbouwh] - [#77387]) ([mqtt docs]) +- Refactor MQTT tests to use modern platform schema part 2 ([@jbouwh] - [#77525]) ([mqtt docs]) +- Refactor common MQTT tests to use modern schema ([@jbouwh] - [#77583]) ([mqtt docs]) +- Make hass.data["mqtt"] an instance of a DataClass ([@jbouwh] - [#77972]) ([mqtt docs]) +- Add status codes 23 and 26 to Xiaomi Miio vacuum ([@starkillerOG] - [#78289]) ([xiaomi_miio docs]) +- Link manually added MQTT entities the the MQTT config entry ([@jbouwh] - [#78547]) ([mqtt docs]) +- Drop PARALLEL_UPDATES from switchbot ([@bdraco] - [#78713]) ([switchbot docs]) +- Bump aioimaplib to 1.0.1 ([@N1c093] - [#78738]) ([imap docs]) (dependency) +- Fix bug wherein RainMachine services use the wrong controller ([@bachya] - [#78780]) ([rainmachine docs]) +- Guard Guardian switches from redundant on/off calls ([@bachya] - [#78791]) ([guardian docs]) +- Bump dbus-fast to 1.5.1 ([@bdraco] - [#78802]) ([bluetooth docs]) (dependency) +- If brightness is not available, don't set a value ([@elupus] - [#78827]) ([google_assistant docs]) +- Pin Python patch versions [ci] ([@cdce8p] - [#78830]) +- Fix parsing Eve Energy characteristic data ([@Jc2k] - [#78880]) ([homekit_controller docs]) +- Check Surveillance Station permissions during setup of Synology DSM integration ([@mib1185] - [#78884]) ([synology_dsm docs]) +- Handle default RSSI values from bleak in bluetooth ([@bdraco] - [#78908]) ([bluetooth docs]) +- Disable force update Netatmo ([@balloob] - [#78913]) ([netatmo docs]) +- Correct return typing for `catch_log_exception` ([@jbouwh] - [#78399]) +- Fix samsungtv to abort when ATTR_UPNP_MANUFACTURER is missing ([@bdraco] - [#78895]) ([samsungtv docs]) +- Handle timeout fetching bond token in config flow ([@bdraco] - [#78896]) ([bond docs]) +- Bump bimmer_connected to 0.10.4 ([@rikroe] - [#78910]) ([bmw_connected_drive docs]) (dependency) + +[#77387]: https://github.com/home-assistant/core/pull/77387 +[#77525]: https://github.com/home-assistant/core/pull/77525 +[#77583]: https://github.com/home-assistant/core/pull/77583 +[#77968]: https://github.com/home-assistant/core/pull/77968 +[#77972]: https://github.com/home-assistant/core/pull/77972 +[#78081]: https://github.com/home-assistant/core/pull/78081 +[#78169]: https://github.com/home-assistant/core/pull/78169 +[#78289]: https://github.com/home-assistant/core/pull/78289 +[#78399]: https://github.com/home-assistant/core/pull/78399 +[#78410]: https://github.com/home-assistant/core/pull/78410 +[#78438]: https://github.com/home-assistant/core/pull/78438 +[#78547]: https://github.com/home-assistant/core/pull/78547 +[#78703]: https://github.com/home-assistant/core/pull/78703 +[#78713]: https://github.com/home-assistant/core/pull/78713 +[#78716]: https://github.com/home-assistant/core/pull/78716 +[#78738]: https://github.com/home-assistant/core/pull/78738 +[#78780]: https://github.com/home-assistant/core/pull/78780 +[#78791]: https://github.com/home-assistant/core/pull/78791 +[#78802]: https://github.com/home-assistant/core/pull/78802 +[#78827]: https://github.com/home-assistant/core/pull/78827 +[#78830]: https://github.com/home-assistant/core/pull/78830 +[#78880]: https://github.com/home-assistant/core/pull/78880 +[#78884]: https://github.com/home-assistant/core/pull/78884 +[#78895]: https://github.com/home-assistant/core/pull/78895 +[#78896]: https://github.com/home-assistant/core/pull/78896 +[#78908]: https://github.com/home-assistant/core/pull/78908 +[#78910]: https://github.com/home-assistant/core/pull/78910 +[#78913]: https://github.com/home-assistant/core/pull/78913 +[@Jc2k]: https://github.com/Jc2k +[@N1c093]: https://github.com/N1c093 +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@cdce8p]: https://github.com/cdce8p +[@elupus]: https://github.com/elupus +[@frenck]: https://github.com/frenck +[@jbouwh]: https://github.com/jbouwh +[@mib1185]: https://github.com/mib1185 +[@rikroe]: https://github.com/rikroe +[@starkillerOG]: https://github.com/starkillerOG +[abode docs]: /integrations/abode/ +[accuweather docs]: /integrations/accuweather/ +[acmeda docs]: /integrations/acmeda/ +[bluetooth docs]: /integrations/bluetooth/ +[bmw_connected_drive docs]: /integrations/bmw_connected_drive/ +[bond docs]: /integrations/bond/ +[frontend docs]: /integrations/frontend/ +[google_assistant docs]: /integrations/google_assistant/ +[guardian docs]: /integrations/guardian/ +[homekit_controller docs]: /integrations/homekit_controller/ +[imap docs]: /integrations/imap/ +[mqtt docs]: /integrations/mqtt/ +[netatmo docs]: /integrations/netatmo/ +[rainmachine docs]: /integrations/rainmachine/ +[samsungtv docs]: /integrations/samsungtv/ +[switchbot docs]: /integrations/switchbot/ +[synology_dsm docs]: /integrations/synology_dsm/ +[xiaomi_miio docs]: /integrations/xiaomi_miio/ + ## Need help? Join the community Home Assistant has a great community of users who are all more than willing From 97682d46bfb93dca5f8de596f72e3bf9f983fc48 Mon Sep 17 00:00:00 2001 From: Jafar Atili Date: Thu, 22 Sep 2022 16:58:26 +0300 Subject: [PATCH 23/53] Added button platform to SwitchBee docs (#24149) --- source/_integrations/switchbee.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_integrations/switchbee.markdown b/source/_integrations/switchbee.markdown index b1f2a430aaa..001e43532fa 100644 --- a/source/_integrations/switchbee.markdown +++ b/source/_integrations/switchbee.markdown @@ -3,6 +3,7 @@ title: SwitchBee description: Instructions for how to integrate SwitchBee accessories within Home Assistant. ha_category: - Switch + - Button ha_release: 2022.10 ha_iot_class: local Polling ha_config_flow: true @@ -11,6 +12,8 @@ ha_codeowners: ha_domain: switchbee ha_platforms: - switch + - button + ha_integration_type: integration --- @@ -22,6 +25,7 @@ There is currently support for the following device types: - Timed Power Switch (Boiler) - Group Switch - Timed Switch +- Scenario Supported devices will be discovered after the SwitchBee integration is configured. From 476d1431eb1ff1664bddb816da1d90b280f2d27f Mon Sep 17 00:00:00 2001 From: blhoward2 <33612110+blhoward2@users.noreply.github.com> Date: Thu, 22 Sep 2022 10:39:57 -0400 Subject: [PATCH 24/53] Rename zwavejs2mqtt to zwave-js-ui in docs (#24207) Co-authored-by: Franck Nijhof --- source/_docs/z-wave/controllers.markdown | 2 +- source/_integrations/zwave_js.markdown | 60 ++++++++++++------------ 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/source/_docs/z-wave/controllers.markdown b/source/_docs/z-wave/controllers.markdown index 68b4af6f9f3..0496eacdaff 100644 --- a/source/_docs/z-wave/controllers.markdown +++ b/source/_docs/z-wave/controllers.markdown @@ -42,7 +42,7 @@ Users should upgrade the firmware on all 700 series controllers to version 7.17. - Z-Wave.Me RaZberry 7 Pro (700 series) - Z-Wave.Me Razberry 2 (500 series) -If you are just starting out, we recommend that you purchase a 500 series controller. +If you are just starting out, we recommend that you purchase a 700 series controller.
If you're using Home Assistant OS, Supervised, or Container, it's recommended to use a USB stick, not a module. Passing a module through Docker is more complicated than passing a USB stick through. diff --git a/source/_integrations/zwave_js.markdown b/source/_integrations/zwave_js.markdown index 045713e72d6..22bc3a44ceb 100644 --- a/source/_integrations/zwave_js.markdown +++ b/source/_integrations/zwave_js.markdown @@ -649,23 +649,21 @@ _This option is only available for Home Assistant OS (the recommended installati This add-on can only be configured via the built-in Z-Wave control panel in Home Assistant. -**Option 2: The Zwavejs2Mqtt (aka "Z-Wave JS to MQTT") add-on installed from the community add-on store** +**Option 2: The Z-Wave JS UI add-on installed from the community add-on store** _This option is only available for Home Assistant OS (the recommended installation type) and Home Assistant Supervised installations._ -This add-on includes the Z-Wave JS Server as part of the Zwavejs2Mqtt application. Despite the name, MQTT is not required to run this add-on and both provide the same Z-Wave JS driver. +This add-on includes the Z-Wave JS Server as part of the Z-Wave JS UI application. The Z-Wave network can be configured via the built-in Z-Wave control panel in Home Assistant and alternatively via the Z-Wave control panel built into Z-Wave JS UI. It provides you with a full-fledged, attractive, and feature-complete UI to manage your Z-Wave nodes and settings, which may support more advanced use cases as development continues on the Z-Wave control panel. -The Z-Wave network can be configured via the built-in Z-Wave control panel in Home Assistant and alternatively via the Z-Wave control panel built into Zwavejs2Mqtt. It provides you with a full-fledged, attractive, and feature-complete UI to manage your Z-Wave nodes and settings, which may support more advanced use cases as development continues on the Z-Wave control panel. +**Option 3: The Z-Wave JS UI Docker container** -**Option 3: The Zwavejs2Mqtt Docker container** +This is the recommended approach if you're running Home Assistant Container. See the [Z-Wave JS UI documentation](https://zwave-js.github.io/zwave-js-ui//#/getting-started/quick-start) for instructions. -This is the recommended approach if you're running Home Assistant Container. See the [Zwavejs2Mqtt documentation](https://zwave-js.github.io/zwavejs2mqtt/#/getting-started/quick-start) for instructions. - -This method provides the same server application and UI as the Zwavejs2Mqtt add-on. After installing the Docker image, make sure you enable the WS Server in the Home Assistant section of Settings page. +This method provides the same server application and UI as the Z-Wave JS UI add-on. After installing the Docker image, make sure you enable the WS Server in the Home Assistant section of Settings page. **Option 4: Run the Z-Wave JS server yourself** -This is considered a very advanced use case. In this case you run the Z-Wave JS Server or Zwavejs2Mqtt NodeJS application directly. Installation and maintaining this is out of scope for this document. See the [Z-Wave JS server](https://github.com/zwave-js/zwave-js-server) or [Zwavejs2Mqtt](https://github.com/zwave-js/zwavejs2mqtt) GitHub repository for information. +This is considered a very advanced use case. In this case you run the Z-Wave JS Server or Z-Wave JS UI NodeJS application directly. Installation and maintaining this is out of scope for this document. See the [Z-Wave JS server](https://github.com/zwave-js/zwave-js-server) or [Z-Wave JS UI](https://github.com/zwave-js/zwave-js-ui/) GitHub repository for information.
@@ -677,7 +675,7 @@ This is considered a very advanced use case. In this case you run the Z-Wave JS **Network keys** are used to connect securely to compatible devices. The network keys consist of 32 hexadecimal characters, for example, `2232666D100F795E5BB17F0A1BB7A146` (do not use this one, pick a random one). Without network keys security enabled devices cannot be added securely and will not function correctly. You must provide these network keys in the configuration part of the Z-Wave JS Server. -For new installations, unique default keys will be auto-generated for you by the Z-Wave JS add-on. You can also generate those network keys in the Settings section of Zwavejs2Mqtt. +For new installations, unique default keys will be auto-generated for you by the Z-Wave JS add-on. You can also generate those network keys in the Settings section of Z-Wave JS UI. If migrating from the legacy `zwave` integration, your network key from those integration should be entered as the S0 network key. Those integrations did not support S2 security, so you will not yet have S2 network keys to configure. @@ -689,9 +687,9 @@ Make sure that you keep a backup of these keys in a safe place. You will need to Once you have the Z-Wave JS server up and running, you need to install and configure the integration in Home Assistant (as described above). -If you're running full Home Assistant with supervisor, you will be presented with a dialog that asks if you want to use the Z-Wave JS Supervisor add-on. You **must** uncheck this box if you are running the Z-Wave JS server in any manner other than the official Z-Wave JS add-on, including using Z-Wave JS to MQTT add-on. +If you're running full Home Assistant with supervisor, you will be presented with a dialog that asks if you want to use the Z-Wave JS Supervisor add-on. You **must** uncheck this box if you are running the Z-Wave JS server in any manner other than the official Z-Wave JS add-on, including using Z-Wave JS UI add-on. -If you're not running the supervisor or you've unchecked the above mentioned box, you will be asked to enter a websocket URL (defaults to ws://localhost:3000). It is very important that you fill in the correct (Docker) IP/hostname here. For example for the Z-Wave JS to MQTT add-on this is `ws://a0d7b954-zwavejs2mqtt:3000`. +If you're not running the supervisor or you've unchecked the above-mentioned box, you will be asked to enter a websocket URL (defaults to ws://localhost:3000). It is very important that you fill in the correct (Docker) IP/hostname here. For example for the Z-Wave JS UI add-on this is `ws://a0d7b954-zwavejs2mqtt:3000`. ## Frequently Asked Questions @@ -707,7 +705,7 @@ You can also keep track of the roadmap for the Z-Wave integration [here](https:/ #### Which Z-Wave controller should I buy? -Z-Wave supports all known 500 and 700 series Z-Wave controllers. If you are just starting out, we recommend that you purchase a 500 series controller. +Z-Wave supports all known 500 and 700 series Z-Wave controllers. If you are just starting out, we recommend that you purchase a 700 series controller (with firmware updated to >=7.17.2). For more information, see [Supported Z-Wave dongles](/docs/z-wave/controllers/#supported-z-wave-usb-sticks--hardware-modules) @@ -741,11 +739,15 @@ Node {{ node }};{{ s.name }};{{ s.entity_id }}{% endfor %} {% endraw %} -#### Can I switch between the Official Z-Wave JS add-on and Zwavejs2Mqtt? +#### What happened to Zwavejs2Mqtt or the Z-Wave JS to MQTT add-on? + +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? You can, 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 Zwavejs2Mqtt? +#### How do I switch between the Official Z-Wave JS add-on and the Z-Wave JS UI add-on? Switching does not require renaming your devices. @@ -753,7 +755,7 @@ Switching does not require renaming your devices. 2. Note your network security keys from the official add-on. -3. Install and configure the Z-Wave JS to MQTT add-on, including setting the location of your Z-Wave device and the network security keys. +3. Install and configure the Z-Wave JS UI add-on, including setting the location of your Z-Wave device and the network security keys. 4. Add the Z-Wave integration again (even though it is still installed), and uncheck the "Use the Z-Wave JS Supervisor add-on". Enter the correct address for the community add-on in the URL field in the next step. @@ -761,30 +763,30 @@ Switching does not require renaming your devices. 6. Enable the Z-Wave integration. -#### What's the benefit of using Zwavejs2Mqtt over the official Add-On? +#### What's the benefit of using Z-Wave JS UI add-on over 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 Zwavejs2Mqtt project includes the Z-Wave JS Server for convenience but also provides a Z-Wave Control panel and the ability (hence its name) to serve your Z-Wave network to MQTT. You can leave the MQTT Gateway disabled and only use the Control panel but you can even have the MQTT features enabled at the same time. For example 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 Zwavejs2Mqtt). +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). -#### Zwavejs2Mqtt seems to provide discovery of Home Assistant devices on its own too, now I'm confused +#### Z-Wave JS UI seems to provide discovery of Home Assistant devices on its own too, now I'm confused -Correct, the Zwavejs2Mqtt 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 Zwavejs2Mqtt. +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. -#### Can I run Zwavejs2Mqtt only for the control panel and nothing else? +#### Can I run Z-Wave JS UI only for the control panel and nothing else? -Sure, in the settings of Zwavejs2Mqtt, make sure to enable "WS Server" and disable "Gateway". +Sure, in the settings of Z-Wave JS UI, make sure to enable "WS Server" and disable "Gateway". -#### How do I use my OZW network key in Zwavejs2Mqtt? +#### How do I use my OZW network key in Z-Wave JS UI? -You can use your existing network key in Zwavejs2Mqtt but you need to slightly adjust it. -The OZW looks like this: `0x01, 0x02, 0x03 etc.` while the network key format accepted in Zwavejs2Mqtt looks like this `0102030405 etc.`. You can simply edit your existing key and remove the `"0x"` part and the `", "` part so it becomes one large string of numbers. +You can use your existing network key in Z-Wave JS UI but you need to slightly adjust it. +The OZW looks like this: `0x01, 0x02, 0x03 etc.` while the network key format accepted in Z-Wave JS UI looks like this `0102030405 etc.`. You can simply edit your existing key and remove the `"0x"` part and the `", "` part so it becomes one large string of numbers. -#### Should I name my devices in Home Assistant, or in Zwavejs2Mqtt? +#### Should I name my devices in Home Assistant, or in Z-Wave JS UI? -Ultimately, this is a personal decision. If you provide a name or location for a device in the Zwavejs2Mqtt UI, that name will be imported into Home Assistant when the integration is reloaded or Home Assistant is restarted. Any entity names, however, will not change if the device has already been set up by Home Assistant. Names set in Zwavejs2Mqtt _will not_ overwrite changes that have already been made in Home Assistant. +Ultimately, this is a personal decision. If you provide a name or location for a device in the Z-Wave JS UI, that name will be imported into Home Assistant when the integration is reloaded or Home Assistant is restarted. Any entity names, however, will not change if the device has already been set up by Home Assistant. Names set in Z-Wave JS UI _will not_ overwrite changes that have already been made in Home Assistant. -Names set in Home Assistant will not import into Zwavejs2Mqtt. +Names set in Home Assistant will not import into Z-Wave JS UI. ### Using Z-Wave @@ -848,9 +850,9 @@ Your device might not send automatic status updates to the controller. While the Z-Wave does not automatically poll devices on a regular basis. Polling can quickly lead to network congestion and should be used very sparingly and only where necessary. -- We provide a `zwave_js.refresh_value` service to allow you to manually poll a value, for example from an automation that only polls a device when there is motion in that same room. If you **really** need polling, you can enable this in Zwavejs2Mqtt but not in the official add-on. +- We provide a `zwave_js.refresh_value` service to allow you to manually poll a value, for example from an automation that only polls a device when there is motion in that same room. If you **really** need polling, you can enable this in Z-Wave JS UI but not in the official add-on. -- Zwavejs2Mqtt allows you to configure scheduled polling on a per-value basis, which you can use to keep certain values updated. It also allows you to poll individual values on-demand from your automations, which should be preferred over blindly polling all the time if possible. +- Z-Wave JS UI allows you to configure scheduled polling on a per-value basis, which you can use to keep certain values updated. It also allows you to poll individual values on-demand from your automations, which should be preferred over blindly polling all the time if possible.
Polling should only be used as a last resort. You must use it with care and accept the negative impact on your network. Z-Wave is a very low speed network and poll requests can easily flood your network and slow down your commands. From 4768d1a9a783583406fb17cf2e4ce8c0b437d1cf Mon Sep 17 00:00:00 2001 From: liquidbear99 <53712660+liquidbear99@users.noreply.github.com> Date: Thu, 22 Sep 2022 19:17:31 -0500 Subject: [PATCH 25/53] Amended the push update instructions for Yale Access Bluetooth (#24219) --- source/_integrations/yalexs_ble.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/yalexs_ble.markdown b/source/_integrations/yalexs_ble.markdown index dbf8ba6d06b..6d4e24de8ce 100644 --- a/source/_integrations/yalexs_ble.markdown +++ b/source/_integrations/yalexs_ble.markdown @@ -49,6 +49,8 @@ These devices do not send updates, but can be locked and unlocked. Some locks only send push updates when they have an active HomeKit pairing. If your lock is not sending push updates, ensure it's paired with a HomeKit using an iOS device or the HomeKit controller integration. The lock cannot be paired via HomeKit Controller and the Yale Access Bluetooth integration on the same Home Assistant instance as they will both try to access the lock simultaneously and fail. +One easy way to fix this is to create a new/second home in the Apple Home app and add the lock to that new home. Push updates should occur as intended after the lock is added. + Alternatively, call the `homeassistant.update_entity` service to force the integration to update the lock state. ## Door Sensors From 9394413bb43be0348fb5154edc509598af35d267 Mon Sep 17 00:00:00 2001 From: Artem Draft Date: Sat, 24 Sep 2022 18:11:05 +0300 Subject: [PATCH 26/53] Docs about Bravia TV Button platform (#24059) --- source/_integrations/braviatv.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_integrations/braviatv.markdown b/source/_integrations/braviatv.markdown index a1a0955823f..b4c7c35511d 100644 --- a/source/_integrations/braviatv.markdown +++ b/source/_integrations/braviatv.markdown @@ -2,6 +2,7 @@ title: Sony Bravia TV description: Instructions on how to integrate a Sony Bravia TV into Home Assistant. ha_category: + - Button - Media Player - Remote ha_release: 0.23 @@ -12,6 +13,7 @@ ha_codeowners: ha_domain: braviatv ha_config_flow: true ha_platforms: + - button - media_player - remote ha_integration_type: integration @@ -65,6 +67,10 @@ The commands that can be sent to the TV depends on the model of your TV. To disp {% enddetails %} +## Buttons + +The integration supports `button` platform and allows you to reboot the device or terminate all running applications. + {% include integrations/option_flow.md %} The integration allows you to customize the list of ignored sources. From 61c4ed9b7b80f40b21a3f72399f694cbcbd228a8 Mon Sep 17 00:00:00 2001 From: Sven Serlier <85389871+wrt54g@users.noreply.github.com> Date: Sun, 25 Sep 2022 18:04:40 +0200 Subject: [PATCH 27/53] Update URL (#24241) --- source/_docs/automation/trigger.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index 92510eeac6d..895f474972d 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -558,7 +558,7 @@ automation: {% endraw %} -If you want to get more precise, you can use this [solar calculator](https://www.esrl.noaa.gov/gmd/grad/solcalc/), which will help you estimate what the solar elevation will be at any specific time. Then from this, you can select from the defined twilight numbers. +If you want to get more precise, you can use this [solar calculator](https://gml.noaa.gov/grad/solcalc/), which will help you estimate what the solar elevation will be at any specific time. Then from this, you can select from the defined twilight numbers. Although the actual amount of light depends on weather, topography and land cover, they are defined as: From cf5b2de0e8802503a4887efbccd96dd75da0a47e Mon Sep 17 00:00:00 2001 From: Jc2k Date: Mon, 26 Sep 2022 00:55:11 +0100 Subject: [PATCH 28/53] Document how homekit_controller can use thread networks (#24225) --- source/_integrations/homekit_controller.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_integrations/homekit_controller.markdown b/source/_integrations/homekit_controller.markdown index 780f8aff903..dcf62044bde 100644 --- a/source/_integrations/homekit_controller.markdown +++ b/source/_integrations/homekit_controller.markdown @@ -83,6 +83,14 @@ HomeKit controller will poll your devices, but it will also automatically enable HomeKit Controller will automatically discover Bluetooth devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional. Bluetooth devices may take significantly longer to pair than IP devices. Battery-powered devices may require pressing a button on the device to wake it before pairing can be successful. +## Thread device support + +In order to use HomeKit over Thread you need a working border router (like a HomePod mini). Your Home Assistant instance will need to be on the same VLAN as the border router. + +HomeKit Controller will automatically discover supported Thread devices using the [Zeroconf](/integrations/zeroconf) integration. Battery powered devices may go to sleep and require a button pressing to wake them up before pairing works. + +In order to provision a Thread device onto a mesh network using a HomePod as a border router, first pair it with an iOS device. Then unpair it from the Home app. Don't reset it. This will leave the Thread network details on the device. Home Assistant can now pair with it over Thread. + ## 'Stateless' switches and sensors Some HomeKit devices (like buttons, remotes and doorbells) don't have sensors that can be read like a normal HomeKit device - they only inform Home Assistant when something happens. This means Home Assistant can't show an entity for them, as they have no state. But they are available for use as [device automations](/integrations/device_automation/). From a07ff02cf639852a048cafc62523bc0b551f3a56 Mon Sep 17 00:00:00 2001 From: Tobias Sauerwein Date: Mon, 26 Sep 2022 10:37:59 +0200 Subject: [PATCH 29/53] Update netatmo.markdown (#23109) * Update netatmo.markdown --- source/_integrations/netatmo.markdown | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/source/_integrations/netatmo.markdown b/source/_integrations/netatmo.markdown index 24e4c08e0e4..07d7538f209 100644 --- a/source/_integrations/netatmo.markdown +++ b/source/_integrations/netatmo.markdown @@ -4,11 +4,13 @@ description: Instructions on how to integrate Netatmo integration into Home Assi ha_category: - Camera - Climate + - Cover - Environment - Hub - Light - Media Source - Sensor + - Switch - Weather ha_release: '0.20' ha_iot_class: Cloud Polling @@ -20,10 +22,12 @@ ha_homekit: true ha_platforms: - camera - climate + - cover - diagnostics - light - select - sensor + - switch ha_integration_type: integration --- @@ -33,8 +37,10 @@ There is currently support for the following device types within Home Assistant: - [Camera](#camera) - [Climate](#climate) +- [Cover](#cover) - [Light](#light) - [Sensor](#sensor) +- [Switch](#switch) - [Webhook Events](#webhook-events) {% include integrations/config_flow.md %} @@ -49,21 +55,30 @@ To edit an existing area, enter its name and follow the dialog. ## Camera -The `netatmo` camera platform is consuming the information provided by a [Netatmo Smart Indoor](https://www.netatmo.com/en-gb/security/cam-indoor) or [Outdoor](https://www.netatmo.com/en-gb/security/cam-outdoor) camera. This integration allows you to view the current live stream created by the camera. +The `netatmo` camera platform is consuming the information provided by a [Netatmo Smart Indoor](https://www.netatmo.com/en-gb/security/cam-indoor), [Outdoor](https://www.netatmo.com/en-gb/security/cam-outdoor) and [Netatmo Smart Video Doorbell](https://www.netatmo.com/en-gb/security/doorbell) camera. This integration allows you to view the current live stream created by the camera (exception: video doorbell). ## Climate -The `netatmo` thermostat platform is consuming the information provided by a [Netatmo Smart Thermostat](https://www.netatmo.com/product/energy/thermostat) or [Netatmo Smart Radiator Valve](https://www.netatmo.com/en-gb/energy/additional-valve). This integration allows you to view the current temperature and control the setpoint. +The `netatmo` thermostat platform is consuming the information provided by a [Netatmo Smart Thermostat](https://www.netatmo.com/product/energy/thermostat), [Smart Modulating Thermostat](https://www.netatmo.com/en-gb/energy/modulating-thermostat) and [Netatmo Smart Radiator Valve](https://www.netatmo.com/en-gb/energy/additional-valve). This integration allows you to view the current temperature and control the setpoint. + +## Cover + +The `netatmo` cover platform provides support for Bubendorff shutters. ## Light The `netatmo` light platform is consuming information provided by a [Netatmo Smart Outdoor](https://www.netatmo.com/en-gb/security/cam-outdoor) camera and requires an active webhook. This integration allows you to turn on/off the flood lights. +It further provides support for Legrand/BTicino dimmers. ## Sensor The `netatmo` sensor platform is consuming the information provided by a [Netatmo Smart Home Weather Station](https://www.netatmo.com/en-us/weather/weatherstation) a [Netatmo Smart Indoor Air Quality Monitor](https://www.netatmo.com/en-us/aircare/homecoach) device or [Netatmo Public Weather Stations](https://weathermap.netatmo.com/). +## Switch + +The `netatmo` switch platform provides support for Legrand/BTicino switches and power plugs. + ## Services ### Set Outdoor Camera Light Mode From 9799fb09b1b8e3b9c53790b1c25017569d334922 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Sep 2022 14:19:48 +0200 Subject: [PATCH 30/53] Bump sinatra from 2.2.2 to 3.0.0 (#24246) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Gemfile b/Gemfile index 9753d9ced3a..c859899de8b 100644 --- a/Gemfile +++ b/Gemfile @@ -19,7 +19,7 @@ group :jekyll_plugins do gem 'jekyll-toc', '0.17.1' end -gem 'sinatra', '2.2.2' +gem 'sinatra', '3.0.0' gem 'nokogiri', '1.13.8' # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem diff --git a/Gemfile.lock b/Gemfile.lock index 65491dff267..54bc27c79f4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -68,7 +68,7 @@ GEM mercenary (0.4.0) mini_portile2 (2.8.0) multi_json (1.15.0) - mustermann (2.0.2) + mustermann (3.0.0) ruby2_keywords (~> 0.0.1) nokogiri (1.13.8) mini_portile2 (~> 2.8.0) @@ -80,7 +80,7 @@ GEM public_suffix (5.0.0) racc (1.6.0) rack (2.2.4) - rack-protection (2.2.2) + rack-protection (3.0.0) rack rake (13.0.6) rb-fsevent (0.11.2) @@ -97,10 +97,10 @@ GEM ffi (~> 1.9) sassc (2.1.0-x64-mingw32) ffi (~> 1.9) - sinatra (2.2.2) - mustermann (~> 2.0) - rack (~> 2.2) - rack-protection (= 2.2.2) + sinatra (3.0.0) + mustermann (~> 3.0) + rack (~> 2.2, >= 2.2.4) + rack-protection (= 3.0.0) tilt (~> 2.0) stringex (2.8.5) terminal-table (2.0.0) @@ -127,7 +127,7 @@ DEPENDENCIES rake (= 13.0.6) sass-globbing (= 1.1.5) sassc (= 2.1.0) - sinatra (= 2.2.2) + sinatra (= 3.0.0) stringex (= 2.8.5) tzinfo (~> 2.0) tzinfo-data From dc97894cfb4fa34f5d368d5e5cdd1aa85c3a220e Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 26 Sep 2022 02:27:52 -1000 Subject: [PATCH 31/53] Add intro and example to iBeacon Tracker (#24228) Co-authored-by: Franck Nijhof --- source/_integrations/ibeacon.markdown | 46 ++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/source/_integrations/ibeacon.markdown b/source/_integrations/ibeacon.markdown index 28554056a3b..ddd926c7ea0 100644 --- a/source/_integrations/ibeacon.markdown +++ b/source/_integrations/ibeacon.markdown @@ -5,7 +5,7 @@ ha_category: - Presence Detection - Device Tracker - Sensor -ha_release: 2022.10 +ha_release: "2022.10" ha_iot_class: Local Push ha_domain: ibeacon ha_platforms: @@ -18,7 +18,9 @@ ha_integration_type: integration {% include integrations/config_flow.md %} -iBeacon devices will be automatically detected and added as they are discovered once the integration has been added via the UI. +iBeacons are Bluetooth-enabled devices that advertise identifiers to announce their location. For example, an iBeacon attached to a trash can be used to determine if the trash can is in the garage or on the street. Home Assistant can estimate the distance of an iBeacon device in proximity to the nearest Bluetooth adapter. + +iBeacon devices will be automatically detected and added as they are discovered once the integration has been added via the UI and the [Bluetooth](/integrations/bluetooth) integration is enabled and functional. iBeacon Devices are tracked by a combination of the following data: @@ -37,16 +39,50 @@ Consider setting up your iBeacons with a schema similar to the following: iBeacon devices that do not have stable Major and Minor values are not supported. The system automatically removes iBeacon devices with unstable Major and Minor values once ten (10) or more Major and Minor values have been seen with the same UUID from an iBeacon device with a fixed MAC address. -## Fixed MAC address iBeacons +## Fixed MAC addresses iBeacons with a fixed MAC address will get their own set of entities for each UUID, major, minor, and MAC address combination, enabling distance and presence detection per physical device basis. In this type of setup, it is permissible to have multiple iBeacons broadcasting the same UUID, Major, and Minor combination as long as you do not exceed five devices. -## Random MAC address iBeacons +## Randomized MAC addresses -iBeacons with a random MAC address will be combined into a single set of entities once the integration discovers the same UUID, Major, and Minor combination has been seen coming from 10 or more MAC addresses. This allows distance and presence detection based on the last reporting data. When using random MAC addresses, only one device must broadcast the unique UUID, Major, and Minor combination. +iBeacons with a randomized MAC address will be combined into a single set of entities once the integration discovers the same UUID, Major, and Minor combination has been seen coming from 10 or more MAC addresses. This allows distance and presence detection based on the last reporting data. When using randomized MAC addresses, only one device must broadcast the unique UUID, Major, and Minor combination. ## Sensors The integration will create an Estimated Distance sensor by default. This estimated distance assumes perfect RF conditions and line of sight between the iBeacon and the Bluetooth adapter. Estimated distance is generally only helpful to tell if the iBeacon is in the immediate vicinity, near, or far away from the adapter. If the system has multiple adapters, the adapter with the best RSSI value for the iBeacon will be the one reporting the distance. As this can change, checking the source attribute when considering the distance is essential. +## Known working devices +- [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 BC08-MultiBeacon](https://bluecharmbeacons.com/product/blue-charm-beacons-bluetooth-ble-ibeacon-bc08-multibeacon-w-motion-sensor-and-button-trigger-ble-5-0/) +- [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-BP108](https://www.feasycom.com/bluetooth-5-1-waterproof-bluetooth-beacon) + +## Example automation + +```yaml +alias: "The black trash can has left the building" +mode: single +trigger: + - platform: state + entity_id: sensor.black_trash_bin_estimated_distance + to: "unavailable" + for: + hours: 0 + minutes: 5 + seconds: 0 + - platform: numeric_state + entity_id: sensor.black_trash_bin_estimated_distance + for: + hours: 0 + minutes: 5 + seconds: 0 + above: 20 +action: + - service: notify.notify + data: + message: "The black trash can has left the building" + title: "The black trash can has left the building" +``` From 9fe4f5c5fdc88e122d387f0e2db3f71ec8a798d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Sep 2022 15:03:27 +0200 Subject: [PATCH 32/53] Bump tzinfo-data from 1.2022.3 to 1.2022.4 (#24245) 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 54bc27c79f4..b35cfba35e4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -108,7 +108,7 @@ GEM tilt (2.0.11) tzinfo (2.0.5) concurrent-ruby (~> 1.0) - tzinfo-data (1.2022.3) + tzinfo-data (1.2022.4) tzinfo (>= 1.0.0) unicode-display_width (1.8.0) From 1754e1031db478115c9d789ec7e7efc6704a4688 Mon Sep 17 00:00:00 2001 From: Robert Hillis Date: Mon, 26 Sep 2022 10:14:38 -0400 Subject: [PATCH 33/53] Add Google Sheets docs (#24013) Co-authored-by: Franck Nijhof --- source/_integrations/google_sheets.markdown | 86 +++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 source/_integrations/google_sheets.markdown diff --git a/source/_integrations/google_sheets.markdown b/source/_integrations/google_sheets.markdown new file mode 100644 index 00000000000..f6c22af5e2f --- /dev/null +++ b/source/_integrations/google_sheets.markdown @@ -0,0 +1,86 @@ +--- +title: Google Sheets +description: Instructions on how to use Google Sheets in Home Assistant. +ha_category: + - Utility +ha_iot_class: Cloud Polling +ha_release: 2022.10 +ha_config_flow: true +ha_domain: google_sheets +ha_codeowners: + - '@tkdrob' +ha_integration_type: integration +--- + +The Google Sheets integration allows you to connect your [Google Drive](https://drive.google.com) to Home Assistant. The integration adds a service to allow you to append rows to a Sheets document. The idea is that you can store data on there for further processing. When you set up a config entry, your drive will have a new sheet called Home Assistant. You can then rename this to whatever you like. + +**Note**: +The integration currently only has access to that one document that is created during setup. + +## Prerequisites + +You need to configure developer credentials to allow Home Assistant to access your Google Account. +These credentials are the same as the ones for [Nest](/integrations/nest). +If you have already set up credentials, you can do step 1 and then skip to step 13 on the below instructions. + +{% details "Generate Client ID and Client Secret" %} + +This section explains how to generate a Client ID and Client Secret on +[Google Developers Console](https://console.developers.google.com/start/api?id=drive). + +1. First go to the [Google Developers Console](https://console.developers.google.com/start/api?id=drive) +2. The wizard will ask you to choose a project to manage your application. Select a project and click continue. +3. Verify that your drive API was enabled and click 'Go to credentials' +4. Navigate to APIs & Services (left sidebar) > [Credentials](https://console.cloud.google.com/apis/credentials) +5. Click on the field on the left of the screen, **OAuth Consent Screen**. +6. Select **External** and **Create**. +7. Set the *App Name* (the name of the application asking for consent) to anything you want e.g. *Home Assistant*. +8. You then need to select a *Support email*. To do this, simply click the drop down box and select your email address. +9. You finally need to complete the section: *Developer contact information*. To do this, simply enter your email address (same as above is fine). +10. Scroll to the bottom and click **Save and Continue**. Don't have to fill out anything else or it may enable additional review. +11. You will then be automatically taken to the Scopes page. You do not need to add any scopes here so click Save and Continue to move to the Optional info page. You do not need to add anything to the Optional info page so click Save and Continue which will take you to the Summary page. Click Back to Dashboard. +12. Click **OAuth consent screen** again and set *Publish Status* to **Production** otherwise your credentials will expire every 7 days. +13. Make sure **Publishing status** is set to production. +14. Click **Credentials** in the menu on the left hand side of the screen, then click **Create credentials** (at the top of the screen), then select *OAuth client ID*. +15. Set the Application type to *Web application* and give this credential set a name (like "Home Assistant Credentials"). +16. Add https://my.home-assistant.io/redirect/oauth to *Authorized redirect URIs* then click **Create**. +17. You will then be presented with a pop-up saying *OAuth client created* showing *Your Client ID* and *Your Client Secret*. Make a note of these (for example, copy and paste them into a text editor) as you will need these shortly. Once you have noted these strings, click **OK**. If you need to find these credentials again at any point then simply navigate to *APIs & Services > Credentials* and you will see *Home Assistant Credentials* (or whatever you named them in the previous step) under *OAuth 2.0 Client IDs*. To view both the *Client ID* and *Client secret*, click on the pencil icon, this will take you to the settings page for these credentials and the information will be on the right hand side of the page. +18. Double check that the *Google Drive API* has been automatically enabled. To do this, select **Library** from the menu, then search for *Google Drive API*. If it is enabled you will see *API Enabled* with a green tick next to it. If it is not enabled, then enable it. + +{% enddetails %} + +{% include integrations/config_flow.md %} + +The integration setup will next give you instructions to enter the [Application Credentials](/integrations/application_credentials/) (OAuth Client ID and Client Secret) and authorize Home Assistant to access your Google Sheets. + +{% details "OAuth and Device Authorization steps" %} + +1. Continue through the steps of selecting the account you want to authorize. + +2. **NOTE**: You may get a message telling you that the app has not been verified and you will need to acknowledge that in order to proceed. + +3. You can now see the details of what you are authorizing Home Assistant to access with two options at the bottom. Click **Continue**. + +4. The page will now display *Link account to Home Assistant?*, note *Your instance URL*. If this is not correct, please refer to [My Home Assistant](/integrations/my). If everything looks good, click **Link Account**. + +5. You may close the window, and return back to Home Assistant where you should see a *Success!* message from Home Assistant. + +{% enddetails %} + +## Troubleshooting + +If you have an error with your credentials you can delete them in the [Application Credentials](/integrations/application_credentials/) user interface. + +### Service `google_sheets.append_sheet` + +You can use the service `google_sheets.append_sheet` to add a row of data to the Sheets document created at setup. + +{% details "Create Event Service details" %} + +| Service data attribute | Optional | Description | Example | +| ---------------------- | -------- | ----------- | --------| +| `config_entry` | no | Config entry to use. +| `worksheet` | yes | Name of the worksheet. Defaults to the first one in the document. | Sheet1 +| `data` | no | Data to be appended to the worksheet. This puts the data on a new row, one value per column. | ["foo"] + +{% enddetails %} From 94e673ffb02e09e831807489ee1b443afdd5697f Mon Sep 17 00:00:00 2001 From: Robert Hillis Date: Mon, 26 Sep 2022 10:17:04 -0400 Subject: [PATCH 34/53] Add documentation for Lidarr integration (#21625) Co-authored-by: Franck Nijhof --- source/_integrations/lidarr.markdown | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 source/_integrations/lidarr.markdown diff --git a/source/_integrations/lidarr.markdown b/source/_integrations/lidarr.markdown new file mode 100644 index 00000000000..d2d70952c1a --- /dev/null +++ b/source/_integrations/lidarr.markdown @@ -0,0 +1,29 @@ +--- +title: Lidarr +description: Instructions on how to integrate Lidarr with Home Assistant +ha_category: + - Downloading +ha_release: "2022.10" +ha_iot_class: Local Polling +ha_domain: lidarr +ha_config_flow: true +ha_codeowners: + - '@tkdrob' +ha_quality_scale: silver +ha_platforms: + - sensor +--- + +The Lidarr integration pulls data from a given [Lidarr](https://lidarr.audio/) instance. + +{% include integrations/config_flow.md %} + +To retrieve your API key, open your Lidarr web interface and navigate to Settings, then General tab. Your Lidarr API Key will be listed on this page under the Security section. + +## Sensors + +The Lidarr integration will add the following sensors: + +- Available disk space for each root folder. +- The number of episodes in the queue. +- The number of albums still wanted. From 41e2b9613e6ff7fe8ff4f923b64b11f1bb167a21 Mon Sep 17 00:00:00 2001 From: Justin Sherman Date: Mon, 26 Sep 2022 07:17:47 -0700 Subject: [PATCH 35/53] Add range to min-max integration (#24102) --- source/_integrations/min_max.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_integrations/min_max.markdown b/source/_integrations/min_max.markdown index 41564708cc5..6b45731b1b5 100644 --- a/source/_integrations/min_max.markdown +++ b/source/_integrations/min_max.markdown @@ -17,7 +17,7 @@ ha_platforms: ha_integration_type: helper --- -The Min/Max integration consumes the state from other sensors to determine the minimum, maximum, latest (last), mean and median of the collected states. +The Min/Max integration consumes the state from other sensors to determine the minimum, maximum, latest (last), mean, median, and range of the collected states. The sensor provided by this integration will always show you the lowest/highest/latest value which was received from all monitored sensors. If you have spikes in your values, it's recommended to filter/equalize your values with a [statistics sensor](/integrations/statistics) first. @@ -30,7 +30,7 @@ Name: Input entities: description: At least two entities to monitor. All entities must use the same unit of measurement. Type: - description: The type of the sensor, this can be either "min", "max", "last", "mean", or "median". + description: The type of the sensor, this can be either "min", "max", "last", "mean", "median", or "range". Precision: description: Round the calculated mean or median value to at most N decimal places. {% endconfiguration_basic %} @@ -57,7 +57,7 @@ entity_ids: required: true type: [list, string] type: - description: "The type of sensor: `min`, `max`, `last`, `mean` or `median`." + description: "The type of sensor: `min`, `max`, `last`, `mean`, `median`, or `range`." required: false default: max type: string From 1baffeeb85267730f40507095ee35686c98b1186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Mon, 26 Sep 2022 17:01:49 +0200 Subject: [PATCH 36/53] Add pull_request to CLA sign data (#24249) --- source/developers/cla_sign.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/developers/cla_sign.html b/source/developers/cla_sign.html index 3099af1dd17..6c7571430b9 100644 --- a/source/developers/cla_sign.html +++ b/source/developers/cla_sign.html @@ -464,7 +464,8 @@ description: "The Home Assistant contributor license agreement (CLA) signature p "region": $("#region").val(), "signing_for": $('input[name="signing_for"]:checked').val(), "i_agree": $("#i_agree").val(), - "github_user_id": $("#github_user_id").val() + "github_user_id": $("#github_user_id").val(), + "pull_request": localStorage.getItem("pr"), }; if ($("#company_name").val() != "") { payload.company_name = $("#company_name").val(); From 8bbf90b1ecb7fda1de777de6b941f2d2c252ef07 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 26 Sep 2022 14:05:02 +0000 Subject: [PATCH 37/53] 2022.9.7 --- _config.yml | 4 +- .../_posts/2022-09-07-release-20229.markdown | 61 +++++++++++++++++++ 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index b7d33f37c21..9436666b35c 100644 --- a/_config.yml +++ b/_config.yml @@ -107,8 +107,8 @@ social: # Home Assistant release details current_major_version: 2022 current_minor_version: 9 -current_patch_version: 6 -date_released: 2022-09-22 +current_patch_version: 7 +date_released: 2022-09-26 # 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/2022-09-07-release-20229.markdown b/source/_posts/2022-09-07-release-20229.markdown index a73060a0612..29acdc552e9 100644 --- a/source/_posts/2022-09-07-release-20229.markdown +++ b/source/_posts/2022-09-07-release-20229.markdown @@ -43,6 +43,7 @@ Now I know that everyone usually expects [@frenck] to be writing these release n - [Release 2022.9.4 - September 14](#release-202294---september-14) - [Release 2022.9.5 - September 18](#release-202295---september-18) - [Release 2022.9.6 - September 22](#release-202296---september-22) +- [Release 2022.9.7 - September 26](#release-202297---september-26) - [Need help? Join the community](#need-help-join-the-community) - [Breaking Changes](#breaking-changes) - [All changes](#all-changes) @@ -687,6 +688,66 @@ The following integrations are now available via the Home Assistant UI: [synology_dsm docs]: /integrations/synology_dsm/ [xiaomi_miio docs]: /integrations/xiaomi_miio/ +## Release 2022.9.7 - September 26 + +- Bump pyipma to 3.0.5 ([@dgomes] - [#78936]) ([ipma docs]) +- Bump motionblinds to 0.6.13 ([@starkillerOG] - [#78946]) ([motion_blinds docs]) +- Set OWM default mode to hourly legacy API ([@jbouwh] - [#78951]) ([openweathermap docs]) +- Bump yalexs to 1.2.2 ([@bdraco] - [#78978]) ([august docs]) +- Fix velbus matching ignored entries in config flow ([@Cereal2nd] - [#78999]) ([velbus docs]) +- Bumped boschshcpy 0.2.30 to 0.2.35 ([@tschamm] - [#79017]) ([bosch_shc docs]) +- Fix failing LaMetric pairing message during config flow ([@frenck] - [#79031]) ([lametric docs]) +- Fix MQTT device_tracker generating unique id-s - regression on #78547 ([@jbouwh] - [#79033]) ([mqtt docs]) +- Bump govee-ble to 0.19.0 ([@bdraco] - [#79038]) ([govee_ble docs]) +- Always install requirements of after_dependencies ([@emontnemery] - [#79094]) +- Pin pyOpenSSL to 22.0.0 ([@balloob] - [#79066]) + +[#77968]: https://github.com/home-assistant/core/pull/77968 +[#78081]: https://github.com/home-assistant/core/pull/78081 +[#78169]: https://github.com/home-assistant/core/pull/78169 +[#78410]: https://github.com/home-assistant/core/pull/78410 +[#78438]: https://github.com/home-assistant/core/pull/78438 +[#78703]: https://github.com/home-assistant/core/pull/78703 +[#78916]: https://github.com/home-assistant/core/pull/78916 +[#78936]: https://github.com/home-assistant/core/pull/78936 +[#78946]: https://github.com/home-assistant/core/pull/78946 +[#78951]: https://github.com/home-assistant/core/pull/78951 +[#78978]: https://github.com/home-assistant/core/pull/78978 +[#78999]: https://github.com/home-assistant/core/pull/78999 +[#79017]: https://github.com/home-assistant/core/pull/79017 +[#79031]: https://github.com/home-assistant/core/pull/79031 +[#79033]: https://github.com/home-assistant/core/pull/79033 +[#79038]: https://github.com/home-assistant/core/pull/79038 +[#79066]: https://github.com/home-assistant/core/pull/79066 +[#79094]: https://github.com/home-assistant/core/pull/79094 +[@Cereal2nd]: https://github.com/Cereal2nd +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@dgomes]: https://github.com/dgomes +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@jbouwh]: https://github.com/jbouwh +[@starkillerOG]: https://github.com/starkillerOG +[@tschamm]: https://github.com/tschamm +[abode docs]: /integrations/abode/ +[accuweather docs]: /integrations/accuweather/ +[acmeda docs]: /integrations/acmeda/ +[august docs]: /integrations/august/ +[bluetooth docs]: /integrations/bluetooth/ +[bosch_shc docs]: /integrations/bosch_shc/ +[frontend docs]: /integrations/frontend/ +[google_assistant docs]: /integrations/google_assistant/ +[govee_ble docs]: /integrations/govee_ble/ +[guardian docs]: /integrations/guardian/ +[homekit_controller docs]: /integrations/homekit_controller/ +[imap docs]: /integrations/imap/ +[ipma docs]: /integrations/ipma/ +[lametric docs]: /integrations/lametric/ +[motion_blinds docs]: /integrations/motion_blinds/ +[mqtt docs]: /integrations/mqtt/ +[openweathermap docs]: /integrations/openweathermap/ +[velbus docs]: /integrations/velbus/ + ## Need help? Join the community Home Assistant has a great community of users who are all more than willing From 1585c0686552b6f2ade4c46c6ed3fb559b2f5d3b Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Mon, 26 Sep 2022 17:22:02 +0200 Subject: [PATCH 38/53] Add netgear switch discription (#22815) Co-authored-by: Franck Nijhof --- source/_integrations/netgear.markdown | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/source/_integrations/netgear.markdown b/source/_integrations/netgear.markdown index e9eec3f65c8..c9f36de0cf4 100644 --- a/source/_integrations/netgear.markdown +++ b/source/_integrations/netgear.markdown @@ -35,7 +35,13 @@ Consider_home: {% endconfiguration_basic %} ## Router entities -The NETGEAR router will have the following entities: +The NETGEAR router will have the following entities. + +Note that not all routers support all features, if a router does not support a feature, the corresponding entity will have the unavailable status even when the entity is disabled. + +You might also see the following error in the log `404 service '...', method '...' not found`, to prevent these errors, keep the unsupported entities disabled. + +All possibly unsupported entities are disabled by default. ### Reboot button @@ -49,7 +55,19 @@ Update entity to view current and latest firmware version, and install the lates The total and average amount of downloaded/uploaded data through the router can be tracked per day/week/month. In order for these entities to display the data (instead of 0), the "Traffic Meter" should be enabled in the router settings. -Log into your router > Select **ADVANCED** > **Advanced Setup** > **Traffic Meter** > **Enable Traffic Meter** check box. +Enable the `Traffic Meter` switch entity and turn it on. + +### Router feature switches + +The following router features can be turned on/off, and the status can be read: + +- Access Control +- Traffic Meter +- Parental Control +- Quality of Service +- 2.4G Guest Wifi +- 5G Guest Wifi +- Smart Connect ### Speed test data @@ -77,7 +95,7 @@ Displays if the device is currently connected to the router (Home) or not (Away) Switch that lets you Allow or Block a device on the Network. For this entity to actually Block the device, "Access Control" needs to be turned on in the Router settings. -Log into your router > Select **ADVANCED** > **Security** > **Access Control** > **Turn on Access Control** check box. +Enable the `Access Control` switch entity and turn it on. ### Signal strength From d14ccaacbbaedae468c5aed478d7e2d15e1be4a7 Mon Sep 17 00:00:00 2001 From: Robert Hillis Date: Mon, 26 Sep 2022 11:32:19 -0400 Subject: [PATCH 39/53] Add docs to radarr config flow (#20550) --- source/_integrations/radarr.markdown | 154 ++------------------------- 1 file changed, 11 insertions(+), 143 deletions(-) diff --git a/source/_integrations/radarr.markdown b/source/_integrations/radarr.markdown index dfd7a5186d2..5d64f6b2b63 100644 --- a/source/_integrations/radarr.markdown +++ b/source/_integrations/radarr.markdown @@ -4,157 +4,25 @@ description: Instructions on how to integrate Radarr sensors with Home Assistant ha_category: - Downloading ha_release: 0.47 +ha_config_flow: true ha_iot_class: Local Polling ha_domain: radarr ha_platforms: - sensor +ha_codeowners: + - '@tkdrob' ha_integration_type: integration --- -This `radarr` sensor platform pulls data from a given [Radarr](https://radarr.video/) instance. +This Radarr integration pulls data from a given [Radarr](https://radarr.video/) instance. +Your API key can be found in Settings > General in the Radarr Web UI. -## Configuration +{% include integrations/config_flow.md %} -To use your Radarr sensor in your installation, add the following to your `configuration.yaml` file: +## Integration Entities -```yaml -# Example configuration.yaml entry -sensor: - - platform: radarr - api_key: YOUR_API_KEY -``` +Each added configuration entry will create the following sensors: -{% configuration %} -api_key: - required: true - type: string - description: Your Radarr API key, found in Settings > General in the Radarr Web UI. -host: - required: false - type: string - description: The host Radarr is running on. - default: "`localhost`" -port: - required: false - type: integer - description: The port Radarr is running on. - default: 7878 -urlbase: - required: false - type: string - description: The base URL Radarr is running under. Defaults to `/`. -monitored_conditions: - required: false - type: list - description: Conditions to display on the frontend. - default: "`movies`" - keys: - movies: - description: The number of movies in Radarr. - upcoming: - description: The number of upcoming movie releases (physical and in cinemas). - commands: - description: The number of commands being run. - diskspace: - description: The available disk space. - status: - description: The current system status information. -days: - required: false - type: integer - description: How many days to look ahead for the upcoming sensor, 1 means today only. - default: 1 -include_paths: - required: false - type: list - description: Array of file paths to include when calculating diskspace. Leave blank to include all. -unit: - required: false - type: string - description: The unit to display disk space in. - default: GB -ssl: - required: false - type: boolean - description: Whether or not to use SSL for Radarr. - default: false -{% endconfiguration %} - -## Examples - -In this section you find some real-life examples of how to use this sensor. - -### Show upcoming movie releases in the next 2 days - -```yaml -# Example configuration.yaml entry -sensor: - - platform: radarr - api_key: YOUR_API_KEY - host: 192.168.1.8 - monitored_conditions: - - upcoming - days: 2 -``` - -### Enable SSL - -SSL may run on a different port than the default (7878). The SSL port can be bound to any port in Radarr, so it should be set in the configuration here (unless it is changed to 7878). - -```yaml -# Example configuration.yaml entry -sensor: - - platform: radarr - api_key: YOUR_API_KEY - host: 192.168.1.8 - port: 9898 - monitored_conditions: - - upcoming - days: 2 - ssl: true -``` - -### Get disk space for all storage locations - -```yaml -# Example configuration.yaml entry -sensor: - - platform: radarr - api_key: YOUR_API_KEY - host: 192.168.1.8 - monitored_conditions: - - diskspace -``` - -### Get disk space for listed storage locations - -The storage locations Radarr returns are in the system page and in some cases this can list duplicates if sub paths are mounted separately. By listing paths to include, you can choose what data is reported by the sensor. - -```yaml -# Example configuration.yaml entry -sensor: - - platform: radarr - api_key: YOUR_API_KEY - host: 192.168.1.8 - monitored_conditions: - - diskspace - include_paths: - - /tank/plex -``` - -### Get disk space in different unit - -The Radarr API returns available space in bytes, but this sensor will default to reporting it in GB to make the number more manageable. This can be overridden if your storage needs require a different unit. All units from bytes (B) to yottabytes (YB) are supported. - -*This calculation is done using base 2 math, and may differ from systems calculating using base 10 math.* - -```yaml -# Example configuration.yaml entry -sensor: - - platform: radarr - api_key: YOUR_API_KEY - host: 192.168.1.8 - monitored_conditions: - - diskspace - unit: TB -``` +- **Disk Space**: Shows the disk space available to Radarr. +- **Movies**: Shows the number of movies in the Radarr database. (disabled by default) +- **Start Time**: The time when Radarr was last restarted. From a0a8828dc60718d72e2defd8c007ababb7550fe1 Mon Sep 17 00:00:00 2001 From: spycle <48740594+spycle@users.noreply.github.com> Date: Mon, 26 Sep 2022 16:37:50 +0100 Subject: [PATCH 40/53] Add keymitt ble documentation (#23839) Co-authored-by: Franck Nijhof Co-authored-by: J. Nick Koston --- source/_integrations/keymitt_ble.markdown | 61 +++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 source/_integrations/keymitt_ble.markdown diff --git a/source/_integrations/keymitt_ble.markdown b/source/_integrations/keymitt_ble.markdown new file mode 100644 index 00000000000..cf83781f13e --- /dev/null +++ b/source/_integrations/keymitt_ble.markdown @@ -0,0 +1,61 @@ +--- +title: Keymitt MicroBot Push +description: Instructions on how to set up the MicroBot Push. +ha_category: + - Switch +ha_release: "2022.10" +ha_iot_class: Assumed State +ha_codeowners: + - '@spycle' +ha_domain: keymitt_ble +ha_bluetooth: true +ha_platforms: + - switch +ha_config_flow: true +ha_integration_type: integration +--- + +This integration allows you to locally control a MicroBot Push (previously manufactured by Naran but now under the Keymitt brand). + +### Prerequisites + +In order to use this integration, it is required to have working [Bluetooth](/integrations/blueooth) set up on the device running Home Assistant. A Naran/Keymitt hub is not required. + +The device will need to be in pairing mode before adding to Home Assistant. To reset the MicroBot Push, turn it off, then back on, and immediately hold the push button while the LED is red. After approximately 5 seconds, the LED will flash rapidly, at which point release the button. The LED will blink blue if the pairing mode has been successfully activated. + +If you have multiple devices, you will need to know the BTLE MAC address of your device to tell them apart. + +Please note, that devices cannot remain paired to the MicroBot app for this integration to function. They will be paired to Home Assistant exclusively. + +{% include integrations/config_flow.md %} + +### Supported Devices + +This Integration is for the MicroBot Push only. The Keymitt lock is not supported. + +### Service `keymitt_ble.calibrate` + +The Calibration service will locally set the MicroBot Push depth, duration, and mode. + +Please note: The push arm will extend or retract (dependent on the mode set) after the service call is invoked. The mode and depth will be demonstrated, but not the duration. The setting is, however, stored and can be confirmed by manually operating the device. + +| Service Data Attribute | Required | Description | +| ---------------------- | -------- | --------------------------------------------------------------------------------------------- | +| `depth` | yes | How far (in percent) to extend the push arm. | +| `duration` | yes | Duration (in seconds) to hold the arm extended. | +| `mode` | yes |'Normal' - extend and retract the arm. | +| | |'Invert' - retract then extend the arm. | +| | |'Toggle' - toggle between extend and retract. | + +### Error codes and troubleshooting + +The integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional. + +Due to the device going into deep sleep after prelonged disuse, the response time can be up to a minute in extreme cases. On average it will be much quicker. + +{% configuration_basic %} +"Failed to pair": + description: Make sure your devices are powered on, in range, and in pairing mode. Pressing the button on the MicroBot Push to take it out of deep sleep may also be beneficial. +"No unconfigured devices found": + description: Make sure your devices are powered on, in range, and in pairing mode. Pressing the button on the MicroBot Push to take it out of deep sleep may also be beneficial. +{% endconfiguration_basic %} From 8e751081edaa20429e87a6a9503a0af79aef80c9 Mon Sep 17 00:00:00 2001 From: Jeef Date: Mon, 26 Sep 2022 09:38:24 -0600 Subject: [PATCH 41/53] Intellifire fan (#23237) Co-authored-by: Franck Nijhof --- source/_integrations/intellifire.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_integrations/intellifire.markdown b/source/_integrations/intellifire.markdown index 72f791e03bc..febcf3b74d4 100644 --- a/source/_integrations/intellifire.markdown +++ b/source/_integrations/intellifire.markdown @@ -4,6 +4,7 @@ description: Instructions on the IntelliFire Fireplace integration for Home Assi ha_category: - Binary Sensor - Climate + - Fan - Sensor - Switch ha_iot_class: Local Polling @@ -15,6 +16,7 @@ ha_config_flow: true ha_platforms: - binary_sensor - climate + - fan - sensor - switch ha_dhcp: true @@ -39,6 +41,10 @@ The following controllable entities are available: - **Flame** - Turn fireplace on/off. - **Pilot Light** - Turn pilot light on/off. +### Fan + +- **Fan** - If your unit is equipped with a fan - this entry will be present. There are 4 fan speeds (1-4), with 0 being off. + ### Climate - **Thermostat** - This entity will be present if your unit has thermostatic control. From 446a6baf41e16a1a655c9d9564c2807d95d85b0c Mon Sep 17 00:00:00 2001 From: Mike Degatano Date: Mon, 26 Sep 2022 12:41:45 -0400 Subject: [PATCH 42/53] Update connectivity check solution for uri not set (#24183) --- .../unsupported/connectivity_check.markdown | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/source/more-info/unsupported/connectivity_check.markdown b/source/more-info/unsupported/connectivity_check.markdown index f563473a83a..b89ea23536b 100644 --- a/source/more-info/unsupported/connectivity_check.markdown +++ b/source/more-info/unsupported/connectivity_check.markdown @@ -10,8 +10,41 @@ Without this check you will face an increased number of errors and performance i ## The solution -From the host shell execute the following command to re-enable Network Manager's connectivity check: +From the host shell, first execute the following: + +```sh +busctl get-property org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager ConnectivityCheckAvailable +``` + +### Output is `b true` + +You just need to re-enable connectivity checks by executing this command: ```sh busctl set-property org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager ConnectivityCheckEnabled b true ``` + +It may take a bit for the message to go away as all checks are scheduled on timers. You can force it to recheck immediately by executing the following commands: + +```sh +ha host reload +ha resolution healthcheck +``` + +### Output is `b false` + +You need to set the connectivity uri in Network Manager's config. You can do this by adding the following to `/etc/NetworkManager/NetworkManager.conf`: + +```txt +[connectivity] +uri=http://checkonline.home-assistant.io/online.txt +interval=600 +``` + +Afterwards you will need to restart NetworkManager by either rebooting the host or executing this command: + +```sh +systemctl restart NetworkManager +``` + +As mentioned above, the checks are on timers so the message may not go away immediately unless you force an immediate re-check. If you continue to see the message after a while or after forcing a re-check then start over at the top of this solution. You may need to separately enable the check now that it is available. From 2ed9a602cb2a7f3cacd531e783aeb305b347882a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Mon, 26 Sep 2022 18:46:39 +0200 Subject: [PATCH 43/53] Adjust the OS/Supervised docs for spesific version (#24234) --- source/_includes/common-tasks/beta_version.md | 4 +++- source/_includes/common-tasks/development_version.md | 4 +++- source/_includes/common-tasks/specific_version.md | 10 +++++++++- source/_includes/common-tasks/update.md | 4 +++- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/source/_includes/common-tasks/beta_version.md b/source/_includes/common-tasks/beta_version.md index e6e3f759574..651b2f33256 100644 --- a/source/_includes/common-tasks/beta_version.md +++ b/source/_includes/common-tasks/beta_version.md @@ -33,9 +33,11 @@ If you would like to test next release before anyone else, you can install the b 3. Update Home Assistant core to the latest beta version ```bash - ha core update + ha core update --backup ``` + _The_ `--backup` _flag here ensures that you have a partial backup of your current setup incase you need to downgrade._ + {% endtabbed_block %} {% elsif page.installation == "container" %} diff --git a/source/_includes/common-tasks/development_version.md b/source/_includes/common-tasks/development_version.md index 8c8d8cd5d2b..98483671822 100644 --- a/source/_includes/common-tasks/development_version.md +++ b/source/_includes/common-tasks/development_version.md @@ -25,9 +25,11 @@ If you want to stay on the bleeding-edge Home Assistant Core development branch, 3. Update Home Assistant core to the latest dev version ```bash - ha core update + ha core update --backup ``` + _The_ `--backup` _flag here ensures that you have a partial backup of your current setup incase you need to downgrade._ + {% elsif page.installation == "container" %} ```bash diff --git a/source/_includes/common-tasks/specific_version.md b/source/_includes/common-tasks/specific_version.md index f093bf13b5f..5be8aeab77e 100644 --- a/source/_includes/common-tasks/specific_version.md +++ b/source/_includes/common-tasks/specific_version.md @@ -2,14 +2,22 @@ {% assign current_version = site.current_major_version | append: "." | append: site.current_minor_version | append: "." | append: site.current_patch_version %} +{% if page.installation != "os" and page.installation != "supervised" %} + In the event that a Home Assistant Core version doesn't play well with your hardware setup, you can downgrade to a previous release. In this example `{{current_version}}` is used as the target version but you can choose the version you desire to run. +{% endif %} + {% if page.installation == "os" or page.installation == "supervised" %} +You can use the CLI to upgrade to a specific version (`{{current_version}}` in this example), to downgrade your installation you should do a partial restore of a [backup](#backups) instead. + ```bash -ha core update --version {{current_version}} +ha core update --version {{current_version}} --backup ``` +_The_ `--backup` _flag here ensures that you have a partial backup of your current setup incase you need to downgrade._ + {% elsif page.installation == "container" %} ```bash diff --git a/source/_includes/common-tasks/update.md b/source/_includes/common-tasks/update.md index 8959598f3e7..af01fb90445 100644 --- a/source/_includes/common-tasks/update.md +++ b/source/_includes/common-tasks/update.md @@ -29,9 +29,11 @@ To update Home Assistant Core when you run Home Assistant {{ page.installation_n content: | ```bash - ha core update + ha core update --backup ``` + _The_ `--backup` _flag here ensures that you have a partial backup of your current setup incase you need to downgrade._ + {% endtabbed_block %} {% elsif page.installation == "container" %} From d8928f5d14802937dbeb91cbab34eaa4a5bc5e61 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 26 Sep 2022 06:49:27 -1000 Subject: [PATCH 44/53] Update bluetooth requirements in documentation (#24214) Co-authored-by: Franck Nijhof --- source/_integrations/bluetooth.markdown | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/source/_integrations/bluetooth.markdown b/source/_integrations/bluetooth.markdown index 9599b1de385..e20ab3d36a0 100644 --- a/source/_integrations/bluetooth.markdown +++ b/source/_integrations/bluetooth.markdown @@ -28,16 +28,23 @@ While this integration is part of [`default_config:`](/integrations/default_conf bluetooth: ``` -## D-Bus and BlueZ are required on Linux +## Requirements for Linux systems -For Bluetooth to function on Linux systems, the [D-Bus](https://en.wikipedia.org/wiki/D-Bus) socket must be accessible to Home Assistant. The Bluetooth adapter must be accessible to D-Bus and running [BlueZ](http://www.bluez.org/) >= 5.43. +For Bluetooth to function on Linux systems: -- Home Assistant Operating System: no additional steps are required. Home Assistant OS version 8.4 or later is recommended for performance reasons. +- The [D-Bus](https://en.wikipedia.org/wiki/D-Bus) socket must be accessible to Home Assistant. +- The Bluetooth adapter must be accessible to D-Bus and running [BlueZ](http://www.bluez.org/) >= 5.43. It is highly recommended to use BlueZ >= 5.63 as older versions have been reported to be unreliable. +- The D-Bus implementation should be [dbus-broker](https://github.com/bus1/dbus-broker). +- The host system should be running Linux kernel 5.15.62 or later. + +### Additional requirements by install method + +- Home Assistant Operating System: Upgrade to Home Assistant OS version 9.0 or later. - Home Assistant Container: The host system must run BlueZ, and the D-Bus socket must be accessible to Home Assistant **inside** the container. - Home Assistant Supervised: The host system must run BlueZ, and the D-Bus socket must be accessible to Home Assistant **inside** the container. - Home Assistant Core: The system must run BlueZ, and the D-Bus socket must be accessible to Home Assistant. -### Additional details for Container installs +### Additional details for Container, Core, and Supervised installs {% details Making the DBus socket available in the Docker container %} @@ -45,7 +52,11 @@ For most systems, the Dbus socket is in `/run/dbus`. The socket must be availabl {% enddetails %} -### Additional details for Container and Supervised installs +{% details Switching from dbus-daemon to dbus-broker %} + +Follow [the instructions](https://github.com/bus1/dbus-broker/wiki) to switch to dbus-broker. + +{% enddetails %} {% details Installing BlueZ %} From f3ed2860914456c30a4d90b230ef976964901aec Mon Sep 17 00:00:00 2001 From: Jan Bouwhuis Date: Mon, 26 Sep 2022 18:49:54 +0200 Subject: [PATCH 45/53] Explain default behavior of `expire_after` option for MQTT sensors (#24237) --- source/_integrations/binary_sensor.mqtt.markdown | 2 +- source/_integrations/sensor.mqtt.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/binary_sensor.mqtt.markdown b/source/_integrations/binary_sensor.mqtt.markdown index 035cabd138b..348d2d8e7b3 100644 --- a/source/_integrations/binary_sensor.mqtt.markdown +++ b/source/_integrations/binary_sensor.mqtt.markdown @@ -151,7 +151,7 @@ entity_category: type: string default: None expire_after: - description: Defines the number of seconds after the sensor's state expires, if it's not updated. After expiry, the sensor's state becomes `unavailable`. + description: If set, it defines the number of seconds after the sensor's state expires, if it's not updated. After expiry, the sensor's state becomes `unavailable`. Default the sensors state never expires. required: false type: integer force_update: diff --git a/source/_integrations/sensor.mqtt.markdown b/source/_integrations/sensor.mqtt.markdown index 75418f5e1d0..ed0fffb2d60 100644 --- a/source/_integrations/sensor.mqtt.markdown +++ b/source/_integrations/sensor.mqtt.markdown @@ -143,7 +143,7 @@ entity_category: type: string default: None expire_after: - description: Defines the number of seconds after the sensor's state expires, if it's not updated. After expiry, the sensor's state becomes `unavailable`. + description: If set, it defines the number of seconds after the sensor's state expires, if it's not updated. After expiry, the sensor's state becomes `unavailable`. Default the sensors state never expires. required: false type: integer default: 0 From bff87279b14c80b914fcbf4206b79d79881def0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Mon, 26 Sep 2022 18:50:13 +0200 Subject: [PATCH 46/53] Hide core instructions for caldav (#24239) --- source/_integrations/caldav.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_integrations/caldav.markdown b/source/_integrations/caldav.markdown index c6d4f6e2027..048527e6352 100644 --- a/source/_integrations/caldav.markdown +++ b/source/_integrations/caldav.markdown @@ -17,12 +17,16 @@ The `caldav` platform allows you to connect to your WebDAV calendar and generate You need to have a CalDAV server and credentials for it. This integration was tested against [Baikal](http://sabre.io/baikal/) but any integration complying with the RFC4791 should work. [Nextcloud](https://nextcloud.com/) and [Owncloud](https://owncloud.org/) work fine. +{% details "Notes for Home Assistant Core Installations" %} + You might need some additional system packages to compile the Python CalDAV library. On a Debian based system, install them by: ```bash sudo apt-get install libxml2-dev libxslt1-dev zlib1g-dev ``` +{% enddetails %} + ## Basic Setup To integrate a WebDAV calendar in Home Assistant, add the following section to your `configuration.yaml` file: From 593406e8ee80fb329f7c1ceeca0c75a2cdafa55e Mon Sep 17 00:00:00 2001 From: Avi Miller Date: Tue, 27 Sep 2022 02:51:17 +1000 Subject: [PATCH 47/53] Add documentation for the lifx.effect_move service (#24231) Co-authored-by: Franck Nijhof --- source/_integrations/lifx.markdown | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/source/_integrations/lifx.markdown b/source/_integrations/lifx.markdown index d07badc5776..e3c65e65351 100644 --- a/source/_integrations/lifx.markdown +++ b/source/_integrations/lifx.markdown @@ -59,7 +59,7 @@ To determine whether or not a HEV cycle is currently running, Home Assistant exp ## Light effects -The LIFX platform supports several light effects. You can start these effects with default options by using the `effect` attribute of the normal [`light.turn_on`](/integrations/light/#service-lightturn_on) service, for example like this: +The LIFX platform supports several software-controlled light effects and one hardware based effect. You can start these effects with default options by using the `effect` attribute of the normal [`light.turn_on`](/integrations/light/#service-lightturn_on) service, for example like this: ```yaml automation: @@ -91,7 +91,9 @@ script:          change: 35 ``` -The available light effects and their options are listed below. +The `lifx.effect_move` effect is hardware effect that is only available on LIFX multizone devices like the LIFX Z, Lightstrip or Beam. Note that if all the LEDs of the multizone device are set to the same color, the effect will not be visible. The effect can be stopped and started regardless of the power state of the device, but the default is to turn the device on when starting the effect. Set the `power_on` attribute of the `lifx.effect_move` service to `false` to override the default. + +All the available light effects and their options are listed below. ### Service `lifx.effect_pulse` @@ -122,9 +124,22 @@ Run an effect with colors looping around the color wheel. All participating ligh | `spread` | Maximum color difference between participating lights, in degrees on a color wheel (ranges from 0 to 359). | `power_on` | Set this to False to skip the effect on lights that are turned off (defaults to True). +### Service `lifx.effect_move` + +A harware-based effect available on LIFX multizone devices that creates a movement animation of the colors currently set on the device. The direction and speed of the animation are controlled by the `speed` and `direction` attributes. You can change the colors of the effect while it is running using the `lifx.set_state` service. + +The effect will not be visible if all LEDs on the device are set to the same color and is ignored by unsupported devices. + +| Service data attribute | Description | +| ---------------------- | ----------- | +| `entity_id` | String or list of strings that point at `entity_id`s of multizone lights. +| `speed` | Duration in seconds for the effect to travel the length of the device (min: 0.1s, max: 60s) +| `direction` | The direction in which the effect will travel, either "right" or "left" (default: right) +| `power_on` | Whether to turn the light on before starting the effect (optional, default: true) + ### Service `lifx.effect_stop` -Run an effect that does nothing, thereby stopping any other effect that might be running. +Run an effect that does nothing, thereby stopping any software or hardware effect that might be running. | Service data attribute | Description | | ---------------------- | ----------- | From 556000c9d68e15bb415e558ce321551ec0a643fc Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk <11290930+bouwew@users.noreply.github.com> Date: Mon, 26 Sep 2022 18:52:17 +0200 Subject: [PATCH 48/53] Update for Plugwise Core PR #76610 (#24251) --- source/_integrations/plugwise.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_integrations/plugwise.markdown b/source/_integrations/plugwise.markdown index 8707ef244f6..99a53c303a3 100644 --- a/source/_integrations/plugwise.markdown +++ b/source/_integrations/plugwise.markdown @@ -176,14 +176,14 @@ script: The current implementation of the Python module (Plugwise-Smile) includes: -Adam (zone_control): +Adam (zone_control) with On/Off, OpenTherm, and Loria/Thermastage heating and cooling support: - v3.x - v2.3 - - Devices supported are Anna, Lisa, Jip, Floor, Tom, Koen and Plug - note a Koen always comes with a Plug (the active part) + - Devices supported are Anna, Lisa, Jip, Floor, Tom, Plug, Aqara Smart Plug, and Koen (a Koen always comes with a Plug, the active part) -Anna (thermostat): +Anna (thermostat) with OpenTherm heating, and Elga and Loria/Thermastage with heating and cooling support: - v4.x - v3.x From 28f37d5e9690c3a7706be10586dcc0833ce02e0a Mon Sep 17 00:00:00 2001 From: Robert Hillis Date: Mon, 26 Sep 2022 12:56:07 -0400 Subject: [PATCH 49/53] Add binary sensor docs for Radarr (#24250) --- source/_integrations/radarr.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_integrations/radarr.markdown b/source/_integrations/radarr.markdown index 5d64f6b2b63..4383e8684a6 100644 --- a/source/_integrations/radarr.markdown +++ b/source/_integrations/radarr.markdown @@ -8,6 +8,7 @@ ha_config_flow: true ha_iot_class: Local Polling ha_domain: radarr ha_platforms: + - binary_sensor - sensor ha_codeowners: - '@tkdrob' @@ -21,6 +22,10 @@ Your API key can be found in Settings > General in the Radarr Web UI. ## Integration Entities +Each added configuration entry will create the following binary sensor: + +- **Health**: Shows if the Radarr instance is healthy. This is determined to have a problem if Radarr cannot communicate with any enabled download clients or no indexers are available for RSS feeds or searches. + Each added configuration entry will create the following sensors: - **Disk Space**: Shows the disk space available to Radarr. From d3e782e304e6308eb7d1c8462c57135999ba12c0 Mon Sep 17 00:00:00 2001 From: Tom Puttemans Date: Mon, 26 Sep 2022 18:56:26 +0200 Subject: [PATCH 50/53] Update dsmr_reader config flow and autodiscovery (#23939) Co-authored-by: Franck Nijhof --- source/_includes/integrations/config_flow.md | 4 ++-- source/_integrations/dsmr_reader.markdown | 23 +++++++++----------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/source/_includes/integrations/config_flow.md b/source/_includes/integrations/config_flow.md index 7b44475ace4..3d0c39967a5 100644 --- a/source/_includes/integrations/config_flow.md +++ b/source/_includes/integrations/config_flow.md @@ -8,14 +8,14 @@ interface, by using this My button: {% my config_flow_start badge domain=domain %} -{% if include.discovery or page.ha_dhcp or page.ha_homekit or page.ha_ssdp or page.ha_zeroconf %} +{% if include.discovery or page.ha_dhcp or page.ha_homekit or page.ha_ssdp or page.ha_zeroconf or page.ha_mqtt %} {{ name }} can be auto-discovered by Home Assistant. If an instance was found, it will be shown as _"Discovered"_, which you can select to set it up right away. {% endif %} {% details "Manual configuration steps" %} -{% if include.discovery or page.ha_dhcp or page.ha_homekit or page.ha_ssdp or page.ha_zeroconf %} +{% if include.discovery or page.ha_dhcp or page.ha_homekit or page.ha_ssdp or page.ha_zeroconf or page.ha_mqtt %} If there wasn't any discovered automatically, don't worry! You can set up a manual integration entry: {% else %} diff --git a/source/_integrations/dsmr_reader.markdown b/source/_integrations/dsmr_reader.markdown index 4fb0e38d954..15a200173ec 100644 --- a/source/_integrations/dsmr_reader.markdown +++ b/source/_integrations/dsmr_reader.markdown @@ -5,9 +5,12 @@ ha_category: - Energy - Sensor ha_iot_class: Local Push +ha_config_flow: true +ha_mqtt: true ha_release: 0.103 ha_codeowners: - '@depl0y' + - '@glodenox' ha_domain: dsmr_reader ha_platforms: - sensor @@ -18,24 +21,18 @@ The `dsmr_reader` sensor integration allows you to easily add all sensors that [ ## Prerequisites -- DSMR Reader -- MQTT broker +To use this DSMR Reader sensor integration, you need to have a DSMR Reader instance running and an MQTT broker to send sensor data through. -## Setup - -1. Configure the MQTT broker in DSMR Reader which Home Assistant also connects to -2. Enable the following data sources in DSMR Reader with the default mapping: +1. Add the MQTT broker integration in Home Assistant, if you haven't done so already +2. Configure the MQTT broker in the DSMR Reader application +3. Enable the following data sources in the DSMR Reader administration pages with the default mappings: - Day consumption: Split topic - Gas consumption: Split topic - Meter Statistics: Split topic - Telegram: Split topic -## Configuration +{% include integrations/config_flow.md %} -To use this integration in your installation, add the following to your `configuration.yaml` file: +## Difference with the DSMR integration -```yaml -# Example configuration.yaml entry -sensor: - - platform: dsmr_reader -``` +This integration relies on the presence of an existing DSMR Reader application setup. It processes the events triggered by the MQTT publishing feature to create sensor entities within Home Assistant. This integration uses the data published on the MQTT broker, no matter how or where the application is installed. By comparison, the [DSMR](/integrations/dsmr/) integration adds a full instance of the DSMR Reader application within Home Assistant. It is possible to have both integrations installed at the same time and working together, but this is not required. From dfaf2d0d5c5b981cbfeec124a0d683c88897cc48 Mon Sep 17 00:00:00 2001 From: Artem Draft Date: Mon, 26 Sep 2022 19:57:51 +0300 Subject: [PATCH 51/53] Docs about PSK auth and SSDP discovery in Bravia TV (#23996) --- source/_integrations/braviatv.markdown | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/source/_integrations/braviatv.markdown b/source/_integrations/braviatv.markdown index b4c7c35511d..51a4d14898e 100644 --- a/source/_integrations/braviatv.markdown +++ b/source/_integrations/braviatv.markdown @@ -16,6 +16,7 @@ ha_platforms: - button - media_player - remote +ha_ssdp: true ha_integration_type: integration --- @@ -25,11 +26,20 @@ Almost all [Sony Bravia TV 2013 and newer](https://info.tvsideview.sony.net/en_w {% include integrations/config_flow.md %} +## Authentication + +The Bravia TV integration supports two types of authentication: + +- **PSK (Pre-Shared-Key)** is a user-defined secret key used for access control. This authentication method is recommended as more reliable and stable. To set up and enable PSK on your TV, go to: **Settings -> Network -> Home Network Setup -> IP Control**. +- **PIN Code** authentication is easier and does not require additional settings. + +For more information, see [IP Control Authentication](https://pro-bravia.sony.net/develop/integrate/ip-control/index.html#ip-control-authentication). + ## Common Issues ### TV does not generate new pin -If you have previously set up your TV with any Home Assistant instances, you must remove Home Assistant from your TV in order for your TV to generate a new pin. To do this, you must do **one** of the following: +If you have previously set up your TV with any Home Assistant instances via PIN code, you must remove Home Assistant from your TV in order for your TV to generate a new pin. To do this, you must do **one** of the following: - On your TV, go to: **Settings** -> **Network** -> **Remote device settings** -> **Deregister remote device**. Disable and re-enable the **Control remotely** after. Menu titles may differ slightly between models. If needed, refer to your specific model's [manual](https://www.sony.com/electronics/support/manuals) for additional guidance. - Reset your TV to factory condition. From 5d6ba44552643953f40b85aa91c202da54fcbb4b Mon Sep 17 00:00:00 2001 From: pergolafabio <43251136+pergolafabio@users.noreply.github.com> Date: Mon, 26 Sep 2022 19:00:37 +0200 Subject: [PATCH 52/53] Clarify access vs master code (#24045) --- source/_integrations/risco.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/risco.markdown b/source/_integrations/risco.markdown index 6530dcf56f1..00c29eee796 100644 --- a/source/_integrations/risco.markdown +++ b/source/_integrations/risco.markdown @@ -42,7 +42,7 @@ If you have multiple sites, only the first site will be used. The integration will connect locally to your system. No dependency on the cloud, and instantaneous updates, but is harder to set up. -You will need the master code to your system, and with older models, +You will need the panel access code (default 5678) to your system, this access code is NOT the same as the installer/subinstaller code, and with older models, you might need to either disconnect your system from the cloud, or set up a proxy that will allow you to connect both locally and via the cloud. The local version of the integration does not support events, and the `arming` state. From a6c318e644d586e50a88a6f59487dab3cbc26f4b Mon Sep 17 00:00:00 2001 From: HarvsG <11440490+HarvsG@users.noreply.github.com> Date: Mon, 26 Sep 2022 17:02:09 +0000 Subject: [PATCH 53/53] [Bayesian] Make examples easier to understand, adds tips (#21899) --- source/_integrations/bayesian.markdown | 74 ++++++++++++++++++-------- 1 file changed, 51 insertions(+), 23 deletions(-) diff --git a/source/_integrations/bayesian.markdown b/source/_integrations/bayesian.markdown index 4dc6c8444cc..472ca1f07c0 100644 --- a/source/_integrations/bayesian.markdown +++ b/source/_integrations/bayesian.markdown @@ -17,6 +17,23 @@ The `bayesian` binary sensor platform observes the state from multiple sensors a This allows for the detection of complex events that may not be readily observable, e.g., cooking, showering, in bed, the start of a morning routine, etc. It can also be used to gain greater confidence about events that _are_ directly observable, but for which the sensors can be unreliable, e.g., presence. +## Theory + +A key concept in Bayes' Rule is the difference between the probability of the 'event given the observation' and the probability of the 'observation given the event'. In some cases these probabilities will be similar. The probability that someone is in the room given that motion is detected is similar to the probability motion is detected given that someone is in the room. In other cases, the distinction is much more important. The probability I have just arrived home (the event) each time the front door contact sensor reports `open` (the observation) (p=0.2) is not the same as the probability the front door contact sensor reports `open` (the observation) when I come home (the event) (p=0.999). + +In the configuration use the probability of the observation (the sensor state in question) given the event (the assumed state of the Bayesian binary_sensor). + +## Estimating probabilities + +1. Avoid `0` and `1`, these will mess with the odds and are rarely true - sensors fail. +2. When using `0.99` and `0.001`. The number of `9`s and `0`s matters. +3. Most probabilities will be time-based - the fraction of time something is true is also the probability it will be true. +4. Use your Home Assistant history to help estimate the probabilities. + - `prob_given_true:` - Select the sensor in question over a time range when you think the `bayesian` sensor should have been `true`. `prob_given_true:` is the fraction of the time the sensor was in `to_state:`. + - `prob_given_false:` - Select the sensor in question over a time range when you think the `bayesian` sensor should have been `false`. `prob_given_false:` is the fraction of the time the sensor was in `to_state:`. +5. Don't work backwards by tweaking `prob_given_true:` and `prob_given_false:` to give the results and behaviors you want, use #4 to try and get probabilities as close to the 'truth' as you can, if your behavior is not as expected consider adding more sensors or see #7. +6. If your Bayesian sensor ends up triggering `on` too easily, re-check that the probabilities set and estimated make sense, then consider increasing `probability_threshold:` and vice-versa. + ## Configuration To enable the Bayesian sensor, add the following lines to your `configuration.yaml`: @@ -37,12 +54,15 @@ binary_sensor: {% configuration %} prior: description: > - The prior probability of the event. At any point in time - (ignoring all external influences) how likely is this event to occur? + The prior probability of the event (0 to 1). At any point in time + (ignoring all external influences) how likely is this event to be occurring? required: true type: float probability_threshold: - description: The probability at which the sensor should trigger to `on`. + description: > + The posterior probability at which the sensor should trigger to `on`. + use higher values to reduce false positives (and increase false negatives) + Note: If the threshold is higher than the prior then the default state will be `off` required: false type: float default: 0.5 @@ -52,7 +72,7 @@ name: type: string default: Bayesian Binary Sensor observations: - description: The observations which should influence the likelihood that the given event has occurred. + description: The observations which should influence the probability that the given event is occurring. required: true type: list keys: @@ -67,23 +87,23 @@ observations: description: Name of the entity to monitor. Required for `state` and `numeric_state`. required: false type: string + to_state: + description: The entity state that defines the observation. Required (for `state`). + required: false + type: string value_template: - description: Defines the template to be used. Required for `template`. + description: Defines the template to be used, should evaluate to `true` or `false`. Required for `template`. required: false type: template prob_given_true: - description: The probability of the observation occurring, given the event is `true`. + description: > + Assuming the bayesian binary_sensor is `true`, the probability the entity state is occurring. required: true type: float prob_given_false: - description: The probability of the observation occurring, given the event is `false` can be set as well. - required: false + description: Assuming the bayesian binary_sensor is `false` the probability of this entity state is occurring. + required: true type: float - default: "`1 - prob_given_true` if `prob_given_false` is not set" - to_state: - description: The target state. Required (for `state`). - required: false - type: string {% endconfiguration %} ## Full examples @@ -95,27 +115,33 @@ The following is an example for the `state` observation platform. binary_sensor: name: "in_bed" platform: "bayesian" - prior: 0.25 - probability_threshold: 0.95 + prior: 0.25 # I spend 6 hours a day in bed 6hr/24hr is 0.25 + probability_threshold: 0.8 # I am going to be using this sensor to turn out the lights so I only want to to activate when I am sure observations: - platform: "state" entity_id: "sensor.living_room_motion" - prob_given_true: 0.4 - prob_given_false: 0.2 + prob_given_true: 0.05 # If I am in bed then I shouldn't be in the living room, very occasionally I have guests, however + prob_given_false: 0.2 # My sensor history shows If I am not in bed I spend about a fifth of my time in the living room to_state: "off" - platform: "state" entity_id: "sensor.basement_motion" - prob_given_true: 0.5 - prob_given_false: 0.4 + prob_given_true: 0.5 # My sensor history shows, when I am in bed, my basement motion sensor is active about half the time because of my cat + prob_given_false: 0.3 # As above but my cat tends to spend more time upstairs or outside when I am awake and I rarely use the basement to_state: "off" - platform: "state" entity_id: "sensor.bedroom_motion" - prob_given_true: 0.5 + prob_given_true: 0.5 # My sensor history shows when I am in bed the sensor picks me up about half the time + prob_given_false: 0.1 # My sensor history shows I spend about 10% of my waking hours in my bedroom to_state: "on" - platform: "state" entity_id: "sun.sun" - prob_given_true: 0.7 + prob_given_true: 0.7 # If I am in bed then there is a good chance the sun will be down, but in the summer mornings I may still be in bed to_state: "below_horizon" + - platform: "state" + entity_id: "sensor.android_charger_type" + prob_given_true: 0.95 # When I am in bed, I nearly always plug my phone in to charge + prob_given_false: 0.1 # When I am awake, I occasionally AC charge my phone + to_state: "ac" ``` Next up an example which targets the `numeric_state` observation platform, @@ -132,10 +158,11 @@ binary_sensor: - platform: "numeric_state" entity_id: "sensor.outside_air_temperature_fahrenheit" prob_given_true: 0.95 + prob_given_false: 0.05 below: 50 ``` -Finally, here's an example for `template` observation platform, as seen in the configuration it requires `value_template`. +Finally, here's an example for `template` observation platform, as seen in the configuration it requires `value_template`. This template will evaluate to true if the device tracker `device_tracker.paulus` shows `not_home` and it last changed its status more than 5 minutes ago. {% raw %} @@ -150,7 +177,8 @@ binary_sensor: - platform: template value_template: > {{is_state('device_tracker.paulus','not_home') and ((as_timestamp(now()) - as_timestamp(states.device_tracker.paulus.last_changed)) > 300)}} - prob_given_true: 0.95 + prob_given_true: 0.05 + prob_given_false: 0.99 ``` {% endraw %}