From 8742c794154f707cef7f6933ec646baf0995e79a Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Wed, 3 Aug 2022 18:16:57 +0200 Subject: [PATCH 001/114] Fix Z-Wave logs how-to (#23631) --- source/_integrations/zwave_js.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/zwave_js.markdown b/source/_integrations/zwave_js.markdown index 3d4f72db09e..d3e6743526c 100644 --- a/source/_integrations/zwave_js.markdown +++ b/source/_integrations/zwave_js.markdown @@ -870,6 +870,6 @@ Many users have reported issues with interference when the USB stick was directl Z-Wave JS writes details to its logs. To access these logs go to the following. - **Configuraton** -> **Devices & Services** -> **Integrations(tab)** -> **Z-Wave (CONFIGURE)** -> **Logs(tab)** + **Settings** -> **Devices & Services** -> **Integrations(tab)** -> **Z-Wave (CONFIGURE)** -> **Logs(tab)** You need to keep this browser tab open for logging to be active. From 3e04d29a57908a34a2e806be986285cbae6ecb4b Mon Sep 17 00:00:00 2001 From: Paul Annekov Date: Wed, 3 Aug 2022 23:19:16 +0300 Subject: [PATCH 002/114] new sensors for ukraine alarm (#23634) --- source/_integrations/ukraine_alarm.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_integrations/ukraine_alarm.markdown b/source/_integrations/ukraine_alarm.markdown index 51723c00dc0..2412ee85dba 100644 --- a/source/_integrations/ukraine_alarm.markdown +++ b/source/_integrations/ukraine_alarm.markdown @@ -14,10 +14,12 @@ ha_platforms: ha_integration_type: integration --- -The Ukraine Alarm integration uses the siren.pp.ua API - public wrapper for [Ukraine Alarm](https://www.ukrainealarm.com/) web service to offer air-raid siren notifications. The integration will create 4 binary sensors for your selected region in Ukraine: +The Ukraine Alarm integration uses the siren.pp.ua API - public wrapper for [Ukraine Alarm](https://www.ukrainealarm.com/) web service to offer air-raid siren notifications. The integration will create 6 binary sensors for your selected region in Ukraine: - Air - Artillery +- Chemical +- Nuclear - Urban Fights - Unknown From d25fb6fa3e471d1101204ddcc21da5147afde2e7 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Wed, 3 Aug 2022 23:51:23 +0200 Subject: [PATCH 003/114] Add Epson WF-4820 to list of tested devices (#23632) --- source/_integrations/epsonworkforce.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/epsonworkforce.markdown b/source/_integrations/epsonworkforce.markdown index c2624fb5c7f..c1122ffc6fd 100644 --- a/source/_integrations/epsonworkforce.markdown +++ b/source/_integrations/epsonworkforce.markdown @@ -67,6 +67,7 @@ Tested devices: - Epson WF3540 - Epson WF3620 - Epson WF3640 +- Epson WF4820 - Epson EcoTank ET-77x0 - Epson ET-2650 - Epson ET-4750 From 10463effa3e4beb68426fa0c7f2fb8164ee41b2d Mon Sep 17 00:00:00 2001 From: BamBamBam996 <76049094+TFhdKi95ae8L@users.noreply.github.com> Date: Thu, 4 Aug 2022 12:02:36 +0200 Subject: [PATCH 004/114] Update repairs.markdown (#23645) --- source/_integrations/repairs.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/repairs.markdown b/source/_integrations/repairs.markdown index 6c75cac8870..7e9ae75a115 100644 --- a/source/_integrations/repairs.markdown +++ b/source/_integrations/repairs.markdown @@ -34,7 +34,7 @@ in the repairs dashboard is shown in the sidebar on the "Settings" menu item.

Screenshot showing the number of updates and repairs pending on the settings menu item in the sidebar -The settings menu item shows the number of updatesd and repairable issues pending. +The settings menu item shows the number of pending updates and repairable issues.

Navigate to {% my repairs title="**Settings** -> **System** -> **Repairs**" %} From e49bed1ca99247d6187d52cc406bbd4c895875f0 Mon Sep 17 00:00:00 2001 From: Robert Hillis Date: Thu, 4 Aug 2022 07:53:58 -0400 Subject: [PATCH 005/114] Add instructions for enabling Wemo emulation for Digital Loggers (#23640) --- source/_integrations/digital_loggers.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_integrations/digital_loggers.markdown b/source/_integrations/digital_loggers.markdown index 820e95ee41a..e0b5d5296f5 100644 --- a/source/_integrations/digital_loggers.markdown +++ b/source/_integrations/digital_loggers.markdown @@ -27,3 +27,8 @@ ha_release: pre 0.7 --- {% include integrations/supported_brand.md %} + +The only tested working model is the Pro Switch. + +Supported Digital Loggers models emulate the WeMo protocol but this is not automatically enabled. +To enable this, find the IP address of your device and log in. Click on External APIs, check the box to allow CoAP, and then click submit. From 5615f23b3d8a8f8a2618685be00e7edce68e031c Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 4 Aug 2022 01:58:25 -1000 Subject: [PATCH 006/114] Add section on BlueZ and getting the Dbus socket in the container to bluetooth (#23636) Co-authored-by: Franck Nijhof --- source/_integrations/bluetooth.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/_integrations/bluetooth.markdown b/source/_integrations/bluetooth.markdown index 515d8220317..bce9bcbb25b 100644 --- a/source/_integrations/bluetooth.markdown +++ b/source/_integrations/bluetooth.markdown @@ -35,6 +35,22 @@ For Bluetooth to function on Linux systems, the [D-Bus](https://en.wikipedia.org - 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 + +{% details Making the DBus socket available in the Docker container %} + +For most systems, the Dbus socket is in `/run/dbus`. The socket must be available in the container for Home Assistant to be able to connect to Dbus and access the Bluetooth adapter. When starting with `docker run`, this can be accomplished by adding `-v /run/dbus:/run/dbus:ro` to the command. If the Dbus socket is in `/var/run/dbus` on the host system, use `-v /var/run/dbus:/run/dbus:ro` instead. + +{% enddetails %} + +### Additional details for Container and Supervised installs + +{% details Installing BlueZ %} + +On Debian based host systems, the `sudo apt-get -y install bluez` command will install BlueZ. + +{% enddetails %} + ## Installing a USB Bluetooth Adapter Some systems may not come with Bluetooth and require a USB adapter. Installing an adapter for the first time may require multiple restarts for the device to be fully recognized. From 17e11d97a4e78d1350e7da29d8272c2cf90e36e2 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 4 Aug 2022 17:30:11 +0200 Subject: [PATCH 007/114] Fix spelling of OpenWrt (#23647) --- source/_integrations/luci.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_integrations/luci.markdown b/source/_integrations/luci.markdown index d140ea5e6c4..d90afe8498c 100644 --- a/source/_integrations/luci.markdown +++ b/source/_integrations/luci.markdown @@ -1,6 +1,6 @@ --- -title: OpenWRT (luci) -description: Instructions on how to integrate OpenWRT routers into Home Assistant. +title: OpenWrt (luci) +description: Instructions on how to integrate OpenWrt routers into Home Assistant. ha_category: - Presence Detection ha_iot_class: Local Polling @@ -15,7 +15,7 @@ ha_integration_type: integration This is a presence detection scanner for OpenWrt using [luci](https://openwrt.org/docs/techref/luci). -Before this scanner can be used you have to install the luci RPC package on OpenWRT: +Before this scanner can be used you have to install the luci RPC package on OpenWrt: ```bash # opkg install luci-mod-rpc From bec1a07660fc6c6bc869324746d1ba6155cac65a Mon Sep 17 00:00:00 2001 From: Hedda Date: Thu, 4 Aug 2022 18:06:54 +0200 Subject: [PATCH 008/114] Update zha.markdown with new ITead EFR32MG21 model (#23649) --- source/_integrations/zha.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/zha.markdown b/source/_integrations/zha.markdown index e1169abb54f..ee0bc893fe8 100644 --- a/source/_integrations/zha.markdown +++ b/source/_integrations/zha.markdown @@ -83,7 +83,7 @@ Some other Zigbee coordinator hardware may not support a firmware that is capabl - [RaspBee II (a.k.a. RaspBee 2) Raspberry Pi Shield from dresden elektronik](https://phoscon.de/raspbee2) - [RaspBee Raspberry Pi Shield from dresden elektronik](https://phoscon.de/raspbee) - Silicon Labs EmberZNet based radios using the EZSP protocol (via the [bellows](https://github.com/zigpy/bellows) library for zigpy) - - [ITead Zigbee 3.0 USB Dongle (EFR32MG21) Model 9888010100045](https://itead.cc/product/zigbee-3-0-usb-dongle/) + - [ITead SONOFF Zigbee 3.0 USB Dongle Plus Model "ZBDongle-E" (EFR32MG21 variant)](https://itead.cc/product/zigbee-3-0-usb-dongle/) - [ITead Sonoff ZBBridge](https://itead.cc/product/sonoff-zbbridge/) (Note! [WiFi-based bridges are not recommended for ZHA with EZSP radios](https://github.com/home-assistant/home-assistant.io/issues/17170). Also, this first have to be flashed with [Tasmota firmware and Silabs EmberZNet NCP EZSP UART Host firmware to use as Serial-to-IP adapter](https://www.digiblur.com/2020/07/how-to-use-sonoff-zigbee-bridge-with.html)) - [Nortek GoControl QuickStick Combo Model HUSBZB-1 (Z-Wave & Zigbee Ember 3581 USB Adapter)](https://www.nortekcontrol.com/products/2gig/husbzb-1-gocontrol-quickstick-combo/) (Note! Not a must but recommend [upgrade the EmberZNet NCP application firmware](https://github.com/walthowd/husbzb-firmware)) - [Elelabs Zigbee USB Adapter](https://elelabs.com/products/elelabs-usb-adapter.html)/[POPP ZB-Stick](https://shop.zwave.eu/detail/index/sArticle/2496) (Note! Not a must but recommend [upgrade the EmberZNet NCP application firmware](https://github.com/Elelabs/elelabs-zigbee-ezsp-utility)) @@ -172,7 +172,7 @@ Some devices can be auto-discovered, which can simplify the ZHA setup process. T | Device | Discovery Method | Identifier | | -------| ---------------- | ---------- | -| [ITead SONOFF Zigbee 3.0 USB Dongle Plus](https://itead.cc/product/sonoff-zigbee-3-0-usb-dongle-plus/) | USB | 10C4:EA60 | +| [ITead SONOFF Zigbee 3.0 USB Dongle Plus Model "ZBDongle-P" (CC2652P variant)](https://itead.cc/product/sonoff-zigbee-3-0-usb-dongle-plus/) | USB | 10C4:EA60 | | [Bitron Video/SMaBiT BV AV2010/10](https://bv.smabit.eu/index.php/smart-home-produkte/zb-funkstick/) | USB | 10C4:8B34 | | [ConBee II](https://phoscon.de/conbee2) | USB | 1CF1:0030 | | [Nortek HUSBZB-1](https://www.nortekcontrol.com/products/2gig/husbzb-1-gocontrol-quickstick-combo/) | USB | 10C4:8A2A | From 8cf57dd3c57933883821f9808009fe88569f4714 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Thu, 4 Aug 2022 13:22:58 -0600 Subject: [PATCH 009/114] Add docs for forthcoming RainMachine reboot button (#23396) --- source/_integrations/rainmachine.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/rainmachine.markdown b/source/_integrations/rainmachine.markdown index 08ceb89fe8a..dcfa107b909 100644 --- a/source/_integrations/rainmachine.markdown +++ b/source/_integrations/rainmachine.markdown @@ -14,6 +14,7 @@ ha_codeowners: ha_domain: rainmachine ha_platforms: - binary_sensor + - button - diagnostics - sensor - switch @@ -27,6 +28,7 @@ The RainMachine integration is the main integration to integrate all platforms r There is currently support for the following device types within Home Assistant: - Binary Sensor +- Button - Sensor - [Switch](#switch) From c0ff3c40ece68b3863c822130053de05420903c1 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 4 Aug 2022 23:12:06 +0200 Subject: [PATCH 010/114] Add link to all releases in release FAQ page (#23657) --- source/_faq/release.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_faq/release.markdown b/source/_faq/release.markdown index 8d55805e543..f8c5d90f49b 100644 --- a/source/_faq/release.markdown +++ b/source/_faq/release.markdown @@ -6,4 +6,7 @@ ha_category: Common New versions of Home Assistant are released on the first Wednesday of every month. The exact dates can be seen in the upcoming events calendar on the [Home Assistant Developers](https://developers.home-assistant.io/) website. +A list of all releases in our history and their announcement blog posts +can be found [here](/blog/categories/core/). + The last week of our release schedule is primarily focused on beta testing. Users who participate in the beta can view the changelog under [beta release notes](https://rc.home-assistant.io/latest-release-notes/) and get help in the `#beta` channel of [Home Assistant's Discord server](/join-chat). Testers are also encouraged to [report issues on GitHub](/help/#bugs-feature-requests-and-alike). From 98d598880a0da30b01787d3628e9bd37dcaf286d Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 4 Aug 2022 23:23:09 +0200 Subject: [PATCH 011/114] 2022.8.1 (#23656) --- _config.yml | 4 +- .../_posts/2022-08-03-release-20228.markdown | 79 ++++++++++++++++--- 2 files changed, 71 insertions(+), 12 deletions(-) diff --git a/_config.yml b/_config.yml index 65da212fac7..353dfbb3100 100644 --- a/_config.yml +++ b/_config.yml @@ -107,8 +107,8 @@ social: # Home Assistant release details current_major_version: 2022 current_minor_version: 8 -current_patch_version: 0 -date_released: 2022-08-03 +current_patch_version: 1 +date_released: 2022-08-04 # 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-08-03-release-20228.markdown b/source/_posts/2022-08-03-release-20228.markdown index 543f0a132ae..632c83493f9 100644 --- a/source/_posts/2022-08-03-release-20228.markdown +++ b/source/_posts/2022-08-03-release-20228.markdown @@ -43,27 +43,18 @@ Enjoy the release! - [Other noteworthy changes](#other-noteworthy-changes) - [New Integrations](#new-integrations) - [Integrations now available to set up from the UI](#integrations-now-available-to-set-up-from-the-ui) +- [Release 2022.8.1 - August 4](#release-202281---august-4) - [Need help? Join the community!](#need-help-join-the-community) - [Breaking Changes](#breaking-changes) - [Farewell to the following](#farewell-to-the-following) - [All changes](#all-changes) -Don't forget to [join our release party live stream on YouTube](https://www.youtube.com/watch?v=m9gKFH8WlzY) today at 12:00 PDT / 21:00 CET! - - - -{% comment %} - - - Missed our release party live stream on YouTube? Don't worry! You can watch the recording of it right here! -{% endcomment %} - ## Introducing Repairs: You can fix it! A completely new feature we hope you are going to love: **Repairs**! 👷‍♂️ @@ -319,6 +310,74 @@ The following integrations are now available via the Home Assistant UI: [Anthem A/V Receivers]: /integrations/anthemav [Bose SoundTouch]: /integrations/soundtouch +## Release 2022.8.1 - August 4 + +- Fix zwave_js addon info ([@MartinHjelmare] - [#76044]) ([hassio docs]) ([zwave_js docs]) +- Bump bleak to 0.15.1 ([@bdraco] - [#76136]) ([bluetooth docs]) +- Allow climate operation mode fan_only as custom mode in Alexa ([@jbouwh] - [#76148]) ([alexa docs]) +- Remove icon attribute if device class is set ([@dgomes] - [#76161]) ([integration docs]) +- Fix flux_led ignored entries not being respected ([@bdraco] - [#76173]) ([flux_led docs]) +- Fix race in bluetooth async_process_advertisements ([@bdraco] - [#76176]) ([bluetooth docs]) +- Add repair item to remove no-longer-functioning Flu Near You integration ([@bachya] - [#76177]) ([flunearyou docs]) (deprecation) +- Fix arm away in Risco ([@OnFreund] - [#76188]) ([risco docs]) +- Fix nullable ip_address in mikrotik ([@engrbm87] - [#76197]) ([mikrotik docs]) +- Mark RPI Power binary sensor as diagnostic ([@frenck] - [#76198]) ([rpi_power docs]) +- BLE pairing reliablity fixes for HomeKit Controller ([@bdraco] - [#76199]) ([homekit_controller docs]) (dependency) +- Bump NextDNS library ([@bieniu] - [#76207]) ([nextdns docs]) +- Bump AIOAladdin Connect to 0.1.41 ([@mkmer] - [#76217]) ([aladdin_connect docs]) (dependency) +- Fix spelling of OpenWrt in luci integration manifest ([@frenck] - [#76219]) ([luci docs]) +- Fix Life360 recovery from server errors ([@pnbruckner] - [#76231]) ([life360 docs]) +- More explicitly call out special cases with SimpliSafe authorization code ([@bachya] - [#76232]) ([simplisafe docs]) +- Enable strict typing for HomeKit Controller config flow module ([@Jc2k] - [#76233]) ([homekit_controller docs]) +- Fix some homekit_controller pylint warnings and (local only) test failures ([@Jc2k] - [#76122]) ([homekit_controller docs]) + +[#76044]: https://github.com/home-assistant/core/pull/76044 +[#76122]: https://github.com/home-assistant/core/pull/76122 +[#76136]: https://github.com/home-assistant/core/pull/76136 +[#76148]: https://github.com/home-assistant/core/pull/76148 +[#76161]: https://github.com/home-assistant/core/pull/76161 +[#76173]: https://github.com/home-assistant/core/pull/76173 +[#76176]: https://github.com/home-assistant/core/pull/76176 +[#76177]: https://github.com/home-assistant/core/pull/76177 +[#76188]: https://github.com/home-assistant/core/pull/76188 +[#76197]: https://github.com/home-assistant/core/pull/76197 +[#76198]: https://github.com/home-assistant/core/pull/76198 +[#76199]: https://github.com/home-assistant/core/pull/76199 +[#76207]: https://github.com/home-assistant/core/pull/76207 +[#76217]: https://github.com/home-assistant/core/pull/76217 +[#76219]: https://github.com/home-assistant/core/pull/76219 +[#76231]: https://github.com/home-assistant/core/pull/76231 +[#76232]: https://github.com/home-assistant/core/pull/76232 +[#76233]: https://github.com/home-assistant/core/pull/76233 +[@Jc2k]: https://github.com/Jc2k +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@OnFreund]: https://github.com/OnFreund +[@bachya]: https://github.com/bachya +[@bdraco]: https://github.com/bdraco +[@bieniu]: https://github.com/bieniu +[@dgomes]: https://github.com/dgomes +[@engrbm87]: https://github.com/engrbm87 +[@frenck]: https://github.com/frenck +[@jbouwh]: https://github.com/jbouwh +[@mkmer]: https://github.com/mkmer +[@pnbruckner]: https://github.com/pnbruckner +[aladdin_connect docs]: /integrations/aladdin_connect/ +[alexa docs]: /integrations/alexa/ +[bluetooth docs]: /integrations/bluetooth/ +[flunearyou docs]: /integrations/flunearyou/ +[flux_led docs]: /integrations/flux_led/ +[hassio docs]: /integrations/hassio/ +[homekit_controller docs]: /integrations/homekit_controller/ +[integration docs]: /integrations/integration/ +[life360 docs]: /integrations/life360/ +[luci docs]: /integrations/luci/ +[mikrotik docs]: /integrations/mikrotik/ +[nextdns docs]: /integrations/nextdns/ +[risco docs]: /integrations/risco/ +[rpi_power docs]: /integrations/rpi_power/ +[simplisafe docs]: /integrations/simplisafe/ +[zwave_js docs]: /integrations/zwave_js/ + ## Need help? Join the community! Home Assistant has a great community of users who are all more than willing From 77d50a177ec31dc93b2ee03e1448dae2db30e076 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Thu, 4 Aug 2022 15:29:40 -0600 Subject: [PATCH 012/114] Add kinovo bluetooth adapter (#23658) --- source/_integrations/bluetooth.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/bluetooth.markdown b/source/_integrations/bluetooth.markdown index bce9bcbb25b..6375ca261e2 100644 --- a/source/_integrations/bluetooth.markdown +++ b/source/_integrations/bluetooth.markdown @@ -62,6 +62,7 @@ If you experience an unreliable Bluetooth connection, installing a [USB extensio - ASUS USB-BT400 - ASUS USB-BT500 - Avantree DG45 +- Kinivo BTD-400 - Maxuni BT-501 - SUMEE BT501 - UGREEN CM390 From e16253a7c45f19f404bc7a0bab93cb5b08b04f88 Mon Sep 17 00:00:00 2001 From: Tom Brien Date: Thu, 4 Aug 2022 22:40:39 +0100 Subject: [PATCH 013/114] Replace USB cable link in Bluetooth doc (#23630) --- source/_integrations/bluetooth.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/bluetooth.markdown b/source/_integrations/bluetooth.markdown index 6375ca261e2..22f79f33fe7 100644 --- a/source/_integrations/bluetooth.markdown +++ b/source/_integrations/bluetooth.markdown @@ -55,7 +55,7 @@ On Debian based host systems, the `sudo apt-get -y install bluez` command will i Some systems may not come with Bluetooth and require a USB adapter. Installing an adapter for the first time may require multiple restarts for the device to be fully recognized. -If you experience an unreliable Bluetooth connection, installing a [USB extension cable with a Ferrite Bead](https://a.co/d/fRnFIwy) may improve reliability. +If you experience an unreliable Bluetooth connection, installing a short USB extension cable between your Bluetooth adapter and your Home Assistant server may improve reliability. ### Known working adapters From d76d754bcf1963e1caa7cdfce03a8b269f9e3eca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Aug 2022 10:12:13 +0200 Subject: [PATCH 014/114] Bump textlint-rule-terminology from 3.0.2 to 3.0.3 (#23660) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0d2628fe3db..f66dc1a71c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "textlint": "^12.2.1", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", - "textlint-rule-terminology": "^3.0.2" + "textlint-rule-terminology": "^3.0.3" } }, "node_modules/@azu/format-text": { @@ -5384,9 +5384,9 @@ } }, "node_modules/textlint-rule-terminology": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/textlint-rule-terminology/-/textlint-rule-terminology-3.0.2.tgz", - "integrity": "sha512-PgHg7wkf0gWbihSL+GZF+rG8GJX01azQXIUtWZ4UniDs5GwcwXpb98Dts8jrFQ+c9UeLb1u2HtBgjTmlWkWlQw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/textlint-rule-terminology/-/textlint-rule-terminology-3.0.3.tgz", + "integrity": "sha512-c1AzZ7ztXZfLySI8j7CnUGj8leNsfTCs+OPwJQV0ZWpKIZ7FsuRULCof1wLxsOZM+9MpVkmJWGfi6/qR6kRGIg==", "dev": true, "dependencies": { "lodash": "^4.17.15", @@ -10077,9 +10077,9 @@ } }, "textlint-rule-terminology": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/textlint-rule-terminology/-/textlint-rule-terminology-3.0.2.tgz", - "integrity": "sha512-PgHg7wkf0gWbihSL+GZF+rG8GJX01azQXIUtWZ4UniDs5GwcwXpb98Dts8jrFQ+c9UeLb1u2HtBgjTmlWkWlQw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/textlint-rule-terminology/-/textlint-rule-terminology-3.0.3.tgz", + "integrity": "sha512-c1AzZ7ztXZfLySI8j7CnUGj8leNsfTCs+OPwJQV0ZWpKIZ7FsuRULCof1wLxsOZM+9MpVkmJWGfi6/qR6kRGIg==", "dev": true, "requires": { "lodash": "^4.17.15", diff --git a/package.json b/package.json index 97a535e9e18..b163f9ba7cd 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "textlint": "^12.2.1", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", - "textlint-rule-terminology": "^3.0.2" + "textlint-rule-terminology": "^3.0.3" }, "resolutions": { "minimist": ">=1.2.5" From bd0fad4edc584b9dcb2f369a6107cda355f80bc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Carlos=20Guzm=C3=A1n=20Islas?= Date: Fri, 5 Aug 2022 01:50:45 -0700 Subject: [PATCH 015/114] Make MQTT discovery entity_id override example accurate (#23587) --- source/_docs/mqtt/discovery.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 863d26a6ce1..ec336658654 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -440,10 +440,10 @@ The entity id is automatically generated from the entity's name. All MQTT entity ```json { "name":"My Super Device", - "object_id":"device1", + "object_id":"my_super_device", "state_topic": "homeassistant/sensor/device1/state" } ``` -In the example above, the entity_id will be `sensor.device1` instead of `sensor.my_super_device`. +In the example above, the entity_id will be `sensor.my_super_device` instead of `sensor.device1`. From b38ab5e8bc745e8e751eb27c2c079de8a8e83d5e Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Fri, 5 Aug 2022 11:00:25 +0200 Subject: [PATCH 016/114] Deprecate the Deutsche Bahn (#23662) --- source/_integrations/deutsche_bahn.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_integrations/deutsche_bahn.markdown b/source/_integrations/deutsche_bahn.markdown index 7d8e3c2db58..ea59b6ae082 100644 --- a/source/_integrations/deutsche_bahn.markdown +++ b/source/_integrations/deutsche_bahn.markdown @@ -11,6 +11,10 @@ ha_platforms: ha_integration_type: integration --- +
+ This integration is pending removal from Home Assistant and will be no longer available as of Home Assistant 2022.11. +
+ The `deutsche_bahn` sensor will give you the departure time of the next train for the given connection. In case of a delay, the delay is also shown. Additional details are used to inform about, e.g., the type of the train, price, and if it is on time. To enable this sensor, add the following lines to your `configuration.yaml` file: From 936a92753d0466db4789a05337f59c5d8a3b4442 Mon Sep 17 00:00:00 2001 From: Peter <55065107+pyrrolizin@users.noreply.github.com> Date: Fri, 5 Aug 2022 14:19:27 +0200 Subject: [PATCH 017/114] google integration: entry is on left side (#23663) --- source/_integrations/google.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/google.markdown b/source/_integrations/google.markdown index e5bc2c3d70b..a7375813175 100644 --- a/source/_integrations/google.markdown +++ b/source/_integrations/google.markdown @@ -29,7 +29,7 @@ This section explains how to generate a Client ID and Client Secret on 1. The wizard will ask you to choose a project to manage your application. Select a project and click continue. 1. Verify that your calendar API was enabled and click 'Go to credentials' 1. Navigate to APIs & Services (left sidebar) > [Credentials](https://console.cloud.google.com/apis/credentials) -1. Click on the field on the right of the screen, **OAuth Consent Screen**. +1. Click on the field on the left of the screen, **OAuth Consent Screen**. 1. Select **External** and **Create**. 1. Set the *App Name* (the name of the application asking for consent) to anything you want e.g. *Home Assistant*. 1. You then need to select a *Support email*. To do this, simply click the drop down box and select your email address. From bc957c9f2f0396f8d2a89047e05470233fe744b2 Mon Sep 17 00:00:00 2001 From: Justin Goette <53531335+jcgoette@users.noreply.github.com> Date: Fri, 5 Aug 2022 11:12:52 -0400 Subject: [PATCH 018/114] docs: Fix typo (#23667) --- source/_integrations/netgear.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/netgear.markdown b/source/_integrations/netgear.markdown index 753745d3a08..7135eaf4bdd 100644 --- a/source/_integrations/netgear.markdown +++ b/source/_integrations/netgear.markdown @@ -43,7 +43,7 @@ Button entity to restart the router. ### Update entity -Update entity to vieuw current and latest firmware version, and install the latest firmware of the router. +Update entity to view current and latest firmware version, and install the latest firmware of the router. ### Traffic meter data From 9e503937796063e90e9e930090b2a412411f44c0 Mon Sep 17 00:00:00 2001 From: Peter <55065107+pyrrolizin@users.noreply.github.com> Date: Fri, 5 Aug 2022 17:19:32 +0200 Subject: [PATCH 019/114] Various Rflink integrations: fix 404 url to firmware (#23543) --- source/_integrations/binary_sensor.rflink.markdown | 2 +- source/_integrations/cover.rflink.markdown | 2 +- source/_integrations/light.rflink.markdown | 2 +- source/_integrations/rflink.markdown | 2 +- source/_integrations/sensor.rflink.markdown | 2 +- source/_integrations/switch.rflink.markdown | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_integrations/binary_sensor.rflink.markdown b/source/_integrations/binary_sensor.rflink.markdown index 6f62de60307..7975f4affd5 100644 --- a/source/_integrations/binary_sensor.rflink.markdown +++ b/source/_integrations/binary_sensor.rflink.markdown @@ -9,7 +9,7 @@ ha_release: 0.81 ha_domain: rflink --- -The `rflink` integration supports devices that use [RFLink gateway firmware](http://www.nemcon.nl/blog2/), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-gateway). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). +The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). First, you have to set up your [RFLink hub](/integrations/rflink/). diff --git a/source/_integrations/cover.rflink.markdown b/source/_integrations/cover.rflink.markdown index a424258b29b..339478444ca 100644 --- a/source/_integrations/cover.rflink.markdown +++ b/source/_integrations/cover.rflink.markdown @@ -9,7 +9,7 @@ ha_release: 0.55 ha_domain: rflink --- -The `rflink` integration supports devices that use [RFLink gateway firmware](http://www.nemcon.nl/blog2/), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-gateway). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). +The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). First, you have to set up your [RFLink hub](/integrations/rflink/). diff --git a/source/_integrations/light.rflink.markdown b/source/_integrations/light.rflink.markdown index 4a003e3b1ac..8b3f0701225 100644 --- a/source/_integrations/light.rflink.markdown +++ b/source/_integrations/light.rflink.markdown @@ -9,7 +9,7 @@ ha_release: 0.38 ha_domain: rflink --- -The `rflink` integration supports devices that use [RFLink gateway firmware](http://www.nemcon.nl/blog2/), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-gateway). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). +The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). First, you have to set up your [RFLink hub](/integrations/rflink/). diff --git a/source/_integrations/rflink.markdown b/source/_integrations/rflink.markdown index b2a30e5e0e5..951c7f5b69d 100644 --- a/source/_integrations/rflink.markdown +++ b/source/_integrations/rflink.markdown @@ -17,7 +17,7 @@ ha_codeowners: ha_integration_type: integration --- -The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example, the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-gateway). RFLink Gateway is an Arduino Mega firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). +The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example, the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-). RFLink Gateway is an Arduino Mega firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). The 433 MHz spectrum is used by many manufacturers mostly using their own protocol/standard and includes devices like: light switches, blinds, weather stations, alarms and various other sensors. diff --git a/source/_integrations/sensor.rflink.markdown b/source/_integrations/sensor.rflink.markdown index 1e959d3bfdc..b4bdf775c97 100644 --- a/source/_integrations/sensor.rflink.markdown +++ b/source/_integrations/sensor.rflink.markdown @@ -9,7 +9,7 @@ ha_release: 0.38 ha_domain: rflink --- -The `rflink` integration supports devices that use [RFLink gateway firmware](http://www.nemcon.nl/blog2/), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-gateway). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). +The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). ## Configuration diff --git a/source/_integrations/switch.rflink.markdown b/source/_integrations/switch.rflink.markdown index 798c446bf11..8741e13c5b2 100644 --- a/source/_integrations/switch.rflink.markdown +++ b/source/_integrations/switch.rflink.markdown @@ -9,7 +9,7 @@ ha_release: 0.38 ha_domain: rflink --- -The `rflink` integration supports devices that use [RFLink gateway firmware](http://www.nemcon.nl/blog2/), for example, the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-gateway). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). +The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example, the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). First, you have to set up your [RFLink hub](/integrations/rflink/). From bde5399a71014ce25a5d9f2ec040cfa075963896 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Fri, 5 Aug 2022 09:31:44 -0600 Subject: [PATCH 020/114] Add deprecation notice to Flu Near You (#23668) --- source/_integrations/flunearyou.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_integrations/flunearyou.markdown b/source/_integrations/flunearyou.markdown index 6252f73e744..4eda32f7dc7 100644 --- a/source/_integrations/flunearyou.markdown +++ b/source/_integrations/flunearyou.markdown @@ -15,6 +15,10 @@ ha_platforms: 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 From 08916dd055147eb3971e1e5e6645b4718b29f943 Mon Sep 17 00:00:00 2001 From: DJ Adams Date: Sun, 7 Aug 2022 13:40:13 +0100 Subject: [PATCH 021/114] fix typo (#23691) --- source/_docs/mqtt/broker.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/mqtt/broker.markdown b/source/_docs/mqtt/broker.markdown index 0f72cb3c363..23833fe1cbb 100644 --- a/source/_docs/mqtt/broker.markdown +++ b/source/_docs/mqtt/broker.markdown @@ -24,7 +24,7 @@ There is [an issue](https://github.com/rabbitmq/rabbitmq-server/issues/154) with ## Connect to a public broker -The Mosquitto project runs a [public broker](https://test.mosquitto.org). This is the easiest to set up, but there is no privacy as all messages are public. Use this only for testing purposes and not for real tracking of your devices or controlling your home. To use the public mosquitto broker, confiure the MQTT integration to connect to broker `test.mosquitto.org` on port 1183 or 8883. +The Mosquitto project runs a [public broker](https://test.mosquitto.org). This is the easiest to set up, but there is no privacy as all messages are public. Use this only for testing purposes and not for real tracking of your devices or controlling your home. To use the public mosquitto broker, configure the MQTT integration to connect to broker `test.mosquitto.org` on port 1183 or 8883.
From 695e1fdda9074ba2c63683b57866935746fbf408 Mon Sep 17 00:00:00 2001 From: Simon <91187456+Makin-Things@users.noreply.github.com> Date: Sun, 7 Aug 2022 22:59:01 +1000 Subject: [PATCH 022/114] Update frontend.markdown (#23687) --- source/_integrations/frontend.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/frontend.markdown b/source/_integrations/frontend.markdown index a0b741a556d..91d981cb386 100644 --- a/source/_integrations/frontend.markdown +++ b/source/_integrations/frontend.markdown @@ -103,7 +103,7 @@ Theme `sad`: By using the new `modes` key plus the subkey `dark` this theme will Note: Since this example theme only has a `dark` mode defined, this mode will automatically be used. -Theme `day_and_night`: This theme has both a `light` and a `dark` mode section. That tells the frontend to allow the user to choose which mode to use from the user profile (default selection is based on the system settings). Independent of the selection, the primary color will be set to green, but based on the chosen mode either the default light or dark theme will be used as the basis for rendering, plus the secondary text color will be either olive or slategray. +Theme `day_and_night`: This theme has both a `light` and a `dark` mode section. That tells the frontend to allow the user to choose which mode to use from the user profile (default selection is based on the system settings). Independent of the selection, the primary color will be set to coral, but based on the chosen mode either the default light or dark theme will be used as the basis for rendering, plus the secondary text color will be either olive or slategray. ### Theme configuration splitting From 5a5c8b47c8dc6330e3c00efb8a94993bc84fe0c0 Mon Sep 17 00:00:00 2001 From: Jayden <5250189+lukyjay@users.noreply.github.com> Date: Sun, 7 Aug 2022 21:27:16 +0800 Subject: [PATCH 023/114] Update advantage_air.markdown (#23678) --- source/_integrations/advantage_air.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/advantage_air.markdown b/source/_integrations/advantage_air.markdown index e1ce6853165..1d9612a2c6e 100644 --- a/source/_integrations/advantage_air.markdown +++ b/source/_integrations/advantage_air.markdown @@ -25,7 +25,7 @@ The Advantage Air integration allows you to control [Advantage Air](https://www. ## Prerequisites -The wall-mounted Android table running the [MyPlace](https://play.google.com/store/apps/details?id=com.air.advantage.myair5), [e-zone](https://play.google.com/store/apps/details?id=com.air.advantage.ezone), or [zone10e](https://play.google.com/store/apps/details?id=com.air.advantage.zone10) must have a static IP, which you will enter on the integrations page in Home Assistant. +The wall-mounted Android tablet running the [MyPlace](https://play.google.com/store/apps/details?id=com.air.advantage.myair5), [e-zone](https://play.google.com/store/apps/details?id=com.air.advantage.ezone), or [zone10e](https://play.google.com/store/apps/details?id=com.air.advantage.zone10) must have a static IP, which you will enter on the integrations page in Home Assistant. {% include integrations/config_flow.md %} From b2b861e5f1e85c571ba9ad2e4e5a690ee39843f7 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 7 Aug 2022 16:55:01 +0000 Subject: [PATCH 024/114] 2022.8.2 --- _config.yml | 4 +- .../_posts/2022-08-03-release-20228.markdown | 48 +++++++++++++++++-- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/_config.yml b/_config.yml index 353dfbb3100..e273cf6a67f 100644 --- a/_config.yml +++ b/_config.yml @@ -107,8 +107,8 @@ social: # Home Assistant release details current_major_version: 2022 current_minor_version: 8 -current_patch_version: 1 -date_released: 2022-08-04 +current_patch_version: 2 +date_released: 2022-08-07 # 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-08-03-release-20228.markdown b/source/_posts/2022-08-03-release-20228.markdown index 632c83493f9..ed9b110b0c5 100644 --- a/source/_posts/2022-08-03-release-20228.markdown +++ b/source/_posts/2022-08-03-release-20228.markdown @@ -44,6 +44,7 @@ Enjoy the release! - [New Integrations](#new-integrations) - [Integrations now available to set up from the UI](#integrations-now-available-to-set-up-from-the-ui) - [Release 2022.8.1 - August 4](#release-202281---august-4) +- [Release 2022.8.2 - August 7](#release-202282---august-7) - [Need help? Join the community!](#need-help-join-the-community) - [Breaking Changes](#breaking-changes) - [Farewell to the following](#farewell-to-the-following) @@ -91,7 +92,7 @@ it to be extended a lot, with more issue detections, in the near future. ## First-class Bluetooth support Today, we proudly announce that Home Assistant now has **first-class** -Bluetooth support! 🥇 +Bluetooth support! 🥇 A brand new [Bluetooth integration] has been added, which provides absolutely amazing Bluetooth support to Home Assistant, including automatic discovery of @@ -218,7 +219,7 @@ noteworthy changes this release: - [@frenck] updated the events developer tools to use YAML instead of JSON and added syntax highlighting. - The [LIFX] integration got a significant overhaul, making it much more - reliable. Thanks for the work on this in the past releases + reliable. Thanks for the work on this in the past releases [@bdraco] and [@Djelibeybi]! - The [UniFi Network] now has update entities, allowing you to update the firmware of UniFi devices directly from Home Assistant. Great addition [@J3173]! @@ -378,6 +379,47 @@ The following integrations are now available via the Home Assistant UI: [simplisafe docs]: /integrations/simplisafe/ [zwave_js docs]: /integrations/zwave_js/ +## Release 2022.8.2 - August 7 + +- Update gree to use the network component to set discovery interfaces ([@Jc2k] - [#75812]) ([gree docs]) +- Use stored philips_js system data on start ([@elupus] - [#75981]) ([philips_js docs]) +- Ensure bluetooth recovers if Dbus gets restarted ([@bdraco] - [#76249]) ([bluetooth docs]) +- Fix default sensor names in NextDNS integration ([@bieniu] - [#76264]) ([nextdns docs]) +- Bump ZHA dependencies ([@puddly] - [#76275]) ([zha docs]) +- Bump pydeconz to v102 ([@Kane610] - [#76287]) ([deconz docs]) +- Fix ZHA light color temp support ([@dmulcahey] - [#76305]) ([zha docs]) +- Bump pySwitchbot to 0.18.4 ([@bdraco] - [#76322]) ([switchbot docs]) +- Bump aiobafi6 to 0.7.2 to unblock #76328 ([@jfroy] - [#76330]) ([baf docs]) +- Postpone broadlink platform switch until config entry is ready ([@elupus] - [#76371]) ([broadlink docs]) + +[#75812]: https://github.com/home-assistant/core/pull/75812 +[#75981]: https://github.com/home-assistant/core/pull/75981 +[#76249]: https://github.com/home-assistant/core/pull/76249 +[#76264]: https://github.com/home-assistant/core/pull/76264 +[#76275]: https://github.com/home-assistant/core/pull/76275 +[#76287]: https://github.com/home-assistant/core/pull/76287 +[#76305]: https://github.com/home-assistant/core/pull/76305 +[#76322]: https://github.com/home-assistant/core/pull/76322 +[#76330]: https://github.com/home-assistant/core/pull/76330 +[#76371]: https://github.com/home-assistant/core/pull/76371 +[@Jc2k]: https://github.com/Jc2k +[@Kane610]: https://github.com/Kane610 +[@bdraco]: https://github.com/bdraco +[@bieniu]: https://github.com/bieniu +[@dmulcahey]: https://github.com/dmulcahey +[@elupus]: https://github.com/elupus +[@jfroy]: https://github.com/jfroy +[@puddly]: https://github.com/puddly +[baf docs]: /integrations/baf/ +[bluetooth docs]: /integrations/bluetooth/ +[broadlink docs]: /integrations/broadlink/ +[deconz docs]: /integrations/deconz/ +[gree docs]: /integrations/gree/ +[nextdns docs]: /integrations/nextdns/ +[philips_js docs]: /integrations/philips_js/ +[switchbot docs]: /integrations/switchbot/ +[zha docs]: /integrations/zha/ + ## Need help? Join the community! Home Assistant has a great community of users who are all more than willing @@ -519,7 +561,7 @@ Removed: - `mdi:discord` - `mdi:google-home` - `tablet-android` - Use `mdi:tablet` instead. - + Renamed: - `mdi:diving-scuba` to `mdi:diving-scuba-mask` From 19a913296cbfcf2e476a9689097c49108b3bdb19 Mon Sep 17 00:00:00 2001 From: Peter <55065107+pyrrolizin@users.noreply.github.com> Date: Mon, 8 Aug 2022 11:18:00 +0200 Subject: [PATCH 025/114] fix: rflink change nodo-shop language to en (#23701) --- source/_integrations/binary_sensor.rflink.markdown | 2 +- source/_integrations/cover.rflink.markdown | 2 +- source/_integrations/light.rflink.markdown | 2 +- source/_integrations/rflink.markdown | 2 +- source/_integrations/sensor.rflink.markdown | 2 +- source/_integrations/switch.rflink.markdown | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_integrations/binary_sensor.rflink.markdown b/source/_integrations/binary_sensor.rflink.markdown index 7975f4affd5..e0c6dd44b4f 100644 --- a/source/_integrations/binary_sensor.rflink.markdown +++ b/source/_integrations/binary_sensor.rflink.markdown @@ -9,7 +9,7 @@ ha_release: 0.81 ha_domain: rflink --- -The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). +The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/en/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). First, you have to set up your [RFLink hub](/integrations/rflink/). diff --git a/source/_integrations/cover.rflink.markdown b/source/_integrations/cover.rflink.markdown index 339478444ca..5c2c0e7a4ae 100644 --- a/source/_integrations/cover.rflink.markdown +++ b/source/_integrations/cover.rflink.markdown @@ -9,7 +9,7 @@ ha_release: 0.55 ha_domain: rflink --- -The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). +The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/en/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). First, you have to set up your [RFLink hub](/integrations/rflink/). diff --git a/source/_integrations/light.rflink.markdown b/source/_integrations/light.rflink.markdown index 8b3f0701225..d9b4c5d44e5 100644 --- a/source/_integrations/light.rflink.markdown +++ b/source/_integrations/light.rflink.markdown @@ -9,7 +9,7 @@ ha_release: 0.38 ha_domain: rflink --- -The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). +The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/en/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). First, you have to set up your [RFLink hub](/integrations/rflink/). diff --git a/source/_integrations/rflink.markdown b/source/_integrations/rflink.markdown index 951c7f5b69d..ebe82669094 100644 --- a/source/_integrations/rflink.markdown +++ b/source/_integrations/rflink.markdown @@ -17,7 +17,7 @@ ha_codeowners: ha_integration_type: integration --- -The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example, the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-). RFLink Gateway is an Arduino Mega firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). +The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example, the [Nodo RFLink Gateway](https://www.nodo-shop.nl/en/21-rflink-). RFLink Gateway is an Arduino Mega firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). The 433 MHz spectrum is used by many manufacturers mostly using their own protocol/standard and includes devices like: light switches, blinds, weather stations, alarms and various other sensors. diff --git a/source/_integrations/sensor.rflink.markdown b/source/_integrations/sensor.rflink.markdown index b4bdf775c97..96a8ecad00b 100644 --- a/source/_integrations/sensor.rflink.markdown +++ b/source/_integrations/sensor.rflink.markdown @@ -9,7 +9,7 @@ ha_release: 0.38 ha_domain: rflink --- -The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). +The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example the [Nodo RFLink Gateway](https://www.nodo-shop.nl/en/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). ## Configuration diff --git a/source/_integrations/switch.rflink.markdown b/source/_integrations/switch.rflink.markdown index 8741e13c5b2..29936fc2f8d 100644 --- a/source/_integrations/switch.rflink.markdown +++ b/source/_integrations/switch.rflink.markdown @@ -9,7 +9,7 @@ ha_release: 0.38 ha_domain: rflink --- -The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example, the [Nodo RFLink Gateway](https://www.nodo-shop.nl/nl/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). +The `rflink` integration supports devices that use [RFLink gateway firmware](https://www.rflink.nl/download.php), for example, the [Nodo RFLink Gateway](https://www.nodo-shop.nl/en/21-rflink-). RFLink gateway is an Arduino firmware that allows two-way communication with a multitude of RF wireless devices using cheap hardware (Arduino + transceiver). First, you have to set up your [RFLink hub](/integrations/rflink/). From c90cdf8abbbb5f61625692fe9f4b888ecfa66599 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Mon, 8 Aug 2022 03:19:28 -0600 Subject: [PATCH 026/114] Add docs for RainMachine update entity (#23621) --- source/_integrations/rainmachine.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_integrations/rainmachine.markdown b/source/_integrations/rainmachine.markdown index dcfa107b909..0be5785c076 100644 --- a/source/_integrations/rainmachine.markdown +++ b/source/_integrations/rainmachine.markdown @@ -6,6 +6,7 @@ ha_category: - Irrigation - Sensor - Switch + - Update ha_release: 0.69 ha_iot_class: Local Polling ha_config_flow: true @@ -18,6 +19,7 @@ ha_platforms: - diagnostics - sensor - switch + - update ha_zeroconf: true ha_homekit: true ha_integration_type: integration @@ -141,3 +143,8 @@ After Home Assistant loads, new switches will be added for every enabled program Programs and zones are linked. While a program is running, you will see both the program and zone switches turned on; turning either one off will turn the other one off (just like in the web app). [wnum reference]: https://github.com/sprinkler/rainmachine-developer-resources/blob/d47e1ad59dee59e34094ad41636ae289275eb973/sdk-parsers/RMDataFramework/rmWeatherData.py#L13 + +## Firmware Updates + +The integration has an [update entity](/integrations/update/) that provides information on the latest available RainMachine firmware version. The firmware update can be triggered and installed onto your RainMachine controller +directly from Home Assistant. From 54f16cb162a00e34ff9ebc23371f253e054a9201 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 7 Aug 2022 23:31:28 -1000 Subject: [PATCH 027/114] Update govee_ble supported devices (#23696) --- source/_integrations/govee_ble.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_integrations/govee_ble.markdown b/source/_integrations/govee_ble.markdown index c8b58e0c623..f4efe419675 100644 --- a/source/_integrations/govee_ble.markdown +++ b/source/_integrations/govee_ble.markdown @@ -23,8 +23,12 @@ The Govee BLE integration will automatically discover devices once the [Bluetoot ## Supported devices -- [H5177/5178 Bluetooth Thermo-Hygrometer](https://us.govee.com/collections/thermo-hydrometer/products/bluetooth-thermo-hygrometer) +- H5072 Hygrometer Thermometer +- H5074 Hygrometer Thermometer - [H5075 Bluetooth Hygrometer Thermometer](https://us.govee.com/collections/thermo-hydrometer/products/govee-bluetooth-hygrometer-thermometer-h5075) +- H5100 Hygrometer Thermometer +- [H5177/5178 Bluetooth Thermo-Hygrometer](https://us.govee.com/collections/thermo-hydrometer/products/bluetooth-thermo-hygrometer) +- H5179 Hygrometer Thermometer - 5181 Meat Thermometer - 5183 Meat Thermometer - 5185 Meat Thermometer From 1a2ebff89b29118fe1ec445eea20f76b19308a19 Mon Sep 17 00:00:00 2001 From: Avi Miller Date: Mon, 8 Aug 2022 21:47:49 +1000 Subject: [PATCH 028/114] Lifx button entities (#23692) Co-authored-by: J. Nick Koston Co-authored-by: Franck Nijhof --- source/_integrations/lifx.markdown | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/source/_integrations/lifx.markdown b/source/_integrations/lifx.markdown index 5c205728a61..df7269376b6 100644 --- a/source/_integrations/lifx.markdown +++ b/source/_integrations/lifx.markdown @@ -2,6 +2,7 @@ title: LIFX description: Instructions on how to integrate LIFX into Home Assistant. ha_category: + - Button - Light ha_iot_class: Local Polling ha_release: 0.81 @@ -9,6 +10,7 @@ ha_config_flow: true ha_domain: lifx ha_homekit: true ha_platforms: + - button - light ha_integration_type: integration ha_codeowners: @@ -114,6 +116,18 @@ Run an effect that does nothing, thereby stopping any other effect that might be | ---------------------- | ----------- | | `entity_id` | String or list of strings that point at `entity_id`s of lights. Use `entity_id: all` to target all. +## Buttons + +The LIFX button platform creates two buttons for each LIFX device. + +### Identify Button + +The Identify button will flash the bulb three times at maximum brightness then return the bulb to the state it was in prior. Successful identification requires the bulb to be powered on and already configured in Home Assistant. + +### Restart Button + +The Restart button triggers the bulb to restart in exactly the same way as a physical power cycle, which makes it ideal for triggering a new DHCP request from the bulb. + ## HomeKit Accessory Protocol Most LIFX devices support Apple HomeKit via the HomeKit Accessory Protocol (HAP). If a LIFX device has not already been added to HomeKit natively using an Apple iOS or macOS device, it can be paired with Home Assistant using via the [HomeKit Controller](/integrations/homekit_controller) integration which uses HAP. From ef13dfc0df07a208c3ae77bf66f57ae5d3375c5a Mon Sep 17 00:00:00 2001 From: borky Date: Mon, 8 Aug 2022 17:53:14 +0300 Subject: [PATCH 029/114] Add Xiaomi 4 and 4 Pro Documentation (#23584) --- source/_integrations/xiaomi_miio.markdown | 45 +++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/source/_integrations/xiaomi_miio.markdown b/source/_integrations/xiaomi_miio.markdown index d62653b8f1d..d0700727643 100644 --- a/source/_integrations/xiaomi_miio.markdown +++ b/source/_integrations/xiaomi_miio.markdown @@ -216,6 +216,8 @@ Supported devices: | Air Purifier 3 (2019) | zhimi.airpurifier.ma4 | | | Air Purifier 3H (2019) | zhimi.airpurifier.mb3 | | | Air Purifier 3C | zhimi.airpurifier.mb4 | | +| Air Purifier 4 | zhimi.airp.mb5 | | +| Air Purifier 4 PRO | zhimi.airp.vb4 | | | Air Fresh A1 | dmaker.airfresh.a1 | MJXFJ-150-A1 | | Air Fresh VA2 | zhimi.airfresh.va2 | | | Air Fresh T2017 | dmaker.airfresh.t2017 | MJXFJ-300-G1 | @@ -496,6 +498,49 @@ Buzzer | Turn on/off the buzzer Child Lock | Turn on/off the child lock LED | Turn on/off the LED +### Air Purifier 4/4 PRO (zhimi.airp.mb5/zhimi.airp.vb4) + +These models use newer MiOT communication protocol. + +- Power (on, off) +- Operation modes (Auto, Silent, Favorite, Fan) +- Attributes (fan platform) +- Number entities + +Number | Description +----------------------- | ----------------------- +Fan Level | Set the fan level +Favorite Level | Set the favorite level + +- Select entities + +Select | Description +----------------------- | ----------------------- +LED Brightness | Controls the brightness of the Display (bright, dim, off) + +- Sensor entities + +Sensor | Description | Enabled by default +----------------------- | ----------------------- | ----------------------- +Filter Life Remaining | The remaining life of the filter in % | True +Filter Time Left | The remaining life of the filter in days | True +Filter Use | Filter usage time in hours | True +Humidity | The current humidity measured | True +Motor Speed | The current motor speed measured in rpm | True +PM2.5 | The current particulate matter 2.5 measured | True +PM10 | The current particulate matter 10 measured(4 PRO only) | True +Purify Volume | The volume of purified air in qubic meter | False +Temperature | The current temperature measured | True + +- Switch entities + +Switch | Description +----------------------- | ----------------------- +Buzzer | Turn on/off the buzzer +Child Lock | Turn on/off the child lock +Ionizer | Turn on/off the negative ion generator + + ### Air Fresh A1 (dmaker.airfresh.a1) - Power (on, off) From a9931cc2cbfe0c398048a11886d43906a48cc8f8 Mon Sep 17 00:00:00 2001 From: y34hbuddy <47507530+y34hbuddy@users.noreply.github.com> Date: Mon, 8 Aug 2022 10:53:32 -0400 Subject: [PATCH 030/114] deprecate some YAML configs in volvooncall integration (#23567) --- source/_integrations/volvooncall.markdown | 25 ----------------------- 1 file changed, 25 deletions(-) diff --git a/source/_integrations/volvooncall.markdown b/source/_integrations/volvooncall.markdown index a0c87fab3fa..ddc7fb06f12 100644 --- a/source/_integrations/volvooncall.markdown +++ b/source/_integrations/volvooncall.markdown @@ -73,14 +73,6 @@ mutable: required: false default: true type: boolean -name: - description: "Make it possible to provide a name for the vehicles. Note: Use all lower case letters when inputting your VIN number." - required: false - type: string -resources: - description: A list of resources to display (defaults to all available). - required: false - type: list scandinavian_miles: description: If set to true, Scandinavian miles ("mil") are used for distances and fuel range. required: false @@ -130,20 +122,3 @@ The list of currently available resources: - `tyre_pressure_rear_right_tyre_pressure` - `any_door_open` - `any_window_open` - -## Advanced Examples - -A more advanced example for setting the vehicle name and selecting what resources to display: - -```yaml -# Example configuration.yaml entry -volvooncall: - username: YOUR_USERNAME - password: YOUR_PASSWORD - name: - YOUR_VIN_NUMBER: "NEW_NAME" - resources: - - odometer - - lock - - heater -``` From 94d9ea340ebdbb16e1cacb0757f948ca407c9e81 Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Mon, 8 Aug 2022 17:00:40 +0200 Subject: [PATCH 031/114] Add config flow to Open Exchange Rates (#23693) Co-authored-by: Franck Nijhof --- .../_integrations/openexchangerates.markdown | 34 ++----------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/source/_integrations/openexchangerates.markdown b/source/_integrations/openexchangerates.markdown index 7a095e28eaf..96552e45f60 100644 --- a/source/_integrations/openexchangerates.markdown +++ b/source/_integrations/openexchangerates.markdown @@ -4,6 +4,7 @@ description: Instructions on how to integrate exchange rates from https://openex ha_category: - Finance ha_iot_class: Cloud Polling +ha_config_flow: true ha_release: 0.23 ha_domain: openexchangerates ha_platforms: @@ -11,37 +12,8 @@ ha_platforms: ha_integration_type: integration --- -The `openexchangerates` sensor will show you the current exchange rate from [Open Exchange Rates](https://openexchangerates.org) that provides realtime exchange rates for [170 currencies](https://openexchangerates.org/currencies). The free account is limited to only USD as a base currency, allows 1000 requests per month, and updates every hour. +The Open Exchange Rates integration will show you the current exchange rate from [Open Exchange Rates](https://openexchangerates.org) that provides real-time exchange rates for [170 currencies](https://openexchangerates.org/currencies). The free account is limited to only USD as a base currency, allows 1000 requests per month, and updates every hour. Obtain your API key [here](https://openexchangerates.org/signup) -To enable this sensor, add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: openexchangerates - api_key: YOUR_API_KEY - quote: EUR -``` - -{% configuration %} -name: - description: The name of the sensor. - required: false - type: string - default: Exchange Rate Sensor -api_key: - description: "The API Key for [Open Exchange Rates](https://openexchangerates.org)." - required: true - type: string -quote: - description: The symbol of the quote or target currency. - required: true - type: string -base: - description: The symbol of the base currency. Note that, changing the API `base` currency is not part of the freemium API plan. - required: false - type: string - default: USD -{% endconfiguration %} +{% include integrations/config_flow.md %} From 41b223c08b84e7f308c4a30b3fcefdcab2706d13 Mon Sep 17 00:00:00 2001 From: ildar170975 <71872483+ildar170975@users.noreply.github.com> Date: Mon, 8 Aug 2022 18:01:05 +0300 Subject: [PATCH 032/114] Add telegram disable_web_page_preview (telegram.markdown) (#23572) --- source/_integrations/telegram.markdown | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/source/_integrations/telegram.markdown b/source/_integrations/telegram.markdown index d753f4deea8..5663552211b 100644 --- a/source/_integrations/telegram.markdown +++ b/source/_integrations/telegram.markdown @@ -387,10 +387,14 @@ action: service: notify.NOTIFIER_NAME data: title: "*Send a message*" - message: "That's an example that sends a message with message_tag and disable_notification." + message: |- + That's an example that sends a message with message_tag, disable_notification and disable_web_page_preview. + HA site data: + parse_mode: html message_tag: "example_tag" disable_notification: True + disable_web_page_preview: True ``` {% configuration %} @@ -403,6 +407,10 @@ disable_notification: required: false default: false type: boolean +disable_web_page_preview: + description: True/false to display a webpage preview. + default: false + type: boolean message_tag: description: Tag for sent message. required: false From 628dda81e57a170578573c6c0118afe62ca53897 Mon Sep 17 00:00:00 2001 From: Yuval Aboulafia Date: Mon, 8 Aug 2022 18:02:46 +0300 Subject: [PATCH 033/114] Add documentation for new binary sensors in Jewish Calendar (#19878) Co-authored-by: Teemu R --- source/_integrations/jewish_calendar.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/jewish_calendar.markdown b/source/_integrations/jewish_calendar.markdown index 3f1472b8d8c..8a0bfdb9b29 100644 --- a/source/_integrations/jewish_calendar.markdown +++ b/source/_integrations/jewish_calendar.markdown @@ -93,6 +93,8 @@ Time sensor states are represented as ISO8601 formatted *UTC time*. ### Binary sensors - `issur_melacha_in_effect`: A boolean sensor indicating if melacha is currently not permitted. The value is _on_ when it is currently Shabbat or Yom Tov and _off_ otherwise. +- `erev_shabbat_hag`: A boolean sensor indicating that there is an upcoming Shabbat or Hag. +- `motzei_shabbat_hag`: A boolean sensor indicating that Shabbat or Hag has ended. ### Holiday sensor From 6a5b96272ac205a2f457898a495d77eb66dda26d Mon Sep 17 00:00:00 2001 From: ildar170975 <71872483+ildar170975@users.noreply.github.com> Date: Mon, 8 Aug 2022 18:06:20 +0300 Subject: [PATCH 034/114] Add telegram disable_web_page_preview (telegram_bot.markdown) (#23571) --- source/_integrations/telegram_bot.markdown | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/source/_integrations/telegram_bot.markdown b/source/_integrations/telegram_bot.markdown index ad467c0dfe7..7af68b353ec 100644 --- a/source/_integrations/telegram_bot.markdown +++ b/source/_integrations/telegram_bot.markdown @@ -253,7 +253,7 @@ Remove the bot from the chat group where it was added. ## Telegram notification platform -The [`telegram` notification platform](/integrations/telegram) requires the `telegram_bot` integration to work with, and it's designed to generate a customized shortcut (`notify.USERNAME`) to send notifications (messages, photos, documents and locations) to a particular `chat_id` with the old syntax, allowing backward compatibility. The data attributes `parse_mode`, `disable_notification` and `message_tag` are also supported. +The [`telegram` notification platform](/integrations/telegram) requires the `telegram_bot` integration to work with, and it's designed to generate a customized shortcut (`notify.USERNAME`) to send notifications (messages, photos, documents and locations) to a particular `chat_id` with the old syntax, allowing backward compatibility. The data attributes `parse_mode`, `disable_notification`, `message_tag` and `disable_web_page_preview` are also supported. The required YAML configuration now reduces to: @@ -556,3 +556,16 @@ action: data: message_tag: "example_tag" ``` + +## Example: send_message with disabled webpage preview: + +```yaml +action: +- service: notify.telegram + data: + message: >- + HA site + data: + parse_mode: html + disable_web_page_preview: true +``` From b9af89f79c3bac32ff58fbc25a36470b894bc2d2 Mon Sep 17 00:00:00 2001 From: Rob Connolly Date: Tue, 9 Aug 2022 05:46:43 +1200 Subject: [PATCH 035/114] Update roomba docs for newer models (#23677) Co-authored-by: Franck Nijhof --- source/_integrations/roomba.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/_integrations/roomba.markdown b/source/_integrations/roomba.markdown index 819ef1da823..2ea89784ad9 100644 --- a/source/_integrations/roomba.markdown +++ b/source/_integrations/roomba.markdown @@ -63,3 +63,18 @@ docker exec -it CONTAINER_NAME_OR_ID python -c 'import roombapy.entry_points; ro The command to retrieve the credentials does not need any additional software to be installed because it uses the built-in [roombapy](https://github.com/pschmitt/roombapy) package and [password](https://github.com/pschmitt/roombapy/blob/1.6.1/roomba/entry_points.py#L20) function deployed with Home Assistant.
+ +#### Retrieving credentials from the cloud with dorita980 + +The underlying Python library is currently unable to retrieve the credentials from some newer models (e.g. J7). See [this issue](https://github.com/pschmitt/roombapy/issues/97) for details. Luckily, the password can be retrieved from the cloud using a tool provided by the [dorita980](https://github.com/koalazak/dorita980) library. Follow [these instructions](https://github.com/koalazak/dorita980#how-to-get-your-usernameblid-and-password) to do this, you should receive output of the form: + +```shell +Found 1 robot(s)! +Robot "RoombaJ7" (sku: j715800 SoftwareVer: sapphire+22.21.1+2022-06-02-570490a425b+Firmware-Production+70): +BLID=> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +Password=> XXXXXXXXXXXXXXXXXXXXXXXXXXXXX <= Yes, all this string. + +Use this credentials in dorita980 lib :) +``` + +Copy the password (everything between `=>` and `<=`, not including leading and trailing whitespace) into the Home Assistant password dialog. From 74ce952d5d2e04c304783757a4f5a0d7334b8b5e Mon Sep 17 00:00:00 2001 From: Christopher Bailey Date: Mon, 8 Aug 2022 16:09:14 -0400 Subject: [PATCH 036/114] Add docs for UniFi Protect media source (#23655) Co-authored-by: J. Nick Koston --- source/_integrations/unifiprotect.markdown | 43 +++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/source/_integrations/unifiprotect.markdown b/source/_integrations/unifiprotect.markdown index e26e57c85e4..57a879afbac 100644 --- a/source/_integrations/unifiprotect.markdown +++ b/source/_integrations/unifiprotect.markdown @@ -10,6 +10,7 @@ ha_category: - Light - Lock - Media Player + - Media Source - Number - Select - Sensor @@ -116,7 +117,7 @@ check that this is done. To check and enable the feature: {% include integrations/config_flow.md %} -## Features +## Device Support All known UniFi Protect devices should be supported. Each UniFi Protect device will get a variety of entities added for each of the different entity platforms. @@ -212,6 +213,35 @@ Your main UniFi Protect NVR device also gets a number of diagnostics sensors tha * **Disk Health**: Each disk installed in your NVR will have a disk health sensor. These are simple good/bad sensors and the order is not promised to match the order in UniFi OS. Disk model number is provided as a state attribute though to help map sensor to disk. * **Utilization and Storage Sensors**: Several other sensors are also added for uptime, hardware utilization, and distribution details of the video on disk. +## Media Source + +A media source is provided for your UniFi Protect cameras so you can fetch video clips and event thumbnails. + +### Media Browser + +The media source is split into 5 folders/levels: + +1. NVR Console Selector - only appears if you have more then one Protect NVR Console. Allows you to select your NVR Console you want to view events for. +2. Camera Selector - either lets you select all cameras or a specific camera to view events for. +3. Event Selector - either lets you select all events or a specific event type to view events for. +4. Time Selector - filters events for a given time range: + * Last 24 Hours + * Last 7 Days + * Last 30 Days + * By Month since start of recording - selecting a month lets you either view the whole month or a specific date +5. Event Selector - lets you select the specific event for playback + +Since the media browser does not have any pagination or filtering, all of the events must be loaded into memory. As a result, the number of events loaded at once is truncated to 10,000 by default. The number of events will be listed at "10000 (TRUNCATED)" if the event count was truncated. You can raise or lower the limit of the number of events that can be loaded using the Config Entry Options. + +### Media Identifiers + +Below are the accepted identifiers to resolve media. Since events do not necessarily map to any Home Assistant entity, all IDs are in reference to the UniFi Protect IDs, not Home Assistant ones. + +| Identifier Format | Description | +| -------------------------------- | ---------------------------------- | +| `{nvr_id}:event:{event_id}` | MP4 video clip for specific event. | +| `{nvr_id}:eventthumb:{event_id}` | JPEG thumbnail for specific event. | + ## Services ### Service unifiprotect.set_default_doorbell_text @@ -260,6 +290,17 @@ Use to set the paired doorbell(s) with a smart chime. | `device_id` | No | The device ID of the Chime you want to pair or unpair doorbells to. | | `doorbells` | Yes | A target selector for any number of doorbells you want to pair to the chime. No value means unpair all. | +## Views + +The integration provides two proxy views to proxy media content from your Home Assistant instance so you can access thumbnails and video clips from within the context of Home Assistant without having to expose your UniFi Protect NVR Console. As with the media identifiers, all IDs are UniFi Protect IDs as they may not map to specific Home Assistant entities depending on how you have configured your integration. + +These URLs work great when trying to send notifications. Home Assistant will automatically sign the URLs and make them safe for external consumption if used in an automation or [notify service](/integrations/notify/). + +| View URL | Description | +| ------------------------------------------------------------ | -------------------------------------------------- | +| `/api/unifiprotect/thumbnail/{nvr_id}/{event_id}` | Proxies a JPEG event thumbnail from UniFi Protect. | +| `/api/unifiprotect/video/{nvr_id}/{camera_id}/{start}/{end}` | Proxies a MP4 video clip from UniFi Protect for a specific camera. Start and end must be in [ISO 8601 format](https://www.iso.org/iso-8601-date-and-time-format.html). | + ## Troubleshooting ### Enabling Debug Logging From aada0e30e02c69f8fff7a5784f73fadb0aae4ef1 Mon Sep 17 00:00:00 2001 From: Leonardo Figueiro Date: Mon, 8 Aug 2022 18:50:10 -0300 Subject: [PATCH 037/114] Add wilight switch (#22547) Co-authored-by: Martin Hjelmare --- source/_integrations/wilight.markdown | 55 +++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/source/_integrations/wilight.markdown b/source/_integrations/wilight.markdown index 864b203d4e8..bf5cfc7f39a 100644 --- a/source/_integrations/wilight.markdown +++ b/source/_integrations/wilight.markdown @@ -4,7 +4,9 @@ description: Instructions on how to integrate WiLight devices into Home Assistan ha_category: - Cover - Fan + - Irrigation - Light + - Switch ha_release: 0.115 ha_config_flow: true ha_iot_class: Local Polling @@ -17,6 +19,7 @@ ha_platforms: - cover - fan - light + - switch ha_integration_type: integration --- @@ -25,8 +28,9 @@ The `wilight` integration is to integrate [WiLight](http://www.wilight.com.br) d There is currently support for the following device types within Home Assistant: - Cover (WiLight model C-103). -- Fan (WiLight model V-104). -- Light (WiLight model I-100, I-102 and I-107). +- [Fan](#fan) (WiLight model V-104). +- Light (WiLight model I-100, I-102, I-107, I-110 and I-112). +- [Irrigation](#irrigation) / Switch (WiLight model R-105). {% include integrations/config_flow.md %} @@ -34,14 +38,49 @@ There is currently support for the following device types within Home Assistant: The `wilight` integration allows you to control your Fans from within Home Assistant. -### Services +### Fan Services There are several services which can be used for automations and control of the fan: | Service | Description | | --------- | ----------- | -| `set_percentage` | Calling this service sets the fan speed (entity_id and percentage are required parameters). Percentage must be in the range 0-100, percentage = 0 turns off the fan. There are three speed levels 33%, 66% and 100%. Adjusting to intermediate levels goes to the next higher level. -| `set_direction` | Calling this service will set the fan direction (entity_id and direction are required parameters, and direction must be one of the following: forward or reverse). Calling this service will turn the fan on. -| `toggle` | Calling this service will toggle the fan between on and off states (entity_id is required). -| `turn_off` | Calling this service will turn the fan off (entity_id is required). -| `turn_on` | Calling this service will turn the fan on and set the speed and direction to the last used ones (defaults to high and forward, entity_id is required). +| `set_percentage` | Calling this service sets the fan speed (`entity_id` and `percentage` are required parameters). Percentage must be in the range 0-100, percentage = 0 turns off the fan. There are three speed levels 33%, 66% and 100%. Adjusting to intermediate levels goes to the next higher level. +| `set_direction` | Calling this service will set the fan direction (`entity_id` and `direction` are required parameters, and direction must be one of the following: forward or reverse). Calling this service will turn the fan on. +| `toggle` | Calling this service will toggle the fan between on and off states (`entity_id` is required). +| `turn_off` | Calling this service will turn the fan off (`entity_id` is required). +| `turn_on` | Calling this service will turn the fan on and set the speed and direction to the last used ones (defaults to high and forward, `entity_id` is required). + +## Irrigation + +The `wilight` integration allows you to control your Irrigation from within Home Assistant. This is exposed via switches in Home Assistant. +There are two switch types for Irrigation: `watering switch` and `pause switch`. +A `watering switch` can turn on and off the irrigation valve, while the `pause switch` can disable / enable the action of a `watering switch`. +`Triggers` activate (turn on) the `watering switch` (irrigation valve) at the programmed time. The trigger can be set to run on a day of the week or only once (today). + +### Irrigation Services + +There are several services which can be used for automations and control of the Irrigation: + +- For `watering switch`: + +| Service | Description | +| --------- | ----------- | +| `turn_off` | Calling this service will turn the irrigation valve off (`entity_id` is required). +| `turn_on` | Calling this service will turn the irrigation valve on (`entity_id` is required). +| `set_watering_time` | Calling this service sets the watering time (`entity_id` and `watering_time` are required parameters), `watering_time` must be in the range 1-1800 seconds. +| `set_trigger` | Calling this service sets the trigger_1, trigger_2, trigger_3 or trigger_4 (`entity_id`, `trigger_index` and `trigger` are required parameters), `trigger_index` must be between 1 and 4 and `trigger` must be according Trigger rules (see below). + +- For `pause switch`: + +| Service | Description | +| --------- | ----------- | +| `turn_off` | Calling this service will turn the pause switch off, enabling watering switch (`entity_id` is required). +| `turn_on` | Calling this service will turn the pause switch on, disabling watering switch (`entity_id` is required). +| `set_pause_time` | Calling this service sets the pause time (`entity_id` and `pause_time` are required parameters), `pause_time` must be in the range 1-24 hours. + +Trigger rules: +- String with 8 decimal characters ("0" to "9"). +- The first three characters (String[0,3]) represent an integer from 0 to 127, which corresponds to Bitfield of: 1 - Sunday, 2 - Monday, 4 - Tuesday, 8 - Wednesday, 16 - Thursday, 32 - Friday and 64 - Saturday. Setting zero, trigger is only valid for today. +- String[3,5] represents the hour of trigger, from 0 to 23. +- String[5,7] represents the minute of trigger, from 0 to 59. +- String[7,8] represents the enable trigger, 0 - disabled, 1- enabled. From b97e8cf7fccd6fb981d6502c2ee49d5fa22db6b4 Mon Sep 17 00:00:00 2001 From: Koen van Zuijlen Date: Tue, 9 Aug 2022 00:11:31 +0200 Subject: [PATCH 038/114] Added documentation for JustNimbus integration (#23702) Co-authored-by: Franck Nijhof --- source/_integrations/justnimbus.markdown | 43 ++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 source/_integrations/justnimbus.markdown diff --git a/source/_integrations/justnimbus.markdown b/source/_integrations/justnimbus.markdown new file mode 100644 index 00000000000..7d349cb7453 --- /dev/null +++ b/source/_integrations/justnimbus.markdown @@ -0,0 +1,43 @@ +--- +title: JustNimbus +description: Instructions on how to configure the JustNimbus integration within Home Assistant +ha_category: + - Environment +ha_release: 2022.9 +ha_iot_class: Cloud Polling +ha_domain: justnimbus +ha_platforms: + - sensor +ha_config_flow: true +ha_integration_type: integration +--- + +The JustNimbus integration queries the JustNumbus API used by the JustNimbus web dashboard. +This integration allows you to collect and save data to get an historic overview of your water bag +usage. + +## Prerequisites + +To configure and use this integration, you need to have a +[JustNimbus water bag](https://justnimbus.com/regenwatersysteem/) (Dutch), and +you need to be subscribed for the web dashboard functionality. For this configuration, you need the +client ID from the URL. For example: `https://dashboard.justnimbus.com/api/installation//data`. + +{% include integrations/config_flow.md %} + +## Sensor Types + +When configured, the integration will create twelve sensors for each configured client ID: + +- Pump flow, in `L/min` (Liters/minute) +- Drink flow, in `L/min` (Liters/minute) +- Pump pressure, in `bar` +- Pump starts, a number counting the number of times the pump has started +- Pump hours, a number counting the number of hours the pump has been used +- Reservoir temperature, in `°C` +- Reservoir content, in `L` (Liters) +- Total saved, in `L` (Liters) +- Total replenished, in `L` (Liters) +- Error code +- Total use, in `L` (Liters) +- Max reservoir content, in `L` (Liters) From 50701ea048a3c8a524711b38d8a20f8a39b6d5d6 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Mon, 8 Aug 2022 16:45:26 -0600 Subject: [PATCH 039/114] Add docs to explain availability of RainMachine entities (#23695) --- source/_integrations/rainmachine.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_integrations/rainmachine.markdown b/source/_integrations/rainmachine.markdown index 08ceb89fe8a..daff3f87c7f 100644 --- a/source/_integrations/rainmachine.markdown +++ b/source/_integrations/rainmachine.markdown @@ -125,11 +125,7 @@ Unpause all paused watering activities. Remove all watering restrictions enforced by `rainmachine.restrict_watering`. -## Switch - -The `rainmachine` switch platform allows you to control programs and zones within a [RainMachine smart Wi-Fi sprinkler controller](https://www.rainmachine.com/). - -### Controlling Your Device +## Controlling Your Device After Home Assistant loads, new switches will be added for every enabled program and zone. These work as expected: @@ -138,4 +134,8 @@ After Home Assistant loads, new switches will be added for every enabled program Programs and zones are linked. While a program is running, you will see both the program and zone switches turned on; turning either one off will turn the other one off (just like in the web app). +## Entity Availability + +Many RainMachine entities are enabled by default. Others, like those related to flow sensors, are disabled by default if they only apply to some controllers. You can view all entities for a controller and enable/disable them as appropriate in the Device screen for your RainMachine controller. + [wnum reference]: https://github.com/sprinkler/rainmachine-developer-resources/blob/d47e1ad59dee59e34094ad41636ae289275eb973/sdk-parsers/RMDataFramework/rmWeatherData.py#L13 From f1a2920437b187ff2e652695ee716178e08b98bf Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 9 Aug 2022 21:47:18 +0000 Subject: [PATCH 040/114] 2022.8.3 --- _config.yml | 4 +- .../_posts/2022-08-03-release-20228.markdown | 42 +++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index e273cf6a67f..d5c6292c84b 100644 --- a/_config.yml +++ b/_config.yml @@ -107,8 +107,8 @@ social: # Home Assistant release details current_major_version: 2022 current_minor_version: 8 -current_patch_version: 2 -date_released: 2022-08-07 +current_patch_version: 3 +date_released: 2022-08-09 # 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-08-03-release-20228.markdown b/source/_posts/2022-08-03-release-20228.markdown index ed9b110b0c5..bee8ea39e33 100644 --- a/source/_posts/2022-08-03-release-20228.markdown +++ b/source/_posts/2022-08-03-release-20228.markdown @@ -45,6 +45,7 @@ Enjoy the release! - [Integrations now available to set up from the UI](#integrations-now-available-to-set-up-from-the-ui) - [Release 2022.8.1 - August 4](#release-202281---august-4) - [Release 2022.8.2 - August 7](#release-202282---august-7) +- [Release 2022.8.3 - August 9](#release-202283---august-9) - [Need help? Join the community!](#need-help-join-the-community) - [Breaking Changes](#breaking-changes) - [Farewell to the following](#farewell-to-the-following) @@ -420,6 +421,47 @@ The following integrations are now available via the Home Assistant UI: [switchbot docs]: /integrations/switchbot/ [zha docs]: /integrations/zha/ +## Release 2022.8.3 - August 9 + +- Add debug logging for unknown Notion errors ([@bachya] - [#76395]) ([notion docs]) +- Automatically enable common RainMachine restriction entities ([@bachya] - [#76405]) ([rainmachine docs]) +- Fix bug where RainMachine entity states don't populate on startup ([@bachya] - [#76412]) ([rainmachine docs]) +- Fix Govee 5185 Meat Thermometers with older firmware not being discovered ([@bdraco] - [#76414]) ([govee_ble docs]) +- Fix iCloud listeners ([@epenet] - [#76437]) ([icloud docs]) +- Bump version of pyunifiprotect to 4.0.12 ([@AngellusMortis] - [#76465]) ([unifiprotect docs]) +- Bump aiohomekit to 1.2.6 ([@bdraco] - [#76488]) ([homekit_controller docs]) +- Fix inkbird ibbq2s that identify with xbbq ([@bdraco] - [#76492]) ([inkbird docs]) +- Bump govee-ble to 0.14.0 to fix H5052 sensors ([@bdraco] - [#76497]) ([govee_ble docs]) +- Fix pairing with HK accessories that do not provide format for vendor chars ([@bdraco] - [#76502]) ([homekit_controller docs]) +- Fix #76283 ([@ocalvo] - [#76531]) ([sms docs]) +- Bump aiohomekit to 1.2.8 ([@bdraco] - [#76532]) ([homekit_controller docs]) + +[#76395]: https://github.com/home-assistant/core/pull/76395 +[#76405]: https://github.com/home-assistant/core/pull/76405 +[#76412]: https://github.com/home-assistant/core/pull/76412 +[#76414]: https://github.com/home-assistant/core/pull/76414 +[#76437]: https://github.com/home-assistant/core/pull/76437 +[#76465]: https://github.com/home-assistant/core/pull/76465 +[#76488]: https://github.com/home-assistant/core/pull/76488 +[#76492]: https://github.com/home-assistant/core/pull/76492 +[#76497]: https://github.com/home-assistant/core/pull/76497 +[#76502]: https://github.com/home-assistant/core/pull/76502 +[#76531]: https://github.com/home-assistant/core/pull/76531 +[#76532]: https://github.com/home-assistant/core/pull/76532 +[@AngellusMortis]: https://github.com/AngellusMortis +[@bachya]: https://github.com/bachya +[@bdraco]: https://github.com/bdraco +[@epenet]: https://github.com/epenet +[@ocalvo]: https://github.com/ocalvo +[govee_ble docs]: /integrations/govee_ble/ +[homekit_controller docs]: /integrations/homekit_controller/ +[icloud docs]: /integrations/icloud/ +[inkbird docs]: /integrations/inkbird/ +[notion docs]: /integrations/notion/ +[rainmachine docs]: /integrations/rainmachine/ +[sms docs]: /integrations/sms/ +[unifiprotect docs]: /integrations/unifiprotect/ + ## Need help? Join the community! Home Assistant has a great community of users who are all more than willing From dd10ad636c81d885e8b03070d7fe562a7633240e Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Wed, 10 Aug 2022 11:37:02 +0200 Subject: [PATCH 041/114] Add binary_sensor to NextDNS documentation (#23404) --- source/_integrations/nextdns.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/nextdns.markdown b/source/_integrations/nextdns.markdown index 979b1ffac46..10a51309b6e 100644 --- a/source/_integrations/nextdns.markdown +++ b/source/_integrations/nextdns.markdown @@ -10,6 +10,7 @@ ha_codeowners: - '@bieniu' ha_domain: nextdns ha_platforms: + - binary_sensor - button - diagnostics - sensor From e6f5e59310aee039f47f01f8d351d49b4954b029 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 9 Aug 2022 23:38:47 -1000 Subject: [PATCH 042/114] Add 5184 Meat Thermometer to govee_ble (#23706) --- source/_integrations/govee_ble.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/govee_ble.markdown b/source/_integrations/govee_ble.markdown index f4efe419675..97b21e0611a 100644 --- a/source/_integrations/govee_ble.markdown +++ b/source/_integrations/govee_ble.markdown @@ -31,4 +31,5 @@ The Govee BLE integration will automatically discover devices once the [Bluetoot - H5179 Hygrometer Thermometer - 5181 Meat Thermometer - 5183 Meat Thermometer +- 5184 Meat Thermometer - 5185 Meat Thermometer From b173d3674095280548e62dfd46272e3e1e0997b4 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 10 Aug 2022 11:24:42 -1000 Subject: [PATCH 043/114] Add Yale Access Bluetooth integration (#23641) --- source/_integrations/yalexs_ble.markdown | 59 ++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 source/_integrations/yalexs_ble.markdown diff --git a/source/_integrations/yalexs_ble.markdown b/source/_integrations/yalexs_ble.markdown new file mode 100644 index 00000000000..9d774e5540d --- /dev/null +++ b/source/_integrations/yalexs_ble.markdown @@ -0,0 +1,59 @@ +--- +title: Yale Access Bluetooth +description: Instructions on how to integrate Yale Access Bluetooth devices into Home Assistant. +ha_category: + - Lock +ha_bluetooth: true +ha_release: 2022.9 +ha_iot_class: Local Push +ha_codeowners: + - '@bdraco' +ha_domain: yalexs_ble +ha_config_flow: true +ha_platforms: + - lock +ha_integration_type: integration +--- + +Integrates [Yale Access](https://www.yalehome.com/us/en/products/smart-technology/yale-access) Bluetooth devices into Home Assistant. + +{% include integrations/config_flow.md %} + +The Yale Access Bluetooth integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional. + +Devices must have a Yale Access module installed to function with this integration if one is not already built-in. + +## Supported devices + +- YRD216 +- YRL216 +- YRD226 +- YRL226 +- YRD256 + +## Limited support devices + +These devices do not send updates, but can be locked and unlocked. + +- Conexis L1 + +## Push updates + +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. + +Alternatively, call the `homeassistant.update_entity` service to force the integration to update the lock state. + +## Obtaining the offline key + +The offline key and slot number are required to operate the lock. These credentials reside in the Yale Access app storage on iOS or Android devices with owner access to the lock. + +The Yale Access app will only save the offline key to your device's filesystem if AutoUnlock has been enabled and used at least once. + +### iOS + +- Using [iMazing](https://imazing.com/) or [iPhone Backup Extractor](https://www.iphonebackupextractor.com/), find the backup files for the Yale Access app. +- Look in the `Library/Preferences` `.plist` files for the Yale Access app and find the one with the value of `key` and `slot` using `Xcode` or any binary `plist` viewer. + +### Android + +Root access is required to read the `key` and `slot` stored in `/data/data/com.august.luna/shared_prefs/PeripheralInfoCache.xml` From 3c177cf0ad7bb37d80d919b811d557dad67f360c Mon Sep 17 00:00:00 2001 From: IceBotYT <34712694+IceBotYT@users.noreply.github.com> Date: Wed, 10 Aug 2022 17:36:23 -0400 Subject: [PATCH 044/114] Add LaCrosse View page (#22758) --- .vscode/cSpell.json | 9 +++++++ source/_integrations/lacrosse_view.markdown | 29 +++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 source/_integrations/lacrosse_view.markdown diff --git a/.vscode/cSpell.json b/.vscode/cSpell.json index 5f2a8e2f8c6..6cfe3e27ef3 100644 --- a/.vscode/cSpell.json +++ b/.vscode/cSpell.json @@ -4,6 +4,7 @@ "version": "0.2", "language": "en", "words": [ + "Accu", "aeotec", "Alexa", "arest", @@ -16,6 +17,7 @@ "BTLE", "CEST", "Chromecast", + "codeowners", "deCONZ", "Denon", "DSMR", @@ -44,9 +46,11 @@ "HomeKit", "Homematic", "HVAC", + "Hygro", "IBAN", "icloud", "IFTTT", + "Jeelink", "kardon", "laundrify", "Lutron", @@ -54,6 +58,7 @@ "Meteobridge", "Modbus", "Mosquitto", + "Multiday", "Nabu Casa", "nginx", "Nijhof", @@ -65,6 +70,7 @@ "OwnTracks", "Paulus", "PECO", + "POOLV", "Powerwall", "Pushbullet", "Schoutsen", @@ -80,6 +86,9 @@ "waqi", "WLED", "worldclock", + "WRTHV", + "WSDTH", + "WTHV", "Xiaomi", "Zigbee" ], diff --git a/source/_integrations/lacrosse_view.markdown b/source/_integrations/lacrosse_view.markdown new file mode 100644 index 00000000000..ba8450588fa --- /dev/null +++ b/source/_integrations/lacrosse_view.markdown @@ -0,0 +1,29 @@ +--- +title: "LaCrosse View" +description: "Get data for LaCrosse View-connected sensors" +ha_release: "2022.6" +ha_category: Sensor +ha_iot_class: "Cloud Polling" +ha_quality_scale: platinum +ha_config_flow: true +ha_codeowners: + - '@IceBotYT' +ha_domain: lacrosse_view +ha_platforms: + - sensor +ha_integration_type: integration +--- + +[**LaCrosse View**](https://www.lacrossetechnology.com/pages/la-crosse-view) is the service provided by LaCrosse Technology that allows access to LaCrosse sensors. + +
+ +If you are looking for an integration for [**Jeelink LaCrosse sensors**](/integrations/lacrosse), you can find that integration [**here**](/integrations/lacrosse). + +
+ +{% include integrations/config_flow.md %} + +## Supported sensors + +All of the sensors on [**this page**](https://www.lacrossetechnology.com/collections/lacrosse-view-connected) are supported by this integration. From 250c525b29871e5d04f0a01ca46d00ecacae720d Mon Sep 17 00:00:00 2001 From: Rami Mosleh Date: Thu, 11 Aug 2022 00:36:36 +0300 Subject: [PATCH 045/114] Add config flow to `android_ip_webcam` documentation (#23709) Co-authored-by: Franck Nijhof --- .../_integrations/android_ip_webcam.markdown | 174 +----------------- 1 file changed, 5 insertions(+), 169 deletions(-) diff --git a/source/_integrations/android_ip_webcam.markdown b/source/_integrations/android_ip_webcam.markdown index 2e5b2d16fcb..92c6473c18e 100644 --- a/source/_integrations/android_ip_webcam.markdown +++ b/source/_integrations/android_ip_webcam.markdown @@ -9,6 +9,7 @@ ha_category: - Switch ha_release: '0.40' ha_iot_class: Local Polling +ha_config_flow: true ha_domain: android_ip_webcam ha_platforms: - binary_sensor @@ -16,9 +17,11 @@ ha_platforms: - sensor - switch ha_integration_type: integration +ha_codeowners: + - '@engrbm87' --- -The `android_ip_webcam` integration connects with Android IP Webcam to turn any Android phone or tablet into a network camera with multiple viewing options. +The Android IP Webcam integration connects with Android IP Webcam to turn any Android phone or tablet into a network camera with multiple viewing options. The integration is setup as an MJPEG camera with all settings as switches inside Home Assistant. You can also integrate the sensors exposed by the app. If you have multiple phones, you can use all options inside a list. @@ -33,177 +36,10 @@ There is currently support for the following device types within Home Assistant: Download [Android IP Webcam app](https://play.google.com/store/apps/details?id=com.pas.webcam) and launch the app. When you press 'Start Server', it will start streaming video from your phone and the IP address of the device will be shown on screen. -## Configuration - -To set up the component, add the following information to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -android_ip_webcam: - - host: 192.168.1.10 -``` - -{% configuration %} -host: - description: The IP address of the phone on the network. - required: true - type: string -port: - description: The port the IP Webcam listens on. - required: false - default: 8080 - type: integer -name: - description: Override the name of the phone. - required: false - default: IP Webcam - type: string -username: - description: The username to access the phone. If username is specified then password must be also. - required: inclusive - type: string -password: - description: The password to access the phone. If password is specified then username must be also. - required: inclusive - type: string -scan_interval: - description: The update interval to use (in seconds). - required: false - default: 10 - type: integer -sensors: - description: List of sensor entities to be created by this component (if supported by the phone and app). - required: false - type: list - keys: - audio_connections: - description: The audio connections - battery_level: - description: The battery level - battery_temp: - description: The battery temperature - battery_voltage: - description: The battery voltage - light: - description: The light level - motion: - description: Analog (not binary) amount of motion detected - pressure: - description: The current pressure - proximity: - description: The proximity - sound: - description: The sound level - video_connections: - description: The video connections -switches: - description: List of switch entities to be created by this component. - required: false - type: list - keys: - exposure_lock: - description: Control the exposure lock - ffc: - description: Control the front-facing camera - focus: - description: Control the focus - gps_active: - description: Control the GPS - motion_detect: - description: Control the motion detector - night_vision: - description: Control the night vision - overlay: - description: Control the overlay - torch: - description: Control the torch - whitebalance_lock: - description: Control the white balance lock - video_recording: - description: Control the video recording -motion_sensor: - description: Create a binary_sensor._motion_active entity. Note that `auto_discovery` may also create this sensor. - required: false - type: boolean - default: false -{% endconfiguration %} +{% include integrations/config_flow.md %}
You need to enable logging in the Android app (`Data logging` > `Enable data logging`) if you wish to see the sensor states in Home Assistant. The sensor states stay as `unknown`, until this is enabled.
- -## Full example - -```yaml -# Example configuration.yaml entry -android_ip_webcam: - - host: 192.168.1.202 - port: 8000 - sensors: - - audio_connections - - battery_level - - battery_temp - - battery_voltage - - light - - motion - - pressure - - proximity - - sound - - video_connections - switches: - - exposure_lock - - ffc - - focus - - gps_active - - motion_detect - - night_vision - - overlay - - torch - - whitebalance_lock - - video_recording - - host: 192.168.1.203 - port: 8000 - sensors: - - light - switches: - - torch -``` - -## Alternate Configuration Method - -The configuration described above will cause the `android_ip_webcam` binary sensor platform to automatically create and configure the devices. Alternatively you can omit the `android_ip_webcam` component from your `configuration.yaml` file and add individual devices instead. - -### Binary Sensor - -You can setup the binary motion sensor with the following in your `configuration.yaml` file: - -{% raw %} - -```yaml -# Example configuration.yaml entry -binary_sensor: - - platform: rest - name: Kitchen Motion - device_class: motion - resource: http://IP_ADDRESS:PORT/sensors.json?sense=motion_active - value_template: "{{ value_json.motion_active.data[0][1][0] | round(0) }}" -``` - -{% endraw %} - -### Camera - -To enable only the camera in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -camera: - - platform: mjpeg - mjpeg_url: http://IP_ADDRESS:PORT/video -``` - -### Other Sensors - -You can setup your own sensors by examining the JSON file from the webcam server: `http://IP:8080/sensors.json` From fc0213d6ca5e8ddb0cbe905158215ef2d8429474 Mon Sep 17 00:00:00 2001 From: Laz <87186949+lazdavila@users.noreply.github.com> Date: Thu, 11 Aug 2022 07:08:11 +0930 Subject: [PATCH 046/114] Adding integration of Escea Fireplaces (#23708) Co-authored-by: Franck Nijhof --- source/_integrations/escea.markdown | 47 +++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 source/_integrations/escea.markdown diff --git a/source/_integrations/escea.markdown b/source/_integrations/escea.markdown new file mode 100644 index 00000000000..f7acea3620e --- /dev/null +++ b/source/_integrations/escea.markdown @@ -0,0 +1,47 @@ +--- +title: Escea +description: Instructions on how to integrate Escea fireplaces with Home Assistant. +ha_category: + - Climate +ha_release: 2022.9 +ha_iot_class: Local Push +ha_config_flow: true +ha_codeowners: + - '@lazdavila' +ha_domain: escea +ha_homekit: true +ha_platforms: + - climate +--- + +The Escea integration allows monitoring and control of local [Escea](https://escea.com/) fireplaces. These fireplaces are manufactured in New Zealand and sold throughout Australia and New Zealand. + +## Supported hardware + +Support all current Escea fireplaces with the Smart Heat feature, including the DF, DL, DS, and DX series. +Though these fireplaces are supported, they can only be integrated if they were connected via Ethernet when installed (i.e., these fireplaces do not support Wi-Fi). + +{% include integrations/config_flow.md %} + +## Network settings + +The Escea system uses UDP over the local network to find and communicate with Escea devices. For this to work properly, UDP port 3300 must be available for broadcasting and messaging fireplaces, and similarly, UDP port 3300 must be available to listen for responses. The integration currently listens on `0.0.0.0` and broadcasts to all broadcast IPv4 local addresses, which is not configurable. + +## Master controller + +Fireplace on / off, fan settings, and desired temperature settings are supported. The current room temperature, as measured by the fireplace, is also supported. + +## Debugging + +If you're trying to track down issues with the component, set up logging for it: + +```yaml +# Example configuration.yaml with logging for Escea +logger: + default: warning + logs: + homeassistant.components.escea: debug + pescea: debug +``` + +This will help you to find network connection issues etc. \ No newline at end of file From 49c8dcd16c6107ba8cf76a2c757f31bbd71abd0d Mon Sep 17 00:00:00 2001 From: Till Date: Thu, 11 Aug 2022 00:23:28 +0200 Subject: [PATCH 047/114] Xiaomi BLE: Added plant sensor firmware update instructions (#23659) Co-authored-by: Franck Nijhof --- source/_integrations/xiaomi_ble.markdown | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/_integrations/xiaomi_ble.markdown b/source/_integrations/xiaomi_ble.markdown index 63185dcf986..94c6c7cc2f9 100644 --- a/source/_integrations/xiaomi_ble.markdown +++ b/source/_integrations/xiaomi_ble.markdown @@ -49,3 +49,21 @@ There are a few ways to obtain a bindkey for your device: * Set your own. The [Telink Flasher](https://atc1441.github.io/TelinkFlasher.html) allows you to generate new bindkeys for devices it supports. The new bind key will work with Home Assistant, but the Mi Home app will not recognize the sensor anymore once the device has been activated by the TeLink flasher application. To use the sensor again with the Xiaomi Mi Home app, the device needs to be removed and then re-added inside the Mi Home app. * Extract the keys from Xiaomi Cloud using a [token extractor](https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor) tool. + +## Devices + +### Plant sensor: Flower Care / MiFlora (HHCCJCY01) + +HHCCJCY01, also known as MiFlora or "Flower Care", should be automatically discovered. However, if the firmware is too old, it won't send the right BLE beacons and an update via the app is required. The lowest confirmed working firmware version is 3.2.1 (a lower 3.x version could also be alright). + +Flower Care firmware update steps: + +* Install the official "Flower Care" app by HHCC: + * [Google Play](https://play.google.com/store/apps/details?id=com.huahuacaocao.flowercare) (requires location and storage permission) + * [Apple App Store](https://apps.apple.com/us/app/flower-care/id1095274672) +* Place the device with the app within 10cm of the plant sensor +* Press the "+" button on the top right in the devices tab of the app +* Add the plant sensor to the app and select an arbitrary plant +* Wait for the synchronization of the sensor to finish, and a dialog asking for a firmware update should appear (this might take a few minutes) +* The installed and latest firmware version can be verified by selecting the plant -> three-dot menu -> Hardware settings -> Hardware update +* The Flower Care account and app are not required any further for this integration to work From 0dcf51ed1e5184f6592021574118176f19b24284 Mon Sep 17 00:00:00 2001 From: pvianag Date: Thu, 11 Aug 2022 00:46:43 +0200 Subject: [PATCH 048/114] Update aquostv.markdown (#23723) --- source/_integrations/aquostv.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/aquostv.markdown b/source/_integrations/aquostv.markdown index 5bc8de744c3..a25af9018b8 100644 --- a/source/_integrations/aquostv.markdown +++ b/source/_integrations/aquostv.markdown @@ -68,6 +68,7 @@ Also, with **power_on_enabled** as True, the Aquos logo on your TV will stay on ## Currently known supported models - LC-40LE830U +- LC-40CFE6242E (no volume control, not fully tested but able to poll state) - LC-46LE830U - LC-52LE830U - LC-60LE830U From 1f65ce0192aab67261fa80cacbfe1461093ade3b Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 10 Aug 2022 15:39:44 -1000 Subject: [PATCH 049/114] Add door sensor to Yale Access Bluetooth (#23722) --- source/_integrations/yalexs_ble.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_integrations/yalexs_ble.markdown b/source/_integrations/yalexs_ble.markdown index 9d774e5540d..877129d4c9e 100644 --- a/source/_integrations/yalexs_ble.markdown +++ b/source/_integrations/yalexs_ble.markdown @@ -2,6 +2,7 @@ title: Yale Access Bluetooth description: Instructions on how to integrate Yale Access Bluetooth devices into Home Assistant. ha_category: + - Binary Sensor - Lock ha_bluetooth: true ha_release: 2022.9 @@ -11,6 +12,7 @@ ha_codeowners: ha_domain: yalexs_ble ha_config_flow: true ha_platforms: + - binary_sensor - lock ha_integration_type: integration --- @@ -43,6 +45,10 @@ Some locks only send push updates when they have an active HomeKit pairing. If y Alternatively, call the `homeassistant.update_entity` service to force the integration to update the lock state. +## Door Sensors + +The lock must be calibrated in the Yale Access App for the door sensors to function correctly. If the door sensor has an unknown state or is not updating, try recalibrating the lock in the app. + ## Obtaining the offline key The offline key and slot number are required to operate the lock. These credentials reside in the Yale Access app storage on iOS or Android devices with owner access to the lock. From c133bd91e221ba285b91c901fca31be4bd63b63a Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 10 Aug 2022 16:21:52 -1000 Subject: [PATCH 050/114] Update august for offline key access (#23725) Co-authored-by: Franck Nijhof --- source/_integrations/august.markdown | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/source/_integrations/august.markdown b/source/_integrations/august.markdown index f1b55b47df1..066c182a400 100644 --- a/source/_integrations/august.markdown +++ b/source/_integrations/august.markdown @@ -103,6 +103,25 @@ If you have an August Keypad, once you have enabled the August component, you sh - Keypad Battery +## Integration with Yale Access Bluetooth + +Following Assa Abloy, Yale's parent company, purchasing August in 2017, most newer devices use the Yale Access branding. + +The [Yale Access Bluetooth](/integrations/yalexe_ble) provides local control over Bluetooth of many Yale Access locks and some August locks that use the same system. + +For locks that support the Yale Access system, the August integration can keep your offline access keys up to date to ensure you can operate your lock over Bluetooth. The following requirements must be met for the offline key updates to work: + +- The August integration must support the lock. +- The [Yale Access Bluetooth integration](/integrations/yalexe_ble) must support the lock. +- The Bluetooth integration must be active and functional. +- The lock must be discoverable by the [Yale Access Bluetooth integration](/integrations/yalexe_ble). +- The account logged in with the August integration must have the offline keys. + +### Troubleshooting offline keys updates + +- If you do not know which account has the offline keys, configure August integration with each different Owner account until you find the one that holds the keys. You may need to make a new owner account and grant the account access to your lock to force the keys to synchronize with the cloud service. +- Ensure the lock is in range and discoverable by the [Yale Access Bluetooth integration](/integrations/yalexe_ble). + ## Presence Detection with Lock Operation Using the lock operation sensors, you can detect when a user operates a lock and is physically present (not remote). The below automation example (added to `automations.yaml`) will trigger when the user named “John Doe” in August locks or unlocks the door from the keypad (if present), via Bluetooth from their phone, or by auto-unlock. The state of the sensor will be the name of the party operating the lock as returned by August. From f275941b47fbbe61349e5980163e6abe29ae01b2 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 10 Aug 2022 23:06:32 -1000 Subject: [PATCH 051/114] Add sensor platform to Yale Access Bluetooth (#23727) --- 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 877129d4c9e..3f2d4a6fef7 100644 --- a/source/_integrations/yalexs_ble.markdown +++ b/source/_integrations/yalexs_ble.markdown @@ -4,6 +4,7 @@ description: Instructions on how to integrate Yale Access Bluetooth devices into ha_category: - Binary Sensor - Lock + - Sensor ha_bluetooth: true ha_release: 2022.9 ha_iot_class: Local Push @@ -14,6 +15,7 @@ ha_config_flow: true ha_platforms: - binary_sensor - lock + - sensor ha_integration_type: integration --- From 9aec928b439dc3eb5006c25df079278741efc758 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 11 Aug 2022 16:14:48 +0200 Subject: [PATCH 052/114] Add schedule (#23721) Co-authored-by: Zack Barett --- source/_integrations/schedule.markdown | 110 +++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 source/_integrations/schedule.markdown diff --git a/source/_integrations/schedule.markdown b/source/_integrations/schedule.markdown new file mode 100644 index 00000000000..b8fc078ccac --- /dev/null +++ b/source/_integrations/schedule.markdown @@ -0,0 +1,110 @@ +--- +title: Schedule +description: Instructions on how use make weekly schedule in Home Assistant. +ha_category: + - Automation + - Helper +ha_release: 2022.9 +ha_quality_scale: internal +ha_codeowners: + - '@home-assistant/core' +ha_domain: schedule +ha_integration_type: helper +--- + +The schedule integration provides a way to create a weekly schedule in +Home Assistant that can be used to trigger or make decisions in your +automations and scripts. + +The preferred way to configure a schedule is via the user interface at +**Settings** -> **Devices & Services** -> **Helpers**. Click the add button +and then choose the **Schedule** option, or click the My button below. + +{% include integrations/config_flow.md %} + +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 it back or, alternatively, `schedule:` to your +`configuration.yaml` first, before you can create them via the UI. + +Alternatively, a schedule can also be created and configured via YAML +configuration. For example: + +```yaml +# Example configuration.yaml entry +schedule: + thermostat_schedule: + name: "Thermostat schedule" + monday: + - from: "17:00:00" + to: "21:00:00" + tuesday: + - from: "17:00:00" + to: "21:00:00" + wednesday: + - from: "17:00:00" + to: "21:00:00" + thursday: + - from: "17:00:00" + to: "21:00:00" + friday: + - from: "17:00:00" + to: "23:00:00" + saturday: + - from: "07:00:00" + to: "10:00:00" + - from: "16:00:00" + to: "23:00:00" + sunday: + - from: "07:00:00" + to: "21:00:00" +``` + +{% configuration %} +schedule: + description: Alias for the schedule. Multiple entries are allowed. + required: true + type: map + keys: + name: + description: Friendly name of the schedule. + required: true + type: string + icon: + description: Icon to display in the frontend for this schedule. + required: false + type: icon + "monday|tuesday|wednesday|thursday|friday|saturday|sunday": + description: A schedule for each day of the week. + required: false + required: true + type: list + keys: + from: + description: The start time to mark the schedule as active/on. + required: true + type: time + to: + description: The end time to mark as inactive/off again. + required: true + type: time +{% endconfiguration %} + +### Attributes + +A schedule entity's state exports attributes that can be useful in +automations and templates. + +| Attribute | Description | +| ----- | ----- | +| `next_event` | A datetime object containing the next time the schedule is going to change state. | +### Services + +Available service: `schedule.reload`. + +#### schedule.reload + +`schedule.reload` service allows one to reload the schedule's configuration without restarting Home Assistant itself. From 6083597afdd67f04bcc3f05bd1b9ba0327e52ff4 Mon Sep 17 00:00:00 2001 From: Peter <55065107+pyrrolizin@users.noreply.github.com> Date: Thu, 11 Aug 2022 16:53:37 +0200 Subject: [PATCH 053/114] feat: adding selectors and variables (#23719) --- source/_data/glossary.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_data/glossary.yml b/source/_data/glossary.yml index e7ec2cd1ade..62ab6c8fe20 100644 --- a/source/_data/glossary.yml +++ b/source/_data/glossary.yml @@ -60,6 +60,8 @@ description: "[Scripts](/docs/scripts/) are components that allow users to specify a sequence of actions to be executed by Home Assistant when turned on." - topic: Sensor description: "[Sensors](/integrations/sensor) return information about a thing, for instance the level of water in a tank." +- topic: Selectors + description: "[Selectors](/docs/blueprint/selectors/) specify what values are accepted for a blueprint input and how the input is shown in the user interface." - topic: Service description: "[Services](/docs/scripts/service-calls/) are called to perform actions." - topic: Switch @@ -70,5 +72,7 @@ description: "A [trigger](/docs/automation/trigger/) is a set of values or conditions of a platform that are defined to cause an automation to run." - topic: TTS description: "TTS ([text to speech](/integrations/tts)) allows Home Assistant to talk to you." +- topic: Variables + description: "[Variables](/docs/scripts/#variables) are a named storage for a value that can be processed e.g. in a script." - topic: Zone description: "[Zones](/integrations/zone/) are areas that can be used for presence detection." From b3d607e3db197588375f2263b5e6e8fa5f48397a Mon Sep 17 00:00:00 2001 From: RybA Date: Thu, 11 Aug 2022 20:07:21 +0200 Subject: [PATCH 054/114] Update denonavr.markdown (#23730) --- source/_integrations/denonavr.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/denonavr.markdown b/source/_integrations/denonavr.markdown index 46894ca413a..294a1a93650 100644 --- a/source/_integrations/denonavr.markdown +++ b/source/_integrations/denonavr.markdown @@ -78,6 +78,7 @@ Known supported devices: - Marantz SR5011 - Marantz SR6007 - SR6012 - Marantz SR7007 +- Marantz SR7012 - Marantz SR8015 - Marantz NR1504 - Marantz NR1506 From 7a293afec0d05b3a0a58b6eeadd8f7e6d787fe37 Mon Sep 17 00:00:00 2001 From: bifurcated <51032159+bifurcated@users.noreply.github.com> Date: Thu, 11 Aug 2022 22:07:36 -0400 Subject: [PATCH 055/114] Update sensorpush to include note about activation being required Co-authored-by: J. Nick Koston --- source/_integrations/sensorpush.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_integrations/sensorpush.markdown b/source/_integrations/sensorpush.markdown index 3eefdab7b50..d5e120d548c 100644 --- a/source/_integrations/sensorpush.markdown +++ b/source/_integrations/sensorpush.markdown @@ -17,6 +17,10 @@ ha_integration_type: integration Integrates [SensorPush](https://www.sensorpush.com/) devices into Home Assistant. +## Activation is required + +Sensor entities (temperature, humidity, barometric pressure) will not be available to Home Assistant until you have activated the device with the SensorPush app on iOS or Android. + ## Supported devices - [HT.w Water-Resistant Temperature / Humidity Smart Sensor](https://www.sensorpush.com/products/p/ht-w) From d5cdebc9d9ac1b40735f8752c12bbaaf516b2be8 Mon Sep 17 00:00:00 2001 From: Jc2k Date: Fri, 12 Aug 2022 09:59:13 +0100 Subject: [PATCH 056/114] Xiaomi BLE now supports some binary sensors (#23736) Co-authored-by: J. Nick Koston --- source/_integrations/xiaomi_ble.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_integrations/xiaomi_ble.markdown b/source/_integrations/xiaomi_ble.markdown index 63185dcf986..47ea3673869 100644 --- a/source/_integrations/xiaomi_ble.markdown +++ b/source/_integrations/xiaomi_ble.markdown @@ -2,6 +2,7 @@ title: Xiaomi BLE description: Instructions on how to integrate Xiaomi BLE devices into Home Assistant. ha_category: + - Binary Sensor - Sensor ha_bluetooth: true ha_release: 2022.8 @@ -12,6 +13,7 @@ ha_codeowners: ha_domain: xiaomi_ble ha_config_flow: true ha_platforms: + - binary_sensor - sensor ha_integration_type: integration --- @@ -36,6 +38,12 @@ It is possible that we detect your device because it uses the MiBeacon protocol - Voltage - Battery +It also supports the following classes of binary sensors: + +- Light +- Smoke +- Moisture + ## Encryption Some devices use AES encryption to protect the sensor values they are broadcasting. From 39a5b5fdbfc66507bc3651dfce2adedcaeff0a22 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 12 Aug 2022 18:05:20 +0000 Subject: [PATCH 057/114] 2022.8.4 --- _config.yml | 4 +- .../_posts/2022-08-03-release-20228.markdown | 43 +++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index d5c6292c84b..eb9f3d96e6b 100644 --- a/_config.yml +++ b/_config.yml @@ -107,8 +107,8 @@ social: # Home Assistant release details current_major_version: 2022 current_minor_version: 8 -current_patch_version: 3 -date_released: 2022-08-09 +current_patch_version: 4 +date_released: 2022-08-12 # 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-08-03-release-20228.markdown b/source/_posts/2022-08-03-release-20228.markdown index bee8ea39e33..5414b654d83 100644 --- a/source/_posts/2022-08-03-release-20228.markdown +++ b/source/_posts/2022-08-03-release-20228.markdown @@ -46,6 +46,7 @@ Enjoy the release! - [Release 2022.8.1 - August 4](#release-202281---august-4) - [Release 2022.8.2 - August 7](#release-202282---august-7) - [Release 2022.8.3 - August 9](#release-202283---august-9) +- [Release 2022.8.4 - August 12](#release-202284---august-12) - [Need help? Join the community!](#need-help-join-the-community) - [Breaking Changes](#breaking-changes) - [Farewell to the following](#farewell-to-the-following) @@ -462,6 +463,48 @@ The following integrations are now available via the Home Assistant UI: [sms docs]: /integrations/sms/ [unifiprotect docs]: /integrations/unifiprotect/ +## Release 2022.8.4 - August 12 + +- Bump ZHA dependencies ([@puddly] - [#76565]) ([zha docs]) +- Replaces aiohttp.hdrs CONTENT_TYPE with plain string for the Swisscom integration ([@DeeVeX] - [#76568]) ([swisscom docs]) +- Fix homekit_controller not noticing ip and port changes that zeroconf has found ([@Jc2k] - [#76570]) ([homekit_controller docs]) +- Fix Spotify deviding None value in current progress ([@frenck] - [#76581]) ([spotify docs]) +- Improve code quality in huawei_lte ([@a-p-z] - [#76583]) ([huawei_lte docs]) +- Fix Govee 5181 with old firmware ([@bdraco] - [#76600]) ([govee_ble docs]) +- Fix evohome preset modes ([@MartinHjelmare] - [#76606]) ([evohome docs]) +- Add missing _abort_if_unique_id_configured to ble integrations ([@bdraco] - [#76624]) ([govee_ble docs]) ([sensorpush docs]) ([inkbird docs]) ([xiaomi_ble docs]) ([moat docs]) +- Fix non-awaited coroutine in BMW notify ([@rikroe] - [#76664]) ([bmw_connected_drive docs]) + +[#76565]: https://github.com/home-assistant/core/pull/76565 +[#76568]: https://github.com/home-assistant/core/pull/76568 +[#76570]: https://github.com/home-assistant/core/pull/76570 +[#76581]: https://github.com/home-assistant/core/pull/76581 +[#76583]: https://github.com/home-assistant/core/pull/76583 +[#76600]: https://github.com/home-assistant/core/pull/76600 +[#76606]: https://github.com/home-assistant/core/pull/76606 +[#76624]: https://github.com/home-assistant/core/pull/76624 +[#76664]: https://github.com/home-assistant/core/pull/76664 +[@DeeVeX]: https://github.com/DeeVeX +[@Jc2k]: https://github.com/Jc2k +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@a-p-z]: https://github.com/a-p-z +[@bdraco]: https://github.com/bdraco +[@frenck]: https://github.com/frenck +[@puddly]: https://github.com/puddly +[@rikroe]: https://github.com/rikroe +[bmw_connected_drive docs]: /integrations/bmw_connected_drive/ +[evohome docs]: /integrations/evohome/ +[govee_ble docs]: /integrations/govee_ble/ +[homekit_controller docs]: /integrations/homekit_controller/ +[huawei_lte docs]: /integrations/huawei_lte/ +[inkbird docs]: /integrations/inkbird/ +[moat docs]: /integrations/moat/ +[sensorpush docs]: /integrations/sensorpush/ +[spotify docs]: /integrations/spotify/ +[swisscom docs]: /integrations/swisscom/ +[xiaomi_ble docs]: /integrations/xiaomi_ble/ +[zha docs]: /integrations/zha/ + ## Need help? Join the community! Home Assistant has a great community of users who are all more than willing From f6d217d408fe133fca9a01b36e39fa603e840243 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 13 Aug 2022 14:08:08 -1000 Subject: [PATCH 058/114] Add Govee H5101 to the supported list (#23761) Device worked out of box with no changes --- source/_integrations/govee_ble.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/govee_ble.markdown b/source/_integrations/govee_ble.markdown index f4efe419675..3fd8bf328b1 100644 --- a/source/_integrations/govee_ble.markdown +++ b/source/_integrations/govee_ble.markdown @@ -27,6 +27,7 @@ The Govee BLE integration will automatically discover devices once the [Bluetoot - H5074 Hygrometer Thermometer - [H5075 Bluetooth Hygrometer Thermometer](https://us.govee.com/collections/thermo-hydrometer/products/govee-bluetooth-hygrometer-thermometer-h5075) - H5100 Hygrometer Thermometer +- H5101 Hygrometer Thermometer - [H5177/5178 Bluetooth Thermo-Hygrometer](https://us.govee.com/collections/thermo-hydrometer/products/bluetooth-thermo-hygrometer) - H5179 Hygrometer Thermometer - 5181 Meat Thermometer From e9a1544d09c6a55ed17e2b1e91fed42e89065d7b Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 13 Aug 2022 23:12:34 -1000 Subject: [PATCH 059/114] Add Qingping integration (#23731) * Add Qingping integration * Update qingping.markdown * Update qingping.markdown * Update qingping.markdown * Update source/_integrations/qingping.markdown --- source/_integrations/qingping.markdown | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 source/_integrations/qingping.markdown diff --git a/source/_integrations/qingping.markdown b/source/_integrations/qingping.markdown new file mode 100644 index 00000000000..b9e4009b85f --- /dev/null +++ b/source/_integrations/qingping.markdown @@ -0,0 +1,30 @@ +--- +title: Qingping +description: Instructions on how to integrate Qingping devices into Home Assistant. +ha_category: + - Binary Sensor + - Sensor +ha_bluetooth: true +ha_release: 2022.9 +ha_iot_class: Local Push +ha_codeowners: + - '@bdraco' +ha_domain: qingping +ha_config_flow: true +ha_platforms: + - binary_sensor + - sensor +ha_integration_type: integration +--- + +Integrates [Qingping](https://qingping.co/) devices into Home Assistant. + +{% include integrations/config_flow.md %} + +The Qingping integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional. + +## Supported devices + +- [Air Monitor Lite](https://www.qingping.co/air-monitor-lite/overview) (CGDN1) +- [Alarm Clock](https://www.qingping.co/bluetooth-alarm-clock/overview) (CGD1) +- [Motion & Ambient Light Sensor](https://www.qingping.co/motion-light-sensor/overview) (CGPR1) From 85e1dbf08d982f539ee49dddf39a5488130887f3 Mon Sep 17 00:00:00 2001 From: Sven Serlier <85389871+wrt54g@users.noreply.github.com> Date: Mon, 15 Aug 2022 11:27:50 +0200 Subject: [PATCH 060/114] Update URLs (#23769) --- source/more-info/free-space.markdown | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/source/more-info/free-space.markdown b/source/more-info/free-space.markdown index 2b3dd7e97a0..e6853e3221b 100644 --- a/source/more-info/free-space.markdown +++ b/source/more-info/free-space.markdown @@ -24,7 +24,7 @@ the database, and even change how long it stores the data ## Delete old backups -Open the Home Assistant UI and go to {% my backups title="Settings > System > Backups" %}, here you will see all your backups, +Open the Home Assistant UI and go to {% my backup title="Settings > System > Backups" %}, here you will see all your backups, these can be downloaded and placed somewhere safe. When you have done that, you can delete them in the UI and it will free up some space for you. @@ -32,8 +32,7 @@ them in the UI and it will free up some space for you. Add-ons can take a lot of space, not just the add-on itself but also their data. -Open the Home Assistant UI and go to {% my supervisor title="Settings > Add-ons" %} in the sidebar, you will be -on the "Dashboard" tab when you click on {% my supervisor title="Settings > Add-ons" %}, here you will see +Open the Home Assistant UI and go to {% my supervisor title="Settings > Add-ons" %} in the sidebar. Here you will see all your installed add-ons, maybe you have some that you no longer use, if you do those can be uninstalled to free up some space. @@ -46,5 +45,5 @@ documentation for your hypervisor on how to expand disks for virtual machines. Home Assistant will auto-expand to use the newly added space. If you are not running a VM, you need to replace your storage medium -(typically, this will be an SD card). You can use [backups](/hassio/haos_common_tasks/#home-assistant-os-backups) to quickly restore your Home Assistant +(typically, this will be an SD card). You can use [backups](/common-tasks/os#home-assistant-os-backups) to quickly restore your Home Assistant installation on a new storage medium. From 667a142b594f400714d0c37b512e485ec531f010 Mon Sep 17 00:00:00 2001 From: Piotr Kubiak Date: Mon, 15 Aug 2022 12:22:21 +0200 Subject: [PATCH 061/114] Better info how ignore_attributes works (#23750) Co-authored-by: Franck Nijhof --- source/_integrations/influxdb.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/influxdb.markdown b/source/_integrations/influxdb.markdown index 65c554f2ba5..2b6178fa625 100644 --- a/source/_integrations/influxdb.markdown +++ b/source/_integrations/influxdb.markdown @@ -168,7 +168,7 @@ tags_attributes: default: 0 ignore_attributes: type: [string, list] - description: The list of attribute names to ignore when reporting to InfluxDB. This can be used to filter out attributes that either don't change or don't matter to you in order to reduce the amount of data stored in InfluxDB. + description: The list of attribute names to ignore when reporting to InfluxDB. This can be used to filter out attributes that either don't change or don't matter to you in order to reduce the amount of data stored in InfluxDB. Please be aware of the underlying InfluxDB mechanism that converts non-string attributes to strings and adds a `_str` suffix to the attribute name in this case. It means that when you want to ignore, for example, the `icon_str` attribute that shows in your InfluxDB instance, you need to provide `icon` to `ignore_attributes`. required: false component_config: type: string From 8afcb0aa0494f002e9baf4749753a6aa78bc2ea4 Mon Sep 17 00:00:00 2001 From: Matthias de Baat Date: Mon, 15 Aug 2022 15:21:36 +0200 Subject: [PATCH 062/114] Update elevation description (#23773) --- source/_docs/configuration/basic.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/configuration/basic.markdown b/source/_docs/configuration/basic.markdown index 9222f1070fa..495d4a0f275 100644 --- a/source/_docs/configuration/basic.markdown +++ b/source/_docs/configuration/basic.markdown @@ -49,7 +49,7 @@ longitude: required: false type: float elevation: - description: Altitude above sea level in meters. Impacts weather/sunrise data. + description: Altitude above sea level in meters. Impacts sunrise data. required: false type: integer unit_system: From e551ed44596707eeb88fe4eafc4a0e2b7e972b68 Mon Sep 17 00:00:00 2001 From: Mike Degatano Date: Mon, 15 Aug 2022 12:24:45 -0400 Subject: [PATCH 063/114] Document unsupported reason `supervisor_version` (#23733) * Document unsupported reason `supervisor_version` * tiny tweak Co-authored-by: Franck Nijhof --- .../unsupported/supervisor_version.markdown | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 source/more-info/unsupported/supervisor_version.markdown diff --git a/source/more-info/unsupported/supervisor_version.markdown b/source/more-info/unsupported/supervisor_version.markdown new file mode 100644 index 00000000000..85a396b5546 --- /dev/null +++ b/source/more-info/unsupported/supervisor_version.markdown @@ -0,0 +1,21 @@ +--- +title: "Supervisor Version" +description: "More information on why supervisor_version marks the installation as unsupported." +--- + +## The issue + +Only the latest version of the supervisor is supported. Users may control when Supervisor +updates by disabling its default auto-update behavior and updating it manually. +But using any version of Supervisor besides the latest is not supported. + +## The solution + +Update Supervisor to the latest version by running the following command: +```bash +ha supervisor update +``` +Or re-enable auto update with this command: +```bash +ha supervisor options --auto-update +``` From 4655ce3d649ae0dea6c9d4869119e81b71a0d2c5 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 15 Aug 2022 07:55:21 -1000 Subject: [PATCH 064/114] Add August Bluetooth as a supported brand of Yale Access Bluetooth (#23732) Co-authored-by: Franck Nijhof --- source/_integrations/august_ble.markdown | 28 +++++++++++++++++++++ source/_integrations/yalexs_ble.markdown | 32 ++++++++++++++++-------- 2 files changed, 50 insertions(+), 10 deletions(-) create mode 100644 source/_integrations/august_ble.markdown diff --git a/source/_integrations/august_ble.markdown b/source/_integrations/august_ble.markdown new file mode 100644 index 00000000000..32be8196ffc --- /dev/null +++ b/source/_integrations/august_ble.markdown @@ -0,0 +1,28 @@ +--- +title: August Bluetooth +description: Instructions on how to integrate August Bluetooth locks into Home Assistant. +ha_category: + - Binary Sensor + - Lock + - Sensor +ha_bluetooth: true +ha_release: 2022.9 +ha_iot_class: Local Push +ha_codeowners: + - '@bdraco' +ha_domain: august_ble +ha_config_flow: true +ha_platforms: + - binary_sensor + - lock + - sensor +ha_integration_type: integration +ha_supporting_domain: yalexs_ble +ha_supporting_integration: Yale Access Bluetooth +--- + +Integrates [August](https://august.com/) locks over Bluetooth into Home Assistant. + +Following Assa Abloy, Yale's parent company, purchasing August in 2017, most newer devices use the Yale Access branding. + +{% include integrations/supported_brand.md %} \ No newline at end of file diff --git a/source/_integrations/yalexs_ble.markdown b/source/_integrations/yalexs_ble.markdown index 3f2d4a6fef7..90758a0391d 100644 --- a/source/_integrations/yalexs_ble.markdown +++ b/source/_integrations/yalexs_ble.markdown @@ -29,17 +29,20 @@ Devices must have a Yale Access module installed to function with this integrati ## Supported devices -- YRD216 -- YRL216 -- YRD226 -- YRL226 -- YRD256 +- YRD216 (Yale Assure Lock Keypad with Physical Key) +- YRL216 (Yale Assure Door Lever Lock with Push Button Keypad) +- YRD226 (Yale Assure Lock Touchscreen Deadbolt with Physical Key) +- YRL226 (Yale Assure Door Lever Lock Keypad) +- YRD256 (Yale Assure Lock Keypad) +- ASL-05 (August WiFi Smart Lock - Gen 4) +- ASL-03 (August Smart Lock Pro - Gen 3) +- ASL-02 (August Smart Lock Pro - Gen 2) ## Limited support devices These devices do not send updates, but can be locked and unlocked. -- Conexis L1 +- MD-04I (Yale Conexis L1) ## Push updates @@ -51,17 +54,26 @@ Alternatively, call the `homeassistant.update_entity` service to force the integ The lock must be calibrated in the Yale Access App for the door sensors to function correctly. If the door sensor has an unknown state or is not updating, try recalibrating the lock in the app. + ## Obtaining the offline key -The offline key and slot number are required to operate the lock. These credentials reside in the Yale Access app storage on iOS or Android devices with owner access to the lock. +The offline key and slot number are required to operate the lock. These credentials can be found in multiple places depending on the lock brand and model. -The Yale Access app will only save the offline key to your device's filesystem if AutoUnlock has been enabled and used at least once. +### Yale Access or August Cloud -### iOS +The [August](/integrations/august) integration will automatically provision the offline key if the configured account has the key loaded. You may need to create or use a non-primary existing account with owner-level access to the lock, as not all accounts will have the key loaded. + +Most Yale branded locks can use the August cloud to obtain the keys. Accessing the August cloud to receive the key may not work unless the lock was purchased in a market that sells under both brands. + +### iOS - Yale Access App or August App + +The iOS app will only save the offline key to your device's filesystem if Auto-Unlock has been enabled and used at least once. Auto-Unlock can be disabled once the key has been loaded. - Using [iMazing](https://imazing.com/) or [iPhone Backup Extractor](https://www.iphonebackupextractor.com/), find the backup files for the Yale Access app. - Look in the `Library/Preferences` `.plist` files for the Yale Access app and find the one with the value of `key` and `slot` using `Xcode` or any binary `plist` viewer. -### Android +### Android - Yale Access App or August App + +The Android app will only save the offline key to your device's filesystem if Auto-Unlock has been enabled and used at least once. Auto-Unlock can be disabled once the key has been loaded. Root access is required to read the `key` and `slot` stored in `/data/data/com.august.luna/shared_prefs/PeripheralInfoCache.xml` From a68ffe7b27d750e78f7826fa24fac8b06a7c67f6 Mon Sep 17 00:00:00 2001 From: Salim B Date: Mon, 15 Aug 2022 19:57:27 +0200 Subject: [PATCH 065/114] Mention unofficial Syncthing add-on (#23775) --- source/_includes/common-tasks/backups.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_includes/common-tasks/backups.md b/source/_includes/common-tasks/backups.md index c64dac9f99d..77eae32ab0b 100644 --- a/source/_includes/common-tasks/backups.md +++ b/source/_includes/common-tasks/backups.md @@ -1,6 +1,6 @@ ## Backups -Backup of your Home Assistant and add-on data and configuration. They are stored in a compressed archive file (.tar). Backups are made from the Supervisor Backups panel. There is also a service available that allows you to trigger the creation of a backup from an automation. Backups are stored in the /backup directory. +Backup of your Home Assistant and add-on data and configuration. They are stored in a compressed archive file (.tar). Backups are made from the Supervisor Backups panel. There is also a service available that allows you to trigger the creation of a backup from an automation. Backups are stored in the `/backup` directory. A full backup includes the following directories: @@ -58,3 +58,4 @@ You often need a backup in case your system has crashed. If you only store them - [Nextcloud Backup](https://github.com/Sebclem/hassio-nextcloud-backup) - [Samba backup](https://github.com/thomasmauerer/hassio-addons/tree/master/samba-backup) - [Remote Backup (scp/rsync/rclone)](https://github.com/ikifar2012/remote-backup-addon) +- [Syncthing](https://github.com/Poeschl/Hassio-Addons/tree/main/syncthing) From 622d04940bf3658cc341ed6bbacee456091a6dab Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 16 Aug 2022 01:11:04 +0000 Subject: [PATCH 066/114] 2022.8.5 --- _config.yml | 4 +- .../_posts/2022-08-03-release-20228.markdown | 65 +++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index eb9f3d96e6b..cc7fdeaf3da 100644 --- a/_config.yml +++ b/_config.yml @@ -107,8 +107,8 @@ social: # Home Assistant release details current_major_version: 2022 current_minor_version: 8 -current_patch_version: 4 -date_released: 2022-08-12 +current_patch_version: 5 +date_released: 2022-08-15 # 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-08-03-release-20228.markdown b/source/_posts/2022-08-03-release-20228.markdown index 5414b654d83..238e7338d6a 100644 --- a/source/_posts/2022-08-03-release-20228.markdown +++ b/source/_posts/2022-08-03-release-20228.markdown @@ -47,6 +47,7 @@ Enjoy the release! - [Release 2022.8.2 - August 7](#release-202282---august-7) - [Release 2022.8.3 - August 9](#release-202283---august-9) - [Release 2022.8.4 - August 12](#release-202284---august-12) +- [Release 2022.8.5 - August 15](#release-202285---august-15) - [Need help? Join the community!](#need-help-join-the-community) - [Breaking Changes](#breaking-changes) - [Farewell to the following](#farewell-to-the-following) @@ -505,6 +506,70 @@ The following integrations are now available via the Home Assistant UI: [xiaomi_ble docs]: /integrations/xiaomi_ble/ [zha docs]: /integrations/zha/ +## Release 2022.8.5 - August 15 + +- Update systembridgeconnector to 3.4.4 ([@timmo001] - [#75362]) ([system_bridge docs]) +- 🐛 Fix "The request content was malformed" error in home_connect ([@hansgoed] - [#76411]) ([home_connect docs]) +- Bump pySwitchbot to 0.18.5 ([@bdraco] - [#76640]) ([switchbot docs]) +- Bump pySwitchbot to 0.18.6 to fix disconnect race ([@bdraco] - [#76656]) ([switchbot docs]) +- Bump pySwitchbot to 0.18.10 to handle empty data and disconnects ([@bdraco] - [#76684]) ([switchbot docs]) +- Fix google calendar disabled entity handling ([@allenporter] - [#76699]) ([google docs]) +- Motion Blinds fix OperationNotAllowed ([@starkillerOG] - [#76712]) ([motion_blinds docs]) +- Update xknx to 1.0.0 🎉 ([@marvin-w] - [#76734]) ([knx docs]) +- Bump aiohomekit to 1.2.10 ([@bdraco] - [#76738]) ([homekit_controller docs]) +- Fix bad data with inkbird bbq sensors ([@bdraco] - [#76739]) ([inkbird docs]) +- Bump bimmer_connected to 0.10.2 ([@rikroe] - [#76751]) ([bmw_connected_drive docs]) +- Bump aiohue to 4.5.0 ([@marcelveldt] - [#76757]) ([hue docs]) +- Fix stale data with SensorPush sensors ([@bdraco] - [#76771]) ([sensorpush docs]) +- Bump homeconnect to 0.7.2 ([@BraveChicken1] - [#76773]) ([home_connect docs]) +- Bump aiohomekit to 1.2.11 ([@bdraco] - [#76784]) ([homekit_controller docs]) +- Fix bluetooth callback registration not surviving a reload ([@bdraco] - [#76817]) ([bluetooth docs]) +- Correct referenced entities and devices for event triggers ([@emontnemery] - [#76818]) ([automation docs]) +- Fix lifx homekit discoveries not being ignorable or updating the IP ([@bdraco] - [#76825]) ([lifx docs]) + +[#75362]: https://github.com/home-assistant/core/pull/75362 +[#76411]: https://github.com/home-assistant/core/pull/76411 +[#76640]: https://github.com/home-assistant/core/pull/76640 +[#76656]: https://github.com/home-assistant/core/pull/76656 +[#76684]: https://github.com/home-assistant/core/pull/76684 +[#76699]: https://github.com/home-assistant/core/pull/76699 +[#76712]: https://github.com/home-assistant/core/pull/76712 +[#76734]: https://github.com/home-assistant/core/pull/76734 +[#76738]: https://github.com/home-assistant/core/pull/76738 +[#76739]: https://github.com/home-assistant/core/pull/76739 +[#76751]: https://github.com/home-assistant/core/pull/76751 +[#76757]: https://github.com/home-assistant/core/pull/76757 +[#76771]: https://github.com/home-assistant/core/pull/76771 +[#76773]: https://github.com/home-assistant/core/pull/76773 +[#76784]: https://github.com/home-assistant/core/pull/76784 +[#76817]: https://github.com/home-assistant/core/pull/76817 +[#76818]: https://github.com/home-assistant/core/pull/76818 +[#76825]: https://github.com/home-assistant/core/pull/76825 +[@BraveChicken1]: https://github.com/BraveChicken1 +[@allenporter]: https://github.com/allenporter +[@bdraco]: https://github.com/bdraco +[@emontnemery]: https://github.com/emontnemery +[@hansgoed]: https://github.com/hansgoed +[@marcelveldt]: https://github.com/marcelveldt +[@marvin-w]: https://github.com/marvin-w +[@rikroe]: https://github.com/rikroe +[@starkillerOG]: https://github.com/starkillerOG +[@timmo001]: https://github.com/timmo001 +[automation docs]: /integrations/automation/ +[bluetooth docs]: /integrations/bluetooth/ +[bmw_connected_drive docs]: /integrations/bmw_connected_drive/ +[google docs]: /integrations/google/ +[home_connect docs]: /integrations/home_connect/ +[homekit_controller docs]: /integrations/homekit_controller/ +[hue docs]: /integrations/hue/ +[inkbird docs]: /integrations/inkbird/ +[knx docs]: /integrations/knx/ +[lifx docs]: /integrations/lifx/ +[motion_blinds docs]: /integrations/motion_blinds/ +[sensorpush docs]: /integrations/sensorpush/ +[switchbot docs]: /integrations/switchbot/ +[system_bridge docs]: /integrations/system_bridge/ + ## Need help? Join the community! Home Assistant has a great community of users who are all more than willing From 5380800a44541e213b9416127bda4b2236f1146c Mon Sep 17 00:00:00 2001 From: jonasrickert <46763066+jonasrickert@users.noreply.github.com> Date: Tue, 16 Aug 2022 11:54:40 +0200 Subject: [PATCH 067/114] Update documentation for 'fritzbox' to include covers. (#23694) --- source/_integrations/fritzbox.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_integrations/fritzbox.markdown b/source/_integrations/fritzbox.markdown index 7ef19c3413a..8a2a1372b4d 100644 --- a/source/_integrations/fritzbox.markdown +++ b/source/_integrations/fritzbox.markdown @@ -31,6 +31,7 @@ There is currently support for the following device types within Home Assistant: - Binary Sensor - Climate +- Cover - Light - Sensor - Switch @@ -47,6 +48,7 @@ There is currently support for the following device types within Home Assistant: - [FRITZ!DECT 500](https://en.avm.de/products/fritzdect/fritzdect-500/) - [Eurotronic Comet DECT](https://eurotronic.org/produkte/dect-ule-heizkoerperthermostat/comet-dect/) - [Magenta SmartHome LED E27](https://www.smarthome.de/geraete/smarthome-led-lampe-e27-farbig-weiss) +- [Rademacher RolloTron DECT 1213](https://www.rademacher.de/shop/rollladen-sonnenschutz/elektrischer-gurtwickler/rollotron-dect-1213) {% include integrations/config_flow.md %} @@ -108,3 +110,7 @@ To get AVM FRITZ!DECT lightbulbs (e.g., FRITZ!DECT 500) follow the [configuratio
The FRITZ!DECT 500 lightbulb supports only 36 colors. When a color is picked in home assistant that is not supported by the device, a color that comes close will be activated.
+ +## Cover + +To get AVM FRITZ!DECT compatible covers (e.g., Rademacher RolloTron DECT 1213) follow the [configuration instructions](#configuration) above. From 2029af32631d0b0ac4da3c777fd91574e970b22b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Aug 2022 12:30:04 +0200 Subject: [PATCH 068/114] Bump tzinfo-data from 1.2022.1 to 1.2022.2 (#23735) 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 cf2ae70065c..731f72539e8 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.1) + tzinfo-data (1.2022.2) tzinfo (>= 1.0.0) unicode-display_width (1.8.0) From b9e28ad81eee6f5de427ed9a6dc49ca7787b288a Mon Sep 17 00:00:00 2001 From: Romel Williams Date: Tue, 16 Aug 2022 08:23:52 -0400 Subject: [PATCH 069/114] Create configuration_yaml_by_omerome83.markdown (#23777) --- source/_examples/configuration_yaml_by_omerome83.markdown | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 source/_examples/configuration_yaml_by_omerome83.markdown diff --git a/source/_examples/configuration_yaml_by_omerome83.markdown b/source/_examples/configuration_yaml_by_omerome83.markdown new file mode 100644 index 00000000000..52cd0e3f482 --- /dev/null +++ b/source/_examples/configuration_yaml_by_omerome83.markdown @@ -0,0 +1,6 @@ +--- +title: "Configuration.yaml by omerome83" +description: "" +ha_category: Example configuration.yaml +ha_external_link: https://github.com/omerome83/homeassistant +--- From ce1161b7ffb496b560fefac616c6cd52d285a398 Mon Sep 17 00:00:00 2001 From: Aidan Timson Date: Tue, 16 Aug 2022 15:02:39 +0100 Subject: [PATCH 070/114] Add media source documentation to system bridge (#22951) --- source/_integrations/system_bridge.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_integrations/system_bridge.markdown b/source/_integrations/system_bridge.markdown index 01ddb200ca7..188ddb72ba1 100644 --- a/source/_integrations/system_bridge.markdown +++ b/source/_integrations/system_bridge.markdown @@ -80,6 +80,10 @@ These sensors are also available, but are not enabled by default: | GPU Power Usage | GPU power usage | | GPU Temperature | The current temperature of the GPU | +## Media Source + +This integration is available as a media source to use with the media browser integration. You can browse and view media from your system to media players such as your web browser and other supported media players. + ## Services ### Service `system_bridge.open_path` From 68abbb6e47c488b94c8c5e0b2a07d89ba0307fd7 Mon Sep 17 00:00:00 2001 From: Danny Tsang <567982+dannytsang@users.noreply.github.com> Date: Tue, 16 Aug 2022 15:12:14 +0100 Subject: [PATCH 071/114] Added examples where Switch as X can be used (#23605) Co-authored-by: Franck Nijhof --- source/_integrations/switch_as_x.markdown | 6 ++++++ .../switch_as_x/Entities_Properties.png | Bin 0 -> 18891 bytes 2 files changed, 6 insertions(+) create mode 100644 source/images/integrations/switch_as_x/Entities_Properties.png diff --git a/source/_integrations/switch_as_x.markdown b/source/_integrations/switch_as_x.markdown index 34bb0176546..93d05b9ccf7 100644 --- a/source/_integrations/switch_as_x.markdown +++ b/source/_integrations/switch_as_x.markdown @@ -43,3 +43,9 @@ Switch entity: Type: description: The type of entity you want the switch to become. {% endconfiguration_basic %} + +## Switch as X from the existing entity + +Where compatible, Switch as X will appear on entity properties. A list of entities can be found in {% my entities title="Settings -> Devices & Services -> Entities" %}. + +![Entity properties exampl](/images/integrations/switch_as_x/Entities_Properties.png) \ No newline at end of file diff --git a/source/images/integrations/switch_as_x/Entities_Properties.png b/source/images/integrations/switch_as_x/Entities_Properties.png new file mode 100644 index 0000000000000000000000000000000000000000..268fe89c5e661d3884a51127867bafb2b5a8fba4 GIT binary patch literal 18891 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

lZ9PmLwFaI_?~;d)cB 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 J5I1`F-vIO9$F=|f literal 0 HcmV?d00001 From 66eaae7f2be8dbd25deed6d7a25efddeb5431e7c Mon Sep 17 00:00:00 2001 From: Igor Pakhomov Date: Tue, 16 Aug 2022 18:31:53 +0300 Subject: [PATCH 072/114] Add select entities for dmaker.airfresh.t2017 to xiaomi_miio (#21870) --- source/_integrations/xiaomi_miio.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_integrations/xiaomi_miio.markdown b/source/_integrations/xiaomi_miio.markdown index d0700727643..0740c42122b 100644 --- a/source/_integrations/xiaomi_miio.markdown +++ b/source/_integrations/xiaomi_miio.markdown @@ -629,6 +629,13 @@ Button | Description Reset Dust Filter | Resets filter lifetime and usage of the dust filter Reset Upper Filter | Resets filter lifetime and usage of the upper filter +- Select entities + +Select | Description +----------------------- | ----------------------- +Auxiliary Heat Level | Controls the level of the heater (Low, Medium, High) +Display Orientation | Controls the orientation of the display (Forward, Left, Right) + - Sensor entities Sensor | Description From 77fe1e1b4990af25a35da5ba92fd3f278ca995f7 Mon Sep 17 00:00:00 2001 From: Chris Hammond Date: Tue, 16 Aug 2022 12:18:57 -0500 Subject: [PATCH 073/114] Update insteon.markdown (#23786) Co-authored-by: Franck Nijhof --- source/_integrations/insteon.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/insteon.markdown b/source/_integrations/insteon.markdown index 20e1056e4ab..9b8ca83dffd 100644 --- a/source/_integrations/insteon.markdown +++ b/source/_integrations/insteon.markdown @@ -27,7 +27,7 @@ ha_integration_type: integration ha_dhcp: true --- -

The Insteon company has shut down and turned off their cloud as of April 2022.

+

The Insteon company has shut down and turned off its cloud as of April 2022. Recently the service has been restarted but as a paid offering. Time will tell how successful this new model will be.

This integration adds support for integrating your INSTEON network with Home Assistant. It is known to work with the [2413U] USB and [2412S] RS242 flavors of PLM and the [2448A7] USB stick. It has also been tested to work with the [2242] and [2245] Hubs. Device support is provided by the underlying [pyinsteon] package. From bcb0876237ef07e6cb8dad811d78c5cabbfb1ca6 Mon Sep 17 00:00:00 2001 From: Charles Garwood Date: Tue, 16 Aug 2022 14:10:01 -0400 Subject: [PATCH 074/114] Add Fully Kiosk Browser integration docs (#23762) --- source/_integrations/fully_kiosk.markdown | 30 +++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 source/_integrations/fully_kiosk.markdown diff --git a/source/_integrations/fully_kiosk.markdown b/source/_integrations/fully_kiosk.markdown new file mode 100644 index 00000000000..7182d917c6f --- /dev/null +++ b/source/_integrations/fully_kiosk.markdown @@ -0,0 +1,30 @@ +--- +title: Fully Kiosk Browser +description: Instructions on how to integrate Fully Kiosk Browser with Home Assistant +ha_category: + - Binary Sensor +ha_release: 2022.9 +ha_iot_class: Local Polling +ha_config_flow: true +ha_codeowners: + - '@cgarwood' +ha_domain: fully_kiosk +ha_platforms: + - binary_sensor +ha_integration_type: integration +--- + +[Fully Kiosk Browser](https://www.fully-kiosk.com) is a powerful kiosk browser for Android devices. It provides a number of features for monitoring and controlling your Android device. This integration gives you access to view the status of your device in Home Assistant. + +There is currently support for the following information: + +- Device plugged in +- Kiosk mode enabled/disabled + +## Requirements + +This integration requires the Fully Remote Admin feature to be enabled in the Fully Kiosk Browser app. This feature requires the paid Fully Plus license. You can test it out for free, but Fully Kiosk Browser will display a watermark on your device. + +You will need the IP address of your device, and the Fully Remote Admin password you set in the Fully Kiosk Browser app. + +{% include integrations/config_flow.md %} \ No newline at end of file From e79d390ad64227c904409ac649d12ede6fe927ce Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 16 Aug 2022 20:24:02 +0200 Subject: [PATCH 075/114] Fix helper title of Switch as X in manual steps (#23785) --- source/_integrations/switch_as_x.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/switch_as_x.markdown b/source/_integrations/switch_as_x.markdown index 93d05b9ccf7..6ecd21459a2 100644 --- a/source/_integrations/switch_as_x.markdown +++ b/source/_integrations/switch_as_x.markdown @@ -36,7 +36,7 @@ things like locks or garage doors. Using the Switch as X integration, you can convert those switches into the entity types that best matches your use case. -{% include integrations/config_flow.md %} +{% include integrations/config_flow.md name="Change device type of a switch" %} {% configuration_basic %} Switch entity: description: The switch entity you want to convert into something else. From 8f1073dab19998ee49c73963c48a92f14cb804d5 Mon Sep 17 00:00:00 2001 From: Charles Garwood Date: Tue, 16 Aug 2022 18:20:39 -0400 Subject: [PATCH 076/114] Add fully_kiosk sensor docs (#23789) --- source/_integrations/fully_kiosk.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_integrations/fully_kiosk.markdown b/source/_integrations/fully_kiosk.markdown index 7182d917c6f..a6861f67032 100644 --- a/source/_integrations/fully_kiosk.markdown +++ b/source/_integrations/fully_kiosk.markdown @@ -3,6 +3,7 @@ title: Fully Kiosk Browser description: Instructions on how to integrate Fully Kiosk Browser with Home Assistant ha_category: - Binary Sensor + - Sensor ha_release: 2022.9 ha_iot_class: Local Polling ha_config_flow: true @@ -11,6 +12,7 @@ ha_codeowners: ha_domain: fully_kiosk ha_platforms: - binary_sensor + - sensor ha_integration_type: integration --- @@ -20,6 +22,11 @@ There is currently support for the following information: - Device plugged in - Kiosk mode enabled/disabled +- Battery level +- Current page +- Current foreground app +- Device storage space available +- Device RAM available ## Requirements From 16d60ee5c346337e4078fbfd017eef2f95a58359 Mon Sep 17 00:00:00 2001 From: Charles Garwood Date: Wed, 17 Aug 2022 02:37:02 -0400 Subject: [PATCH 077/114] Update Fully Kiosk docs to include button platform (#23790) --- source/_integrations/fully_kiosk.markdown | 27 ++++++++++++++++------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/source/_integrations/fully_kiosk.markdown b/source/_integrations/fully_kiosk.markdown index a6861f67032..602b985cb3a 100644 --- a/source/_integrations/fully_kiosk.markdown +++ b/source/_integrations/fully_kiosk.markdown @@ -12,13 +12,24 @@ ha_codeowners: ha_domain: fully_kiosk ha_platforms: - binary_sensor + - button - sensor ha_integration_type: integration --- -[Fully Kiosk Browser](https://www.fully-kiosk.com) is a powerful kiosk browser for Android devices. It provides a number of features for monitoring and controlling your Android device. This integration gives you access to view the status of your device in Home Assistant. +[Fully Kiosk Browser](https://www.fully-kiosk.com) is a powerful kiosk browser for Android devices. It provides a number of features for monitoring and controlling your Android device. This integration gives you access to control your device and view the status in Home Assistant. -There is currently support for the following information: +## Requirements + +This integration requires the Fully Remote Admin feature to be enabled in the Fully Kiosk Browser app. This feature requires the paid Fully Plus license. You can test it out for free, but Fully Kiosk Browser will display a watermark on your device. + +You will need the IP address of your device, and the Fully Remote Admin password you set in the Fully Kiosk Browser app. + +{% include integrations/config_flow.md %} + +## Capabilities + +The following is available as sensors: - Device plugged in - Kiosk mode enabled/disabled @@ -28,10 +39,10 @@ There is currently support for the following information: - Device storage space available - Device RAM available -## Requirements +The following controls are available: -This integration requires the Fully Remote Admin feature to be enabled in the Fully Kiosk Browser app. This feature requires the paid Fully Plus license. You can test it out for free, but Fully Kiosk Browser will display a watermark on your device. - -You will need the IP address of your device, and the Fully Remote Admin password you set in the Fully Kiosk Browser app. - -{% include integrations/config_flow.md %} \ No newline at end of file +- Bring Fully Kiosk to the foreground +- Send Fully Kiosk to the background +- Load the start URL +- Restart the Fully Kiosk Browser app +- Reboot your device (requires root) \ No newline at end of file From 1fc6b369f9cba74b062023cf7ad3f2832b480cc3 Mon Sep 17 00:00:00 2001 From: Aidan Timson Date: Wed, 17 Aug 2022 08:00:39 +0100 Subject: [PATCH 078/114] Fix typo in System Bridge docs (#23781) --- source/_integrations/system_bridge.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/system_bridge.markdown b/source/_integrations/system_bridge.markdown index 01ddb200ca7..cf5dd415651 100644 --- a/source/_integrations/system_bridge.markdown +++ b/source/_integrations/system_bridge.markdown @@ -18,7 +18,7 @@ ha_zeroconf: true ha_integration_type: integration --- -[System Bridge](https://system-bridge.timmo.dev) is an application that runs on your local machine to share system information via its API/WebSocket. You can also send commands to be to the device such as opening a URL or sending keyboard keypresses. +[System Bridge](https://system-bridge.timmo.dev) is an application that runs on your local machine to share system information via its API/WebSocket. You can also send commands to the device such as opening a URL or sending keyboard keypresses. ## Prerequisites From 4b4545d7e2065bed5965f2f01561cf7a8962423d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Aug 2022 09:01:09 +0200 Subject: [PATCH 079/114] Bump tzinfo-data from 1.2022.2 to 1.2022.3 (#23791) 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 731f72539e8..0591b536301 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.2) + tzinfo-data (1.2022.3) tzinfo (>= 1.0.0) unicode-display_width (1.8.0) From 3f837ec4d74bb25dd5c6b85b280be9ac962908a4 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Wed, 17 Aug 2022 14:08:38 +0200 Subject: [PATCH 080/114] Document color_mode white support for MQTT JSON light (#23792) --- source/_integrations/light.mqtt.markdown | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown index 9647dc3985b..4a6f2e19c95 100644 --- a/source/_integrations/light.mqtt.markdown +++ b/source/_integrations/light.mqtt.markdown @@ -720,13 +720,18 @@ state_topic: required: false type: string supported_color_modes: - description: A list of color modes supported by the list. This is required if `color_mode` is `True`. Possible color modes are `onoff`, `brightness`, `color_temp`, `hs`, `xy`, `rgb`, `rgbw`, `rgbww`. + description: A list of color modes supported by the list. This is required if `color_mode` is `True`. Possible color modes are `onoff`, `brightness`, `color_temp`, `hs`, `xy`, `rgb`, `rgbw`, `rgbww`, `white`. required: false type: list unique_id: description: An ID that uniquely identifies this light. If two lights have the same unique ID, Home Assistant will raise an exception. required: false type: string +white_scale: + description: "Defines the maximum white level (i.e., 100%) of the MQTT device. This is used when setting the light to white mode." + required: false + type: integer + default: 255 {% endconfiguration %}
From e9acd449515fd663358f8a5261966e1969717e3b Mon Sep 17 00:00:00 2001 From: Charles Garwood Date: Wed, 17 Aug 2022 10:30:26 -0400 Subject: [PATCH 081/114] Add docs for fully_kiosk switch platform (#23794) --- source/_integrations/fully_kiosk.markdown | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/_integrations/fully_kiosk.markdown b/source/_integrations/fully_kiosk.markdown index 602b985cb3a..2a30adab651 100644 --- a/source/_integrations/fully_kiosk.markdown +++ b/source/_integrations/fully_kiosk.markdown @@ -4,6 +4,7 @@ description: Instructions on how to integrate Fully Kiosk Browser with Home Assi ha_category: - Binary Sensor - Sensor + - Switch ha_release: 2022.9 ha_iot_class: Local Polling ha_config_flow: true @@ -14,6 +15,7 @@ ha_platforms: - binary_sensor - button - sensor + - switch ha_integration_type: integration --- @@ -45,4 +47,8 @@ The following controls are available: - Send Fully Kiosk to the background - Load the start URL - Restart the Fully Kiosk Browser app -- Reboot your device (requires root) \ No newline at end of file +- Reboot your device (requires root) +- Screensaver on/off +- Maintenance mode on/off +- Lock/unlock kiosk mode +- Motion detection on/off From 1b8bf9214d3519d13e87983db229a86c9184d09e Mon Sep 17 00:00:00 2001 From: Danny Tsang <567982+dannytsang@users.noreply.github.com> Date: Wed, 17 Aug 2022 21:53:55 +0100 Subject: [PATCH 082/114] Added link to the zones integration page (#23799) --- source/getting-started/presence-detection.markdown | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/source/getting-started/presence-detection.markdown b/source/getting-started/presence-detection.markdown index 24fa32cd509..bdce49f23cf 100644 --- a/source/getting-started/presence-detection.markdown +++ b/source/getting-started/presence-detection.markdown @@ -8,10 +8,7 @@ Presence detection detects if people are home, which is the most valuable input - Send me a notification when my child arrives at school - Turn on the AC when I leave work -

- -Screenshot of Home Assistant showing a school, work and home zone and two people. -

+![Screenshot of Home Assistant showing a school, work and home zone and two people.](/images/screenshots/map.png) ### Adding presence detection @@ -23,10 +20,9 @@ During the setup of Home Assistant Companion on your mobile device, the app will ### Zones +![Map with zones](/images/screenshots/badges-zone.png) - - -Zones allow you to name areas on a map. These areas can then be used to name the location a tracked user is, or use entering/leaving a zone as an automation [trigger] or [condition]. Zones can be set up from configuration screen. +Zones allow you to name areas on a map. These areas can then be used to name the location a tracked user is, or use entering/leaving a zone as an automation [trigger] or [condition]. See [Zones integration](/integrations/zone/) page for more details like creating zones.
The map view will hide all devices that are home. From ec613b86a314a71b2d49f0181e146e406486bea9 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 17 Aug 2022 21:42:59 -1000 Subject: [PATCH 083/114] Add support for Govee H5071 (#23787) --- source/_integrations/govee_ble.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/govee_ble.markdown b/source/_integrations/govee_ble.markdown index 54afa79da51..2fbf1f5bd49 100644 --- a/source/_integrations/govee_ble.markdown +++ b/source/_integrations/govee_ble.markdown @@ -23,6 +23,7 @@ The Govee BLE integration will automatically discover devices once the [Bluetoot ## Supported devices +- H5071 Hygrometer Thermometer - H5072 Hygrometer Thermometer - H5074 Hygrometer Thermometer - [H5075 Bluetooth Hygrometer Thermometer](https://us.govee.com/collections/thermo-hydrometer/products/govee-bluetooth-hygrometer-thermometer-h5075) From df86bd44836c3c2456c3c16291feb747ef5c0cbf Mon Sep 17 00:00:00 2001 From: Zach Berger Date: Thu, 18 Aug 2022 01:20:03 -0700 Subject: [PATCH 084/114] Add information about Awair Local API (#23588) Co-authored-by: Franck Nijhof --- source/_integrations/awair.markdown | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/source/_integrations/awair.markdown b/source/_integrations/awair.markdown index 04acc610377..b3245844fdd 100644 --- a/source/_integrations/awair.markdown +++ b/source/_integrations/awair.markdown @@ -5,7 +5,7 @@ ha_category: - Health ha_config_flow: true ha_release: 0.84 -ha_iot_class: Cloud Polling +ha_iot_class: Local Polling ha_codeowners: - '@ahayworth' - '@danielsjf' @@ -17,13 +17,23 @@ ha_integration_type: integration The Awair integration will fetch data from your [Awair devices](https://getawair.com). -You will need to request access to the Awair API and obtain an access token from the Awair [Developer Console](https://developer.getawair.com/). It is free, but getting a token can take up to 24 hours. +## Prerequisites + +### Connect locally (preferred) + +When connecting locally, the integration will poll the device every 30 seconds. Awair provides a [list of devices](https://support.getawair.com/hc/en-us/articles/360049221014-Awair-Element-Local-API-Feature#h_01F40FB3ETMR4TZKPVXJNE86HQ) that support the Local API. This API must be enabled via the Awair app via [these steps](https://support.getawair.com/hc/en-us/articles/360049221014-Awair-Element-Local-API-Feature#h_01F40FBBW5323GBPV7D6XMG4J8). If you add new Awair devices to your home, you must follow these steps again. + +### Connect via the cloud + +When connecting via the cloud, data is summarized over 5-minute intervals. All devices are supported. You will need to request access to the Awair API and obtain an access token from the Awair [Developer Console](https://developer.getawair.com/). It is free, but getting a token can take up to 24 hours. + +This integration refreshes once every 5 minutes, based on the [default per-device quota](https://docs.developer.getawair.com/?version=latest#tiers--quotas) of 300 API calls per day. {% include integrations/config_flow.md %} ## Available Sensors -The integration will fetch data from each device linked to your Awair developer account. The following sensors are supported: +The integration will fetch data from each device. The following sensors are supported: * Temperature * Humidity @@ -35,5 +45,3 @@ The integration will fetch data from each device linked to your Awair developer * Luminescence Not all devices support all sensors; consult Awair's documentation to find out what sensors are present on your device. For first-generation Awair devices with a "dust" sensor, the integration will create identical PM2.5 and PM10 sensors (which reflects the capabilities of the sensor - it can detect dust between PM2.5 and PM10 but cannot differentiate between them). - -This integration refreshes once every 5 minutes, based on the [default per-device quota](https://docs.developer.getawair.com/?version=latest#tiers--quotas) of 300 API calls per day. From f8b855ec156cb9675ae1afda8a03b0f5223a4d18 Mon Sep 17 00:00:00 2001 From: Charles Garwood Date: Thu, 18 Aug 2022 04:51:39 -0400 Subject: [PATCH 085/114] Add docs for fully_kiosk number platform (#23801) --- source/_integrations/fully_kiosk.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_integrations/fully_kiosk.markdown b/source/_integrations/fully_kiosk.markdown index 2a30adab651..d4795c57903 100644 --- a/source/_integrations/fully_kiosk.markdown +++ b/source/_integrations/fully_kiosk.markdown @@ -52,3 +52,7 @@ The following controls are available: - Maintenance mode on/off - Lock/unlock kiosk mode - Motion detection on/off +- Screensaver timer +- Screen off timer +- Screen brightness +- Screensaver brightness \ No newline at end of file From 03f5452ac87ccc50b74cd4e44e8deb3337b7e41f Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 18 Aug 2022 11:01:06 +0200 Subject: [PATCH 086/114] Update LaMetric documentation for refactor (#23800) Co-authored-by: Martin Hjelmare --- source/_integrations/lametric.markdown | 213 ++++++++++++++----------- 1 file changed, 120 insertions(+), 93 deletions(-) diff --git a/source/_integrations/lametric.markdown b/source/_integrations/lametric.markdown index 38f52fdfdb8..93d6f734427 100644 --- a/source/_integrations/lametric.markdown +++ b/source/_integrations/lametric.markdown @@ -1,10 +1,9 @@ --- title: LaMetric -description: Instructions on how to integrate LaMetric with Home Assistant. +description: Instructions on how to integrate LaMetric TIME with Home Assistant. ha_category: - - Hub - Notifications -ha_iot_class: Cloud Push +ha_iot_class: Local Push ha_release: 0.49 ha_codeowners: - '@robbiet480' @@ -13,138 +12,166 @@ ha_domain: lametric ha_platforms: - notify ha_integration_type: integration +ha_config_flow: true +ha_ssdp: true --- -[LaMetric Time](https://lametric.com/) is a smart clock that can be used to access applications, listen to web radio and display notifications. +[LaMetric TIME](https://lametric.com/) is a smart clock that can be used to access applications, listen to web radio and display notifications. -There is currently support for the following device types within Home Assistant: - -- [Notify](#notifications) - -The LaMetric Time can only be accessed by authorized applications. Therefore, each application that wants to access the LaMetric time needs to be registered at the LaMetric Developer web page. Sign Up and login to the developer web page. Click the Create button in the upper right corner, then select Notification App and click Create again. Enter an app name, a description and a redirect URL. Finally, click Save to create the application. For the newly created app you will obtain a client id and a client secret that is required in the following configuration. - -```yaml -# configuration.yaml example -lametric: - client_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx - client_secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -``` - -## Setup Steps - -LaMetric needs an OAuth2 `client_id` and `client_secret` from the LaMetric developer portal to use it with Home Assistant. -These are the steps to take: - -1. Log in with your LaMetric device account to [developer.lametric.com](https://developer.lametric.com). -2. Hit the Create button and choose [Notification](https://developer.lametric.com/applications/createsource). -3. Fill in the form. You can put almost anything in the fields, they just need to be populated: - * App Name: Home Assistant - * Description: Home Assistant - * Privacy Policy: `http://localhost/` - * Check all permission boxes - * Hit Save -4. You should be directed to your [Notification Apps list](https://developer.lametric.com/applications/sources), click on "Home Assistant", copy your client ID and client Secret and paste into the Home Assistant configuration block in the previous section. -5. Set up some notifications in Home Assistant by following the instructions on the [Lametric Notify](/integrations/lametric) page. -6. Save all configuration files and restart Home Assistant. +{% include integrations/config_flow.md %} ## Notifications -The `lametric` notification platform allows to send notification to a LaMetric device. It needs the LaMetric platform to be configured first. +You can send notifications to your LaMetric device using +the [Notifications](/integrations/notify) integration. -To enable LaMetric notifications in your installation, add the following to your `configuration.yaml` file: +Each LaMetric device added to your Home Assistant will have its own +`notify.` service. The service name matches the name of your device +as shown in your LaMetric account. For example, if you have a device +called "My LaMetric", the service would become `notify.my_lametric`. -```yaml -# Example configuration.yaml entry -notify: - name: NOTIFIER_NAME - platform: lametric -``` +The notification service call against an LaMetric device can take the +following, additional, optional parameters: {% configuration %} -name: - description: "The optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`." - required: false - type: string - default: notify -lifetime: - description: Defines how long the message remains in LaMetric notification queue (in seconds). - required: false - type: integer - default: 10 icon: - description: An icon or animation. List of all icons available at [https://developer.lametric.com/icons](https://developer.lametric.com/icons). Note that icons always begin with "i" while animations begin with "a". This is part of the name, you can't just use the number! + description: "An icon or animation. List of all icons available at [https://developer.lametric.com/icons](https://developer.lametric.com/icons)." required: false type: string cycles: - description: Defines how long the notification will be displayed. Set to 0 to require manual dismissal + description: "Defines how long the notification will be displayed. Set to `0` to require manual dismissal." required: false type: integer default: 1 priority: - description: Defines the priority of the notification. Allowed values are info, warning, and critical + description: "Defines the priority of the notification. Allowed values are `info`, `warning`, and `critical`." required: false type: string default: warning icon_type: - description: Defines the nature of notification. Allowed values are none, info, and alert + description: "Defines the nature of notification. Allowed values are `none`, `info`, and `alert`." required: false type: string - default: info + default: none +sound: + description: "Defines the sound of the notification. Allowed are listed [below](#list-of-notification-sounds)." + required: false + type: string + default: none {% endconfiguration %} +## Example -## Examples - -### Full configuration example - -```yaml -# Example configuration.yaml entry -notify: - name: NOTIFIER_NAME - platform: lametric - lifetime: 20 - icon: a7956 - cycles: 3 - priority: info - icon_type: none -``` - -### Changing sounds and icons - -To add a notification sound, icon, cycles, or priority override, it has to be done via service data. +To add a notification sound, icon, cycles, or priority override, ```yaml - alias: "Send notification on arrival at school" trigger: platform: state - entity_id: device_tracker.son_mobile + entity_id: device_tracker.tom_mobile from: "not_home" to: "school" action: - service: notify.lametric + service: notify.my_lametric data: - message: "Son has arrived at school!" + message: "Tom has arrived at school!" data: sound: "notification" - icon: "i51" + icon: "51" cycles: 0 priority: "critical" - icon_type: "none" + icon_type: "info" ``` -### Only notify specific device +## List of notification sounds -If you have more than one La Metric device, you can specify which will receive the message by adding `target:` to the service data: +The following notification sounds can be used with the `sound` parameter on +notify service calls: -```yaml - action: - service: notify.lametric - data: - message: "Son has arrived at school!" - target: "Office LaMetric" - data: - sound: "notification" - icon: "i51" - ``` +- `alarm1` +- `alarm10` +- `alarm11` +- `alarm12` +- `alarm13` +- `alarm2` +- `alarm3` +- `alarm4` +- `alarm5` +- `alarm6` +- `alarm7` +- `alarm8` +- `alarm9` +- `bicycle` +- `car` +- `cash` +- `cat` +- `dog` +- `dog2` +- `energy` +- `knock-knock` +- `letter_email` +- `lose1` +- `lose2` +- `negative1` +- `negative2` +- `negative3` +- `negative4` +- `negative5` +- `notification` +- `notification2` +- `notification3` +- `notification4` +- `open_door` +- `positive1` +- `positive2` +- `positive3` +- `positive4` +- `positive5` +- `positive6` +- `statistic` +- `thunder` +- `water1` +- `water2` +- `win` +- `win2` +- `wind_short` +- `wind` - If target is not specified, all LaMetric devices will be notified. +## Manual automatic import configuration + +If you prefer not to use the Home Assistant account linking service, you +can set up the LaMetric application manually. + +However, please note! At this point, it is easier to choose the "Enter manually" +option during the integration setup; this also avoids the use of the account +linking service and doesn't need all the steps below either. + +If you still want to set up your own LaMetric application for importing +your LaMetric devices, use the following steps: + +1. Log in with your LaMetric device account to [developer.lametric.com](https://developer.lametric.com). +2. Click the Create button and choose [Notification](https://developer.lametric.com/applications/createsource) app. +3. Fill in the form. You can put almost anything in the fields, they just need to be populated: + * App Name: Home Assistant + * Description: Home Assistant + * Redirect URI: `https://my.home-assistant.io/redirect/oauth` + * Privacy Policy: `http://localhost/` + * Check the "basic" and "read_devices" permission boxes + * Click Save +4. You should be directed to your [Notification Apps list](https://developer.lametric.com/applications/sources), + click on "Home Assistant", copy your client ID and Client Secret. + +You may then add the credentials to [Application Credentials](/integrations/application_credentials/) and then setup the integration. + +{% details "I have manually disabled My Home Assistant" %} + +If you don't have [My Home Assistant](/integrations/my) on your installation, +you can use `/auth/external/callback` as the redirect URI +instead. + +The `` must be the same as used during the configuration/ +authentication process. + +Internal examples: `http://192.168.0.2:8123/auth/external/callback`, `http://homeassistant.local:8123/auth/external/callback`." + +{% enddetails %} From 7d9ade567a668a9cc08f442fe7b82bd82ce80672 Mon Sep 17 00:00:00 2001 From: Charles Garwood Date: Thu, 18 Aug 2022 07:34:03 -0400 Subject: [PATCH 087/114] Update Fully Kiosk docs for Screen Off switch (#23806) --- source/_integrations/fully_kiosk.markdown | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/_integrations/fully_kiosk.markdown b/source/_integrations/fully_kiosk.markdown index d4795c57903..565433ecf30 100644 --- a/source/_integrations/fully_kiosk.markdown +++ b/source/_integrations/fully_kiosk.markdown @@ -48,11 +48,12 @@ The following controls are available: - Load the start URL - Restart the Fully Kiosk Browser app - Reboot your device (requires root) -- Screensaver on/off - Maintenance mode on/off - Lock/unlock kiosk mode - Motion detection on/off +- Screensaver on/off - Screensaver timer +- Screensaver brightness +- Screen on/off - Screen off timer -- Screen brightness -- Screensaver brightness \ No newline at end of file +- Screen brightness \ No newline at end of file From 6d100e9c83f2e8eacd0ad7e110f14fdb321d6dd3 Mon Sep 17 00:00:00 2001 From: Rami Mosleh Date: Thu, 18 Aug 2022 15:08:08 +0300 Subject: [PATCH 088/114] Add Moonsighting method to `islamic_prayer_times` (#23718) --- source/_integrations/islamic_prayer_times.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/islamic_prayer_times.markdown b/source/_integrations/islamic_prayer_times.markdown index e1959e2f826..752d845dd8d 100644 --- a/source/_integrations/islamic_prayer_times.markdown +++ b/source/_integrations/islamic_prayer_times.markdown @@ -22,6 +22,7 @@ This platform calculates prayer times using the following calculation methods: - Islamic Society of North America - Muslim World League - Umm Al-Qura University in Makkah +- Moonsighting {% include integrations/config_flow.md %} From a327ac21dbd650ee58a9df3615d8de4e0cb3e1ed Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 18 Aug 2022 12:09:54 +0000 Subject: [PATCH 089/114] 2022.8.6 --- _config.yml | 4 +-- .../_posts/2022-08-03-release-20228.markdown | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index cc7fdeaf3da..45628e235ee 100644 --- a/_config.yml +++ b/_config.yml @@ -107,8 +107,8 @@ social: # Home Assistant release details current_major_version: 2022 current_minor_version: 8 -current_patch_version: 5 -date_released: 2022-08-15 +current_patch_version: 6 +date_released: 2022-08-18 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/source/_posts/2022-08-03-release-20228.markdown b/source/_posts/2022-08-03-release-20228.markdown index 238e7338d6a..dadb5fd244a 100644 --- a/source/_posts/2022-08-03-release-20228.markdown +++ b/source/_posts/2022-08-03-release-20228.markdown @@ -48,6 +48,7 @@ Enjoy the release! - [Release 2022.8.3 - August 9](#release-202283---august-9) - [Release 2022.8.4 - August 12](#release-202284---august-12) - [Release 2022.8.5 - August 15](#release-202285---august-15) +- [Release 2022.8.6 - August 17](#release-202286---august-17) - [Need help? Join the community!](#need-help-join-the-community) - [Breaking Changes](#breaking-changes) - [Farewell to the following](#farewell-to-the-following) @@ -570,6 +571,41 @@ The following integrations are now available via the Home Assistant UI: [switchbot docs]: /integrations/switchbot/ [system_bridge docs]: /integrations/system_bridge/ +## Release 2022.8.6 - August 17 + +- Fix displayed units for BMW Connected Drive ([@rikroe] - [#76613]) ([bmw_connected_drive docs]) +- Fix Overkiz startup order to prevent unnamed device showing up ([@iMicknl] - [#76695]) ([overkiz docs]) +- Bump pynetgear to 0.10.7 ([@starkillerOG] - [#76754]) ([netgear docs]) +- Correct restoring of mobile_app sensors ([@emontnemery] - [#76886]) ([mobile_app docs]) +- Fix acmeda set cover tilt position ([@epenet] - [#76927]) ([acmeda docs]) +- Fix race in notify setup ([@bdraco] - [#76954]) ([notify docs]) +- Pass the real config for Discord ([@tkdrob] - [#76959]) ([discord docs]) +- Pass the real config for Slack ([@tkdrob] - [#76960]) ([slack docs]) + +[#76613]: https://github.com/home-assistant/core/pull/76613 +[#76695]: https://github.com/home-assistant/core/pull/76695 +[#76754]: https://github.com/home-assistant/core/pull/76754 +[#76886]: https://github.com/home-assistant/core/pull/76886 +[#76927]: https://github.com/home-assistant/core/pull/76927 +[#76954]: https://github.com/home-assistant/core/pull/76954 +[#76959]: https://github.com/home-assistant/core/pull/76959 +[#76960]: https://github.com/home-assistant/core/pull/76960 +[@bdraco]: https://github.com/bdraco +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@iMicknl]: https://github.com/iMicknl +[@rikroe]: https://github.com/rikroe +[@starkillerOG]: https://github.com/starkillerOG +[@tkdrob]: https://github.com/tkdrob +[acmeda docs]: /integrations/acmeda/ +[bmw_connected_drive docs]: /integrations/bmw_connected_drive/ +[discord docs]: /integrations/discord/ +[mobile_app docs]: /integrations/mobile_app/ +[netgear docs]: /integrations/netgear/ +[notify docs]: /integrations/notify/ +[overkiz docs]: /integrations/overkiz/ +[slack docs]: /integrations/slack/ + ## Need help? Join the community! Home Assistant has a great community of users who are all more than willing From 8c573a344fd4638909a014892c7556b32233e231 Mon Sep 17 00:00:00 2001 From: Salim B Date: Thu, 18 Aug 2022 14:22:10 +0200 Subject: [PATCH 090/114] Update instructions (#23776) Co-authored-by: Franck Nijhof --- source/getting-started/configuration.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/getting-started/configuration.markdown b/source/getting-started/configuration.markdown index 74f504df4b6..3043e234b6b 100644 --- a/source/getting-started/configuration.markdown +++ b/source/getting-started/configuration.markdown @@ -41,8 +41,8 @@ Now let's make a change using the file editor: we are going to change the name,
- Click the save icon in the top right to commit changes. - - Most changes in `configuration.yaml` require Home Assistant to be restarted to see the changes. You can verify that your changes are acceptable by running a configuration check. Do this by clicking on Configuration in the sidebar, click on `Developer-Tools -> YAML` and click on the **Check configuration** button. When it's valid, it will show the text "Configuration valid!". In order for the **Check Configuration**" button to be visible, you must enable "Advanced Mode" on your user profile. - - Now Restart Home Assistant using the **Restart** button in the Server management section on the same page. + - Most changes in `configuration.yaml` require Home Assistant to be restarted to see the changes. You can verify that your changes are acceptable by running a configuration check. Do this by navigating to {% my server_controls title="Developer Tools -> YAML" %} and and then clicking on the **Check configuration** button. When it's valid, it will show the text "Configuration valid!". In order for the **Check Configuration**" button to be visible, you must enable "Advanced Mode" on your user profile. + - Now Restart Home Assistant. You can do so by either using the **Restart** option in the ⚙ menu of the File Editor UI or by navigating to {% my system_dashboard title="Settings -> System" %} and then clicking on the **Restart** button on the top right of the page. ![Screenshot of the "General" page in the configuration panel.](/images/screenshots/configuration-validation.png) From 96679633566dd5a84e4002bab7d8a493b13c0632 Mon Sep 17 00:00:00 2001 From: Richard van Duijn Date: Thu, 18 Aug 2022 16:44:41 +0200 Subject: [PATCH 091/114] Fixing automation name in template (#23805) --- source/_integrations/openuv.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/openuv.markdown b/source/_integrations/openuv.markdown index 9be0fd3e4bd..48f8db12e13 100644 --- a/source/_integrations/openuv.markdown +++ b/source/_integrations/openuv.markdown @@ -122,8 +122,8 @@ automation: - condition: template value_template: >- {{ - state_attr('automation.openuv_update', 'last_triggered') == None or - (now() - state_attr('automation.openuv_update', 'last_triggered')) >= timedelta(hours = 0, minutes = 40) + state_attr('automation.update_openuv', 'last_triggered') == None or + (now() - state_attr('automation.update_openuv', 'last_triggered')) >= timedelta(hours = 0, minutes = 40) }} action: - service: openuv.update_data From 7de40a215c53c5ec210738fb9ba200f145011b2e Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 18 Aug 2022 19:39:57 +0200 Subject: [PATCH 092/114] Fix variance link in statistics documentation (#23782) --- source/_integrations/statistics.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/statistics.markdown b/source/_integrations/statistics.markdown index 5b352d8291b..7786c557bcd 100644 --- a/source/_integrations/statistics.markdown +++ b/source/_integrations/statistics.markdown @@ -62,7 +62,7 @@ The following characteristics are supported for `sensor` source sensors: | `total` | The sum of all source sensor measurements within the given time and sampling size limits. | `value_max` | The biggest value among the number of measurements. | `value_min` | The smallest value among the number of measurements. -| `variance` | The [variance](https://en.wikipedia.org/wiki/Standard_deviation) of an assumed normal distribution from all measurements. +| `variance` | The [variance](https://en.wikipedia.org/wiki/Variance) of an assumed normal distribution from all measurements. ### Binary Source Sensor From 7ca69ee1085b6e251ba9bf138fa2d72c0b849c01 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 18 Aug 2022 19:41:15 +0200 Subject: [PATCH 093/114] Fix efibootmgr command (#23783) --- source/_includes/installation/operating_system.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_includes/installation/operating_system.md b/source/_includes/installation/operating_system.md index 460d1cafbbe..c5a8158f0c6 100644 --- a/source/_includes/installation/operating_system.md +++ b/source/_includes/installation/operating_system.md @@ -165,7 +165,7 @@ This can be accomplished either by using a live operating system (e.g. Ubuntu) a ```text efibootmgr --create --disk /dev/ --part 1 --label "HAOS" \ - --loader "\EFI\BOOT\bootx64.efi" + --loader '\EFI\BOOT\bootx64.efi' ``` Or else, the BIOS might provide you with a tool to add boot options, there you can specify the path to the EFI file: From 6fda66297f3438a843cb584c0e7e3137c2746e04 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Thu, 18 Aug 2022 22:36:56 +0200 Subject: [PATCH 094/114] Add info about water meter in P1 Monitor (#23810) --- source/_integrations/p1_monitor.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_integrations/p1_monitor.markdown b/source/_integrations/p1_monitor.markdown index e55704db2d7..c69f33f735a 100644 --- a/source/_integrations/p1_monitor.markdown +++ b/source/_integrations/p1_monitor.markdown @@ -49,6 +49,14 @@ See per phase what your voltage, current and power consumption/production is. - Power consumed phases L1/2/3 (W) - Power Produced phases L1/2/3 (W) +### WaterMeter + +See how much water you consume per day, in total and the number of counted pulses. + +- Water Consumption - day (liters) +- Water Consumption - total (m3) +- Pulse Count + ### Settings You can use the rates set in P1 Monitor for your calculations in Home Assistant. From f21ed97346347aea0f06b09e1abea40c6577b47e Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Thu, 18 Aug 2022 18:50:56 -0600 Subject: [PATCH 095/114] Update OpenUV docs to reflect `homeassistant.update_entity` usage (#23796) Co-authored-by: Paulus Schoutsen --- source/_integrations/openuv.markdown | 184 +++++++++++++-------------- 1 file changed, 90 insertions(+), 94 deletions(-) diff --git a/source/_integrations/openuv.markdown b/source/_integrations/openuv.markdown index 9be0fd3e4bd..b5ead6caa89 100644 --- a/source/_integrations/openuv.markdown +++ b/source/_integrations/openuv.markdown @@ -31,20 +31,6 @@ trained medical professional. To generate an API key, [simply log in to the OpenUV website](https://www.openuv.io/auth/google). -
-Beginning February 1, 2019, the "Limited" plan (which is what new users are -given by default) is limited to 50 API requests per day. Because different -API plans and locations will have different requirements, the `openuv` -component does not automatically query the API for new data after it initially -loads. To request new data, the `update_data` service may be used. -
- -
-Each use of the `update_data` service will consume 2 API calls from the daily quota -(since it performs the same tasks as back-to-back calls of the `update_uv_index_data` and -the `update_protection_data` services). -
- {% include integrations/config_flow.md %} ## Sensors @@ -56,6 +42,44 @@ the `update_protection_data` services). | Current UV Level | Sensor | UV Level (as literal) | | Max UV Index | Sensor | max UV Index for the day (at solar noon) | | Protection Window | Binary Sensor | whether sunblock protection should be used | +| Skin Type 1 Safe Exposure Time | Sensor | the amount of time [Fitzpatrick skin type 1](https://en.wikipedia.org/wiki/Fitzpatrick_scale) can be in the sun unprotected | +| Skin Type 2 Safe Exposure Time | Sensor | the amount of time [Fitzpatrick skin type 2](https://en.wikipedia.org/wiki/Fitzpatrick_scale) can be in the sun unprotected | +| Skin Type 3 Safe Exposure Time | Sensor | the amount of time [Fitzpatrick skin type 3](https://en.wikipedia.org/wiki/Fitzpatrick_scale) can be in the sun unprotected | +| Skin Type 4 Safe Exposure Time | Sensor | the amount of time [Fitzpatrick skin type 4](https://en.wikipedia.org/wiki/Fitzpatrick_scale) can be in the sun unprotected | +| Skin Type 5 Safe Exposure Time | Sensor | the amount of time [Fitzpatrick skin type 5](https://en.wikipedia.org/wiki/Fitzpatrick_scale) can be in the sun unprotected | +| Skin Type 6 Safe Exposure Time | Sensor | the amount of time [Fitzpatrick skin type 6](https://en.wikipedia.org/wiki/Fitzpatrick_scale) can be in the sun unprotected | + +## Updating Data + +
+OpenUV does _not_ automatically update data for its entities! Users must manually +update data via the `homeassistant.update_entity` service. +
+ +Beginning February 1, 2019, the "Limited" plan (which is what new users are given by +default) is limited to 50 API requests per day. Because different API plans and +locations will have different requirements, the `openuv` component does not automatically +query the API for new data after it initially loads. To request new data, the +`homeassistant.update_entity` service should be used. + +Note that in the case of UV and ozone data, selecting any one of: + +* Current Ozone Level +* Current UV Index +* Current UV Level +* Max UV Index +* Skin Type 1 Safe Exposure Time +* Skin Type 2 Safe Exposure Time +* Skin Type 3 Safe Exposure Time +* Skin Type 4 Safe Exposure Time +* Skin Type 5 Safe Exposure Time +* Skin Type 6 Safe Exposure Time + +...as the target for the `homeassistant.update_entity` service will update the data for +_all_ of these entities. + +To protect against possible API call waste, all calls to `homeassistant.update_entity` +that reference an OpenUV entity are throttled to a minimum of 15 minutes between calls. ### Protection Window @@ -64,81 +88,20 @@ The Protection Window binary sensor will be `on` when sunblock protection should By default, this occurs anytime the UV index is above 3.5. This behavior can be configured via the config entry options within the UI. Two parameters are given: -* `Starting UV index for the protection window`: the UV index that, when passed, indicates protection should be utilized -* `Ending UV index for the protection window`: the UV index that, when passed, indicates protection is no longer required - -### The Fitzpatrick Scale - -The approximate number of minutes of a particular skin type can be exposed to -the sun before burning/tanning starts is based on the -[Fitzpatrick scale](https://en.wikipedia.org/wiki/Fitzpatrick_scale). - -OpenUV integration provide sensors for safe exposure time (in minutes) based on skin type: - -- Skin Type 1 Safe Exposure Time -- Skin Type 2 Safe Exposure Time -- Skin Type 3 Safe Exposure Time -- Skin Type 4 Safe Exposure Time -- Skin Type 5 Safe Exposure Time -- Skin Type 6 Safe Exposure Time - -## Services - -### `openuv.update_data` - -Perform an on-demand update of OpenUV data. - -### `openuv.update_uv_index_data` - -Perform an on-demand update of OpenUV sensor data including current UV index, but not the `uv_protection_window`, saving an API call over `update_data`. - -### `openuv.update_protection_data` - -Perform an on-demand update of OpenUV `uv_protection_window` data, but not the sensors, saving an API call. +* `Starting UV index for the protection window`: the UV index that, when passed, indicates + protection should be utilized +* `Ending UV index for the protection window`: the UV index that, when passed, indicates + protection is no longer required ## Examples of Updating Data -To perform an optimal amount of API calls you need to know the hours of daylight on the longest day of the year. If for example this is 17 hours, you can perform 2 calls around every 45 minutes without running into the 50 API call limit per day: +Update the UV index data every 20 minutes while the sun is at least 10 degrees above the +horizon: {% raw %} - ```yaml automation: - alias: "Update OpenUV" - trigger: - # Time pattern of /45 will not work as expected, it will trigger on the whole hour and on the whole hour + 45 minutes. - # Using more frequent time pattern and a condition to get the intended behavior. - - platform: time_pattern - minutes: "/15" - condition: - - condition: sun - after: sunrise - before: sunset - # The last call will most likely fall before the sunset, thus leaving an UV index value not at 0 for the remaining night. - # To fix this, we allow one more service call after the sun has set. - before_offset: "+00:45:00" - # We check if the last trigger has been 40 minutes or more ago so we don't run into timing issues. - # By checking for 40 minutes or greater we ensure this is only true at the 45 minute mark. - - condition: template - value_template: >- - {{ - state_attr('automation.openuv_update', 'last_triggered') == None or - (now() - state_attr('automation.openuv_update', 'last_triggered')) >= timedelta(hours = 0, minutes = 40) - }} - action: - - service: openuv.update_data - -``` - -{% endraw %} - -Update the UV index data every 20 minutes while the sun is at least 10 degrees above the horizon: - -{% raw %} - -```yaml -automation: - - alias: "Update OpenUV every 20 minutes while the sun is at least 10 degrees above the horizon" trigger: platform: time_pattern minutes: "/20" @@ -148,33 +111,66 @@ automation: value_template: "{{ state.attributes.elevation }}" above: 10 action: - service: openuv.update_uv_index_data + service: homeassistant.update_entity + target: + entity_id: sensor.LATITUDE_LONGITUDE_current_uv_index ``` - {% endraw %} -Update the protection window once a day: +Update the protection window once a day at 12:00pm: ```yaml automation: - - alias: "Update OpenUV protection window once a day" + - alias: "Update OpenUV" trigger: platform: time - at: "02:12:00" + at: "12:00:00" action: - service: openuv.update_protection_data + service: homeassistant.update_entity + target: + entity_id: binary_sensor.LATITUDE_LONGITUDE_protection_window ``` -Another method (useful when monitoring locations other than the Home Assistant latitude -and longitude, in locations where there is a large amount of sunlight per day, -etc.) might be to simply query the API less often: +To perform an optimal amount of API calls in locations where the amount of daylight +varies, you need to know the total hours of daylight on the longest day of the year. If, +for example, this is 17 hours, you can perform 2 calls around every 45 minutes without +running into the 50 API call limit per day: +{% raw %} ```yaml automation: - - alias: "Update OpenUV every hour (48 of 50 calls per day)" + - alias: "Update OpenUV" trigger: - platform: time_pattern - hours: "*" + # Time pattern of /45 will not work as expected, as it will sometimes be true + # twice per hour (on the whole hour and on the whole hour + 45 minutes); use a + # more frequent time pattern and a condition to get the intended behavior: + - platform: time_pattern + minutes: "/15" + condition: + - condition: sun + after: sunrise + before: sunset + # The last call will most likely fall before the sunset, leaving the UV index at + # something other than 0 for the remainder of the night; to fix this, we allow + # one more service call after the sun has set: + before_offset: "+00:45:00" + - condition: template + # We check if the last trigger has been 40 minutes or more ago so we don't run + # into timing issues; by checking for 40 minutes or greater, we ensure this is + # only true at the 45 minute mark: + value_template: >- + {{ + state_attr('automation.update_openuv', 'last_triggered') == None + or ( + now() - state_attr('automation.update_openuv', 'last_triggered') + ) >= timedelta(hours = 0, minutes = 40) + }} action: - service: openuv.update_data + service: homeassistant.update_entity + target: + entity_id: + # Update both UV and protection window data: + - binary_sensor.LATITUDE_LONGITUDE_protection_window + - sensor.LATITUDE_LONGITUDE_current_uv_index ``` +{% endraw %} From 1c7bfacd02032af990cd30143dd9188088fef5d5 Mon Sep 17 00:00:00 2001 From: Rami Mosleh Date: Fri, 19 Aug 2022 09:09:35 +0300 Subject: [PATCH 096/114] Add config flow to pushover documentation (#23813) --- source/_integrations/pushover.markdown | 30 ++++---------------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/source/_integrations/pushover.markdown b/source/_integrations/pushover.markdown index 65c62e1ff9c..eca13ead7fe 100644 --- a/source/_integrations/pushover.markdown +++ b/source/_integrations/pushover.markdown @@ -4,11 +4,14 @@ description: Instructions on how to add Pushover notifications to Home Assistant ha_category: - Notifications ha_release: pre 0.7 +ha_config_flow: true ha_iot_class: Cloud Push ha_domain: pushover ha_platforms: - notify ha_integration_type: integration +ha_codeowners: + - '@engrbm87' --- The [Pushover service](https://pushover.net/) is a platform for the notify component. This allows integrations to send messages to the user using Pushover. @@ -17,32 +20,7 @@ The [Pushover service](https://pushover.net/) is a platform for the notify compo In order to get an API key you need to [register an application](https://pushover.net/apps/clone/home_assistant) on the Pushover website. Your Pushover user key can be found on the [Pushover dashboard](https://pushover.net/dashboard). -To use Pushover notifications, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -notify: - - name: NOTIFIER_NAME - platform: pushover - api_key: YOUR_API_KEY - user_key: YOUR_USER_KEY -``` - -{% configuration %} -name: - description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`. - required: false - default: notify - type: string -api_key: - description: Your API key. - required: true - type: string -user_key: - description: Your user key for Pushover. - required: true - type: string -{% endconfiguration %} +{% include integrations/config_flow.md %} Example Automation: From 7ebbe82b0f7f6f62d642ca72c6dd0c23d66b67f2 Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Fri, 19 Aug 2022 15:24:34 +0200 Subject: [PATCH 097/114] Add ScreenAway to supported brands (#23814) --- source/_integrations/motion_blinds.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/motion_blinds.markdown b/source/_integrations/motion_blinds.markdown index aceb523a45e..9e3538489c0 100644 --- a/source/_integrations/motion_blinds.markdown +++ b/source/_integrations/motion_blinds.markdown @@ -35,6 +35,7 @@ Additionally the following brands have been reported to also work with this inte - [Martec](https://www.martec.co.nz/) - [Motion Blinds](https://motionblinds.com/) - [Raven Rock MFG](https://www.ravenrockmfg.com/) +- [ScreenAway](https://www.screenaway.com.au/) - [Smart Blinds](https://www.smartblinds.nl/) - [Smart Home](https://www.smart-home.hu) - [Uprise Smart Shades](http://uprisesmartshades.com) From 422dec20450d5f8e65c7782e84b647b6c7e02ea0 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 21 Aug 2022 06:52:17 -1000 Subject: [PATCH 098/114] Add support for Qingping BT Clock Lite (#23832) --- source/_integrations/qingping.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/qingping.markdown b/source/_integrations/qingping.markdown index b9e4009b85f..ad41424d7ee 100644 --- a/source/_integrations/qingping.markdown +++ b/source/_integrations/qingping.markdown @@ -27,4 +27,5 @@ The Qingping integration will automatically discover devices once the [Bluetooth - [Air Monitor Lite](https://www.qingping.co/air-monitor-lite/overview) (CGDN1) - [Alarm Clock](https://www.qingping.co/bluetooth-alarm-clock/overview) (CGD1) +- [BT Clock Lite](https://www.qingping.co/bluetooth-clock/overview) (CGC1) - [Motion & Ambient Light Sensor](https://www.qingping.co/motion-light-sensor/overview) (CGPR1) From 3ea6d133ef6512cd4b0a32eb736b8ebc315c3054 Mon Sep 17 00:00:00 2001 From: Jan Bouwhuis Date: Sun, 21 Aug 2022 18:54:00 +0200 Subject: [PATCH 099/114] Generic Thermostat min_cycle_duration not working with keep_alive (#23728) --- source/_integrations/generic_thermostat.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/generic_thermostat.markdown b/source/_integrations/generic_thermostat.markdown index c631498c93f..d3c7f701e9d 100644 --- a/source/_integrations/generic_thermostat.markdown +++ b/source/_integrations/generic_thermostat.markdown @@ -60,7 +60,7 @@ ac_mode: type: boolean default: false min_cycle_duration: - description: Set a minimum amount of time that the switch specified in the *heater* option must be in its current state prior to being switched either off or on. + description: Set a minimum amount of time that the switch specified in the *heater* option must be in its current state prior to being switched either off or on. This option will be ignored if the `keep_alive` option is set. required: false type: [time, integer] cold_tolerance: @@ -74,7 +74,7 @@ hot_tolerance: default: 0.3 type: float keep_alive: - description: Set a keep-alive interval. If set, the switch specified in the *heater* option will be triggered every time the interval elapses. Use with heaters and A/C units that shut off if they don't receive a signal from their remote for a while. Use also with switches that might lose state. The keep-alive call is done with the current valid climate integration state (either on or off). + description: Set a keep-alive interval. If set, the switch specified in the *heater* option will be triggered every time the interval elapses. Use with heaters and A/C units that shut off if they don't receive a signal from their remote for a while. Use also with switches that might lose state. The keep-alive call is done with the current valid climate integration state (either on or off). When `keep_alive` is set the `min_cycle_duration` option will be ignored. required: false type: [time, integer] initial_hvac_mode: From 433d9148cbe050f7dae095cea3ddcff394217206 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 21 Aug 2022 19:00:53 +0200 Subject: [PATCH 100/114] Add state selector (#23815) --- source/_docs/blueprint/selectors.markdown | 24 ++++++++++++++++++++ source/images/blueprints/selector-state.png | Bin 0 -> 6202 bytes 2 files changed, 24 insertions(+) create mode 100644 source/images/blueprints/selector-state.png diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown index 25147d1f704..47581ccb39b 100644 --- a/source/_docs/blueprint/selectors.markdown +++ b/source/_docs/blueprint/selectors.markdown @@ -33,6 +33,7 @@ The following selectors are currently available: - [Object selector](#object-selector) - [RGB color selector](#rgb-color-selector) - [Select selector](#select-selector) +- [State selector](#state-selector) - [Target selector](#target-selector) - [Template selector](#template-selector) - [Text selector](#text-selector) @@ -820,6 +821,29 @@ When `multiple` is `true`, the output of this selector is the list of selected option values. In this case, if `Green` was selected, in the first example it would return ["Green"] and in the last example it returns ["g"]. +## State selector + +The state selector shows a list of states for a provided entity of which +one can be selected. + +![Screenshot of an state selector](/images/blueprints/selector-state.png) + +{% configuration state %} +entity_id: + description: The entity ID of which an state can be selected from. + type: string + required: true +attribute: + description: The attribute of which an attribute state can be selected from. + type: string + required: false +{% endconfiguration %} + +The output of this selector is the select state (not the translated or +prettified name shown in the frontend). + +For example: `heat_cool`. + ## Target selector The target selector is a rather special selector, allowing the user to select diff --git a/source/images/blueprints/selector-state.png b/source/images/blueprints/selector-state.png new file mode 100644 index 0000000000000000000000000000000000000000..e88e413ee5ecb1fa9dc1bde02b0944ccba149d54 GIT binary patch literal 6202 zcmb_gcT|(lnhw>15)q9Q1?dU_k=}bT^db<`OiWA^6cq6B@zvGU?e6ZDm6fHXrOnLD zl$4Y}p-^RIU{HTB!KZ>y`T z_4V}~9UZy3x%v6|<>loW85s);3!R;vXf(Q_q9P?FWps3uk&)5Q&re%hTS!RA(9n>Z zn>#KpE;KY$US3{8LPAtj)WgGrgM-7@*VoF*%EiS635RaI3nFff>znHd-u zynOjGIy#z(iOIpiK|nx2L`3Arj~{AkYF=JmNF>tP*_oAeh38ltDC|NQy$ix)47ii(Phi(Oq^0|Nt1OiYG{heJX_tgWqaIGm}eslC1Z zhYugv+1W2IFa7=fx3;$Q_4V7@+E`dvf`fz8)6-EXl(4WcGc&WKq@=8@?DOZ(b#!#1 zqN4Wp_C9|62!TM}zI|(KY~0)1dvI{T!^7k5?rvvir>Cc9WMmW*6Ju#<$C>m| z>}+*)b#HI)SFc{Fs;c(&^@)p%M?^$qW@a`tG^nVkjE|2$$lWB*Strl=O`iRmJZp_S zYn43n7kS1{^7Li$^d<7N#f^=Pxw*OO>gqRd-h_pP#m2^FWo0=zIRyj+SXfv@Mn=lX z$&HPTNl8g5C@6%7hc`DjdwO~z5C|)P5{H#fJQo}Sj$)|bsx zVgSHHeu#|ZYcIU52_lCTPC)4J!g`;sW%Jd3B4yt!DIxEdMi#1@?JUCA)c;cw#&!!T z^jn9EN^D%DOSg-_6hk%J!8PMMv7HR<5rhJ^m=@2jFR)2QJOQlpzMs8zm=}nbzSsmrqQ_ za4f57o4Gs?XGJN{6P(q_^S)^33K+S6<<}8Z6dg1p`V{1JZ+2%83iwMW*S-DsSgjZe zxU_xl&X2I>9?b1dap&sFexBvd4`IVcsVd%iBn$A%vu{3S0j8 z7f9F%kk(Jwa+fB6q4z={N?f$3qt|cOzcviOX6hELMr`F_Kq}X5fbA>in6>V#{e^8}C+hW4AcNb7-@c#`*16Ic{(6?=$P&&B2VD{TQxvoV^ z3C*4TlV&;XI7HRI7~iOE;~Ph-y=UInjLWo)PfTB+V`IbFslC_DyTs*Hc4 zMJqH4(g>I)pFux9Sur?fYW*Z?LPM{2(wu(3ZOk(599F3_a?q)|?tY~f&1%5VZFN$oE7{6P-&(7d^Kex^+y*DyCl62KV5Wot&U6-y|UYc$L#~qkS zI8lh1l`ov`DbS#+M#6@HHRt8zl5Jy%55A8)qK&o2`Uu4LT&r%-zkNJO@JZb}%26uJ zji3JhH$=}i7bY+dZMZw2Xw@hswb5UI{;4s(v&C-%TT56Q^c}cSKF@!-ssmrzgeNIG zUJM!s{8%d7tN~IqJjkd5Q6Uu~}q_niJ z?--+Lw9eTJ?c9fg2?XDGeXU+1761DEe&W73i%N$=<74&(JwLFN1Sg0r+>|bdoP;{3 zcNP19>=qrLlxAC3F&SB>l*|JXGIg+w4C3B@n7`DKxb8X1VCWOo&&Q;k+dTPFCqoV42xA4J9eoX0lNxC`qT3O4UP^WWqeUhYO6x@5vp@K@lP8 zYHV_1vBW7Ut@?S(RQO&M#v1SsgU0MC*0kwgwAC2m>&xTr6Kf17C%g)!Gv79*H|)uN z-K=v0Ua5Ptw5;BqY-e2f@L@A(b%8c!zO~0?S5M%cpqvfcmPfm#F@>#c2t35blvoM5 zaO}yxC~!SgV!5EX2};EMf_8Mz2kfQ+2{nDUOAu-&?IX0$E^CfRMFR1Oyw1$zl$D7t zG46G5ZCY%)8d!#O3bSJ$300VB8WkX16dQzw3*a5{qR+y=rtiXf2-8_y&{BC+BYGAL ziE(qbLSq84VRZBi2IVfW8yy-#V53`Qu`D1GGVv&Ru!YEJAbDg+kD*yRI{YiPv2D`3 z5y7b}BNHV0jO7}U1QqduP)O8LYX7|M8Eyk_falpCVUbygcOLf zM(90jGEOow6gPooz=5fxL*`}M-mUQP5Q{KzYc%Q?lvth{7YdzpZ@e-H-az~EGe^X|qR@exGCF#=&Sq*dHdv{~=BNRTkGqvabd#O_-3O(A zV8Xvs;14^b_(1eHfGGkR?iPVpIFp&H6b@K~un4~J5w(BXO>y|-Pm@d(pwKWW*N2NT zd(R$T*%|700skHJ3`8%i5{ zt8^dDV~FO4BYV_+Ird4eCD#&&3(Qv`D-^bBX9X&1apCt z6CHVrYn}jZ>QQudi<5ZmwK2k$LKp(u*WX80D)mV|_d=gUUhoy~0Z5DEsQZ>jACoSq1K-2Csn~X8!au=1 z-@be-H>+&sIVuP$(V_y$+%i=6Je)-|)t+x!{`u6;<5gVrKxMS|ug0B+;-!9kvLOdm zZNfAny9P)c8#2*S_8!UP=^{HfE)J(l*Ma{=Z%|}&IO1c4>8TaoF0J8k z0;4=jioi=$@Bn^l&_5Gj|Df>xsW|(e+p(VA_;21+5_aHI?fR@Px9RqwGtoM9ATiHZ-9iV^KAR zIVDT~bmK$H-YOgv1HP3;G;5F<;vhyh<>F!jzMj@fRpo=dPC17eEoAX*LnRHHp7nDqrNWPV6n?gl|L{}<=8r%;9v@I9+uU;%|~)7Kr*nS zK@m>$pCb3~&i_Mvb%_WVr&DDn`uzD1NrZG_6mN4}Xx}4&=Ci=l)AME;%?HHZjz`x$ z{Tv_W$jzlF0bZQ(R6;s7nU5I6!D!u)XIr5SlJcUyzp!9DM8I|oYQh6$s%o$0*V#ea zbU3r!u$2Or0B0|wg|}cH(z4AwUws@>`}om1*U}rKO8UlXdw!0~Ss!$P8;AJ0IyK`X z0{FA)_PeNG2+=)ZnfOebIXla8f<+0X%$6GcX4%j(t7%*>oeeL6)Ley zCoQM!Kw^r=raiVvoz(1RYj8b_h&7esEU~LVx0aR>kBq*!QV*ah9*S?JmfC#r1ri7Q zz6z_@-K~5aPE_J=uEBMzO0da|jZXyMFvXKLQpA1g7ehLS1y_oM6D271<2$z0y&VBv z12sh@bh!zy913~3;CRh1)InIgVRK%DLbo zXKS$QObbieF^Y7$at+~p#!2w?@BHUJ^Ec=J8Yj|{{KIY)P(by4qex^(rKwh-qMKAV z=fu0|L4+_!ZEW-NO6=mDz|USgRU<0Y@u8U$B|1rBn|Ay;^&BKT_Ls9;c^8ctyR!n2 zRS(r~o}{ugB-Y-Zm8hLbLE7Wy{mytXg*dS_T5XTMOiHhfcd8h;@(-k+xh;ld@Lt43 z6?wcSzfi#%a&706U9(BF9s`8K=eR@3>riJ3VT8FHoax;e0a~9cnw9ISHI9p}e3Is~ zO&xn%=`R4D5?R;EVC2vGWG5(C&pY+SKkiWMn(+ngQu|%_tlmezhk0;S^Kcxqk@Kt= z1if?iBLFCTa=Vj;1c7dAUe3$na-3oDY&Eid)pjl1(!l|##6JcBCe z5qTDv&%y`tH8Gk9CJ^U(B_lGy0zvC@v~3k9h_uJGek?lgN(pl_JTM9Dvyx+6ub9Hj zWI02hB|=+AQ^r!n?IOV%^_^DAX)Bxc7JXPsLFfK-!A+cRZ`eti>v--};!2UuTFsV+ z+&z+r&KK}49%gXM=_^`&j}b)thmP9a{iX%stz{FPH^r+b*=RH+%4T# zfiv_(K+)#GRNcIziYy)N7A`ie1?tfQq_5s8F(Nzs@}RGo+Tl=J_V$lPy^#{I%jM;S zzV9WR+e~UA0dpw{z55pg5l>v4#-Z5#v?^sm*4|tQM?Iq;bMI;2Q_zE=Hr+C_;Q#$B zdPb$$5v0Y#^b~}`$3noTz;n$%$Jb(u94b1eXKRukRMHS1uPCK{-L)a{fBx zi^doW#3l_|u3&rM=BG~?@#@zmOo;abbjYt168fuc+9-tnpjaJf360Z6WM^zt4&`k` z?y!-_=GuiNePgl6d56fJo9;_RFW|hB=0~cfpWS}a5S@nU!>sWqRa?~e5h%W8A4u3X zN)|Woz;ZLEyNpFK8hqcdv5cz@y}rP`sJ+~d;cjTEvwYJT97a4qQd~^h zE2ugvvf6E5$=q}@KW#JM@|iHP#!_Q^6gI%`iF1dX$(dDZLo)_?bRGF>xA(W?j_*EX zhct1&*V25+M7@1z7t>3-MXT+->EUggh2AJAnM)j%2V1wC^NwgVSW4Tn8d8V}ykJ_V z(Nv$~frX04 Date: Sun, 21 Aug 2022 08:14:23 -1000 Subject: [PATCH 101/114] Add support for multiple bluetooth adapters (#23825) --- source/_integrations/bluetooth.markdown | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/source/_integrations/bluetooth.markdown b/source/_integrations/bluetooth.markdown index 22f79f33fe7..9c7a03257af 100644 --- a/source/_integrations/bluetooth.markdown +++ b/source/_integrations/bluetooth.markdown @@ -75,19 +75,27 @@ If you experience an unreliable Bluetooth connection, installing a short USB ext - tp-link UB400 - Frequent connection failures - tp-link UB500 - Frequent connection failures -{% include integrations/option_flow.md %} +## Multiple adapters -### Multiple adapters +Support for multiple local Bluetooth adapters is available on Linux systems only. Place adapters far enough away from each other to reduce interference. -Support for multiple Bluetooth adapters is available on Linux systems only. Select the adapter you wish to use via the options flow on the integrations page. The adapter selection only affects integrations that use the Bluetooth integration interfaces. +The following methods are known to work to add multiple adapters: -## Integrations that require exclusive use of the Bluetooth Adapter +- Long USB Extension cables +- USB-Ethernet extenders +- [USB/IP](http://usbip.sourceforge.net/) + +Integrations that have followed the [Best practices for library authors](https://developers.home-assistant.io/docs/network_discovery?_highlight=bluetooth#best-practices-for-library-authors) will automatically connect via the adapter with the best signal and failover to an active adapter if one becomes unavailable. + +## Troubleshooting + +### Integrations that require exclusive use of the Bluetooth Adapter While newer integrations can share the Bluetooth Adapter, some legacy integrations require exclusive use of the adapter. Enabling this integration may prevent an integration that has not been updated to use newer methods from functioning. Deleting the config entry for this integration will release control of the adapter and allow another integration to gain exclusive use of the Bluetooth adapter. If you have manually added `bluetooth:` to your `configuration.yaml`, you must also remove it to prevent the configuration from being recreated. Consider adding a second Bluetooth adapter on Linux systems if you need to continue using legacy integrations, as more integrations will move to use the Bluetooth integration in the future. -## Bluetooth interference with other devices +### 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. From b857e7e5fc8afcbbbc5076dd973446427c9cc38c Mon Sep 17 00:00:00 2001 From: Jan Bouwhuis Date: Sun, 21 Aug 2022 20:15:15 +0200 Subject: [PATCH 102/114] Add MQTT camera image_encoding config parameter (#23626) --- source/_integrations/camera.mqtt.markdown | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/source/_integrations/camera.mqtt.markdown b/source/_integrations/camera.mqtt.markdown index 2a35bedfe07..39fffe93be6 100644 --- a/source/_integrations/camera.mqtt.markdown +++ b/source/_integrations/camera.mqtt.markdown @@ -132,10 +132,10 @@ enabled_by_default: type: boolean default: true encoding: - description: The encoding of the image payloads received. Set to `"b64"` to enable base64 decoding of image payload. If not set, or if set to `null`, the image payload must be raw binary data. + description: The encoding of the payloads received. Set to `""` to disable decoding of incoming payload. Use `image_encoding` to enable `Base64` decoding on `topic`. required: false type: string - default: null + default: "utf-8" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false @@ -145,6 +145,11 @@ icon: description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." required: false type: icon +image_encoding: + description: The encoding of the image payloads received. Set to `"b64"` to enable base64 decoding of image payload. If not set, the image payload must be raw binary data. + required: false + type: string + default: None json_attributes_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false From 0d36257ad7d937aa7a1dd9818bc9bbbf30c03906 Mon Sep 17 00:00:00 2001 From: Vincent Knoop Pathuis <48653141+vpathuis@users.noreply.github.com> Date: Sun, 21 Aug 2022 20:26:04 +0200 Subject: [PATCH 103/114] Add documentation for landisgyr_heat_meter (#23084) Co-authored-by: Franck Nijhof --- .../landisgyr_heat_meter.markdown | 87 ++++++++++++++++++ .../landisgyr_heat_meter/usb_ir_reader.png | Bin 0 -> 90148 bytes 2 files changed, 87 insertions(+) create mode 100644 source/_integrations/landisgyr_heat_meter.markdown create mode 100644 source/images/integrations/landisgyr_heat_meter/usb_ir_reader.png diff --git a/source/_integrations/landisgyr_heat_meter.markdown b/source/_integrations/landisgyr_heat_meter.markdown new file mode 100644 index 00000000000..5abdf37abea --- /dev/null +++ b/source/_integrations/landisgyr_heat_meter.markdown @@ -0,0 +1,87 @@ +--- +title: Landis+Gyr Heat Meter +description: Instructions on how to integrate your Landis+Gyr Heat Meter device into Home Assistant. +ha_category: + - Energy + - Sensor +ha_iot_class: Local Polling +ha_config_flow: true +ha_release: 2022.9 +ha_domain: landisgyr_heat_meter +ha_codeowners: + - '@vpathuis' +ha_platforms: + - sensor +ha_integration_type: integration +--- + +The Landis+Gyr Heat Meter integration for Home Assistant allows you to read the meter values from Ultraheat devices by Landis & Gyr. These devices are commonly used for district heating. The integration has been tested with the Landis & Gyr Ultraheat 50 (UH50), type LUGCUH50. Other models are likely to work as well. + +The device is read through the optical interface. An (USB) IR reader is needed and connected to Home Assistant. + +![USB IR reader](/images/integrations/landisgyr_heat_meter/usb_ir_reader.png) + +{% include integrations/config_flow.md %} + +## Sensors + +The integration will create the following sensors: + +- Heat usage (MWh) +- Volume usage (m3) + +To be compatible with the Home Assistant energy units of measurement, heat usage is converted to MWh, from usage in GJ, which is supplied by the device, using a conversion factor: 1 GJ = 0.277778 MWh. + +Further data that is read from the device is added as diagnostic entities: + +- Heat usage measured in GJ, as is read from the device before conversion +- Ownership number +- Volume previous year (m3) +- Heat previous year (MWh) +- Error number +- Device number +- Measurement period minutes +- Power max (kW) +- Power max previous year (kW) +- Flow rate max (m3ph) +- Flow rate max previous year (m3ph) +- Flow temperature max (°C) +- Return temperature max (°C) +- Flow temperature max previous year (°C) +- Return temperature max previous year (°C) +- Operating hours +- Fault hours +- Fault hours previous year +- Yearly set day +- Monthly set day +- Meter date time +- Measuring range (m3ph) +- Settings and firmware +- Flow hours + +## Energy Dashboard + +Either heat usage or volume usage can be used as "Gas" on the energy dashboard. If you want to supply a price per MWh, make sure to apply the conversion factor first. + +## Polling the device + +Polling is by default done only once per day (and once right after adding the integration). Every time the Heat Meter values are read, battery time of the device will (supposedly) go down by about 30 minutes. + +For detailed control on polling and time of polling, consider disabling polling in the integration panel and poll manually. For instructions, see below. + +### Polling manually (optional) + +For detailed control on when the device is polled, disable the default polling for this integration and create an automation that will update one of the entities (the other entities will be updated as well) + +If you're comfortable with YAML, this game could be used: + +```yaml +alias: "Heat Meter manual update" +trigger: + - platform: time + at: "23:30:00" +action: + - service: homeassistant.update_entity + target: + entity_id: sensor.heat_meter_heat_usage_gj +``` diff --git a/source/images/integrations/landisgyr_heat_meter/usb_ir_reader.png b/source/images/integrations/landisgyr_heat_meter/usb_ir_reader.png new file mode 100644 index 0000000000000000000000000000000000000000..62999a7d915c59aa906769536010959ee090dc1c GIT binary patch literal 90148 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 Mtc&Mu34!9srCE^u$o#PK@_y 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 P00000NkvXXu0mjf&L^&D literal 0 HcmV?d00001 From ee2cb92df6dea6d1f3ef1709f0893034e0ca5a75 Mon Sep 17 00:00:00 2001 From: Geoff Date: Sun, 21 Aug 2022 12:38:06 -0700 Subject: [PATCH 104/114] Update filter precision info (#23524) --- source/_integrations/filter.markdown | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/source/_integrations/filter.markdown b/source/_integrations/filter.markdown index d8f3af58bb2..e8e4116d644 100644 --- a/source/_integrations/filter.markdown +++ b/source/_integrations/filter.markdown @@ -78,16 +78,16 @@ filters: description: Algorithm to be used to filter data. Available filters are `lowpass`, `outlier`, `range`, `throttle`, `time_throttle` and `time_simple_moving_average`. required: true type: string + precision: + description: Defines the precision of the filtered state, through the argument of round(). + required: false + type: integer + default: 2 window_size: description: Size of the window of previous states. Time based filters such as `time_simple_moving_average` will require a time period (size in time), while other filters such as `outlier` will require an integer (size in number of states). Time periods are in _hh:mm_ format and must be quoted. required: false type: [integer, time] default: 1 - precision: - description: See [_lowpass_](#low-pass) filter. Defines the precision of the filtered state, through the argument of round(). - required: false - type: integer - default: None time_constant: description: See [_lowpass_](#low-pass) filter. Loosely relates to the amount of time it takes for a state to influence the output. required: false @@ -129,8 +129,6 @@ A = 1.0 - B LowPass(state) = A * previous_state + B * state ``` -The returned value is rounded to the number of decimals defined in (`precision`). - ### Outlier The Outlier filter (`outlier`) is a basic Band-pass filter, as it cuts out any value outside a specific range. From 5485532693ed46fab2352a333246d50c0e5025aa Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 21 Aug 2022 09:42:18 -1000 Subject: [PATCH 105/114] Update bluetooth le tracker docs to reflect the bluetooth integration must be functional for the integration to work (#23734) --- .../bluetooth_le_tracker.markdown | 29 +------------------ 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/source/_integrations/bluetooth_le_tracker.markdown b/source/_integrations/bluetooth_le_tracker.markdown index f49f6673209..8983980fff5 100644 --- a/source/_integrations/bluetooth_le_tracker.markdown +++ b/source/_integrations/bluetooth_le_tracker.markdown @@ -17,7 +17,7 @@ Devices discovered are stored with 'BLE_' as the prefix for device mac addresses ## Setup -This platform requires pybluez to be installed, which is already the case if you're using Home Assistant OS, Supervised or Container. For Home Assistant Core installs see below on the required steps. +This integration requires the [Bluetooth](/integrations/bluetooth) integration to be enabled and functional. ## Configuration @@ -58,30 +58,3 @@ Some BTLE devices (e.g., fitness trackers) are only visible to the devices that Enabling the battery tracking might slightly decrease the duration of the battery, but since this is only done at most once a day, this shouldn't be noticeable. Not all devices offer battery status information; if the information is not available, the integration will only try once at startup. For additional configuration variables check the [Device tracker page](/integrations/device_tracker/). - -{% details "Notes for Home Assistant Core Installations" %} - -On Debian based Home Assistant Core installations, run: - -```bash -sudo apt install bluetooth -``` - -Before you get started with this platform, please note that: - -- This platform is incompatible with Windows -- This platform requires access to the Bluetooth stack, see [Rootless Setup section](#rootless-setup) for further information - -### Rootless Setup on Core installs - -Normally accessing the Bluetooth stack is reserved for root, but running programs that are networked as root is a bad security wise. To allow non-root access to the Bluetooth stack we can give Python 3 and hcitool the missing capabilities to access the Bluetooth stack. Quite like setting the setuid bit (see [Stack Exchange](https://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root) for more information). - -```bash -sudo apt-get install libcap2-bin -sudo setcap 'cap_net_raw,cap_net_admin+eip' $(readlink -f $(which python3)) -sudo setcap 'cap_net_raw+ep' $(readlink -f $(which hcitool)) -``` - -A restart of Home Assistant is required. - -{% enddetails %} From dd3b45e1619483f4409e4c78b69ef2817fa8d32c Mon Sep 17 00:00:00 2001 From: Peter <55065107+pyrrolizin@users.noreply.github.com> Date: Sun, 21 Aug 2022 21:42:59 +0200 Subject: [PATCH 106/114] Glossary: fix selectors and variables (#23737) --- source/_data/glossary.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_data/glossary.yml b/source/_data/glossary.yml index 62ab6c8fe20..ce519089ceb 100644 --- a/source/_data/glossary.yml +++ b/source/_data/glossary.yml @@ -61,7 +61,7 @@ - topic: Sensor description: "[Sensors](/integrations/sensor) return information about a thing, for instance the level of water in a tank." - topic: Selectors - description: "[Selectors](/docs/blueprint/selectors/) specify what values are accepted for a blueprint input and how the input is shown in the user interface." + description: "[Selectors](/docs/blueprint/selectors/) are components for the user interface. Some selectors can, for example, show a toggle button to turn something on or off, while another select can filter a list of devices to show only devices that have motion-sensing capabilities." - topic: Service description: "[Services](/docs/scripts/service-calls/) are called to perform actions." - topic: Switch @@ -73,6 +73,6 @@ - topic: TTS description: "TTS ([text to speech](/integrations/tts)) allows Home Assistant to talk to you." - topic: Variables - description: "[Variables](/docs/scripts/#variables) are a named storage for a value that can be processed e.g. in a script." + description: "[Variables](/docs/scripts/#variables) are used to store values in memory that can be processed e.g. in a script." - topic: Zone description: "[Zones](/integrations/zone/) are areas that can be used for presence detection." From 81d7eae05dac6664d8c2adcb0cfb4578b15e7cce Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 21 Aug 2022 09:43:58 -1000 Subject: [PATCH 107/114] Add Yale Smart Cabinet Lock to Yale Access Bluetooth (#23778) --- source/_integrations/yalexs_ble.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/yalexs_ble.markdown b/source/_integrations/yalexs_ble.markdown index 90758a0391d..dbf8ba6d06b 100644 --- a/source/_integrations/yalexs_ble.markdown +++ b/source/_integrations/yalexs_ble.markdown @@ -43,6 +43,7 @@ Devices must have a Yale Access module installed to function with this integrati These devices do not send updates, but can be locked and unlocked. - MD-04I (Yale Conexis L1) +- YRCB-490 (Yale Smart Cabinet Lock) ## Push updates From a862f8b050ecf28314dabf19c7fc1ef25c552b0b Mon Sep 17 00:00:00 2001 From: Phill Price Date: Sun, 21 Aug 2022 20:44:38 +0100 Subject: [PATCH 108/114] Correct UK Transport API limits, from 1000 to 30 per day :( (#23779) --- source/_integrations/uk_transport.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/uk_transport.markdown b/source/_integrations/uk_transport.markdown index 8744f2f9b64..1220993ff54 100644 --- a/source/_integrations/uk_transport.markdown +++ b/source/_integrations/uk_transport.markdown @@ -11,11 +11,11 @@ ha_platforms: ha_integration_type: integration --- -The `uk_transport` sensor will display the time in minutes until the next departure in a specified direction from of a configured train station or bus stop. The sensor uses [transportAPI](https://www.transportapi.com/) to query live departure data and requires a developer application ID and key which can be obtained [here](https://developer.transportapi.com/). The [free tier](https://www.transportapi.com/benefits/) allows 30,000 requests a month, which is sufficient for a single sensor refreshing every 87 seconds. +The `uk_transport` sensor will display the time in minutes until the next departure in a specified direction from of a configured train station or bus stop. The sensor uses [transportAPI](https://www.transportapi.com/) to query live departure data and requires a developer application ID and key which can be obtained [here](https://developer.transportapi.com/). The [free tier]([https://www.transportapi.com/benefits/](https://www.transportapi.com/blog/2022/08/introducing-the-home-use-plan-for-transportapi/)) allows 30 requests a day, which is sufficient for a single sensor refreshing every 48 minutes.
-Additional sensors can be added but at the expense of a reduced refresh rate. 2 sensors can be updated every 2*87 = 174 seconds, and so on. Calculating and setting this rate is automatically handles by the integration. +Additional sensors can be added but at the expense of a reduced refresh rate. 2 sensors can be updated every 2*48 = 96 minutes, and so on. Calculating and setting this rate is automatically handles by the integration.
From 704b0fe31a77f5cbdfcca7ca0cbcb1865cb0a9d7 Mon Sep 17 00:00:00 2001 From: Danny Tsang <567982+dannytsang@users.noreply.github.com> Date: Sun, 21 Aug 2022 20:45:27 +0100 Subject: [PATCH 109/114] Updated navigation to system health with system information (#23788) --- source/_docs/configuration.markdown | 10 +++++----- .../images/screenshots/System_information.png | Bin 0 -> 12351 bytes .../screenshots/System_information_menu.png | Bin 0 -> 15146 bytes .../screenshots/system_health_config_dir.png | Bin 57787 -> 0 bytes 4 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 source/images/screenshots/System_information.png create mode 100644 source/images/screenshots/System_information_menu.png delete mode 100644 source/images/screenshots/system_health_config_dir.png diff --git a/source/_docs/configuration.markdown b/source/_docs/configuration.markdown index a7edde6d1e1..78bdbbf9153 100644 --- a/source/_docs/configuration.markdown +++ b/source/_docs/configuration.markdown @@ -13,12 +13,12 @@ The easiest option to edit `configuration.yaml` is to use the {% my supervisor_a If you prefer to use a file editor on your computer, use the {% my supervisor_addon title="Samba add-on" addon="core_samba" %} to access the files as a network share. -The path to your configuration directory can be found in the Home Assistant frontend by going to {% my system_health title="Settings > System > System Health" %} +The path to your configuration directory can be found in the Home Assistant frontend by going to {% my system_health title="Settings > System > Repairs > System information from the top right menu" %} -

- Screenshot showing the top of the system health panel - Right under the version you are running, you will find what path Home Assistant has loaded the configuration from. -

+![Show system menu option](/images/screenshots/System_information_menu.png) + +Right under the version you are running, you will find what path Home Assistant has loaded the configuration from. +![Screenshot showing the top of the system information panel](/images/screenshots/System_information.png) _If you use Home Assistant Container, you can find `configuration.yaml` in the config folder that you mounted in your container._ diff --git a/source/images/screenshots/System_information.png b/source/images/screenshots/System_information.png new file mode 100644 index 0000000000000000000000000000000000000000..bb35d602f27731abca5b76194d8f32b5e9711715 GIT binary patch literal 12351 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 literal 0 HcmV?d00001 diff --git a/source/images/screenshots/System_information_menu.png b/source/images/screenshots/System_information_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..96de9fc47f1f5c5bcced6d75518a35664790bba3 GIT binary patch literal 15146 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 OA}J~hDHi_Z{r>=8gNBd* literal 0 HcmV?d00001 diff --git a/source/images/screenshots/system_health_config_dir.png b/source/images/screenshots/system_health_config_dir.png deleted file mode 100644 index e62393e861e4bcc70cdec5631fc72ebf9c03f3cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57787 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
G%=t4JM$+B;@2+9Jxa*$1j( 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 QF#rGn07*qoM6N<$f`O`4qyPW_ From 57f49f7ee5ec606721bac09af49606f3be1c3f46 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 21 Aug 2022 21:49:40 +0200 Subject: [PATCH 110/114] Remove installation specifics from FFmpeg integration documentation (#23646) --- source/_integrations/ffmpeg.markdown | 36 +++++++++------------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/source/_integrations/ffmpeg.markdown b/source/_integrations/ffmpeg.markdown index 46a62b72ada..17017c1e4ce 100644 --- a/source/_integrations/ffmpeg.markdown +++ b/source/_integrations/ffmpeg.markdown @@ -10,14 +10,13 @@ ha_platforms: ha_integration_type: integration --- -The `ffmpeg` integration allows other Home Assistant integrations to process video and audio streams. This integration supports all FFmpeg versions since 3.0.0; if you have an older version, please update. +The FFmpeg integration allows other Home Assistant integrations to process +video and audio streams. -
- -If you are running Home Assistant Core in a Python environment, you'll need have the `ffmpeg` binary in your system path. -On Debian 8 or Raspbian (Jessie) you can install it from [debian-backports](https://backports.debian.org/Instructions/). If you want [hardware acceleration](https://trac.ffmpeg.org/wiki/HWAccelIntro) support on a Raspberry Pi, you will need to build from source by yourself. - -
+This integration supports all FFmpeg versions since 3.0.0. If you run +the Home Assistant Operating System or use the Home Assistant Container, +this is already pre-installed for you. In all other cases, make sure +you have FFmpeg installed on your system. ## Configuration @@ -35,27 +34,14 @@ ffmpeg_bin: type: string {% endconfiguration %} -### Raspbian Debian Jessie Lite Installations -To get the binary on Raspbian Debian Jessie Lite on a Raspberry Pi you need to perform the following: - -```bash -sudo echo "deb http://ftp.debian.org/debian jessie-backports main" >> /etc/apt/sources.list -sudo apt-get update -sudo apt-get -t jessie-backports install ffmpeg -``` - -We can use now following in the configuration: - -```yaml -ffmpeg: - ffmpeg_bin: /usr/bin/ffmpeg -``` - ### Troubleshooting -In most cases, `ffmpeg` automatically detects all needed options to read a video or audio stream or file. But it is possible in rare cases that you will need to set options to help `ffmpeg` out. +In most cases, `ffmpeg` automatically detects all needed options to read +a video or audio stream or file. But it is possible in rare cases that you +will need to set options to help `ffmpeg` out. -First, check that your stream is playable by `ffmpeg` outside of Home Assistant with (use option `-an` or `-vn` to disable video or audio stream): +First, check that your stream is playable by `ffmpeg` outside of Home Assistant +with (use option `-an` or `-vn` to disable video or audio stream): ```bash ffmpeg -i INPUT -an -f null - From 05d251ffe9ab223d300e73801e3e69c6a99ed6f8 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 21 Aug 2022 21:49:50 +0200 Subject: [PATCH 111/114] Remove outdates link to Homematic IP Cloud library (#23772) --- source/_integrations/homematicip_cloud.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/homematicip_cloud.markdown b/source/_integrations/homematicip_cloud.markdown index 2d42bd5ff7a..129a6327b65 100644 --- a/source/_integrations/homematicip_cloud.markdown +++ b/source/_integrations/homematicip_cloud.markdown @@ -27,7 +27,7 @@ ha_platforms: ha_integration_type: integration --- -The [HomematicIP](https://www.homematic-ip.com/) integration platform is used as an interface to the cloud server. Since there is no official documentation about this API, everything was done via reverse engineering. The [homematicip-rest-api](https://github.com/coreGreenberet/homematicip-rest-api) is used for communicating. Use at your own risk. +The [HomematicIP](https://www.homematic-ip.com/) integration platform is used as an interface to the cloud server. Since there is no official documentation about this API, everything was done via reverse engineering. Use at your own risk. There is currently support for the following device types within Home Assistant: From 62543f705290f9ddb97c52b080819b8adaa98d1c Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Sun, 21 Aug 2022 15:51:19 -0400 Subject: [PATCH 112/114] Update zwave_js notification event docs (#23542) --- source/_integrations/zwave_js.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_integrations/zwave_js.markdown b/source/_integrations/zwave_js.markdown index d3e6743526c..b2cdf81895c 100644 --- a/source/_integrations/zwave_js.markdown +++ b/source/_integrations/zwave_js.markdown @@ -370,6 +370,7 @@ These are notification events fired by devices using the Multilevel Switch comma "command_class": 38, "command_class_name": "Multilevel Switch", "event_type": 4, + "event_type_label": "label 1", "direction": "up" }, ``` @@ -384,6 +385,7 @@ These are notification events fired by devices using the Multilevel Switch comma "command_class": 38, "command_class_name": "Multilevel Switch", "event_type": 5, + "event_type_label": "label 2", "direction": null }, ``` @@ -401,7 +403,9 @@ These are notification events fired by devices using the Entry Control command c "command_class": 111, "command_class_name": "Entry Control", "event_type": 6, + "event_type_label": "label 1", "data_type": 5, + "data_type_label": "label 2", "event_data": "555" } ``` From 0b68bf70c520f7f9331ce691021274368a929ee1 Mon Sep 17 00:00:00 2001 From: Brett Adams Date: Mon, 22 Aug 2022 05:51:46 +1000 Subject: [PATCH 113/114] Remove MyZone service from Advantage Air (#23385) --- source/_integrations/advantage_air.markdown | 8 -------- 1 file changed, 8 deletions(-) diff --git a/source/_integrations/advantage_air.markdown b/source/_integrations/advantage_air.markdown index 1d9612a2c6e..6f4ae86e688 100644 --- a/source/_integrations/advantage_air.markdown +++ b/source/_integrations/advantage_air.markdown @@ -70,11 +70,3 @@ Set the On/Off Timer using the relevant sensor entity. | ---------------------- | -------- | ----------- | | `entity_id` | yes | `sensor.[name]_time_to_on` or `sensor.[name]_time_to_off` | `minutes` | no | Number of minutes between `0` and `720`. - -### Service `advantage_air.set_myzone` - -Change the MyZone setting to the provided zone climate entity. - -| Service data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `entity_id` | yes | `climate.[zone name]` From 974e035310ea88a508708398e69b0851b61ba393 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 21 Aug 2022 21:51:51 +0200 Subject: [PATCH 114/114] Add number platform to LaMetric (#23804) --- source/_integrations/lametric.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_integrations/lametric.markdown b/source/_integrations/lametric.markdown index 93d6f734427..5ced998a7b6 100644 --- a/source/_integrations/lametric.markdown +++ b/source/_integrations/lametric.markdown @@ -3,7 +3,8 @@ title: LaMetric description: Instructions on how to integrate LaMetric TIME with Home Assistant. ha_category: - Notifications -ha_iot_class: Local Push + - Number +ha_iot_class: Local Polling ha_release: 0.49 ha_codeowners: - '@robbiet480' @@ -11,6 +12,7 @@ ha_codeowners: ha_domain: lametric ha_platforms: - notify + - number ha_integration_type: integration ha_config_flow: true ha_ssdp: true