Merge branch 'current' into rc

This commit is contained in:
Franck Nijhof 2023-07-05 09:19:55 +02:00
commit 2953605039
No known key found for this signature in database
GPG Key ID: D62583BA8AB11CA3
26 changed files with 292 additions and 606 deletions

213
package-lock.json generated
View File

@ -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",

View File

@ -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"

View File

@ -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 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/).

View File

@ -5,7 +5,8 @@
<li>{% active_link /common-tasks/os/ Home Assistant Operating System %}</li>
<li>{% active_link /common-tasks/container/ Home Assistant Container %}</li>
<li>{% active_link /common-tasks/core/ Home Assistant Core %}</li>
<li>{% active_link /common-tasks/supervised/ Home Assistant Supervised %}</li>
<li>{% active_link /common-tasks/supervised/ Home Assistant Supervised %}
<li>{% active_link /common-tasks/general/ Installation independent %}</li>
</ul>
</div>
</section>

View File

@ -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**.

View File

@ -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._
```
</div>
{% unless page.installation_type == 'macos' %}
- title: KVM (virt-manager)
content: |
1. Create a new virtual machine in `virt-manager`.
@ -294,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 <PATH TO QCOW2 FILE>,bus=sata --graphics none --boot uefi
virt-install --name hass --description "Home Assistant OS" --os-variant=generic --ram=2048 --vcpus=2 --disk <PATH TO QCOW2 FILE>,bus=sata --import --graphics none --boot uefi
```
<div class="note info">
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.
@ -314,11 +310,12 @@ _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 <PATH TO QCOW2 FILE>,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 <PATH TO QCOW2 FILE>,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`.
</div>
{% endunless %}
{% if page.installation_type == 'windows' or page.installation_type == 'linux' %}

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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`
<div class="note">
Yahoo also requires the character set `US-ASCII`.
</div>
### 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.

View File

@ -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
<lite-youtube videoid="-B4WWevd2JI" videotitle="Share Matter device from Google Home to Home Assistant"></lite-youtube>
<p class='note'>
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.
</p>
## 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.

View File

@ -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)

View File

@ -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).

View File

@ -572,16 +572,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
@ -600,9 +602,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
@ -612,15 +614,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
@ -659,7 +661,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`

View File

@ -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

View File

@ -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

View File

@ -28,11 +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.
## 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.

View File

@ -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.

View File

@ -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)

View File

@ -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.

View File

@ -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
<a id='new_format'></a>
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

View File

@ -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).

View File

@ -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 %}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB