diff --git a/Gemfile.lock b/Gemfile.lock index c77920e59cc..e7015419b2d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -66,7 +66,7 @@ GEM kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) liquid (4.0.3) - listen (3.4.1) + listen (3.5.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.4.0) diff --git a/package-lock.json b/package-lock.json index 56134db43f0..04e7bfe16e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -104,9 +104,9 @@ "dev": true }, "@textlint/ast-tester": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-2.3.3.tgz", - "integrity": "sha512-FNV4B0+kbvVuxvKEEf3NdPtArile940wtJeQx6flw6SLabEYDP+ZVwg7FVO17zopyIsOPmT4yPOJbt93BnDHng==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-2.3.4.tgz", + "integrity": "sha512-2gIsnJ1Dmr5jjF+u/vusNRqk2bJi0WwwbjP9WV/op51DhDTi7BUNjVSiZtcP9NVxidvs51XNEg+EMTRoKP3Msg==", "dev": true, "requires": { "@textlint/ast-node-types": "^4.4.2" @@ -121,9 +121,9 @@ } }, "@textlint/ast-traverse": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-2.3.3.tgz", - "integrity": "sha512-L+iVejKaethlUKvFyQtBs373GAA5LJCkraAdbL6F6cOiCviKqpFf9HQmdCQAyYOGrjs30LgpsOLsZACgBJ7uOg==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-2.3.4.tgz", + "integrity": "sha512-NcjPXCvP8r4D2/azeQhwjPvh2+099I9RRBUrg6IpMfTW4IUUJb4BwZOPgjW+XRIVc71Dhgm82VSIagDL90FYcg==", "dev": true, "requires": { "@textlint/ast-node-types": "^4.4.2" @@ -138,22 +138,22 @@ } }, "@textlint/feature-flag": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-3.3.3.tgz", - "integrity": "sha512-YLbKeckvIu4a+IZv/nHW+BGyYZBdCSJxtKyEp8HTfKam8AC26bdU0ryzO7xmmHN0FdPNwAn67AfZTWssKcWUVg==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-3.3.4.tgz", + "integrity": "sha512-ULAqdD2y1sPAhbkaMjS2fltrZYCNQGsNDv/NQWFsCmDpQ1R8kxoUaTiXpebTM+nVuyvU5GfdkxhHyMarPIjmYw==", "dev": true, "requires": { "map-like": "^2.0.0" } }, "@textlint/fixer-formatter": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-3.3.3.tgz", - "integrity": "sha512-4UF1mNFQHB5iDFNFBSK3ss8c5NiAgGxLXijATXJ3SSjhiTb3sQSX3RcB1wMwI0/gcizRm3r5j16Kelv8IOrbzA==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-3.3.4.tgz", + "integrity": "sha512-H4i+N+uN7EiI5vRnfRIccFc5yekNHnO8795fiOK2TZPb6SzY3iwLOGZ2rDKvgu7ZKdyGW945w3T0elUF3Fkr5A==", "dev": true, "requires": { - "@textlint/module-interop": "^1.2.3", - "@textlint/types": "^1.5.3", + "@textlint/module-interop": "^1.2.4", + "@textlint/types": "^1.5.4", "chalk": "^1.1.3", "debug": "^4.3.1", "diff": "^4.0.2", @@ -171,9 +171,9 @@ "dev": true }, "@textlint/types": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.3.tgz", - "integrity": "sha512-xWyqdZrBUs66f8hKm3QZO2NEa6mqZAL0nTSBKu2U2Ob9R5r81N/WPvvz5mEqPVPRZrf0hi/lNerFzEIZH4YgnQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.4.tgz", + "integrity": "sha512-bhSrOjW8AFSa/xf6lYZ2akE0j+4O/WEAA2S/R8RrjNMkA5Az2j57mxPNpqMhEeyHDkpzN/coIlqUwgYvcJHv1A==", "dev": true, "requires": { "@textlint/ast-node-types": "^4.4.2" @@ -264,18 +264,18 @@ } }, "@textlint/kernel": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-3.4.3.tgz", - "integrity": "sha512-kQUjkVC6kXVuTxVqhPuxgjEaONDH1hliRgi5tMyxGDD3c3IOJVeatutL9vqpbAMgJL7blyTaWSdOJdsqZfCW3g==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-3.4.4.tgz", + "integrity": "sha512-ro9TPnE16C6gtKkY3aOjTs8ZfzAxdXLCV9JD4BuV5P+xBiiu9NdiE2Hwm3LyEGQjMxaKnXjbm/DTCAxA4gz0Dg==", "dev": true, "requires": { "@textlint/ast-node-types": "^4.4.2", - "@textlint/ast-tester": "^2.3.3", - "@textlint/ast-traverse": "^2.3.3", - "@textlint/feature-flag": "^3.3.3", - "@textlint/source-code-fixer": "^3.4.3", - "@textlint/types": "^1.5.3", - "@textlint/utils": "^1.2.3", + "@textlint/ast-tester": "^2.3.4", + "@textlint/ast-traverse": "^2.3.4", + "@textlint/feature-flag": "^3.3.4", + "@textlint/source-code-fixer": "^3.4.4", + "@textlint/types": "^1.5.4", + "@textlint/utils": "^1.2.4", "debug": "^4.3.1", "deep-equal": "^1.1.1", "map-like": "^2.0.0", @@ -289,9 +289,9 @@ "dev": true }, "@textlint/types": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.3.tgz", - "integrity": "sha512-xWyqdZrBUs66f8hKm3QZO2NEa6mqZAL0nTSBKu2U2Ob9R5r81N/WPvvz5mEqPVPRZrf0hi/lNerFzEIZH4YgnQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.4.tgz", + "integrity": "sha512-bhSrOjW8AFSa/xf6lYZ2akE0j+4O/WEAA2S/R8RrjNMkA5Az2j57mxPNpqMhEeyHDkpzN/coIlqUwgYvcJHv1A==", "dev": true, "requires": { "@textlint/ast-node-types": "^4.4.2" @@ -309,15 +309,15 @@ } }, "@textlint/linter-formatter": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-3.3.3.tgz", - "integrity": "sha512-njm1VwfG1lVuc9TnzSecNaghRtIAdQVXULc1wHlBoingT/w+bz/SgPvw3eec/rUfzde6ms3O4dFAG3zPNdRoIQ==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-3.3.4.tgz", + "integrity": "sha512-k1lyvR+w7ctwr5dWhMVRTKk19GH99BAO2dLk8ZS0ZcYyKqKAKu6Iyb1cWEg/u3dT3KFbWwoegnAelfz5828SHQ==", "dev": true, "requires": { "@azu/format-text": "^1.0.1", "@azu/style-format": "^1.0.0", - "@textlint/module-interop": "^1.2.3", - "@textlint/types": "^1.5.3", + "@textlint/module-interop": "^1.2.4", + "@textlint/types": "^1.5.4", "chalk": "^1.1.3", "concat-stream": "^1.6.2", "debug": "^4.3.1", @@ -340,9 +340,9 @@ "dev": true }, "@textlint/types": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.3.tgz", - "integrity": "sha512-xWyqdZrBUs66f8hKm3QZO2NEa6mqZAL0nTSBKu2U2Ob9R5r81N/WPvvz5mEqPVPRZrf0hi/lNerFzEIZH4YgnQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.4.tgz", + "integrity": "sha512-bhSrOjW8AFSa/xf6lYZ2akE0j+4O/WEAA2S/R8RrjNMkA5Az2j57mxPNpqMhEeyHDkpzN/coIlqUwgYvcJHv1A==", "dev": true, "requires": { "@textlint/ast-node-types": "^4.4.2" @@ -479,9 +479,9 @@ } }, "@textlint/markdown-to-ast": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-6.3.3.tgz", - "integrity": "sha512-CG8igvwlmcHb/d2zXDXchXgqofnDsxQDYOMpsk4zv1EN8PL5ycijQgmKJ0yB0ZxFduv0AR22rnJvPtB4ymzCyQ==", + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-6.3.4.tgz", + "integrity": "sha512-LLScbDRXov1l4U4OCLJ5clu9eWNonBG+rhuArwYAHpf0hwIoNoETfAQvrNtXZG/NZ96fdWv4PLtaN6dA4ldRdQ==", "dev": true, "requires": { "@textlint/ast-node-types": "^4.4.2", @@ -597,18 +597,18 @@ } }, "@textlint/module-interop": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-1.2.3.tgz", - "integrity": "sha512-BHpF/NSOWZIBJVvwe1Aww9k7lh04lr8xrFpoDfmdp3QolrAakdd5xTso2U1kJpWeZatQgh4naSI2X7IUEM2b2Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-1.2.4.tgz", + "integrity": "sha512-/wUKvDbBEujrhpcuD7Et4Mcicm3SG2oAe/tyMruLxSJ86umGxd34dEcHRON8fJzou9qyt0gFoczcypd4k3hJow==", "dev": true }, "@textlint/source-code-fixer": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-3.4.3.tgz", - "integrity": "sha512-jXuVMICfnTkg8GKPpuL2gLgUt2IicgKIOAQHw8BN9vGRstdPDth37Qc9iIjM6b68TPbRnDLb7GCENdXYEQKpcg==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-3.4.4.tgz", + "integrity": "sha512-GDHVin2EJ9PGJ33VMGlqtPcvUlY+pkTbaWs4jWv8oBaEK8UUBzS5ZpEc4xi7Xp5vIXnVsCSLKNC6bgvR9X/AoQ==", "dev": true, "requires": { - "@textlint/types": "^1.5.3", + "@textlint/types": "^1.5.4", "debug": "^4.3.1" }, "dependencies": { @@ -619,9 +619,9 @@ "dev": true }, "@textlint/types": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.3.tgz", - "integrity": "sha512-xWyqdZrBUs66f8hKm3QZO2NEa6mqZAL0nTSBKu2U2Ob9R5r81N/WPvvz5mEqPVPRZrf0hi/lNerFzEIZH4YgnQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.4.tgz", + "integrity": "sha512-bhSrOjW8AFSa/xf6lYZ2akE0j+4O/WEAA2S/R8RrjNMkA5Az2j57mxPNpqMhEeyHDkpzN/coIlqUwgYvcJHv1A==", "dev": true, "requires": { "@textlint/ast-node-types": "^4.4.2" @@ -639,9 +639,9 @@ } }, "@textlint/text-to-ast": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-3.3.3.tgz", - "integrity": "sha512-Y1hRnI+PoCbomQZtnog31DCUgz/diW4X72F7x/bn/VkUg6xq55GAsn2OB4qWvduQMrA+71lOfBMK3tcGJ8Q4Mg==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-3.3.4.tgz", + "integrity": "sha512-oDwGNQCAo7ROnHqaksPEogf8fxXGU3Z61C6NEv0n9vEWEkUX9oUVX4c9kh5UieZL5nN/xIdzVc3TrXywkkOK3g==", "dev": true, "requires": { "@textlint/ast-node-types": "^4.4.2" @@ -656,21 +656,21 @@ } }, "@textlint/textlint-plugin-markdown": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.3.3.tgz", - "integrity": "sha512-AnScn1Qt7NMw3K0wNUtJYyGYr6DLe/wsnQbtLd3xjS+6Ky8C+6Ohd+ms1DKH0vRztc8huM/wmV7n5Bx+1qBevA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.3.4.tgz", + "integrity": "sha512-g8KKuwhzzlRjvKrpq3SbGc+JJMAJoy5Xp0Ibvq7QKgNVxwN/f5WtmrJc8CdgFG7++jgtkDPlofz0c9xG63xKwQ==", "dev": true, "requires": { - "@textlint/markdown-to-ast": "^6.3.3" + "@textlint/markdown-to-ast": "^6.3.4" } }, "@textlint/textlint-plugin-text": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.3.3.tgz", - "integrity": "sha512-NKbCbiSYA8mdg74HR+GQDO9q7RRHimnQ88YL0vBtP2oq2x1HZccq0mHlw6dlL775YardBAoHu/qxyJbkxSXBgw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.3.4.tgz", + "integrity": "sha512-ZtctKFR8V9mIZAMibS97xPWlt2lViizIRAy4oDaKCnxAwJ0uAjxm/OlHHdaFwNydGaEDtN60mcmarDqOOAZIiA==", "dev": true, "requires": { - "@textlint/text-to-ast": "^3.3.3" + "@textlint/text-to-ast": "^3.3.4" } }, "@textlint/types": { @@ -683,9 +683,9 @@ } }, "@textlint/utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-1.2.3.tgz", - "integrity": "sha512-jN0pbdOJkIAuqyBqsDvk3FYP6BF+YLMlVzE8xbjDhpw7dpr36iEGKGIuRQJZ0+8nq3CPY7W0EcK6o63QoPuPvQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-1.2.4.tgz", + "integrity": "sha512-FREWc8n6bJFsKehtUlHPtbqnXULWhdnlazqWiHMjiBtcxUfD+1kY3P7PNGbChdzeZGmwBkgFQyGkok8bAGnZOw==", "dev": true }, "@types/mdast": { @@ -2534,22 +2534,22 @@ "dev": true }, "textlint": { - "version": "11.8.3", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-11.8.3.tgz", - "integrity": "sha512-UrknrF3Sgkksq9aI3Y0gs4FBRgAy2oaonAhLOufWs7kA0ulmj3FVYGPA5UPVEKQHUWbnuOaqDteLDs+/9hRc9g==", + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-11.9.0.tgz", + "integrity": "sha512-a9ZCfCOcOTNxEQsRbYBDFNu8m5cjJC+znnXCBommGSdP0W+9QmwZnkralwpxrVhRgWvLz+QyuDXtLBZcqfDmHg==", "dev": true, "requires": { "@textlint/ast-node-types": "^4.4.2", - "@textlint/ast-traverse": "^2.3.3", - "@textlint/feature-flag": "^3.3.3", - "@textlint/fixer-formatter": "^3.3.3", - "@textlint/kernel": "^3.4.3", - "@textlint/linter-formatter": "^3.3.3", - "@textlint/module-interop": "^1.2.3", - "@textlint/textlint-plugin-markdown": "^5.3.3", - "@textlint/textlint-plugin-text": "^4.3.3", - "@textlint/types": "^1.5.3", - "@textlint/utils": "^1.2.3", + "@textlint/ast-traverse": "^2.3.4", + "@textlint/feature-flag": "^3.3.4", + "@textlint/fixer-formatter": "^3.3.4", + "@textlint/kernel": "^3.4.4", + "@textlint/linter-formatter": "^3.3.4", + "@textlint/module-interop": "^1.2.4", + "@textlint/textlint-plugin-markdown": "^5.3.4", + "@textlint/textlint-plugin-text": "^4.3.4", + "@textlint/types": "^1.5.4", + "@textlint/utils": "^1.2.4", "debug": "^4.3.1", "deep-equal": "^1.1.1", "file-entry-cache": "^5.0.1", @@ -2577,9 +2577,9 @@ "dev": true }, "@textlint/types": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.3.tgz", - "integrity": "sha512-xWyqdZrBUs66f8hKm3QZO2NEa6mqZAL0nTSBKu2U2Ob9R5r81N/WPvvz5mEqPVPRZrf0hi/lNerFzEIZH4YgnQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.4.tgz", + "integrity": "sha512-bhSrOjW8AFSa/xf6lYZ2akE0j+4O/WEAA2S/R8RrjNMkA5Az2j57mxPNpqMhEeyHDkpzN/coIlqUwgYvcJHv1A==", "dev": true, "requires": { "@textlint/ast-node-types": "^4.4.2" diff --git a/package.json b/package.json index 0e2ec72a771..c2e70cc6b4f 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "remark-lint-fenced-code-flag": "^2.0.1", "remark-lint-no-shell-dollars": "^2.0.2", "remark-stringify": "^9.0.1", - "textlint": "^11.8.3", + "textlint": "^11.9.0", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^2.1.5" }, diff --git a/source/_docs/automation/editor.markdown b/source/_docs/automation/editor.markdown index a4f8cab57a0..e19c4423f09 100644 --- a/source/_docs/automation/editor.markdown +++ b/source/_docs/automation/editor.markdown @@ -31,3 +31,7 @@ message: Sensor value greater than 10 Automation created or edited via the user interface, are activated immediately after save the automation. + +## Troubleshooting missing automations + +When you're creating automations using the GUI and they don't appear in the UI, make sure that you add back `automation: !include automations.yaml` from the default configuration to your `configuration.yaml`. diff --git a/source/_includes/common-tasks/enable_i2c.md b/source/_includes/common-tasks/enable_i2c.md index 24f69bec34c..252aca836d9 100644 --- a/source/_includes/common-tasks/enable_i2c.md +++ b/source/_includes/common-tasks/enable_i2c.md @@ -1,23 +1,24 @@ ## Enable I2C -Home Assistant using the Home Assistant Operating System is a managed environment, which means you can't use existing methods to enable the I2C bus on a Raspberry Pi. +Home Assistant using the Home Assistant Operating System which is a managed environment, which means you can't use existing methods to enable the I2C bus on a Raspberry Pi. In order to use I2C devices you will have to +- Enable I2C for the Home Assistant Operating System +- Setup I2C devices e.g. sensors -### Step by step instructions +### Enable I2C with an SD card reader + +#### Access the boot partition You will need: - - SD card reader - SD card with Home Assistant Operating System flashed on it -#### Step 1 - Access the Home Assistant Operating System boot partition - Shutdown/turn-off your Home Assistant installation and unplug the SD card. Plug the SD card into an SD card reader and find a drive/file system named `hassos-boot`. The file system might be shown/mounted automatically. If not, use your operating systems disk management utility to find the SD card reader and make sure the first partition is available. -#### Step 2 - Add files to enable I2C +#### Add files to enable I2C - In the root of the `hassos-boot` partition, add a new folder called `CONFIG`. - In the `CONFIG` folder, add another new folder called `modules`. @@ -32,7 +33,7 @@ and make sure the first partition is available. dtparam=i2c_arm=on ``` -#### Step 3 - Start with the new configuration +#### Start with the new OS configuration - Insert the SD card back into your Raspberry Pi. - On startup, the `hassos-config.service` will automatically pickup the new @@ -40,9 +41,7 @@ and make sure the first partition is available. - Another reboot might be necessary to make sure the just imported `rpi-i2c.conf` is present at boot time. -The I2C devices should now be present under /dev. - -### From Home Assistant Operating System Terminal +### Enable I2C via Home Assistant Operating System Terminal Alternatively, by attaching a keyboard and screen to your device, you can access the physical terminal to the Home Assistant Operating System. @@ -62,3 +61,9 @@ You can enable i2c via this terminal: sync reboot ``` +### Troubleshooting + +After rebooting the host there should be `i2c-0` and similar device files in `/dev`. If such device files are missing, enabling I2C failed for some reason. You can check the status of I2C kernel modules by using `lsmod | grep i2c` in the terminal. If they are loaded, you should find at least the entry `i2c_dev`. Active usage of the modules is indicated by a number, e.g. `i2c_dev 20480 2` would indicate two active I2C device files. + +An active I2C can also be check with a multi meter showing 3.3 V on the I2C pins GPIO2 and GPIO3. + diff --git a/source/_integrations/calendar.google.markdown b/source/_integrations/calendar.google.markdown index a66e3db9ccb..5263bc9e906 100644 --- a/source/_integrations/calendar.google.markdown +++ b/source/_integrations/calendar.google.markdown @@ -80,7 +80,7 @@ The next time you run or restart Home Assistant, you should find a new notificat ## Calendar Configuration -Editing the `google_calendars.yaml` file. +With every restart all calendars of the configured Google account will get pulled and added to the `google_calendars.yaml` and preconfigured as a single entity. By setting the 'track' variable to `true` the calendar will get monitored for new events which can be used for automations and its content is shown on the 'Calendar' dashboard (mind 'max_results' is set to 5 by default). A basic entry for a single calendar looks like: @@ -90,19 +90,38 @@ A basic entry for a single calendar looks like: - device_id: test_everything name: Give me everything track: true + max_results: 10 +``` + +From this, we will get a binary sensor `calendar.test_everything` triggered by any event on the calendar and will show the next 10 events on the 'Calendar' dashboard. + +A bit more elaborate configuration: + +```yaml - cal_id: "*****@group.calendar.google.com" entities: + - device_id: test_unimportant + name: UnImportant Stuff + track: true + search: "#UnImportant" - device_id: test_important name: Important Stuff track: true search: "#Important" offset: "!!" - - device_id: test_unimportant - name: UnImportant Stuff - track: true - search: "#UnImportant" ``` +From this we will end up with the binary sensors `calendar.test_unimportant` and `calendar.test_important` which will toggle themselves on/off based on events on the same calendar that match the search value set for each. +`calendar.test_unimportant` will toggle for events whose title contain '#UnImportant' +`calendar.test_important` will toggle for events whose title contain '#Important'. By using the offset variable an event title containing "#Important !!-10" will toggle the sensor 10 minutes before the event starts. + +
+ +If you use a `#` sign for `search` then wrap the whole search term in quotes. +Otherwise everything following the hash sign would be considered a YAML comment. + +
+ {% configuration %} cal_id: description: The Google *generated* unique id for this calendar. @@ -153,21 +172,7 @@ entities: default: 5 {% endconfiguration %} -From this we will end up with the binary sensors `calendar.test_unimportant` and -`calendar.test_important` which will toggle themselves on/off based on events on -the same calendar that match the search value set for each. -You'll also have a sensor `calendar.test_everything` that will -not filter events out and always show the next event available. -But what if you only wanted it to toggle based on all events? -Just leave out the *search* parameter. - -
- -If you use a `#` sign for `search` then wrap the whole search term in quotes. -Otherwise everything following the hash sign would be considered a YAML comment. - -
### Sensor attributes diff --git a/source/_integrations/history_stats.markdown b/source/_integrations/history_stats.markdown index e9afb5276e7..d75bae58ecd 100644 --- a/source/_integrations/history_stats.markdown +++ b/source/_integrations/history_stats.markdown @@ -180,6 +180,18 @@ Here, last Monday is _today_ as a timestamp, minus 86400 times the current weekd {% endraw %} +**Next 4 pm**: 24 hours, from the last 4 pm till the next 4 pm. If it hasn't been 4 pm today, that would be 4 pm yesterday until 4 pm today. If it is already past 4 pm today, it will be 4 pm today until 4 pm tomorrow. When changing the start time, then add or subtract to the 8-hour buffer to match the next midnight. + +{% raw %} + +```yaml + end: "{{ (now().replace(minute=0,second=0) + timedelta(hours=8)).replace(hour=16) }}" + duration: + hours: 24 +``` + +{% endraw %} + **Last 30 days**: ends today at 00:00, lasts 30 days. Easy one. {% raw %} diff --git a/source/_integrations/influxdb.markdown b/source/_integrations/influxdb.markdown index 2101a1e531b..334dffe5d24 100644 --- a/source/_integrations/influxdb.markdown +++ b/source/_integrations/influxdb.markdown @@ -516,8 +516,7 @@ The example configuration entry below create two request to your local InfluxDB sensor: platform: influxdb host: localhost - -username: home-assistant + username: home-assistant password: password queries: - name: last value of foo diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown index 11166bcb3c0..442a7daf413 100644 --- a/source/_integrations/knx.markdown +++ b/source/_integrations/knx.markdown @@ -68,14 +68,13 @@ In order to make use of the various platforms that KNX offers you will need to a ```yaml knx: - binary_sensor: !include knx_binary_sensor.yaml - switch: !include knx_switch.yaml + # configure platforms directly in configuration.yaml + binary_sensor: + - name: "My first binary sensor" + state_address: "1/2/3" + # etc... + # or outsource platform configuration to separate files sensor: !include knx_sensor.yaml - cover: !include knx_cover.yaml - light: !include knx_light.yaml - climate: !include knx_climate.yaml - notify: !include knx_notify.yaml - scene: !include knx_scene.yaml ``` Please see the dedicated platform sections below about how to configure them correctly. @@ -143,6 +142,7 @@ Explicit connection via KNX/IP routing. This requires multicast communication to ```yaml knx: + routing: ``` {% configuration %} @@ -284,27 +284,27 @@ KNX integration is able to expose entity states or attributes to KNX bus. The in # Example configuration.yaml entry knx: expose: - - type: "temperature" - entity_id: "sensor.owm_temperature" + - type: temperature + entity_id: sensor.owm_temperature address: "0/0/2" - - type: "string" + - type: string address: "0/6/4" - entity_id: "sensor.owm_weather" - - type: "binary" - entity_id: "binary_sensor.kitchen_window" + entity_id: sensor.owm_weather + - type: binary + entity_id: binary_sensor.kitchen_window address: "0/6/5" - - type: "binary" - entity_id: "light.office" + - type: binary + entity_id: light.office address: "0/3/0" default: false - - type: "percentU8" - entity_id: "light.office" - attribute: "brightness" + - type: percentU8 + entity_id: light.office + attribute: brightness default: 0 address: "0/3/1" - - type: "time" + - type: time address: "0/0/1" - - type: "datetime" + - type: datetime address: "0/0/23" ``` @@ -344,7 +344,7 @@ Binary sensors are read-only. To write to the KNX bus configure an exposure [KNX ```yaml knx: binary_sensor: - - name: sensor1 + - name: "Sensor 1" state_address: "6/0/2" ``` @@ -398,7 +398,7 @@ Let's pretend you have a binary sensor with the name `Livingroom.Switch` and you automation: - trigger: platform: numeric_state - entity_id: binary_sensor.Livingroom_Switch + entity_id: binary_sensor.livingroom_switch attribute: counter above: 0 below: 2 @@ -411,7 +411,7 @@ automation: service: light.turn_on - trigger: platform: numeric_state - entity_id: binary_sensor.Livingroom_Switch + entity_id: binary_sensor.livingroom_switch attribute: counter above: 1 below: 3 @@ -457,7 +457,7 @@ To use your KNX thermostats in your installation, add the following lines to you # Example configuration.yaml entry knx: climate: - - name: HASS-Kitchen.Temperature + - name: "Kitchen" temperature_address: "5/1/1" setpoint_shift_address: "5/1/2" setpoint_shift_state_address: "5/1/3" @@ -472,7 +472,7 @@ Alternatively, if your device has dedicated binary group addresses for frost/nig # Example configuration.yaml entry knx: climate: - - name: HASS-Kitchen.Temperature + - name: "Kitchen" temperature_address: "5/1/1" setpoint_shift_address: "5/1/2" setpoint_shift_state_address: "5/1/3" @@ -490,7 +490,7 @@ attributes of the climate device to avoid issues with exceeding valid temperatur # Example configuration.yaml entry knx: climate: - - name: HASS-Kitchen.Temperature + - name: "Kitchen" temperature_address: "5/1/2" target_temperature_address: "5/1/4" target_temperature_state_address: "5/1/1" @@ -514,7 +514,7 @@ Example: # Example configuration.yaml entry knx: climate: - - name: HASS-Kitchen.Temperature + - name: "Kitchen" temperature_address: "5/1/1" setpoint_shift_address: "5/1/2" setpoint_shift_state_address: "5/1/3" @@ -689,7 +689,7 @@ To use your KNX covers in your installation, add the following lines to your top # Example configuration.yaml entry knx: cover: - - name: "Kitchen.Shutter" + - name: "Kitchen shutter" move_long_address: "3/0/0" move_short_address: "3/0/1" stop_address: "3/0/4" @@ -772,7 +772,7 @@ To use your KNX fan in your installation, add the following lines to your top le # Example configuration.yaml entry knx: fan: - - name: "ceiling fan" + - name: "Ceiling fan" address: "9/0/1" state_address: "9/0/2" ``` @@ -819,7 +819,7 @@ To use your KNX light in your installation, add the following lines to your top # Example configuration.yaml entry knx: light: - - name: "kitchen" + - name: "Kitchen" address: "1/0/9" ``` @@ -937,14 +937,14 @@ For switching/light actuators that are only controlled by a single group address knx: light: # dimmable light - - name: Bedroom-Light-1 + - name: "Bedroom Light 1" address: "1/0/9" state_address: "1/1/9" brightness_address: "1/2/9" brightness_state_address: "1/3/9" # # RGB light - - name: Bathroom-Light-1 + - name: "Bathroom Light 1" address: "1/0/9" state_address: "1/1/9" brightness_address: "1/2/9" @@ -953,7 +953,7 @@ knx: color_state_address: "1/5/9" # # tunable white light - - name: Office-Light-1 + - name: "Office Light 1" address: "1/0/21" state_address: "1/1/21" brightness_address: "1/2/21" @@ -965,7 +965,7 @@ knx: max_kelvin: 6200 # # actuator without dedicated state communication object - - name: Cellar-Light-1 + - name: "Cellar Light 1" address: "1/0/5" state_address: "1/0/5" ``` @@ -977,7 +977,7 @@ The KNX notify platform allows you to send notifications to [KNX](https://www.kn ```yaml knx: notify: - - name: Alarm + - name: "Alarm" address: "5/1/10" ``` @@ -1000,7 +1000,7 @@ The KNX scenes platform allows you to trigger [KNX](https://www.knx.org/) scenes # Example configuration.yaml entry knx: scene: - - name: Romantic + - name: "Romantic" address: 8/8/8 scene_number: 23 ``` @@ -1030,9 +1030,9 @@ Sensors are read-only. To write to the KNX bus configure an exposure [KNX Integr # Example configuration.yaml entry knx: sensor: - - name: Heating.Valve1 + - name: "Heating Valve 1" state_address: "2/0/0" - type: "percent" + type: percent ``` In order to actively read the sensor data from the bus every 30 minutes you can add the following lines to your `configuration.yaml`: @@ -1041,9 +1041,9 @@ In order to actively read the sensor data from the bus every 30 minutes you can # Example configuration.yaml entry knx: sensor: - - name: Heating.Valve1 + - name: "Heating Valve 1" state_address: "2/0/0" - type: "percent" + type: percent sync_state: every 30 ``` @@ -1076,14 +1076,18 @@ always_callback: | KNX DPT | type | size in byte | range | unit | |--------:|-------------------------------|-------------:|:--------------------------:|----------------| +| 5 | 1byte_unsigned | 1 | 0 ... 255 | | | 5.001 | percent | 1 | 0 ... 100 | % | | 5.003 | angle | 1 | 0 ... 360 | ° | | 5.004 | percentU8 | 1 | 0 ... 255 | % | -| 5.010 | pulse | 1 | 0 ... 255 | | -| 5.010 | 1byte_unsigned | 1 | 0 ... 255 | | +| 5.005 | decimal_factor | 1 | 0 ... 255 | | +| 5.006 | tariff | 1 | 0 ... 254 | | +| 5.010 | pulse | 1 | 0 ... 255 | counter pulses | +| 6 | 1byte_signed | 1 | -128 ... 127 | | | 6.001 | percentV8 | 1 | -128 ... 127 | % | | 6.010 | counter_pulses | 1 | -128 ... 127 | counter pulses | -| 7.001 | 2byte_unsigned | 2 | 0 ... 65535 | pulses | +| 7 | 2byte_unsigned | 2 | 0 ... 65535 | | +| 7.001 | pulse_2byte | 2 | 0 ... 65535 | pulses | | 7.002 | time_period_msec | 2 | 0 ... 65535 | ms | | 7.003 | time_period_10msec | 2 | 0 ... 65535 | ms | | 7.004 | time_period_100msec | 2 | 0 ... 65535 | ms | @@ -1094,14 +1098,17 @@ always_callback: | 7.012 | current | 2 | 0 ... 65535 | mA | | 7.013 | brightness | 2 | 0 ... 65535 | lx | | 7.600 | color_temperature | 2 | 0 ... 65535 | K | -| 8.001 | 2byte_signed | 2 | -32768 ... 32767 | pulses | +| 8 | 2byte_signed | 2 | -32768 ... 32767 | | +| 8.001 | pulse_2byte_signed | 2 | -32768 ... 32767 | pulses | | 8.002 | delta_time_ms | 2 | -32768 ... 32767 | ms | +| 8.003 | delta_time_10ms | 2 | -32768 ... 32767 | ms | +| 8.004 | delta_time_100ms | 2 | -32768 ... 32767 | ms | | 8.005 | delta_time_sec | 2 | -32768 ... 32767 | s | | 8.006 | delta_time_min | 2 | -32768 ... 32767 | min | | 8.007 | delta_time_hrs | 2 | -32768 ... 32767 | h | | 8.010 | percentV16 | 2 | -32768 ... 32767 | % | | 8.011 | rotation_angle | 2 | -32768 ... 32767 | ° | -| 9.* | enthalpy | 2 | -671088.64 ... 670760.96 | H | +| 9 | 2byte_float | 2 | -671088.64 ... 670760.96 | | | 9.001 | temperature | 2 | -273 ... 670760 | °C | | 9.002 | temperature_difference_2byte | 2 | -670760 ... 670760 | K | | 9.003 | temperature_a | 2 | -670760 ... 670760 | K/h | @@ -1113,6 +1120,7 @@ always_callback: | 9.010 | time_1 | 2 | -670760 ... 670760 | s | | 9.011 | time_2 | 2 | -670760 ... 670760 | ms | | 9.020 | voltage | 2 | -671088.64 ... 670760.96 | mV | +| 9.021 | curr | 2 | -671088.64 ... 670760.96 | mA | | 9.022 | power_density | 2 | -671088.64 ... 670760.96 | W/m² | | 9.023 | kelvin_per_percent | 2 | -671088.64 ... 670760.96 | K/% | | 9.024 | power_2byte | 2 | -671088.64 ... 670760.96 | kW | @@ -1120,8 +1128,12 @@ always_callback: | 9.026 | rain_amount | 2 | -671088.64 ... 670760.96 | l/m² | | 9.027 | temperature_f | 2 | -459.6 ... 670760 | °F | | 9.028 | wind_speed_kmh | 2 | 0 ... 670760 | km/h | -| 12.*** | 4byte_unsigned | 4 | 0 ... 4294967295 | | -| 13.*** | 4byte_signed | 4 | -2147483648 ... 2147483647 | | +| 9.? | enthalpy | 2 | -671088.64 ... 670760.96 | H | +| 12 | 4byte_unsigned | 4 | 0 ... 4294967295 | | +| 12.1200 | volume_liquid_litre | 4 | 0 ... 4294967295 | l | +| 12.1201 | volume_m3 | 4 | 0 ... 4294967295 | m³ | +| 13 | 4byte_signed | 4 | -2147483648 ... 2147483647 | | +| 13.001 | pulse_4byte | 4 | -2147483648 ... 2147483647 | pulses | | 13.002 | flow_rate_m3h | 4 | -2147483648 ... 2147483647 | m³/h | | 13.010 | active_energy | 4 | -2147483648 ... 2147483647 | Wh | | 13.011 | apparant_energy | 4 | -2147483648 ... 2147483647 | VAh | @@ -1130,8 +1142,8 @@ always_callback: | 13.014 | apparant_energy_kvah | 4 | -2147483648 ... 2147483647 | kVAh | | 13.015 | reactive_energy_kvarh | 4 | -2147483648 ... 2147483647 | kVARh | | 13.100 | long_delta_timesec | 4 | -2147483648 ... 2147483647 | s | +| 14 | 4byte_float | 4 | | | | 14.000 | acceleration | 4 | | m/s² | -| 14.*** | 4byte_float | 4 | | | | 14.001 | acceleration_angular | 4 | | rad/s² | | 14.002 | activation_energy | 4 | | J/mol | | 14.003 | activity | 4 | | s⁻¹ | @@ -1220,14 +1232,14 @@ always_callback: # Example configuration.yaml entry knx: sensor: - - name: Heating.Valve1 + - name: "Heating Valve 1" state_address: "2/0/0" sync_state: init - type: "percent" - - name: Kitchen.Temperature + type: percent + - name: "Kitchen Temperature" state_address: "6/2/1" sync_state: every 60 - type: "temperature" + type: temperature ``` ## Switch @@ -1237,7 +1249,7 @@ The KNX switch platform is used as an interface to switching actuators. ```yaml knx: switch: - - name: Kitchen.Coffee + - name: "Kitchen coffee maker" address: "1/1/6" ``` @@ -1275,7 +1287,7 @@ To use your KNX weather station in your installation, add the following lines to # Example configuration.yaml entry knx: weather: - - name: "home" + - name: "Home" address_temperature: "7/0/0" address_brightness_south: "7/0/1" address_brightness_west: "7/0/2" diff --git a/source/_integrations/mystrom.markdown b/source/_integrations/mystrom.markdown index 23a50dcee61..133c80e60c2 100644 --- a/source/_integrations/mystrom.markdown +++ b/source/_integrations/mystrom.markdown @@ -178,7 +178,7 @@ switch: {% configuration %} host: - description: "The IP address of your myStrom switch, e.g., `http://192.168.1.32`." + description: "The IP address of your myStrom switch, e.g., `192.168.1.32`." required: true type: string name: diff --git a/source/_integrations/python_script.markdown b/source/_integrations/python_script.markdown index c4e86f22362..da46b52ff62 100644 --- a/source/_integrations/python_script.markdown +++ b/source/_integrations/python_script.markdown @@ -39,7 +39,7 @@ hass.bus.fire(name, {"wow": "from a Python script!"}) ``` - Start Home Assistant -- Call service `python_script.hello_world` with parameters +- Call your new {% my developer_call_service service="python_script.hello_world" %} service (with parameters) from the {% my developer_services %}. ```yaml name: you diff --git a/source/_integrations/roomba.markdown b/source/_integrations/roomba.markdown index d68a01fe1e6..f8824ba09de 100644 --- a/source/_integrations/roomba.markdown +++ b/source/_integrations/roomba.markdown @@ -26,7 +26,9 @@ The `roomba` integration allows you to control your [iRobot Roomba](https://www.

-This platform has been tested and is confirmed to be working with the iRobot Roomba s9+, Roomba 980, Roomba 960, Roomba 890, and Braava jet m6 models, but should also work fine with any Wi-Fi enabled Roomba or Braava like the 690. + +This integration has been tested and confirmed to be working with the iRobot Roomba s9+, Roomba 980, Roomba 960, Roomba 890, and Braava jet m6 models, but should also work fine with any Wi-Fi enabled Roomba or Braava like the 690. For auto-discovery, you will need to initiate a Roomba reboot. For example, by holding the clean button for up to 20 seconds on an i7 or 980. [More information about rebooting your robot](https://homesupport.irobot.com/app/answers/detail/a_id/9087/~/rebooting-or-resetting-your-robot). +
{% include integrations/config_flow.md %} diff --git a/source/_integrations/sensor.markdown b/source/_integrations/sensor.markdown index 46cf2ec4191..9ac9af90cd3 100644 --- a/source/_integrations/sensor.markdown +++ b/source/_integrations/sensor.markdown @@ -9,13 +9,13 @@ ha_domain: sensor ha_iot_class: --- -Sensors are gathering information about states and conditions. +Sensors are a basic platform component in Home Assistant. They monitor the states and conditions of a variety of entities. An entity can be many things. This can include a physical device like a motion sensor that reports the battery level, a web service that retrieves the weather temperature, a built-in function that calculates the sun's elevation relative to your GPS position, or even a custom sensor you may have created to report the free space on your laptop. These are all *things* reporting different types of information. -Home Assistant currently supports a wide range of sensors. They are able to display information which are provides by Home Assistant directly, are gathered from web services, and, of course, physical devices. +Some of these sensors are built-in to Home Assistant, some are created automatically when you add an integration (see this [list](/integrations/#sensor)), and some can be created manually. The [Statistics](/integrations/statistics) and [Template](/integrations/template) sensors are two examples of the last case. ## Device Class -The way these sensors are displayed in the frontend can be modified in the [customize section](/docs/configuration/customizing-devices/). The following device classes are supported for sensors: +The type of data a sensor returns impacts how it is displayed in the frontend. This is controlled by the sensor's device class designation. Built-in sensors and many created from an integration will have this designation predefined. Those can be modified in the [customize section](/docs/configuration/customizing-devices/). When manually creating a new sensor the device class may be optionally assigned. A full list of available sensor device classes is below: - **None**: Generic sensor. This is the default and doesn't need to be set. - **battery**: Percentage of battery that is left. diff --git a/source/_integrations/sensor.websocket_api.markdown b/source/_integrations/sensor.websocket_api.markdown deleted file mode 100644 index 770f64c1eae..00000000000 --- a/source/_integrations/sensor.websocket_api.markdown +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "Websocket Connections Sensor" -description: "Instructions on how to count connected clients within Home Assistant." -logo: home-assistant.png -ha_category: - - Utility - - Sensor -ha_release: 0.33 -ha_iot_class: Local Push -ha_quality_scale: internal -ha_domain: websocket_api ---- - -The `websocket_api` sensor platform shows how many clients are connected to the stream API. - -## Configuration - -To add the connected clients to your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: websocket_api -``` - -### Note - -This replaces the previous `api_streams` sensor. -The default sensor name is `connected_clients`. diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown index 7165cd58739..e663251d97c 100644 --- a/source/_integrations/shelly.markdown +++ b/source/_integrations/shelly.markdown @@ -28,6 +28,12 @@ ha_platforms: Integrate [Shelly devices](https://shelly.cloud) into Home Assistant. +## Shelly device configuration + +Shelly devices use the `CoIoT` protocol to communicate with integration. For Shelly firmware 1.10.0 or newer, `CoIoT` must be enabled in the device settings. Navigate to the local IP address of your Shelly device, **Internet & Security** >> **ADVANCED - DEVELOPER SETTINGS** and check the box **Enable CoIoT**. + +We recommend using `unicast` for communication. To enable this, enter the local IP address of the Home Assistant server and port `5683` into the **CoIoT peer** field and push **SAVE** button. This is mandatory for Shelly Motion with firmware 1.1.0 or newer. After changing the **CoIoT peer**, the Shelly device needs to be manually restarted. +
Integration is communicating directly with the device; cloud connection is not needed.
diff --git a/source/_integrations/switch.template.markdown b/source/_integrations/switch.template.markdown index a1925e89a0a..c4e7c6e9841 100644 --- a/source/_integrations/switch.template.markdown +++ b/source/_integrations/switch.template.markdown @@ -139,6 +139,38 @@ switch: {% endraw %} +### Multiple actions for turn_on or turn_off + +This example shows multiple service calls for turn_on and turn_off. + +{% raw %} + +```yaml +switch: + - platform: template + switches: + copy: + value_template: "{{ is_state('switch.source', 'on') }}" + turn_on: + - service: switch.turn_on + target: + entity_id: switch.target + - service: light.turn_on + target: + entity_id: light.target + data: + brightness_pct: 40 + turn_off: + - service: switch.turn_off + target: + entity_id: switch.target + - service: light.turn_off + target: + entity_id: light.target +``` + +{% endraw %} + ### Sensor and Two Switches This example shows a switch that takes its state from a sensor, and uses two diff --git a/source/_integrations/systemmonitor.markdown b/source/_integrations/systemmonitor.markdown index 187ecc156f4..f432da2fca5 100644 --- a/source/_integrations/systemmonitor.markdown +++ b/source/_integrations/systemmonitor.markdown @@ -23,7 +23,7 @@ sensor: - platform: systemmonitor resources: - type: disk_use_percent - arg: /home + arg: /config - type: memory_free ``` diff --git a/source/_integrations/weather.template.markdown b/source/_integrations/weather.template.markdown index b3dcb5fe029..c148a45226c 100644 --- a/source/_integrations/weather.template.markdown +++ b/source/_integrations/weather.template.markdown @@ -69,7 +69,3 @@ forecast_template: required: false type: template {% endconfiguration %} - -## Considerations - -If you are using the state of a integration that takes extra time to load, the Template Weather may get an `unknown` state during startup. This results in error messages in your log file until that integration has completed loading. If you use `is_state()` function in your template, you can avoid this situation. diff --git a/source/_integrations/websocket_api.markdown b/source/_integrations/websocket_api.markdown index ea32434e30a..605a743f49f 100644 --- a/source/_integrations/websocket_api.markdown +++ b/source/_integrations/websocket_api.markdown @@ -26,10 +26,12 @@ For details to use the WebSocket API, please refer to the [WebSocket API documen ## Track current connections -The websocket API provides a sensor that will keep track of the number of current connected clients. You can add it by adding the following to your configuration: +The WebSocket API provides a sensor that will keep track of the number of currently connected clients. You can add it by adding the following to your configuration: ```yaml # Example configuration.yaml entry sensor: - platform: websocket_api + - platform: websocket_api ``` + +This will create a sensor called `sensor.connected_clients` whose value is the total number of connected clients. diff --git a/source/_integrations/zha.markdown b/source/_integrations/zha.markdown index be4d39b3140..512ce695566 100644 --- a/source/_integrations/zha.markdown +++ b/source/_integrations/zha.markdown @@ -77,6 +77,7 @@ Some other Zigbee coordinator hardware may not support a firmware that is capabl - Texas Instruments based radios with Z-Stack 3.x.x (via the [zigpy-znp](https://github.com/zha-ng/zigpy-znp) library for zigpy) - [CC2652P/CC2652R/CC2652RB USB stick or dev board hardware flashed with Z-Stack 3.x.x coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters) - [CC1352P/CC1352R USB stick or dev board hardware flashed with Z-Stack 3.x.x coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters) + - [CC2538 USB stick or dev board hardware flashed with Z-Stack 3.x.x coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters) - Digi XBee Zigbee based radios (via the [zigpy-xbee](https://github.com/zigpy/zigpy-xbee) library for zigpy) - [Digi XBee Series 3 (xbee3-24)](https://www.digi.com/products/embedded-systems/digi-xbee/rf-modules/2-4-ghz-rf-modules/xbee3-zigbee-3) and [Digi XBee Series S2C](https://www.digi.com/products/embedded-systems/digi-xbee/rf-modules/2-4-ghz-rf-modules/xbee-zigbee) modules - Note! While not a must, [it is recommend to upgrade XBee Series 3 and S2C to newest firmware firmware using XCTU](https://www.digi.com/resources/documentation/Digidocs/90002002/Default.htm#Tasks/t_load_zb_firmware.htm) @@ -87,6 +88,8 @@ Some other Zigbee coordinator hardware may not support a firmware that is capabl - [PiZiGate](https://zigate.fr/produit/pizigate-v1-0/) - [Wifi ZiGate](https://zigate.fr/produit/zigate-pack-wifi-v1-3/) +#### Warning about Wi-Fi-based Zigbee-to-Serial bridges/gateways +
The **EZSP** protocol requires a stable connection to the serial port. With _ITEAD Sonoff ZBBridge_ connecting over the WiFi network diff --git a/source/_redirects b/source/_redirects index 22d4f185a06..a1fe817cb24 100644 --- a/source/_redirects +++ b/source/_redirects @@ -635,8 +635,8 @@ /components/sensor.amcrest /integrations/amcrest /components/sensor.android_ip_webcam /integrations/android_ip_webcam#sensor /components/sensor.apcupsd /integrations/apcupsd#sensor -/components/sensor.api_stream /integrations/sensor.websocket_api -/components/sensor.api_streams /integrations/sensor.websocket_api +/components/sensor.api_stream /integrations/websocket_api +/components/sensor.api_streams /integrations/websocket_api /components/sensor.aqualogic /integrations/aqualogic#sensor /components/sensor.arduino /integrations/arduino#sensor /components/sensor.arest /integrations/arest#sensor @@ -1076,6 +1076,7 @@ /integrations/fan.xiaomi_miio /integrations/xiaomi_miio /integrations/light.xiaomi_miio /integrations/xiaomi_miio /integrations/remote.xiaomi_miio /integrations/xiaomi_miio +/integrations/sensor.websocket_api /integrations/websocket_api /integrations/sensor.xiaomi_miio /integrations/xiaomi_miio /integrations/switch.xiaomi_miio /integrations/xiaomi_miio /integrations/vacuum.xiaomi_miio /integrations/xiaomi_miio