From 9a5ccf2930318f25536525ae70bafa27d2907e5a Mon Sep 17 00:00:00 2001 From: Danny Tsang <567982+dannytsang@users.noreply.github.com> Date: Thu, 29 Jun 2023 12:34:29 +0100 Subject: [PATCH 01/23] Updated instructions to create a local user for Unifi Protect Integration (#28003) * Updated instructions to create a local user. Based on Unifi OS 3.0.20. * Fixed capitalisation of "IP". * Update source/_integrations/unifiprotect.markdown --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/unifiprotect.markdown | 8 ++++---- .../images/integrations/unifiprotect/user.png | Bin 25493 -> 12720 bytes 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_integrations/unifiprotect.markdown b/source/_integrations/unifiprotect.markdown index 12140a85f1c..58bf5638b63 100644 --- a/source/_integrations/unifiprotect.markdown +++ b/source/_integrations/unifiprotect.markdown @@ -104,10 +104,10 @@ use has. 1. Login to your _Local Portal_ on your UniFi OS device, and click on _Users_. **Note**: This **must** be done from the UniFi OS by accessing it directly by IP address (i.e. _Local Portal_), not via `unifi.ui.com` or within the UniFi Protect app. -2. In the upper right corner, click on _Add User_. -3. Fill out the fields for your user. Be sure the role you assign to the user grants them access to at least one or - more UniFi Protect devices. -4. Click _Add_ in the bottom right. +2. Go to **Admins** from the left hand side menu or [IP address]/admins/users e.g. 192.168.1.1/admins/users. +3. Click on **Add New Admin**. +4. Select **Full Management** for the role. Uncheck **Allow Remote Access** and fill out the fields for your user. +5. Click **Add** in the bottom right. ![UniFi OS User Creation](/images/integrations/unifiprotect/user.png) diff --git a/source/images/integrations/unifiprotect/user.png b/source/images/integrations/unifiprotect/user.png index 1a4f2daa72b4545147bbf87dfb2f57c46bec1d4e..52141b59bfcb21cbf2a8e6b616d3b2f23d941090 100644 GIT binary patch literal 12720 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 From 390564c6e5b4a6519860655c4f5a855231edef78 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Sat, 1 Jul 2023 19:03:42 +0200 Subject: [PATCH 02/23] Small improvements to the Matter documentation (#28010) * add link to thread/docker documentation * remove redundant text about current state platform support is already mentioned in the top, info is outdated * remove redundant or outdated info * add text about running matter server in docker * add switchbot docs * another note about thread * Update source/_integrations/matter.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_integrations/matter.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_integrations/matter.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_integrations/matter.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_integrations/matter.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_integrations/matter.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_integrations/matter.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_integrations/matter.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_integrations/matter.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_integrations/matter.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Fix terminology issues I introduced with my review comments --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/matter.markdown | 49 ++++++++++++++-------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/source/_integrations/matter.markdown b/source/_integrations/matter.markdown index 9dbed911bd0..b34c28b7faa 100644 --- a/source/_integrations/matter.markdown +++ b/source/_integrations/matter.markdown @@ -83,25 +83,14 @@ Image taken from [this excellent article by The Verge](https://www.theverge.com/ For communicating with Matter devices, the Home Assistant integration runs its own "Matter controller" in a separate process which will be launched as an add-on. This add-on runs the controller software and connects your Matter network (called Fabric in technical terms) and Home Assistant. The Home Assistant Matter integration connects to this server via a WebSocket connection. -The only supported configuration (for now) for the Matter integration is by running the officially provided Home Assistant Matter add-on. Running the [Matter server](https://github.com/home-assistant-libs/python-matter-server) by any other means is at your own risk and is currently not officially supported. +### Supported installation types -## Current state of the integration +It is recommended to run the Matter add-on on Home Assistant OS. This is currently the best-supported option. -While the support for Matter is evolving, we will regularly update the Matter integration with new features or device support. Because it might be hard to track what's supported and what's not, we list the current state here and try to update this information regularly. +If you run Home Assistant in a container, you can run a Docker image of the [Matter server](https://github.com/home-assistant-libs/python-matter-server). The requirements and instructions for your host setup are described on that GitHub page. -Supported platforms (device types): +Running Matter on a Home Assistant Core installation is not supported. -- Binary sensor: We have so far tested door/window sensors and motion sensors, but others will probably work too. -- Climate: Support for thermostat devices is in development now. -- Cover: Has been implemented, but support for a tilt feature is still missing. -- Lights: All features (in the Matter specification) should be supported, including color control, etc. -- Locks: Basic lock control has been implemented, but not all devices and features are supported yet. -- Sensor: We have tested Illuminance and temperature sensors, but others will probably work too. -- Switch: Powerplugs should work (note: no support for energy metering yet in Matter). - -Note that a single Matter device can exist on multiple platforms. For example, a Motion sensor also has a temperature sensor and an illuminance sensor on board. - -If you own a (bridged) Matter device and you are missing controls for this device, create an issue on [GitHub](https://github.com/home-assistant/home-assistant.io) and make sure to post your Integration diagnostics there. In some cases, we can easily extend the existing platform support based on your diagnostics dump. ## Adding Matter devices to Home Assistant @@ -160,9 +149,6 @@ This method will allow you to share a device that was added to Google Home to Ho -

-At this time it is not yet possible to share a device from Home Assistant to another platform. This feature should be added after the Matter SDK 1.1 is released. -

## Experiment with Matter using a ESP32 dev board @@ -209,27 +195,37 @@ Did you test a device that is not listed below? It would be greatly appreciated [Eve Door & Window on Amazon](https://amzn.to/3RIU6ml) [Eve Motion on Amazon](https://amzn.to/3jDujiP) -### Nanoleaf Matter bulbs and Lightstrips +### Nanoleaf (Essentials) Matter bulbs and Lightstrips - Although the products work great once commissioned, multiple users have reported that commissioning them can be a bit difficult and requires some patience and multiple resets or optimizations to your home network. - Check the [Nanoleaf Matter infopage](https://nanoleaf.me/en-EU/integration/matter/) for all supported products and instructions. ### Philips Hue (V2) Bridge -The Philips Hue V2 bridge supports Matter since a recent update (the beta program closed, it is now officially available). You can enable Matter support from the Hue app after which you can commission it to Home Assistant and other fabrics. +The Philips Hue V2 bridge supports Matter. You can enable Matter support in the Hue app. You can then commission it to Home Assistant and other fabrics. - Binding the Hue bridge to Home Assistant does not make sense because you will lose functionality over the default Hue integration in Home Assistant, such as button press events and (dynamic) scenes. - You will need a Hue/Signify (cloud) account and the app before you can use Matter. - Device events for example for dimmer remotes are not supported. - Only basic control of lights is supported, no scenes, events, effects etc. +### SwitchBot Hub 2 + +SwitchBot has released a (beta) firmware update to enable Matter support on their Hub 2. The SwitchBot Hub 2 is a Matter bridge device. It is bridging some of the devices, such as curtain motors, into Matter. + +- To use Matter, in the SwitchBot app, enable Matter bridge support. Then, copy the code and use that to commission the Hub to Home Assistant. Another option is to use a second device to scan the QR code. +- Device support is limited. You bridge specific devices to Matter by adding them as **Secondary device** in the app. Note that not all SwitchBot devices can be bridged. +- Enabling Matter support does not convert the actual SwitchBot devices into matter devices. Those still need to be within the Bluetooth range of the hub. +- Bridged SwitchBot devices appear with a rather technical name in Home Assistant. This is a known issue. + + ### Tasmota Tasmota supports Matter over IP on all ESP32 based devices (in experimental phase). Follow the [instructions](https://tasmota.github.io/docs/Matter/). ### TP-Link Tapo P125M (power plug) -- Look for the M addition in the model name, a device without the M (regular P125) is not Matter compliant. +- Look for the _M_ addition in the model name. A device without the M (regular P125) is not Matter compliant. - This device is available in the US only. [TP-Link Tapo P125M on Amazon](https://amzn.to/3RILJah) @@ -238,15 +234,18 @@ Tasmota supports Matter over IP on all ESP32 based devices (in experimental phas ### General recommendations -- Using Thread-based Matter devices in Home Assistant requires Home Assistant OS (version 10 and above) because of kernel patches to solve routing issues. Not using HAOS (and thus the official Matter add-on) is at your own risk. +- Using Thread-based Matter devices in Home Assistant requires Home Assistant OS version 10 and above. Not using Home Assistant OS is at your own risk. We do provide some [documentation](https://github.com/home-assistant-libs/python-matter-server/blob/main/README.md) on how to run the Matter Server as a Docker container. The documentation includes a description of the host and networking requirements. - To use Thread devices you will need a Thread Network with at least one Thread Border Router in your network nearby the Thread device(s). Apple users need for example the Apple TV 4K or the HomePod Mini, while Google users need a Nest Hub V2. Use the Thread integration in Home Assistant to diagnose your Thread network(s). -- Start simple and work from there, keep your network easy and add for example an ESP32 test device. Once that works, move on to the next step or more devices. +- Start simple and work from there, keep your network simple and add for example an ESP32 test device. Once that works, move on to the next step or more devices. - Realize that you are an early adopter, both on the hardware side and on the software (controller) side so you may run into compatibility issues or features that are still missing. Report any issues you may find and help out others if you find a workaround or tested a device. -- Make sure IPv6 (multicast) traffic travels freely from your network to the Home Assistant host. There is no requirement to have an IPv6-enabled internet connection or DHCPv6 server. However, IPv6 support has to be enabled (it's enabled by default on Home Assistant OS). +- Make sure IPv6 (multicast) traffic travels freely from your network to the Home Assistant host. There is no requirement to have an IPv6-enabled internet connection or DHCPv6 server. However, IPv6 support has to be enabled on Home Assistant. Go to **{% my network title="Settings > System > Network" %}**, and make sure **IPv6** is set to **Automatic** or **static**, depending on your network setup. If you're unsure, use **Automatic**. + +- For more detailed information on network configuration, refer to the [README of the Matter server repository](https://github.com/home-assistant-libs/python-matter-server/blob/main/README.md). + ### I do not see the button "Commission using the Companion app" @@ -266,4 +265,4 @@ Also see this [extended troubleshooting guide](https://developers.home.google.co The Matter protocol relies on (local) IPv6 and mDNS (multicast traffic) which should be able to travel freely in your network. Matter devices that use Wi-Fi (including Thread Border routers) must be on the same LAN/VLAN as Home Assistant. Matter devices that only use Thread must be joined to Thread networks for which there is at least one border router connected to the Home Assistant LAN. -Investigate your network topology if you experience any issues with discovering devices (like the initial commission keeps failing) or if devices become unavailable randomly. For instance, a setting on your router or Wi-Fi access point to "optimize" multicast traffic can harm the (discovery) traffic from Matter devices. Keep this in mind when you experience issues trying to add or control Matter devices. Protocols like Matter are designed for regular residential network setups and do not play nicely with enterprise networking solutions like VLANs, Multicast filtering, and IGMP snooping. Try to keep your network as simple and flat as possible to avoid issues. +If you experience any issues with discovering devices (for example, if the initial commission keeps failing or if devices become unavailable randomly), investigate your network topology. For instance, a setting on your router or Wi-Fi access point to "optimize" multicast traffic can harm the (discovery) traffic from Matter devices. Keep this in mind when you experience issues trying to add or control Matter devices. Protocols like Matter are designed for regular residential network setups and may not integrate well with enterprise networking solutions like VLANs, Multicast filtering, and (malfunctioning) IGMP snooping. To avoid issues, try to keep your network topology as simple and flat as possible. From a7fcf538f6f34d063f2d12c4bd17951c9f3856df Mon Sep 17 00:00:00 2001 From: EnthusiastDeveloper <37513018+EnthusiastDeveloper@users.noreply.github.com> Date: Sat, 1 Jul 2023 20:06:18 +0300 Subject: [PATCH 03/23] Fix typo ibeacon.markdown (#28024) Replace "light of sight" with the correct English term --- source/_integrations/ibeacon.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/ibeacon.markdown b/source/_integrations/ibeacon.markdown index 14cab37919e..0ad3e5ec633 100644 --- a/source/_integrations/ibeacon.markdown +++ b/source/_integrations/ibeacon.markdown @@ -57,7 +57,7 @@ iBeacons with a randomized MAC address will be combined into a single set of ent The integration will create an Estimated Distance sensor by default. This estimated distance assumes perfect RF conditions and line of sight between the iBeacon and the Bluetooth adapter. Estimated distance is generally only helpful to tell if the iBeacon is in the immediate vicinity, near, or far away from the adapter. If the system has multiple adapters, the adapter with the best RSSI value for the iBeacon will be the one reporting the distance. As this can change, checking the source attribute when considering the distance is essential. -To get the Estimated distance sensor to work, in most cases, it has to be calibrated in the supplier's app. Place the device at 1m in light of sight of the Bluetooth adapter, read the signal strength in dBm, and set it in the corresponding field of the device app. +To get the Estimated distance sensor to work, in most cases, it has to be calibrated in the supplier's app. Place the device at 1m in line of sight of the Bluetooth adapter, read the signal strength in dBm, and set it in the corresponding field of the device app. ## Known working devices From 5215e703f3b0f5ad9c0431b844ca6744de7a64d6 Mon Sep 17 00:00:00 2001 From: Anders Payerl <6882326+APayerl@users.noreply.github.com> Date: Mon, 3 Jul 2023 07:57:52 +0200 Subject: [PATCH 04/23] Update modbus.markdown (#28028) Add link to light section in modbus documentation --- source/_integrations/modbus.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/modbus.markdown b/source/_integrations/modbus.markdown index 6176ac8848f..818746d9eeb 100644 --- a/source/_integrations/modbus.markdown +++ b/source/_integrations/modbus.markdown @@ -1180,5 +1180,6 @@ and restart Home Assistant, reproduce the problem, and include the log in the is - [Modbus Climate](#configuring-platform-climate) - [Modbus Cover](#configuring-platform-cover) - [Modbus Fan](#configuring-platform-fan) + - [Modbus Light](#configuring-platform-light) - [Modbus Sensor](#configuring-platform-sensor) - [Modbus Switch](#configuring-platform-switch) From 7b42da65d212a0537202038b539dc4cca3ef29be Mon Sep 17 00:00:00 2001 From: grapesmith Date: Mon, 3 Jul 2023 02:12:17 -0400 Subject: [PATCH 05/23] Add unsupported model section for TP-Link Kasa integration (#28042) * Add unsupported model section for TP-Link Kasa integration Ref: https://github.com/home-assistant/core/issues/94947 Some newer models of TP-Link Kasa devices are incompatible with the integration. Creating a section for them and adding one known model. Additionally, cross link to the Matter integration where it has limited support. * tiny tweak change link to point to link to the topic title within the matter page --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/tplink.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_integrations/tplink.markdown b/source/_integrations/tplink.markdown index 93c21fd747b..fe5cb3f0250 100644 --- a/source/_integrations/tplink.markdown +++ b/source/_integrations/tplink.markdown @@ -96,6 +96,12 @@ See [Supported Devices in python-kasa](https://github.com/python-kasa/python-kas Other bulbs may also work, but with limited color temperature range (2700-5000). If you find a bulb isn't reaching the full-color temperature boundaries, submit a bug report to [python-kasa](https://github.com/python-kasa/python-kasa). +## Unsupported devices + +### Plugs + +- KP125M (supported via [Matter](/integrations/matter/#tp-link-tapo-p125m-power-plug), but without energy monitoring features) + ### Random Effect - Service `tplink.random_effect` The light strips allow setting a random effect. From b06a074ec5e0f3c09fdfe66d318da50ee13ad7d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jul 2023 11:19:40 +0200 Subject: [PATCH 06/23] Bump textlint from 13.3.2 to 13.3.3 (#28044) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 213 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 107 insertions(+), 108 deletions(-) diff --git a/package-lock.json b/package-lock.json index 146c52833af..e67dea95645 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,12 +14,21 @@ "remark-lint-fenced-code-flag": "^3.1.2", "remark-lint-no-shell-dollars": "^3.1.2", "remark-stringify": "^10.0.3", - "textlint": "^13.3.2", + "textlint": "^13.3.3", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^3.0.5" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@azu/format-text": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.2.tgz", @@ -241,59 +250,59 @@ } }, "node_modules/@textlint/ast-node-types": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-13.3.2.tgz", - "integrity": "sha512-d9WXBahsAgRDWcfUE7pQs8E9SNbF0nxrEaYE2g01tLgQ/dYdlOLngNPXi0Lk+C+yU58kvmFSdO6nicIAe3WIiw==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-13.3.3.tgz", + "integrity": "sha512-KCpJppfX3Km69twa6SmVEJ8mkyAZSrxw3XaaLQSlpc7PWnLUJSCHGPVECI1nSUDhiTd1r6zlRvWuyIAZJiov+A==", "dev": true }, "node_modules/@textlint/ast-tester": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-13.3.2.tgz", - "integrity": "sha512-qbpmJS7mEZcTrcKuppPQ8o2VJFUvHJ4+/l5iNEc2JRtMqpoNP6JAIKwIuDcEsMxedClExVTPmNctUlteglpD2A==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-13.3.3.tgz", + "integrity": "sha512-vIIEJ0vDJb3Pr4kseOH9yzUCxx1EbX6PQDg/DgQj9sMAnwVG2sZvy2Uiga4+hj8SphdzaKia9Z+156UZzs+mzA==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^13.3.2", + "@textlint/ast-node-types": "^13.3.3", "debug": "^4.3.4" } }, "node_modules/@textlint/ast-traverse": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-13.3.2.tgz", - "integrity": "sha512-c+SI7SAWH1S+q5iok0Q/jrprG1BctstTF4A8msi/1bioKtn/PrD01w/MDsPkDT+K15RrWYUSjG8FLuGPnEN78Q==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-13.3.3.tgz", + "integrity": "sha512-tZ25emmWf3mJ4+vM8CO6D7F8l00WXD6MJgnnlY9BHI/HbOlngBfmKhTVizQEwrWfYF80sQO5R9a+N4UEk67Wcg==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^13.3.2" + "@textlint/ast-node-types": "^13.3.3" } }, "node_modules/@textlint/config-loader": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-13.3.2.tgz", - "integrity": "sha512-P8DESsBh3JBRMujbyV3WjVlhbDVaGBIRtEL0AveNSSe6+X0ef7OtesxGJhD8p/DIyA9X+69bqpg7mcV7DTuO9w==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-13.3.3.tgz", + "integrity": "sha512-DQA/7dYu3VDHP9Idd0Sn7HzwiFuNdKUXfA79pUGmJzNQUYaW0qADzyQCwfh7LlvhCcBmnLgX+8wb13o6OaHX5g==", "dev": true, "dependencies": { - "@textlint/kernel": "^13.3.2", - "@textlint/module-interop": "^13.3.2", - "@textlint/types": "^13.3.2", - "@textlint/utils": "^13.3.2", + "@textlint/kernel": "^13.3.3", + "@textlint/module-interop": "^13.3.3", + "@textlint/types": "^13.3.3", + "@textlint/utils": "^13.3.3", "debug": "^4.3.4", - "rc-config-loader": "^4.1.2", + "rc-config-loader": "^4.1.3", "try-resolve": "^1.0.1" } }, "node_modules/@textlint/feature-flag": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-13.3.2.tgz", - "integrity": "sha512-ewW8dlhcFf19QuqlycQHqySQB/VhKQ7opYjvsJvUr2GP7/nY1Wq4vMWEhCtCOVg7Khumw1JtoS7+DaQGiFzuaQ==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-13.3.3.tgz", + "integrity": "sha512-ltdwKQTvs9f/TgQ3asBx2EXmsSSsvxa7ySnTXSTZBkbVxqmrGY4zehDRiDCmuFZGVGCvCddY1QzCXy16ybk9Fg==", "dev": true }, "node_modules/@textlint/fixer-formatter": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-13.3.2.tgz", - "integrity": "sha512-Szvb6OGx/+PkiqDUMVyXD5WDaraoU64VNWZhUm96wEjGxt7seMecRgYiKc7LkQllcStJ2lP8Dgju1phGaD5hbQ==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-13.3.3.tgz", + "integrity": "sha512-iCMFS8GrmUetXMIT4/jFxoL5v1QN5ODj1190Lb6D+EdTxsrAWssHOb6m7MOEhfOGYEArAkb3PjSxu7DPLrb50g==", "dev": true, "dependencies": { - "@textlint/module-interop": "^13.3.2", - "@textlint/types": "^13.3.2", + "@textlint/module-interop": "^13.3.3", + "@textlint/types": "^13.3.3", "chalk": "^4.1.2", "debug": "^4.3.4", "diff": "^4.0.2", @@ -305,39 +314,38 @@ } }, "node_modules/@textlint/kernel": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-13.3.2.tgz", - "integrity": "sha512-KZX87i4xVqLXdb8Cl4y0Y56jIHQIwg+YPrLz/kBz2TQDl8vYeGLII4QHwT1l0BjZ2JHawm1pmyQZml3hCnieOQ==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-13.3.3.tgz", + "integrity": "sha512-HewzuuX2c2nlR+e8dREWrAYrOiyWb78eeObuW95miMjX/F6TjWmha4qrnrMCWbYbKDwC4en8dNGS4mm0vSdi4A==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^13.3.2", - "@textlint/ast-tester": "^13.3.2", - "@textlint/ast-traverse": "^13.3.2", - "@textlint/feature-flag": "^13.3.2", - "@textlint/source-code-fixer": "^13.3.2", - "@textlint/types": "^13.3.2", - "@textlint/utils": "^13.3.2", + "@textlint/ast-node-types": "^13.3.3", + "@textlint/ast-tester": "^13.3.3", + "@textlint/ast-traverse": "^13.3.3", + "@textlint/feature-flag": "^13.3.3", + "@textlint/source-code-fixer": "^13.3.3", + "@textlint/types": "^13.3.3", + "@textlint/utils": "^13.3.3", "debug": "^4.3.4", "fast-equals": "^4.0.3", "structured-source": "^4.0.0" } }, "node_modules/@textlint/linter-formatter": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-13.3.2.tgz", - "integrity": "sha512-QpHI7bzDMaetmrnMhA2+z1ExneFCdJVZHUFyzdfSv5JC4VNXmW9UDb7F7vsP+M+1jzIvF75mwvRLvmA82MJvBA==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-13.3.3.tgz", + "integrity": "sha512-z8xsk1bo9r8v6Ph76WLTBrfj+0+eyEfRlbTGBs+ie6YAGItBqkLYmDrD26DDfVjIZcXWdCXVX1Et6MOWomb//g==", "dev": true, "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "^13.3.2", - "@textlint/types": "^13.3.2", + "@textlint/module-interop": "^13.3.3", + "@textlint/types": "^13.3.3", "chalk": "^4.1.2", "debug": "^4.3.4", "is-file": "^1.0.0", "js-yaml": "^3.14.1", "lodash": "^4.17.21", - "optionator": "^0.9.1", "pluralize": "^2.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", @@ -347,12 +355,12 @@ } }, "node_modules/@textlint/markdown-to-ast": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-13.3.2.tgz", - "integrity": "sha512-tnXk7YO8rIPbnd6rDi6LwhxoExdg6ge8v5ggiun76qLfX2uKR0ExhJEL2K+zziATi1AqalBva3WD3exU1sfjeg==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-13.3.3.tgz", + "integrity": "sha512-jeqWyChTtJHWxEnH46V6qjr+OCTh6evm45aDqMzdg+b8ocXY+NhudiCMeHcVGoz042UEwc6w4reLn8+Is+SZ+A==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^13.3.2", + "@textlint/ast-node-types": "^13.3.3", "debug": "^4.3.4", "mdast-util-gfm-autolink-literal": "^0.1.3", "remark-footnotes": "^3.0.0", @@ -590,61 +598,61 @@ } }, "node_modules/@textlint/module-interop": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-13.3.2.tgz", - "integrity": "sha512-JPHAZlWXgedDCoaTT21dln8u+sPVJUGPw283Oxz1k24x2MWaFZO7EReu/K4QepdxNKOpdllp2DqvnWgnvZoPOg==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-13.3.3.tgz", + "integrity": "sha512-CwfVpRGAxbkhGY9vLLU06Q/dy/RMNnyzbmt6IS2WIyxqxvGaF7QZtFYpKEEm63aemVyUvzQ7WM3yVOoUg6P92w==", "dev": true }, "node_modules/@textlint/source-code-fixer": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-13.3.2.tgz", - "integrity": "sha512-7b+7zDUnEILcaYvJDLz+6Uu8YHn85xm6Lof/0Azn1/5zcDsz5qDjgJ21u+kuS+1kQBSpWV8dmCT3sTZoS0uExg==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-13.3.3.tgz", + "integrity": "sha512-h4jxWSetmcVuGwl71ai72784aneBQ0MkE5Mc3avl8PKIOIOyz0A1D7i9VQENWWIiqU8zyzmHwKGNSGyqWaqE2Q==", "dev": true, "dependencies": { - "@textlint/types": "^13.3.2", + "@textlint/types": "^13.3.3", "debug": "^4.3.4" } }, "node_modules/@textlint/text-to-ast": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-13.3.2.tgz", - "integrity": "sha512-6E2sFTukn5XygCWE1W6jU1rlQKO268tS5Qe8oHBdxp0tohFXMRzVM5r1MKgjjmuUpHxjwIcq75x+dWAYwX5wLQ==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-13.3.3.tgz", + "integrity": "sha512-iQdiHAiUfB9XruuYWCb4fY/gD/Q5/MkH1xwUTpS8UJowNgwpTldagUJX1JbZQ2UHux+yRe9JFA+JKm3rrxgQFw==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^13.3.2" + "@textlint/ast-node-types": "^13.3.3" } }, "node_modules/@textlint/textlint-plugin-markdown": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-13.3.2.tgz", - "integrity": "sha512-iI/UuzUz4k5qnrPnm7U7d8oC/Hwj41MtllusBSArG3mimn5gHsS+Etzm5Zs3oxXMINdzvWNNEFJ/xbs1bZvEJg==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-13.3.3.tgz", + "integrity": "sha512-EhBZ/Q6ZXMVRPDeQbFdFbtc0wE7SC0DWy9lkjKXfcbLKW0ZPTvtjH3JqJtCPBZAYcexB8wKOiHImfwVfQJhJhg==", "dev": true, "dependencies": { - "@textlint/markdown-to-ast": "^13.3.2" + "@textlint/markdown-to-ast": "^13.3.3" } }, "node_modules/@textlint/textlint-plugin-text": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-13.3.2.tgz", - "integrity": "sha512-pJrb4OYZ3TB6eKxvxPYARwoHb5vaXoKakCrmsyXtwbRjylJWCRVRh/u8UTRTyFRotASawEY/VfxKXwYepHP91Q==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-13.3.3.tgz", + "integrity": "sha512-MN/JMGLanqj8CJGuit8DDiyrO0yf1vxFMLWTDeMIXwSoe8VToHCt2j20zg8XNHGNrUbKj+wuhzhrkrKEI7uWxg==", "dev": true, "dependencies": { - "@textlint/text-to-ast": "^13.3.2" + "@textlint/text-to-ast": "^13.3.3" } }, "node_modules/@textlint/types": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-13.3.2.tgz", - "integrity": "sha512-N1Xb4kltBwBwAF3wAwKi3sJA0hWVjraWqIpjuHOplul/O8Qu78domGedktQJ4n2aVN1ucBuFjpZNsQfkfxJI+Q==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-13.3.3.tgz", + "integrity": "sha512-i2B7uRh+Iv8ZBKPJ3n4I6uSrTUQq5LdEkhFYNUwnDYxmhudz1o79xm906kri2eM8lxThX/UYYgVuJWpEwS0b+g==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^13.3.2" + "@textlint/ast-node-types": "^13.3.3" } }, "node_modules/@textlint/utils": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-13.3.2.tgz", - "integrity": "sha512-eEi4j5vyQ0WRkfkBS+Sa2q1YQVo0B6cFXde2+TVpoDp7f8yPAb4wMv9jgQ23N+DpiafJVOhRQLyJdrITFwnmFw==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-13.3.3.tgz", + "integrity": "sha512-roN+K3a36RxGc0tV+8HXVXpoPomEr3LCjNI8+hFmVjOu3RsUdLTyraNBqqaghaE0KgwCPODF0seuG1hteNI8LQ==", "dev": true }, "node_modules/@types/concat-stream": { @@ -3002,17 +3010,17 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -3236,9 +3244,9 @@ } }, "node_modules/rc-config-loader": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.2.tgz", - "integrity": "sha512-qKTnVWFl9OQYKATPzdfaZIbTxcHziQl92zYSxYC6umhOqyAsoj8H8Gq/+aFjAso68sBdjTz3A7omqeAkkF1MWg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", + "integrity": "sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==", "dev": true, "dependencies": { "debug": "^4.3.4", @@ -3835,23 +3843,23 @@ "dev": true }, "node_modules/textlint": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-13.3.2.tgz", - "integrity": "sha512-i14ug8jyC1iNko16dpzp/blSLbvXTONiZbvkNT30N3VzDPCtNn2yV4qSZhiRWFi1hHfgOdG3n/u0DZvllZCHXQ==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-13.3.3.tgz", + "integrity": "sha512-1LhJTNBFVNYtl4C6IJXt1XwAJANvquyDuP4NrhcG+1DwT3S7kiUR9vLo5yo046X83VT7ownzS97Q/yC6A7bZXg==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^13.3.2", - "@textlint/ast-traverse": "^13.3.2", - "@textlint/config-loader": "^13.3.2", - "@textlint/feature-flag": "^13.3.2", - "@textlint/fixer-formatter": "^13.3.2", - "@textlint/kernel": "^13.3.2", - "@textlint/linter-formatter": "^13.3.2", - "@textlint/module-interop": "^13.3.2", - "@textlint/textlint-plugin-markdown": "^13.3.2", - "@textlint/textlint-plugin-text": "^13.3.2", - "@textlint/types": "^13.3.2", - "@textlint/utils": "^13.3.2", + "@textlint/ast-node-types": "^13.3.3", + "@textlint/ast-traverse": "^13.3.3", + "@textlint/config-loader": "^13.3.3", + "@textlint/feature-flag": "^13.3.3", + "@textlint/fixer-formatter": "^13.3.3", + "@textlint/kernel": "^13.3.3", + "@textlint/linter-formatter": "^13.3.3", + "@textlint/module-interop": "^13.3.3", + "@textlint/textlint-plugin-markdown": "^13.3.3", + "@textlint/textlint-plugin-text": "^13.3.3", + "@textlint/types": "^13.3.3", + "@textlint/utils": "^13.3.3", "debug": "^4.3.4", "file-entry-cache": "^5.0.1", "get-stdin": "^5.0.1", @@ -3861,7 +3869,7 @@ "mkdirp": "^0.5.6", "optionator": "^0.9.1", "path-to-glob-pattern": "^1.0.2", - "rc-config-loader": "^4.1.2", + "rc-config-loader": "^4.1.3", "read-pkg": "^1.1.0", "read-pkg-up": "^3.0.0", "structured-source": "^4.0.0", @@ -4684,15 +4692,6 @@ "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", "dev": true }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 5cea5020328..ec076bb6f2d 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "remark-lint-fenced-code-flag": "^3.1.2", "remark-lint-no-shell-dollars": "^3.1.2", "remark-stringify": "^10.0.3", - "textlint": "^13.3.2", + "textlint": "^13.3.3", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^3.0.5" From dafff4dff7a45ddb0df4994da1aa3d5e1e05d5e7 Mon Sep 17 00:00:00 2001 From: trickykid1982 <94576907+trickykid1982@users.noreply.github.com> Date: Mon, 3 Jul 2023 20:05:59 +0100 Subject: [PATCH 07/23] DenonAvr add AVR-1713 as supported (#28049) --- source/_integrations/denonavr.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/denonavr.markdown b/source/_integrations/denonavr.markdown index 9147a40327f..6fb8cf62a31 100644 --- a/source/_integrations/denonavr.markdown +++ b/source/_integrations/denonavr.markdown @@ -52,6 +52,7 @@ Known supported devices: - Denon AVR-X6700H - Denon AVR-X7200W - Denon AVR-X8500H +- Denon AVR-1713 - Denon AVR-1912 - Denon AVR-2112CI - Denon AVR-2312CI From 6458ca8d7774070650d34c0df2188664d97a8b92 Mon Sep 17 00:00:00 2001 From: Alex Silcock Date: Tue, 4 Jul 2023 07:10:47 +0100 Subject: [PATCH 08/23] Make clearer that all automation conditions must pass (#28052) * Make clearer that all automation conditions must pass Clarify that if any automation conditions fail, the automation actions will not be executed. * tiny tweaks --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_docs/automation/condition.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/automation/condition.markdown b/source/_docs/automation/condition.markdown index 9aac92158aa..a0516282b1e 100644 --- a/source/_docs/automation/condition.markdown +++ b/source/_docs/automation/condition.markdown @@ -3,7 +3,7 @@ title: "Automation Conditions" description: "Automations can test conditions when invoked." --- -Conditions are an optional part of an automation rule and can be used to prevent an action from happening when triggered. When a condition does not return true, the automation will stop executing. Conditions look very similar to triggers but are very different. A trigger will look at events happening in the system while a condition only looks at how the system looks right now. A trigger can observe that a switch is being turned on. A condition can only see if a switch is currently on or off. +Conditions are an optional part of an automation rule. They can be used to prevent the automation's actions from being run. After an automation has been triggered, all conditions will be checked. If any of them do not return true, the automation will stop executing. Conditions look very similar to triggers, but they are very different — a trigger will look at events happening in the system, while a condition only looks at how the system looks right now. A trigger can observe that a switch is being turned on. A condition can only see if a switch is currently on or off. The available conditions for an automation are the same as for the script syntax so see that page for a [full list of available conditions](/docs/scripts/conditions/). From c4b3f8e9d48e2e93e9afbe68c374d9e7598b64d9 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 4 Jul 2023 08:14:49 +0200 Subject: [PATCH 09/23] Remove documentation of deprecated vacuum services (#28054) --- source/_integrations/vacuum.markdown | 42 ++-------------------------- 1 file changed, 3 insertions(+), 39 deletions(-) diff --git a/source/_integrations/vacuum.markdown b/source/_integrations/vacuum.markdown index de3155326c8..f19ff6ed986 100644 --- a/source/_integrations/vacuum.markdown +++ b/source/_integrations/vacuum.markdown @@ -1,6 +1,6 @@ --- title: Vacuum -description: Instructions on how to setup and use vacuum's in Home Assistant. +description: Instructions on how to setup and use vacuums in Home Assistant. ha_release: 0.51 ha_domain: vacuum ha_quality_scale: internal @@ -12,48 +12,12 @@ ha_integration_type: entity The `vacuum` integration enables the ability to control home cleaning robots within Home Assistant. -## Configuration +## Services -To use this integration in your installation, add a `vacuum` platform to your `configuration.yaml` file, like the [Xiaomi](/integrations/xiaomi_miio#xiaomi-mi-robot-vacuum). - -```yaml -# Example configuration.yaml entry -vacuum: - - platform: xiaomi_miio - name: Living room - host: 192.168.1.2 -``` - -### Integration services - -Available services: `turn_on`, `turn_off`, `start_pause`, `start`, `pause`, `stop`, `return_to_base`, `locate`, `clean_spot`, `set_fan_speed` and `send_command`. +Available services: `start`, `pause`, `stop`, `return_to_base`, `locate`, `clean_spot`, `set_fan_speed` and `send_command`. Before calling one of these services, make sure your vacuum platform supports it. -#### Service `vacuum.turn_on` - -Start a new cleaning task. For the Xiaomi Vacuum, Roomba, and Neato use `vacuum.start` instead. - -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific vacuum. Use `entity_id: all` to target all. | - -#### Service `vacuum.turn_off` - -Stop the current cleaning task and return to the dock. For the Xiaomi Vacuum, Roomba, and Neato use `vacuum.stop` instead. - -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific vacuum. Use `entity_id: all` to target all. | - -#### Service `vacuum.start_pause` - -Start, pause or resume a cleaning task. For the Xiaomi Vacuum, Roomba, and Neato use `vacuum.start` and `vacuum.pause` instead. - -| Service data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific vacuum. Use `entity_id: all` to target all. | - #### Service `vacuum.start` Start or resume a cleaning task. From f52b65b07d12e923efb2dafd981a32633cf318d1 Mon Sep 17 00:00:00 2001 From: Mark Huson Date: Mon, 3 Jul 2023 23:35:23 -0700 Subject: [PATCH 10/23] Troubleshooting section no longer needed after move to new library (#28053) --- source/_integrations/sharkiq.markdown | 6 ------ 1 file changed, 6 deletions(-) diff --git a/source/_integrations/sharkiq.markdown b/source/_integrations/sharkiq.markdown index 3950504eb9c..5433d8b6a72 100644 --- a/source/_integrations/sharkiq.markdown +++ b/source/_integrations/sharkiq.markdown @@ -30,9 +30,3 @@ Currently supported services are: - `locate` If `pause` does not work for you, then it is not supported by your vacuum. The `stop` service will provide similar functionality. - -## Troubleshooting - -### Integration Disconnecting - -If the integration frequently disconnects and you have an ad blocker runner like [Pi-hole](https://pi-hole.net/) or [AdGuard](https://adguard.com) add `ads-field.aylanetworks.com` to the Allow list . This domain is needed for the connection and can be part of the automatic blocking because of `ads` being part of the subdomain. From db3be58eeb80a433049bbf80a659befd3c7ecfa1 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 4 Jul 2023 08:40:46 +0200 Subject: [PATCH 11/23] Remove documentation of deprecated MQTT vacuum protocol (#28056) --- source/_integrations/vacuum.mqtt.markdown | 436 ++-------------------- 1 file changed, 41 insertions(+), 395 deletions(-) diff --git a/source/_integrations/vacuum.mqtt.markdown b/source/_integrations/vacuum.mqtt.markdown index d6d75b6248b..480c1dedef3 100644 --- a/source/_integrations/vacuum.mqtt.markdown +++ b/source/_integrations/vacuum.mqtt.markdown @@ -8,322 +8,11 @@ ha_domain: mqtt --- The `mqtt` vacuum integration allows you to control your MQTT-enabled vacuum. -There are two possible message schemas - `legacy` and `state`, chosen by setting the `schema` configuration parameter. -New installations should use the `state` schema as `legacy` is deprecated and might be removed someday in the future. -The `state` schema is preferred because the vacuum will then be represented as a `StateVacuumDevice` which is the preferred parent vacuum entity. -The initial state of the state vacuum entity will set to `unknown` and can be reset by a device by sending a `null` payload as state. The legacy `mqtt` vacuum does not support handling an `unknown` state. - -This documentation has 3 sections. Configuration for `legacy` vacuum with examples, configuration for `state` vacuum with examples and shared section with examples which are the same for both schemas. +The initial state of the MQTT vacuum entity will set to `unknown` and can be reset by a device by sending a `null` payload as state. ## Configuration - - -To add your MQTT vacuum to your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -mqtt: - vacuum: - - command_topic: "vacuum/command" -``` - -## Legacy Configuration - -Legacy MQTT vacuum configuration section. - -{% configuration %} -availability: - description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`. - required: false - type: list - keys: - payload_available: - description: The payload that represents the available state. - required: false - type: string - default: online - payload_not_available: - description: The payload that represents the unavailable state. - required: false - type: string - default: offline - topic: - description: An MQTT topic subscribed to receive availability (online/offline) updates. - required: true - type: string - value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." - required: false - type: template -availability_mode: - description: When `availability` is configured, this controls the conditions needed to set the entity to `available`. Valid entries are `all`, `any`, and `latest`. If set to `all`, `payload_available` must be received on all configured availability topics before the entity is marked as online. If set to `any`, `payload_available` must be received on at least one configured availability topic before the entity is marked as online. If set to `latest`, the last `payload_available` or `payload_not_available` received on any configured availability topic controls the availability. - required: false - type: string - default: latest -availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." - required: false - type: template -availability_topic: - description: The MQTT topic subscribed to receive availability (online/offline) updates. Must not be used together with `availability`. - required: false - type: string -battery_level_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define the battery level of the vacuum. This is required if `battery_level_topic` is set. - required: false - type: template -battery_level_topic: - description: The MQTT topic subscribed to receive battery level values from the vacuum. - required: false - type: string -charging_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define the charging state of the vacuum. This is required if `charging_topic` is set. - required: false - type: template -charging_topic: - description: The MQTT topic subscribed to receive charging state values from the vacuum. - required: false - type: string -cleaning_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define the cleaning state of the vacuum. This is required if `cleaning_topic` is set. - required: false - type: template -cleaning_topic: - description: The MQTT topic subscribed to receive cleaning state values from the vacuum. - required: false - type: string -command_topic: - description: The MQTT topic to publish commands to control the vacuum. - required: false - type: string -docked_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define the docked state of the vacuum. This is required if `docked_topic` is set. - required: false - type: template -docked_topic: - description: The MQTT topic subscribed to receive docked state values from the vacuum. - required: false - type: string -enabled_by_default: - description: Flag which defines if the entity should be enabled when first added. - required: false - type: boolean - default: true -encoding: - description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of incoming payload. - required: false - type: string - default: "utf-8" -entity_category: - description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. - required: false - type: string - default: None -error_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define potential error messages emitted by the vacuum. This is required if `error_topic` is set. - required: false - type: template -error_topic: - description: The MQTT topic subscribed to receive error messages from the vacuum. - required: false - type: string -fan_speed_list: - description: List of possible fan speeds for the vacuum. - required: false - type: [string, list] -fan_speed_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define the fan speed of the vacuum. This is required if `fan_speed_topic` is set. - required: false - type: template -fan_speed_topic: - description: The MQTT topic subscribed to receive fan speed values from the vacuum. - required: false - type: string -icon: - description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." - required: false - type: icon -json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." - required: false - type: template -json_attributes_topic: - description: The MQTT topic subscribed to receive a JSON dictionary payload and then set as sensor attributes. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-topic-configuration) documentation. - required: false - type: string -name: - description: The name of the vacuum. - required: false - type: string - default: MQTT Vacuum -object_id: - description: Used instead of `name` for automatic generation of `entity_id` - required: false - type: string -payload_available: - description: The payload that represents the available state. - required: false - type: string - default: online -payload_clean_spot: - description: The payload to send to the `command_topic` to begin a spot cleaning cycle. - required: false - type: string - default: clean_spot -payload_locate: - description: The payload to send to the `command_topic` to locate the vacuum (typically plays a song). - required: false - type: string - default: locate -payload_not_available: - description: The payload that represents the unavailable state. - required: false - type: string - default: offline -payload_return_to_base: - description: The payload to send to the `command_topic` to tell the vacuum to return to base. - required: false - type: string - default: return_to_base -payload_start_pause: - description: The payload to send to the `command_topic` to start or pause the vacuum. - required: false - type: string - default: start_pause -payload_stop: - description: The payload to send to the `command_topic` to stop the vacuum. - required: false - type: string - default: stop -payload_turn_off: - description: The payload to send to the `command_topic` to turn the vacuum off. - required: false - type: string - default: turn_off -payload_turn_on: - description: The payload to send to the `command_topic` to begin the cleaning cycle. - required: false - type: string - default: turn_on -qos: - description: The maximum QoS level of the state topic. - required: false - type: integer - default: 0 -retain: - description: If the published message should have the retain flag on or not. - required: false - type: boolean - default: false -schema: - description: The schema to use. Must be `legacy` or omitted to select the legacy schema. - required: false - type: string - default: legacy -send_command_topic: - description: The MQTT topic to publish custom commands to the vacuum. - required: false - type: string -set_fan_speed_topic: - description: The MQTT topic to publish commands to control the vacuum's fan speed. - required: false - type: string -supported_features: - description: List of features that the vacuum supports (possible values are `turn_on`, `turn_off`, `pause`, `stop`, `return_home`, `battery`, `status`, `locate`, `clean_spot`, `fan_speed`, `send_command`). - required: false - type: [string, list] - default: "`turn_on`, `turn_off`, `stop`, `return_home`, `status`, `battery`, `clean_spot`" -unique_id: - description: An ID that uniquely identifies this vacuum. If two vacuums have the same unique ID, Home Assistant will raise an exception. - required: false - type: string -{% endconfiguration %} - -### Legacy configuration example - -{% raw %} - -```yaml -# Example configuration.yaml entry -mqtt: - vacuum: - - name: "MQTT Vacuum" - supported_features: - - turn_on - - turn_off - - pause - - stop - - return_home - - battery - - status - - locate - - clean_spot - - fan_speed - - send_command - command_topic: "vacuum/command" - battery_level_topic: "vacuum/state" - battery_level_template: "{{ value_json.battery_level }}" - charging_topic: "vacuum/state" - charging_template: "{{ value_json.charging }}" - cleaning_topic: "vacuum/state" - cleaning_template: "{{ value_json.cleaning }}" - docked_topic: "vacuum/state" - docked_template: "{{ value_json.docked }}" - error_topic: "vacuum/state" - error_template: "{{ value_json.error }}" - fan_speed_topic: "vacuum/state" - fan_speed_template: "{{ value_json.fan_speed }}" - set_fan_speed_topic: "vacuum/set_fan_speed" - fan_speed_list: - - min - - medium - - high - - max - send_command_topic: "vacuum/send_command" -``` - -{% endraw %} - -### Legacy MQTT Protocol - -The above configuration for this integration expects an MQTT protocol like the following. -See also [Shared MQTT Protocol](#shared-mqtt-protocol). - -#### Legacy Basic Commands - -MQTT topic: `vacuum/command` - -Possible MQTT payloads: - -- `turn_on` - Begin cleaning -- `turn_off` - Turn the Vacuum off -- `return_to_base` - Return to base/dock -- `stop` - Stop the Vacuum -- `clean_spot` - Initialize a spot cleaning cycle -- `locate` - Locate the vacuum (typically by playing a song) -- `start_pause` - Toggle the vacuum between cleaning and stopping - -#### Status/Sensor Updates - -MQTT topic: `vacuum/state` - -MQTT payload: - -```json -{ - "battery_level": 61, - "docked": true, - "cleaning": false, - "charging": true, - "fan_speed": "off", - "error": "Error message" -} -``` - -## State Configuration - -State MQTT vacuum configuration section. +MQTT vacuum configuration section. {% configuration %} availability: @@ -488,7 +177,7 @@ retain: type: boolean default: false schema: - description: The schema to use. Must be `state` to select the state schema. + description: The schema to use. Must be `state`. required: false type: string default: legacy @@ -515,7 +204,7 @@ unique_id: type: string {% endconfiguration %} -### State configuration example +## Configuration example ```yaml # Example configuration.yaml entry @@ -545,12 +234,11 @@ mqtt: send_command_topic: "vacuum/send_command" ``` -### State MQTT Protocol +## MQTT Protocol -The above configuration for this integration expects an MQTT protocol like the following. -See also [Shared MQTT Protocol](#shared-mqtt-protocol). +The configuration for this integration expects an MQTT protocol like the following. -#### State Basic Commands +### Basic Commands MQTT topic: `vacuum/command` @@ -563,82 +251,6 @@ Possible MQTT payloads: - `clean_spot` - Initialize a spot cleaning cycle - `locate` - Locate the vacuum (typically by playing a song) -#### Send Custom Command - -Vacuum send_command allows three parameters: - -- entity_id -- command -- params - optional - -If params are not provided it sends command as payload to MQTT send_command topic. -If params are provided service sends JSON as payload with such structure: - -```json -{ - 'command': 'command', - 'param1-key': 'param1-value' -} -``` - -Service trigger example: - -```yaml -- alias: "Push command based on sensor" - trigger: - - platform: state - entity_id: sensor.sensor - action: - service: vacuum.send_command - target: - entity_id: vacuum.vacuum_entity - data: - command: "custom_command" - params: - - key: value -``` - -MQTT topic: `vacuum/send_command` - -#### Status/Sensor Updates - -MQTT topic: `vacuum/state` - -MQTT payload: - -```json -{ - "battery_level": 61, - "state": "docked", - "fan_speed": "off" -} -``` - -State has to be one of vacuum states supported by Home Assistant: - -- cleaning, -- docked, -- paused, -- idle, -- returning, -- error. - -## Shared MQTT Protocol - -The configuration for this integration expects an MQTT protocol like the following. -These services are identical for both - legacy and state vacuum. - -### Set Fan Speed - -MQTT topic: `vacuum/set_fan_speed` - -Possible MQTT payloads: - -- `min` - Minimum fan speed -- `medium` - Medium fan speed -- `high` - High fan speed -- `max` - Max fan speed - ### Send Custom Command Vacuum send_command allows three parameters: @@ -676,6 +288,40 @@ Service trigger example: MQTT topic: `vacuum/send_command` +### Status/Sensor Updates + +MQTT topic: `vacuum/state` + +MQTT payload: + +```json +{ + "battery_level": 61, + "state": "docked", + "fan_speed": "off" +} +``` + +State has to be one of vacuum states supported by Home Assistant: + +- cleaning, +- docked, +- paused, +- idle, +- returning, +- error. + +### Set Fan Speed + +MQTT topic: `vacuum/set_fan_speed` + +Possible MQTT payloads: + +- `min` - Minimum fan speed +- `medium` - Medium fan speed +- `high` - High fan speed +- `max` - Max fan speed + ## Usage examples ### Usage with cloudless Xiaomi vacuums From 83c7ad319da1eac5c9a72e3665e0829e1f3a4a55 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 4 Jul 2023 08:42:19 +0200 Subject: [PATCH 12/23] Add documentation of deprecated vacuum services to ecovacs (#28055) --- source/_integrations/ecovacs.markdown | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/source/_integrations/ecovacs.markdown b/source/_integrations/ecovacs.markdown index d8066c8aec6..4c9605f9e92 100644 --- a/source/_integrations/ecovacs.markdown +++ b/source/_integrations/ecovacs.markdown @@ -79,6 +79,34 @@ logger: The `ecovacs` vacuum platform allows you to monitor and control your Ecovacs Deebot vacuums. +### Vacuum services + +The `ecovacs` vacuum platform does not support eithor of the services `vacuum.pause` or `vacuum.start`, it supports the following services instead. + +#### Service `vacuum.turn_on` + +Start a new cleaning task. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on specific vacuum. Use `entity_id: all` to target all. | + +#### Service `vacuum.turn_off` + +Stop the current cleaning task and return to the dock. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on specific vacuum. Use `entity_id: all` to target all. | + +#### Service `vacuum.start_pause` + +Start, pause or resume a cleaning task. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on specific vacuum. Use `entity_id: all` to target all. | + ### Integration lifespan The remaining lifespan of components on your Deebot vacuum will be reported as attributes on the vacuum entity. The value will be a whole number representing the percentage of life remaining. From a7383aa8e3aa84abc0550bccf08ac8a83c5e8657 Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Tue, 4 Jul 2023 12:06:23 +0200 Subject: [PATCH 13/23] Add Brel HUB-3 as supported (#28059) --- source/_integrations/motion_blinds.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_integrations/motion_blinds.markdown b/source/_integrations/motion_blinds.markdown index 9d35704c189..446ebab98ef 100644 --- a/source/_integrations/motion_blinds.markdown +++ b/source/_integrations/motion_blinds.markdown @@ -48,11 +48,15 @@ The following bridges are reported to work with this integration: - D1554 Connector mini-bridge - DD7002B Brel-Home box - D1554 Brel Home USB plug + - Brel HUB-03 {% include integrations/config_flow.md %} ## Retrieving the API Key +The 16 character API key needed to setup the Home Assistant integration needs to be retrieved by first connecting the blind/bridge to the official app of its respective brand. +In that app the key can often be found by clicking multiple times on specific places on the "About" page. + ### Motion Blinds app The Motion Blinds API uses a 16 character key that can be retrieved from the official "Motion Blinds" app for [IOS](https://apps.apple.com/us/app/motion-blinds/id1437234324) or [Android](https://play.google.com/store/apps/details?id=com.coulisse.motion). From dd2eb0d85cefb48b936c70103aeb537cb608f842 Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Tue, 4 Jul 2023 12:12:24 +0200 Subject: [PATCH 14/23] Explanation of conditions: Rephrase trigger statement (#28057) --- source/_docs/automation/condition.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/automation/condition.markdown b/source/_docs/automation/condition.markdown index a0516282b1e..c993f3f705c 100644 --- a/source/_docs/automation/condition.markdown +++ b/source/_docs/automation/condition.markdown @@ -3,7 +3,7 @@ title: "Automation Conditions" description: "Automations can test conditions when invoked." --- -Conditions are an optional part of an automation rule. They can be used to prevent the automation's actions from being run. After an automation has been triggered, all conditions will be checked. If any of them do not return true, the automation will stop executing. Conditions look very similar to triggers, but they are very different — a trigger will look at events happening in the system, while a condition only looks at how the system looks right now. A trigger can observe that a switch is being turned on. A condition can only see if a switch is currently on or off. +Conditions are an optional part of an automation rule. They can be used to prevent the automation's actions from being run. After a trigger occurred, all conditions will be checked. If any of them do not return true, the automation will stop executing. Conditions look very similar to triggers, but they are very different — a trigger will look at events happening in the system, while a condition only looks at how the system looks right now. A trigger can observe that a switch is being turned on. A condition can only see if a switch is currently on or off. The available conditions for an automation are the same as for the script syntax so see that page for a [full list of available conditions](/docs/scripts/conditions/). From 4861150200e8d08289d19c091f652a48231e9d98 Mon Sep 17 00:00:00 2001 From: Petro31 <35082313+Petro31@users.noreply.github.com> Date: Tue, 4 Jul 2023 08:36:08 -0400 Subject: [PATCH 15/23] Simple fix to clarify information. (#28065) Co-authored-by: gleversluis <46139776+gleversluis@users.noreply.github.com> --- 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 d2321a86d30..e626dafef95 100644 --- a/source/_integrations/zwave_js.markdown +++ b/source/_integrations/zwave_js.markdown @@ -57,7 +57,7 @@ To run a Z-Wave network, you need the following elements: ### Setting up a Z-Wave JS server -The easiest way to get started is by using the built-in Z-Wave JS add-on in Home Assistant. +If you are running Home Assistant Operating System or Home Assistant Supervised, the easiest way to get started is by using the built-in Z-Wave JS add-on in Home Assistant. For other ways to setup a Z-Wave server, refer to the [advanced installation instructions](#advanced-installation-instructions). From 6ab52792cbca30095ee8da99d9690af98d18680a Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Tue, 4 Jul 2023 16:59:05 +0200 Subject: [PATCH 16/23] Common tasks: add enable entities (#28046) --- .../asides/common_tasks_navigation.html | 3 ++- .../_includes/common-tasks/enable_entities.md | 12 ++++++++++++ source/common-tasks/general.markdown | 8 ++++++++ .../images/screenshots/enable_entities_01.png | Bin 0 -> 54629 bytes .../images/screenshots/enable_entities_03.png | Bin 0 -> 68752 bytes 5 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 source/_includes/common-tasks/enable_entities.md create mode 100644 source/common-tasks/general.markdown create mode 100644 source/images/screenshots/enable_entities_01.png create mode 100644 source/images/screenshots/enable_entities_03.png diff --git a/source/_includes/asides/common_tasks_navigation.html b/source/_includes/asides/common_tasks_navigation.html index 92eb027cb99..c44d4df0f9f 100644 --- a/source/_includes/asides/common_tasks_navigation.html +++ b/source/_includes/asides/common_tasks_navigation.html @@ -5,7 +5,8 @@
  • {% active_link /common-tasks/os/ Home Assistant Operating System %}
  • {% active_link /common-tasks/container/ Home Assistant Container %}
  • {% active_link /common-tasks/core/ Home Assistant Core %}
  • -
  • {% active_link /common-tasks/supervised/ Home Assistant Supervised %}
  • +
  • {% active_link /common-tasks/supervised/ Home Assistant Supervised %} +
  • {% active_link /common-tasks/general/ Installation independent %}
  • diff --git a/source/_includes/common-tasks/enable_entities.md b/source/_includes/common-tasks/enable_entities.md new file mode 100644 index 00000000000..6762b0be033 --- /dev/null +++ b/source/_includes/common-tasks/enable_entities.md @@ -0,0 +1,12 @@ +## Enabling entities + +Some entities are disabled by default. To enable them, follow these steps: + +1. Go to **{% my integrations title="Settings > Devices & Services" %}** and select the integration of interest. +1. Select **entities**. +1. From the list of entities, select the entity you want to enable. + ![Select entity from list](/images/screenshots/enable_entities_01.png) +1. In the pop-up, select the cogwheel. +1. Toggle the **Enabled** button. + ![Enable entities](/images/screenshots/enable_entities_03.png) +1. To save the changes, select **Update**. diff --git a/source/common-tasks/general.markdown b/source/common-tasks/general.markdown new file mode 100644 index 00000000000..08405a79f43 --- /dev/null +++ b/source/common-tasks/general.markdown @@ -0,0 +1,8 @@ +--- +title: "Common tasks - installation independent" +description: "Common tasks" +installation_name: "Installation independent" +--- +This section provides tasks that do not depend on a specific Home Assistant installation type or a specific integration. They may be referenced in other procedures. + +{% include common-tasks/enable_entities.md %} \ No newline at end of file diff --git a/source/images/screenshots/enable_entities_01.png b/source/images/screenshots/enable_entities_01.png new file mode 100644 index 0000000000000000000000000000000000000000..65745f68fae668c74a51944ffb00a1da5878a757 GIT binary patch literal 54629 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 L6e#1<_WgeVxss@K literal 0 HcmV?d00001 diff --git a/source/images/screenshots/enable_entities_03.png b/source/images/screenshots/enable_entities_03.png new file mode 100644 index 0000000000000000000000000000000000000000..a2717acea36c75d35c0d500f093e0c198d063511 GIT binary patch literal 68752 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

    0KGMjnE3gYTc7eg|$YJv)2&(2)8^TH#JOC|LIl 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 literal 0 HcmV?d00001 From d4f90d89f8d6b42eaad84cfdd0129ba53b6f6b72 Mon Sep 17 00:00:00 2001 From: Jan Bouwhuis Date: Wed, 5 Jul 2023 06:09:27 +0200 Subject: [PATCH 17/23] Alternative for updating discovery examples (#28026) * Alternative for updating discovery examples * tiny tweak --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/mqtt.markdown | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown index 211ab778865..3a9cebd44d1 100644 --- a/source/_integrations/mqtt.markdown +++ b/source/_integrations/mqtt.markdown @@ -565,16 +565,18 @@ A motion detection device which can be represented by a [binary sensor](/integra - Configuration topic: `homeassistant/binary_sensor/garden/config` - State topic: `homeassistant/binary_sensor/garden/state` -- Payload: `{"name": "garden", "device_class": "motion", "state_topic": "homeassistant/binary_sensor/garden/state"}` +- Configuration payload: `{"name": "garden", "device_class": "motion", "state_topic": "homeassistant/binary_sensor/garden/state", "unique_id": "motion01ad", "device": {"identifiers": ["01ad"], "name": "Garden" }}` - Retain: The -r switch is added to retain the configuration topic in the broker. Without this, the sensor will not be available after Home Assistant restarts. -To create a new sensor manually. +It is also a good idea to add a `unique_id` to allow changes to the entity and a `device` mapping so we can group all sensors of a device together. + +To create a new sensor manually: ```bash -mosquitto_pub -r -h 127.0.0.1 -p 1883 -t "homeassistant/binary_sensor/garden/config" -m '{"name": "garden", "device_class": "motion", "state_topic": "homeassistant/binary_sensor/garden/state"}' +mosquitto_pub -r -h 127.0.0.1 -p 1883 -t "homeassistant/binary_sensor/garden/config" -m '{"name": "garden", "device_class": "motion", "state_topic": "homeassistant/binary_sensor/garden/state", "unique_id": "motion01ad", "device": {"identifiers": ["01ad"], "name": "Garden" }}' ``` -Update the state. +Update the state: ```bash mosquitto_pub -h 127.0.0.1 -p 1883 -t "homeassistant/binary_sensor/garden/state" -m ON @@ -593,9 +595,9 @@ For more details please refer to the [MQTT testing section](/integrations/mqtt/# Setting up a sensor with multiple measurement values requires multiple consecutive configuration topic submissions. - Configuration topic no1: `homeassistant/sensor/sensorBedroomT/config` -- Configuration payload no1: `{"device_class": "temperature", "name": "Temperature", "state_topic": "homeassistant/sensor/sensorBedroom/state", "unit_of_measurement": "°C", "value_template": "{% raw %}{{ value_json.temperature}}{% endraw %}" }` +- Configuration payload no1: `{"device_class": "temperature", "name": "Temperature", "state_topic": "homeassistant/sensor/sensorBedroom/state", "unit_of_measurement": "°C", "value_template": "{% raw %}{{ value_json.temperature}}{% endraw %}","unique_id": "temp01ae", "device": {"identifiers": ["bedroom01ae"], "name": "Bedroom" }}` - Configuration topic no2: `homeassistant/sensor/sensorBedroomH/config` -- Configuration payload no2: `{"device_class": "humidity", "name": "Humidity", "state_topic": "homeassistant/sensor/sensorBedroom/state", "unit_of_measurement": "%", "value_template": "{% raw %}{{ value_json.humidity}}{% endraw %}" }` +- Configuration payload no2: `{"device_class": "humidity", "name": "Humidity", "state_topic": "homeassistant/sensor/sensorBedroom/state", "unit_of_measurement": "%", "value_template": "{% raw %}{{ value_json.humidity}}{% endraw %}","unique_id": "hum01ae", "device": {"identifiers": ["bedroom01ae"], "name": "Bedroom" } }` - Common state payload: `{ "temperature": 23.20, "humidity": 43.70 }` #### Entities with command topics @@ -605,15 +607,15 @@ Setting up a light, switch etc. is similar but requires a `command_topic` as men - Configuration topic: `homeassistant/switch/irrigation/config` - State topic: `homeassistant/switch/irrigation/state` - Command topic: `homeassistant/switch/irrigation/set` -- Payload: `{"name": "garden", "command_topic": "homeassistant/switch/irrigation/set", "state_topic": "homeassistant/switch/irrigation/state"}` +- Payload: `{"name": "Irrigation", "command_topic": "homeassistant/switch/irrigation/set", "state_topic": "homeassistant/switch/irrigation/state", "unique_id": "irr01ad", "device": {"identifiers": ["garden01ad"], "name": "Garden" }}` - Retain: The -r switch is added to retain the configuration topic in the broker. Without this, the sensor will not be available after Home Assistant restarts. ```bash mosquitto_pub -r -h 127.0.0.1 -p 1883 -t "homeassistant/switch/irrigation/config" \ - -m '{"name": "garden", "command_topic": "homeassistant/switch/irrigation/set", "state_topic": "homeassistant/switch/irrigation/state"}' + -m '{"name": "garden", "command_topic": "homeassistant/switch/irrigation/set", "state_topic": "homeassistant/switch/irrigation/state", "unique_id": "irr01ad", "device": {"identifiers": ["garden01ad"], "name": "Garden" }}}' ``` -Set the state. +Set the state: ```bash mosquitto_pub -h 127.0.0.1 -p 1883 -t "homeassistant/switch/irrigation/set" -m ON @@ -652,7 +654,6 @@ Setting up a [light that takes JSON payloads](/integrations/light.mqtt/#json-sch #### Use object_id to influence the entity id - The entity id is automatically generated from the entity's name. All MQTT integrations optionally support providing an `object_id` which will be used instead if provided. - Configuration topic: `homeassistant/sensor/device1/config` From 107efe7016dcfc05f33ae2fa5df8199fb9cbd48f Mon Sep 17 00:00:00 2001 From: Mark Huson Date: Tue, 4 Jul 2023 21:15:26 -0700 Subject: [PATCH 18/23] Setting fan speed is also supported (#28069) --- source/_integrations/sharkiq.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/sharkiq.markdown b/source/_integrations/sharkiq.markdown index 5433d8b6a72..c1dcdcb217e 100644 --- a/source/_integrations/sharkiq.markdown +++ b/source/_integrations/sharkiq.markdown @@ -28,5 +28,6 @@ Currently supported services are: - `stop` - `return_to_base` - `locate` +- `set_fan_speed` If `pause` does not work for you, then it is not supported by your vacuum. The `stop` service will provide similar functionality. From 1373254c558808ec97b6a528a93d8fcdf70327f3 Mon Sep 17 00:00:00 2001 From: Erik Nygren Date: Wed, 5 Jul 2023 01:49:44 -0400 Subject: [PATCH 19/23] Update purpleair.markdown to include instructions to get an API key (#27852) * Update purpleair.markdown to include instructions to get an API key Add instructions on how to create a Purple Air API Key needed to enable the integration. Addresses ttps://github.com/home-assistant/core/issues/93663 * Apply suggestions from code review --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/purpleair.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/_integrations/purpleair.markdown b/source/_integrations/purpleair.markdown index 3ca6f27dda2..abcad5a5c0a 100644 --- a/source/_integrations/purpleair.markdown +++ b/source/_integrations/purpleair.markdown @@ -29,6 +29,21 @@ Remove Sensor: description: Untrack a sensor. {% endconfiguration_basic %} +## Creating an API key + +To add this integration, you need a (free) Purple Air API Key. A new account currently comes with 1 million free points. After that, you need to buy additional points to continue to use the API. The current plugin uses ~30K points/day. The 1 million points last about a month. A lack of points will trigger API errors until you buy more points. + +Detailed instructions are at [https://community.purpleair.com/t/creating-api-keys/3951]([https://community.purpleair.com/t/creating-api-keys/3951]) but in summary you: + +* Create an account at https://develop.purpleair.com/ (which uses Single Sign-On through a Google account). +* On the ['keys'](https://develop.purpleair.com/keys) page press the "plus" button to create an API key. Leave the defaults of **Read** and **Enabled**. +* Go to the ['projects'](https://develop.purpleair.com/projects) page and select the edit (pencil) button on the listed Project. Add points (for example 1,000,000), then select **Update**. +* Go back to the ['keys'](https://develop.purpleair.com/keys) page and copy the API key. It will be a value like XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX. +* Paste that API key into the **API Key** field when creating the integration in Home Assistant. + +Note that if you are using your own sensor, it will need to be set to **Public** to be visible. + + ## Creating an AQI Rating from Raw Particulate Data The PurpleAir API does not provide AQI data; therefore, the integration does not create From 0b1d6bfa167d8ee22fa5f718a91bfbcbfbcdb407 Mon Sep 17 00:00:00 2001 From: Robert Hillis Date: Wed, 5 Jul 2023 02:41:57 -0400 Subject: [PATCH 20/23] Clarify IMAP character set (#27163) * Clarify IMAP character set * typo * Apply suggestions from code review * Update source/_integrations/imap.markdown * Tiny tweak * Fix parser context switching --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Co-authored-by: Franck Nijhof --- source/_integrations/imap.markdown | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/source/_integrations/imap.markdown b/source/_integrations/imap.markdown index 389a8360733..8188f2a32b4 100644 --- a/source/_integrations/imap.markdown +++ b/source/_integrations/imap.markdown @@ -41,15 +41,22 @@ By default, this integration will count unread emails. By configuring the search * `FROM`, `TO`, `SUBJECT` to find emails in a folder (see [IMAP RFC for all standard options](https://tools.ietf.org/html/rfc3501#section-6.4.4)) * [Gmail's IMAP extensions](https://developers.google.com/gmail/imap/imap-extensions) allow raw Gmail searches, like `X-GM-RAW "in: inbox older_than:7d"` to show emails older than one week in your inbox. Note that raw Gmail searches will ignore your folder configuration and search all emails in your account! + ### Selecting a charset supported by the imap server -Below is an example for setting up the integration to connect to your Microsoft 365 account that requires `US_ASCII` as charset: +Below is an example for setting up the integration to connect to your Microsoft 365 account that requires `US-ASCII` as charset: - Server: `outlook.office365.com` - Port: `993` - Username: Your full email address - Password: Your password - Charset: `US-ASCII` +

    + +Yahoo also requires the character set `US-ASCII`. + +
    + ### Selecting an alternate SSL cipher list or disable SSL verification (advanced mode) If the default IMAP server settings do not work, you might try to set an alternate SLL cipher list. @@ -67,6 +74,7 @@ The SSL cipher list and verify SSL are advanced settings. The options are availa Email providers may limit the number of reported emails. The number may be less than the limit (10,000 at least for Yahoo) even if you set the `IMAP search` to reduce the number of results. If you are not getting expected events and cleaning your Inbox or the configured folder is not desired, set up an email filter for the specific sender to go into a new folder. Then create a new config entry or modify the existing one with the desired folder. + ### Using events When a new message arrives that meets the search criteria the `imap` integration will send a custom [event](/docs/automation/trigger/#event-trigger) that can be used to trigger an automation. From 52b2cad688bb10e31dce2311e5a9f8b741e9e26e Mon Sep 17 00:00:00 2001 From: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Date: Wed, 5 Jul 2023 08:43:36 +0200 Subject: [PATCH 21/23] Installation Mac-OS: remove KVM instructions (#27515) --- source/_includes/installation/operating_system.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/source/_includes/installation/operating_system.md b/source/_includes/installation/operating_system.md index 276fc2d1fa3..ec138eeb184 100644 --- a/source/_includes/installation/operating_system.md +++ b/source/_includes/installation/operating_system.md @@ -217,9 +217,6 @@ If you are running an older Windows version or have a stricter network configura ### Download the appropriate image - [VirtualBox][vdi] (.vdi) -{% if page.installation_type == 'macos' %} -- [KVM][qcow2] (.qcow2) -{% endif %} {% if page.installation_type == 'windows' or page.installation_type == 'linux' %} - [KVM][qcow2] (.qcow2) - [Vmware Workstation][vmdk] (.vmdk) @@ -239,7 +236,6 @@ Follow this guide if you already are running a supported virtual machine hypervi - If VirtualBox is not supported on your Mac, and you have experience using virtual machines, you can try running the Home Assistant Operating system on [UTM](https://mac.getutm.app/). {% endif %} - ### Create the virtual machine Load the appliance image into your virtual machine hypervisor. (Note: You are free to assign as much resources as you wish to the VM, please assign enough based on your add-on needs). @@ -277,7 +273,7 @@ _All these can be extended if your usage calls for more resources._ ``` - +{% unless page.installation_type == 'macos' %} - title: KVM (virt-manager) content: | 1. Create a new virtual machine in `virt-manager`. @@ -319,6 +315,7 @@ _All these can be extended if your usage calls for more resources._ Note that this configuration (bus 003, device 003) is just an example, your dongle could be on another bus and/or with another device ID. Please check the correct IDs of your USB dongle with `lsusb`. +{% endunless %} {% if page.installation_type == 'windows' or page.installation_type == 'linux' %} From 25bf7a4d0d71e2a2bec8071690de6a2683e6a327 Mon Sep 17 00:00:00 2001 From: Gabrie van Zanten Date: Wed, 5 Jul 2023 08:48:23 +0200 Subject: [PATCH 22/23] Update roborock.markdown (#27905) Co-authored-by: Franck Nijhof Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/roborock.markdown | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/source/_integrations/roborock.markdown b/source/_integrations/roborock.markdown index f79972c0732..25a056c1c7e 100644 --- a/source/_integrations/roborock.markdown +++ b/source/_integrations/roborock.markdown @@ -51,13 +51,14 @@ We are working on adding a lot of features to the core integration. We have reve ### How can I clean a specific room? We plan to make the process simpler in the future, but for now, it is a multi-step process. -1) Enable debug logging for this integration and reload it. -2) Search your logs for 'Got home data' and then find the attribute rooms. -3) Write the rooms down; they have a name and 6 digit ID. -4) Go to **Developer Tools** > **Services** > **Vacuum: Send Command**. Select your vacuum as the entity and 'get_room_mapping' as the command. -5) Go back to your logs and look at the response to `get_room_mapping`. This is a list of the 6-digit IDs you saw earlier to 2-digit IDs. In your original list of room names and 6-digit IDs, replace the 6-digit ID with its pairing 2-digit ID. -6) Now, you have the 2-digit ID that your vacuum uses to describe a room. -7) Go back to **Developer Tools** > **Services** > **Vacuum: Send Command** then type `app_segment_clean` as your command and 'segments' with a list of the 2-digit IDs you want to clean. Then, add `repeat` with a number (ranging from 1 to 3) to determine how many times you want to clean these areas. +1) Make sure to first name the rooms in the Roborock app; otherwise, they won't appear in the debug log. +2) [Enable debug logging](/docs/configuration/troubleshooting/#enabling-debug-logging) for this integration and reload it. +3) Search your logs for 'Got home data' and find the attribute rooms. +4) Write the rooms down; they have a name and 6 digit ID. +5) Go to {% my developer_call_service service="vacuum.send_command" title="**Developer Tools** > **Services** > **Vacuum: Send Command**" %}. Select your vacuum as the entity and `get_room_mapping` as the command. +6) Go back to your logs and look at the response to `get_room_mapping`. This is a list of the 6-digit IDs you saw earlier to 2-digit IDs. In your original list of room names and 6-digit IDs, replace the 6-digit ID with its pairing 2-digit ID. +7) Now, you have the 2-digit ID that your vacuum uses to describe a room. +8) Go back to {% my developer_call_service service="vacuum.send_command" title="**Developer Tools** > **Services** > **Vacuum: Send Command**" %} then type `app_segment_clean` as your command and `segments` with a list of the 2-digit IDs you want to clean. Then, add `repeat` with a number (ranging from 1 to 3) to determine how many times you want to clean these areas. Example: ```yaml From 44e31260663dc1a0952c5954b6ce49322dc8aa6c Mon Sep 17 00:00:00 2001 From: Sean O'Keeffe Date: Wed, 5 Jul 2023 08:11:40 +0100 Subject: [PATCH 23/23] virt-install requires `--import` (#28067) qcow2 image require `--import` --- source/_includes/installation/operating_system.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_includes/installation/operating_system.md b/source/_includes/installation/operating_system.md index ec138eeb184..d76f6d3eb8f 100644 --- a/source/_includes/installation/operating_system.md +++ b/source/_includes/installation/operating_system.md @@ -290,7 +290,7 @@ _All these can be extended if your usage calls for more resources._ - title: KVM (virt-install) content: | ```bash - virt-install --name hass --description "Home Assistant OS" --os-variant=generic --ram=2048 --vcpus=2 --disk ,bus=sata --graphics none --boot uefi + virt-install --name hass --description "Home Assistant OS" --os-variant=generic --ram=2048 --vcpus=2 --disk ,bus=sata --import --graphics none --boot uefi ```
    If you have a USB dongle to attach, you need to add the option `--hostdev busID.deviceId`. You can discover these IDs via the `lsusb` command. @@ -310,7 +310,7 @@ _All these can be extended if your usage calls for more resources._ You can recognize the Sonoff dongle at `Bus 003 Device 003`. So the command to install the VM will become: ```bash - virt-install --name hass --description "Home Assistant OS" --os-variant=generic --ram=2048 --vcpus=2 --disk ,bus=sata --graphics none --boot uefi --hostdev 003.003 + virt-install --name hass --description "Home Assistant OS" --os-variant=generic --ram=2048 --vcpus=2 --disk ,bus=sata --import --graphics none --boot uefi --hostdev 003.003 ``` Note that this configuration (bus 003, device 003) is just an example, your dongle could be on another bus and/or with another device ID. Please check the correct IDs of your USB dongle with `lsusb`.