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