diff --git a/Gemfile b/Gemfile index 7020f561721..ba8a39f15fb 100644 --- a/Gemfile +++ b/Gemfile @@ -24,7 +24,7 @@ group :jekyll_plugins do end gem 'sinatra', '4.1.1' -gem 'nokogiri', '1.17.2' +gem 'nokogiri', '1.18.1' # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem # and associated library diff --git a/Gemfile.lock b/Gemfile.lock index 0ba3e84f8b0..bdd553ad584 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -5,7 +5,7 @@ GEM public_suffix (>= 2.0.2, < 7.0) ast (2.4.2) base64 (0.2.0) - bigdecimal (3.1.8) + bigdecimal (3.1.9) chunky_png (1.4.0) colorator (1.1.0) commonmarker (0.23.11) @@ -26,8 +26,8 @@ GEM eventmachine (>= 0.12.9) http_parser.rb (~> 0) eventmachine (1.2.7) - ffi (1.17.0-arm64-darwin) - ffi (1.17.0-x86_64-linux-gnu) + ffi (1.17.1-arm64-darwin) + ffi (1.17.1-x86_64-linux-gnu) forwardable-extended (2.6.0) google-protobuf (4.29.2-arm64-darwin) bigdecimal @@ -81,9 +81,9 @@ GEM multi_json (1.15.0) mustermann (3.0.3) ruby2_keywords (~> 0.0.1) - nokogiri (1.17.2-arm64-darwin) + nokogiri (1.18.1-arm64-darwin) racc (~> 1.4) - nokogiri (1.17.2-x86_64-linux) + nokogiri (1.18.1-x86_64-linux-gnu) racc (~> 1.4) parallel (1.26.3) parser (3.3.6.0) @@ -108,9 +108,9 @@ GEM rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) - rbs (3.7.0) + rbs (3.8.1) logger - regexp_parser (2.9.3) + regexp_parser (2.10.0) rexml (3.4.0) rouge (4.5.1) rubocop (1.69.2) @@ -150,7 +150,7 @@ GEM rack-protection (= 4.1.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - sorbet-runtime (0.5.11708) + sorbet-runtime (0.5.11710) stringex (2.8.6) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -173,7 +173,7 @@ DEPENDENCIES jekyll-paginate (= 1.1.0) jekyll-sitemap (= 1.4.0) jekyll-toc (= 0.19.0) - nokogiri (= 1.17.2) + nokogiri (= 1.18.1) rackup (= 2.2.1) rake (= 13.2.1) rubocop (= 1.69.2) diff --git a/package-lock.json b/package-lock.json index f3f4f98e859..7e0edf98522 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "remark-lint-prohibited-strings": "^4.0.0", "remark-lint-unordered-list-marker-style": "^4.0.0", "remark-stringify": "^11.0.0", - "textlint": "^14.4.0", + "textlint": "^14.4.2", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^5.0.13" @@ -295,6 +295,15 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/@keyv/serialize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.0.2.tgz", + "integrity": "sha512-+E/LyaAeuABniD/RvUezWVXKpeuvwLEA9//nE9952zBaOdBd2mQ3pPoM8cUe2X6IcMByfuSLzmYqnYshG60+HQ==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3" + } + }, "node_modules/@npmcli/config": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-6.3.0.tgz", @@ -416,68 +425,68 @@ "dev": true }, "node_modules/@textlint/ast-tester": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.4.0.tgz", - "integrity": "sha512-pCKEUDaZVvvj/uZOTTUgU1tTkNsK+ufNs4Xx5BsBAqy+E0aAJJ47c8h2WIoL/MJniK6ZLctsDIwaZ4z9rUvrsQ==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.4.2.tgz", + "integrity": "sha512-w1MlGa9DsJgp2W+ifNZ57vIWDoRVRExy0rXek7/voxBmSpTo76zHq74ggwjOrmoZpX8ADkvDc0tUWWWyiUVskQ==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.4.0", - "debug": "^4.3.4" + "@textlint/ast-node-types": "^14.4.2", + "debug": "^4.4.0" } }, "node_modules/@textlint/ast-tester/node_modules/@textlint/ast-node-types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", - "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.2.tgz", + "integrity": "sha512-e8/drNznaZHS/qGDC83k6Ht1wDWNHzGQ0RHcXD+72YMFercEFvp6WVfW5XbCbxGbSITEO5NBCOCTyeccS9lxEA==", "dev": true }, "node_modules/@textlint/ast-traverse": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.4.0.tgz", - "integrity": "sha512-P6UrqKlXd9Lm0kJ1O8vyQU0/btXULiUHhE5nLZMnTNfgZYG3VasQ9BUyDHJn19O4PhUrIzZJusMi1XFcb3Y46Q==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.4.2.tgz", + "integrity": "sha512-HQp1iatBiLn9Qg8wqN3WxYWoiHJnkcv+30MdVPe5d0CmnBBXXRqFO1eSUHUlYarGNc3LyE0GFEkS72D7lefyNg==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.4.0" + "@textlint/ast-node-types": "^14.4.2" } }, "node_modules/@textlint/ast-traverse/node_modules/@textlint/ast-node-types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", - "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.2.tgz", + "integrity": "sha512-e8/drNznaZHS/qGDC83k6Ht1wDWNHzGQ0RHcXD+72YMFercEFvp6WVfW5XbCbxGbSITEO5NBCOCTyeccS9lxEA==", "dev": true }, "node_modules/@textlint/config-loader": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.4.0.tgz", - "integrity": "sha512-TCYVhQ+wP/Gs7P5BDAfyRpLJ5tohicTSwQapd/xPjByXFtGx8xlsbLQHTWcodFFpty1O57KRPRsRDhvuTAA2bQ==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.4.2.tgz", + "integrity": "sha512-qaR38dkGURC5XED5wR8OnJtPrK9Or76Do1P11rvRGgVu0Tn3n6UYQclbh8em8xnWWMuvJUzbTUSg2XE1h1uu3A==", "dev": true, "dependencies": { - "@textlint/kernel": "^14.4.0", - "@textlint/module-interop": "^14.4.0", - "@textlint/resolver": "^14.4.0", - "@textlint/types": "^14.4.0", - "@textlint/utils": "^14.4.0", - "debug": "^4.3.4", + "@textlint/kernel": "^14.4.2", + "@textlint/module-interop": "^14.4.2", + "@textlint/resolver": "^14.4.2", + "@textlint/types": "^14.4.2", + "@textlint/utils": "^14.4.2", + "debug": "^4.4.0", "rc-config-loader": "^4.1.3" } }, "node_modules/@textlint/feature-flag": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.4.0.tgz", - "integrity": "sha512-aSphE9jw4QTjiCOe1tbtZ2NZpMRbYoUTi2E62KQ/mcVnwGC+Jk671wNSoUJzR/YNaLo63cQ7OKhHrBEb55t+Iw==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.4.2.tgz", + "integrity": "sha512-jeK7FuaYVr+gqgvjZazYHLCA+0oJybXa26kgF7P0qJ4yWq9qoENnjZtHF1VCi40euIS60z+/VJ8SlQj3LfnaoQ==", "dev": true }, "node_modules/@textlint/fixer-formatter": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.4.0.tgz", - "integrity": "sha512-DijDPVZgHkHKAEsYVXFZaP0TJGLDtirok/hgi1N1N3MW5ZtQpIHOW8DgKaJcmDZvPQjkTxzBaUp8rzBxHG8MaQ==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.4.2.tgz", + "integrity": "sha512-zmpM3FXEFAQy6F35nGnsFUV7jIfcrJNBHuu/Vh5TgfvCw9n2h7+KwEzx34bEce4vBhmKTqebHKSzM+2PlZG3NA==", "dev": true, "dependencies": { - "@textlint/module-interop": "^14.4.0", - "@textlint/resolver": "^14.4.0", - "@textlint/types": "^14.4.0", + "@textlint/module-interop": "^14.4.2", + "@textlint/resolver": "^14.4.2", + "@textlint/types": "^14.4.2", "chalk": "^4.1.2", - "debug": "^4.3.4", + "debug": "^4.4.0", "diff": "^5.2.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", @@ -485,59 +494,59 @@ } }, "node_modules/@textlint/kernel": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.4.0.tgz", - "integrity": "sha512-zH19vQ0ns4n8kPr+csjPnV5yPip6gKs08GvDJBQlX3AEbRQkaSw4H5kBCE+R0D9qDkuqt7xe8Z8Tdm7E7aUvGw==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.4.2.tgz", + "integrity": "sha512-nwUpdOl/whw8Cq9ELYRatmxEUEGApzKRAFJQpdIB/Ex0gKG1S/ctzSYbqSBUZ/Xctnn93yBDgOngDFdgoHbfWg==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.4.0", - "@textlint/ast-tester": "^14.4.0", - "@textlint/ast-traverse": "^14.4.0", - "@textlint/feature-flag": "^14.4.0", - "@textlint/source-code-fixer": "^14.4.0", - "@textlint/types": "^14.4.0", - "@textlint/utils": "^14.4.0", - "debug": "^4.3.4", + "@textlint/ast-node-types": "^14.4.2", + "@textlint/ast-tester": "^14.4.2", + "@textlint/ast-traverse": "^14.4.2", + "@textlint/feature-flag": "^14.4.2", + "@textlint/source-code-fixer": "^14.4.2", + "@textlint/types": "^14.4.2", + "@textlint/utils": "^14.4.2", + "debug": "^4.4.0", "fast-equals": "^4.0.3", "structured-source": "^4.0.0" } }, "node_modules/@textlint/kernel/node_modules/@textlint/ast-node-types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", - "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.2.tgz", + "integrity": "sha512-e8/drNznaZHS/qGDC83k6Ht1wDWNHzGQ0RHcXD+72YMFercEFvp6WVfW5XbCbxGbSITEO5NBCOCTyeccS9lxEA==", "dev": true }, "node_modules/@textlint/linter-formatter": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.4.0.tgz", - "integrity": "sha512-rnFwSSXDdsQHGVaRoJJYocVSYn4ZEPUFj78JYDZcR+TRYVDzRJEblFhwsiXl/gHD3L5g2RnBcLbxwZIW+xwtIA==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.4.2.tgz", + "integrity": "sha512-gBd+DDFzymFCjv5vcoH23IbQujjib//lH5lvHz61ImtXzVI6SBBL0jnRjER52IFYRE0tll7VlMURvxWiAVlOzw==", "dev": true, "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "^14.4.0", - "@textlint/resolver": "^14.4.0", - "@textlint/types": "^14.4.0", + "@textlint/module-interop": "^14.4.2", + "@textlint/resolver": "^14.4.2", + "@textlint/types": "^14.4.2", "chalk": "^4.1.2", - "debug": "^4.3.4", + "debug": "^4.4.0", "js-yaml": "^3.14.1", "lodash": "^4.17.21", "pluralize": "^2.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", - "table": "^6.8.1", + "table": "^6.9.0", "text-table": "^0.2.0" } }, "node_modules/@textlint/markdown-to-ast": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.4.0.tgz", - "integrity": "sha512-y6UxfRZ00w8XQ1jfKhR0jcQd7qbYaQgo3aERWbJR0Gxxl0T+G+TKBS12pdnUFOTshgSTEgqlvrE+Zt3lTl0e1A==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.4.2.tgz", + "integrity": "sha512-hj2xR9hz5/Tu7Hlrn6VORJgdAfUhAd5j6cBkEVpnKAU4LaERkNyVCgK/da2JHK2w84YHmaDjER4D6zUUkllwag==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.4.0", - "debug": "^4.3.4", + "@textlint/ast-node-types": "^14.4.2", + "debug": "^4.4.0", "mdast-util-gfm-autolink-literal": "^0.1.3", "neotraverse": "^0.6.15", "remark-footnotes": "^3.0.0", @@ -548,9 +557,9 @@ } }, "node_modules/@textlint/markdown-to-ast/node_modules/@textlint/ast-node-types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", - "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.2.tgz", + "integrity": "sha512-e8/drNznaZHS/qGDC83k6Ht1wDWNHzGQ0RHcXD+72YMFercEFvp6WVfW5XbCbxGbSITEO5NBCOCTyeccS9lxEA==", "dev": true }, "node_modules/@textlint/markdown-to-ast/node_modules/bail": { @@ -780,79 +789,79 @@ } }, "node_modules/@textlint/module-interop": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.4.0.tgz", - "integrity": "sha512-QdtNDJc+XqDIbP9bwt7DryqE+vFbbIB28462VFWtXcHCJJoFTlmCJ1133SXLe14IOT9P04T9LMNhgv4d2v31gg==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.4.2.tgz", + "integrity": "sha512-PQqUgLcTnCTJ8qpYxLP6p98VzTP/Ju8QIDwTWYRpH00KHdmH9cR1/9O+l6YaWsJSGDtSL2zkMKIQLezpvBZ4cw==", "dev": true }, "node_modules/@textlint/resolver": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-14.4.0.tgz", - "integrity": "sha512-4jNO6Lbyiqtf22205XPpSYG4BNCZrvpmLzO2JUpYMe5C5g0z4l06Yqei3gJWYjdBLlL+fIxDcdW0hyIvvSFpUg==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-14.4.2.tgz", + "integrity": "sha512-P/tdGDpNvxyNGHtHGZJmvwina5bfE92OqiKk1rRJk/B6oIiDolJSPwtVBEJyAeG6N5vtsjqfVnVHnsWnS9/tgw==", "dev": true }, "node_modules/@textlint/source-code-fixer": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.4.0.tgz", - "integrity": "sha512-S2QBZ3pUQQeH01kgfKa1Tmusz0A2/sm3QkW1Uhag9x5v5OKYC4W3070eliY+p0I88nxmqy72M/j+78sDutUcuw==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.4.2.tgz", + "integrity": "sha512-8AFoRL0uQPiu7hlszM1jlido+PdL3/3Ddp8sz1XxOpFgnjuTKnlRLYjziaL8X4JCpXQjUy4Q9am8NI6M1Y18lw==", "dev": true, "dependencies": { - "@textlint/types": "^14.4.0", - "debug": "^4.3.4" + "@textlint/types": "^14.4.2", + "debug": "^4.4.0" } }, "node_modules/@textlint/text-to-ast": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.4.0.tgz", - "integrity": "sha512-MA3z7cksYpjXRPIFFcbB6CM5UbNFD53GJ823qo74ImU2MRlIrs9dcR9yQ76YxbYZ9OazPzUNGg5AS9tbp3Exbg==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.4.2.tgz", + "integrity": "sha512-fLyNHMczXZOP/jkKqBbjntszJR0ytsdQOPg9E8fnnbcX6eBMw3q924+M/vkYno/9ArSnUMPbdfhKBc/lWTXvcQ==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.4.0" + "@textlint/ast-node-types": "^14.4.2" } }, "node_modules/@textlint/text-to-ast/node_modules/@textlint/ast-node-types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", - "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.2.tgz", + "integrity": "sha512-e8/drNznaZHS/qGDC83k6Ht1wDWNHzGQ0RHcXD+72YMFercEFvp6WVfW5XbCbxGbSITEO5NBCOCTyeccS9lxEA==", "dev": true }, "node_modules/@textlint/textlint-plugin-markdown": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.4.0.tgz", - "integrity": "sha512-J6RoZSC7MOr9WYqyG4s1BZxExiHfS6fMmiQuWGJB133vDDrY+wmiaFm/C6Li59YPdPivddxSDo7v8z2zyayW1A==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.4.2.tgz", + "integrity": "sha512-qtUta0iHEn843Hzhq7VnYPRp5rsYLnaZC5fOGOMh8DIpUlnuNXI1ANs9TkL5LsgexyYyMuPtFbvwr7S4JNu6ig==", "dev": true, "dependencies": { - "@textlint/markdown-to-ast": "^14.4.0" + "@textlint/markdown-to-ast": "^14.4.2" } }, "node_modules/@textlint/textlint-plugin-text": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.4.0.tgz", - "integrity": "sha512-ut3+MhOh9taPUKLaTT4nyil3MLnAbo60BYGWIz6cPrv3YMyvN/eCw4jW4VscvV1WTik19lzmDCBfSpfnmz/PiA==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.4.2.tgz", + "integrity": "sha512-cg7J6qTgAsV7ms2fP2KpEBIaI+3GQAbQtjNTF4Zu5d8Kn07wNqFqZIpTnsKUC/b64Fn/ujo+HYse76nSU+5EZg==", "dev": true, "dependencies": { - "@textlint/text-to-ast": "^14.4.0" + "@textlint/text-to-ast": "^14.4.2" } }, "node_modules/@textlint/types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.4.0.tgz", - "integrity": "sha512-ZxZkiFxaXfjoaa/gzbGyUWR0mSMLChDaQrYJ0sPToCQ0QXUG3w5sIT2hCGZyBfNRc8/g0eH+KbDejD014oBPBQ==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.4.2.tgz", + "integrity": "sha512-s2UbCeYY8TQNdSusPs0n+g57g6fwx8Vz6nDZLD7vIXMEW10zIwkQnQf9IpxDwvKnstBWYTJ24Kx9nzddpBS9oQ==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.4.0" + "@textlint/ast-node-types": "^14.4.2" } }, "node_modules/@textlint/types/node_modules/@textlint/ast-node-types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", - "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.2.tgz", + "integrity": "sha512-e8/drNznaZHS/qGDC83k6Ht1wDWNHzGQ0RHcXD+72YMFercEFvp6WVfW5XbCbxGbSITEO5NBCOCTyeccS9lxEA==", "dev": true }, "node_modules/@textlint/utils": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.4.0.tgz", - "integrity": "sha512-/5QSdYa042z0SX+10+UPzHlMT2nWuRBkouf90/P60nycpFmWn0waIbVoARDlekzmaqB4BitbP7NGjjPmEju4bA==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.4.2.tgz", + "integrity": "sha512-bhns1Cws+4dERz6KGFVLLGf0vFK6r5LiKKeg7N3Hnh0QNbzy7TYO+HTfZsgcqBvZSJeAeowzKyDQ8nSsflPbJw==", "dev": true }, "node_modules/@types/concat-stream": { @@ -1044,6 +1053,26 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1059,16 +1088,6 @@ "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==", "dev": true }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -1081,12 +1100,46 @@ "node": ">=8" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/cacheable": { + "version": "1.8.7", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.7.tgz", + "integrity": "sha512-AbfG7dAuYNjYxFUtL1lAqmlWdxczCJ47w7cFjhGcnGnUdwSo6VgmSojfoW3tUI12HUkgTJ5kqj78yyq6TsFtlg==", + "dev": true, + "dependencies": { + "hookified": "^1.6.0", + "keyv": "^5.2.3" + } + }, "node_modules/ccount": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", @@ -1242,12 +1295,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, "node_modules/concat-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", @@ -1287,12 +1334,12 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1443,15 +1490,12 @@ } }, "node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.5.tgz", + "integrity": "sha512-umpQsJrBNsdMDgreSryMEXvJh66XeLtZUwA8Gj7rHGearGufUFv6rB/bcXRFsiGWw/VeSUgUofF4Rf2UKEOrTA==", "dev": true, "dependencies": { - "flat-cache": "^2.0.1" - }, - "engines": { - "node": ">=4" + "flat-cache": "^6.1.5" } }, "node_modules/fill-range": { @@ -1479,23 +1523,20 @@ } }, "node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.5.tgz", + "integrity": "sha512-QR+2kN38f8nMfiIQ1LHYjuDEmZNZVjxuxY+HufbS3BW0EX01Q5OnH7iduOYRutmgiXb797HAKcXUeXrvRjjgSQ==", "dev": true, "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "engines": { - "node": ">=4" + "cacheable": "^1.8.7", + "flatted": "^3.3.2", + "hookified": "^1.6.0" } }, "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true }, "node_modules/foreground-child": { @@ -1523,12 +1564,6 @@ "node": ">=0.4.x" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -1558,26 +1593,6 @@ "node": ">=0.12.0" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -1617,12 +1632,38 @@ "node": ">=8" } }, + "node_modules/hookified": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.6.0.tgz", + "integrity": "sha512-se7cpwTA+iA/eY548Bu03JJqBiEZAqU2jnyKdj5B5qurtBg64CZGHTgqCv4Yh7NWu6FGI09W61MCq+NoPj9GXA==", + "dev": true + }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -1642,16 +1683,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -1886,6 +1917,15 @@ "node": ">=6" } }, + "node_modules/keyv": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.2.3.tgz", + "integrity": "sha512-AGKecUfzrowabUv0bH1RIR5Vf7w+l4S3xtQAypKaUpTdIR1EbrAcTxHCrpo9Q+IWeUlFE2palRtgIQcgm+PQJw==", + "dev": true, + "dependencies": { + "@keyv/serialize": "^1.0.2" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -3588,18 +3628,6 @@ } ] }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", @@ -3637,9 +3665,9 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/neotraverse": { @@ -3696,15 +3724,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -3810,15 +3829,6 @@ "node": ">=4" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -5730,18 +5740,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -6014,9 +6012,9 @@ } }, "node_modules/table": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", - "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -6036,26 +6034,26 @@ "dev": true }, "node_modules/textlint": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.4.0.tgz", - "integrity": "sha512-OutNGN573fI48bRdikgz+PAjCN/P4DRK9dLGxkNkqBlWmwbxLpvBxw1qspZEFVVLoNH94ra65NDfCwMvCosvdA==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.4.2.tgz", + "integrity": "sha512-4bHQY0ndqMBrZyLKqkca3dq8d1psBd1Nb6CznPjEZSFQV5WMAs7l8qZTgFsCwbkhSpbDSAxSTvBF/WZlHT71WA==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.4.0", - "@textlint/ast-traverse": "^14.4.0", - "@textlint/config-loader": "^14.4.0", - "@textlint/feature-flag": "^14.4.0", - "@textlint/fixer-formatter": "^14.4.0", - "@textlint/kernel": "^14.4.0", - "@textlint/linter-formatter": "^14.4.0", - "@textlint/module-interop": "^14.4.0", - "@textlint/resolver": "^14.4.0", - "@textlint/textlint-plugin-markdown": "^14.4.0", - "@textlint/textlint-plugin-text": "^14.4.0", - "@textlint/types": "^14.4.0", - "@textlint/utils": "^14.4.0", - "debug": "^4.3.4", - "file-entry-cache": "^5.0.1", + "@textlint/ast-node-types": "^14.4.2", + "@textlint/ast-traverse": "^14.4.2", + "@textlint/config-loader": "^14.4.2", + "@textlint/feature-flag": "^14.4.2", + "@textlint/fixer-formatter": "^14.4.2", + "@textlint/kernel": "^14.4.2", + "@textlint/linter-formatter": "^14.4.2", + "@textlint/module-interop": "^14.4.2", + "@textlint/resolver": "^14.4.2", + "@textlint/textlint-plugin-markdown": "^14.4.2", + "@textlint/textlint-plugin-text": "^14.4.2", + "@textlint/types": "^14.4.2", + "@textlint/utils": "^14.4.2", + "debug": "^4.4.0", + "file-entry-cache": "^10.0.5", "get-stdin": "^5.0.1", "glob": "^10.4.5", "md5": "^2.3.0", @@ -6178,9 +6176,9 @@ } }, "node_modules/textlint/node_modules/@textlint/ast-node-types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", - "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", + "version": "14.4.2", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.2.tgz", + "integrity": "sha512-e8/drNznaZHS/qGDC83k6Ht1wDWNHzGQ0RHcXD+72YMFercEFvp6WVfW5XbCbxGbSITEO5NBCOCTyeccS9lxEA==", "dev": true }, "node_modules/textlint/node_modules/brace-expansion": { @@ -7307,24 +7305,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/package.json b/package.json index f9746eb2853..a887d804b3b 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "remark-lint-prohibited-strings": "^4.0.0", "remark-lint-unordered-list-marker-style": "^4.0.0", "remark-stringify": "^11.0.0", - "textlint": "^14.4.0", + "textlint": "^14.4.2", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^5.0.13" diff --git a/source/_dashboards/button.markdown b/source/_dashboards/button.markdown index 19ebda8313e..8a0013e07e1 100644 --- a/source/_dashboards/button.markdown +++ b/source/_dashboards/button.markdown @@ -156,6 +156,7 @@ Screenshot of a vertical stack card with 4 buttons and an entity selector. The image shows a vertical stack card with 4 buttons arranged in a horizontal stack card and an entity selector. The buttons use the toggle action to run a script, for example, the Netflix script, which starts up the TV and opens Netflix. To learn how to create scripts, refer to [scripts](/docs/scripts/). ```yaml +type: vertical-stack cards: - entities: - entity: input_select.living_room_scene @@ -201,5 +202,4 @@ cards: action: more-info show_name: true show_icon: true -type: vertical-stack ``` diff --git a/source/_includes/common-tasks/commandline.md b/source/_includes/common-tasks/commandline.md index 0c9980962b1..7e14468d21d 100644 --- a/source/_includes/common-tasks/commandline.md +++ b/source/_includes/common-tasks/commandline.md @@ -101,7 +101,7 @@ Use "ha [command] --help" for more information about a command. You can also access the {% term "Home Assistant Operating System" %} via a directly connected keyboard and monitor, the console. -#### Wiping the data disk wipe from the command line +#### Wiping the data disk from the command line In {% term "Home Assistant Operating System" %}, the `ha os datadisk wipe` command wipes the data disk. The command deletes all user data as well as Home Assistant Core, Supervisor, and any installed add-ons. @@ -109,7 +109,12 @@ The command `ha os datadisk wipe` marks the data partition (either internal on t The `ha os datadisk wipe` command can only be run from the local terminal. Connect a display and keyboard and use the terminal. -Note, if you have a Home Assistant Yellow, there is a red hardware button to wipe the data disk. Follow the procedure on [resetting the device](https://yellow.home-assistant.io/guides/factory-reset/). +Note, some systems have a reset button you can use to clear the data disk, instead of using the command line: + +- If you have a Home Assistant Yellow with a Raspberry Pi Compute Module 5, use the command line steps described above. + +- If you have a Home Assistant Yellow with a Raspberry Pi Compute Module 4, there is a red hardware button to wipe the data disk. Follow the procedure on [resetting the Home Assistant Yellow](https://yellow.home-assistant.io/guides/factory-reset/). +- If you have a Home Assistant Green, there is a black hardware button to wipe the data disk. Follow the procedure on [resetting the Home Assistant Green](https://green.home-assistant.io/guides/reset/). #### Listing all users from the command line diff --git a/source/_integrations/alexa.smart_home.markdown b/source/_integrations/alexa.smart_home.markdown index 42d6787b4cc..21ea56f7103 100644 --- a/source/_integrations/alexa.smart_home.markdown +++ b/source/_integrations/alexa.smart_home.markdown @@ -151,7 +151,7 @@ Next you need create a Lambda function. - Click `Services` in top navigation bar, expand the menu to display all AWS services, then under `Compute` section click `Lambda` to navigate to Lambda console. Or you may use this [link](https://console.aws.amazon.com/lambda/home) **IMPORTANT - Alexa Skills are only supported in specific AWS regions.** Your current server location will be displayed in the top-right corner (for example, Ohio). Select an available server from the list below ([reference](https://developer.amazon.com/en-US/docs/alexa/smarthome/develop-smart-home-skills-in-multiple-languages.html#deploy)) based on your Amazon account's locale, not your physical location. **Alexa Lambda functions created in other regions will not work properly and may prevent account linking! For example, if your locale is set to English (US) and you live in California, you must use US East (N.Virginia), not US West (Oregon). While the setup process will complete with an incorrect region, the skill will not function, and there will be no clear error messages indicating the cause.** - - **US East (N.Virginia)** region for English (US) or English (CA) skills + - **US East (N.Virginia)** region for English (US), English (CA) or Portuguese (BR) skills - **EU (Ireland)** region for English (UK), English (IN), German (DE), Spanish (ES) or French (FR) skills - **US West (Oregon)** region for Japanese and English (AU) skills. @@ -256,7 +256,7 @@ Self signed certificates will not work, but you can use a free Let's Encrypt cer {% endimportant %} - `Client ID`: - - `https://pitangui.amazon.com/` if you are in US + - `https://pitangui.amazon.com/` if you are in US or BR - `https://layla.amazon.com/` if you are in EU - `https://alexa.amazon.co.jp/` if you are in JP and AU (not verified yet) @@ -323,7 +323,7 @@ alexa: type: map keys: locale: - description: The locale of your Alexa devices. Supported locales are `de-DE`, `en-AU`, `en-CA`, `en-GB`, `en-IN`, `en-US`, `es-ES`, `es-MX`, `es-US`, `fr-CA`, `fr-FR`, `hi-IN`, `it-IT`, `ja-JP`, `nl-NL` and `pt-BR`. See [Alexa Locale](#alexa-locale) for additional information. + description: The locale of your Alexa devices. Supported locales are `de-DE`, `en-AU`, `en-CA`, `en-GB`, `en-IN`, `en-US`, `es-ES`, `es-MX`, `es-US`,`fr-CA`, `fr-FR`, `hi-IN`, `it-IT`, `ja-JP`, `nl-NL`, and `pt-BR`. See [Alexa Locale](#alexa-locale) for additional information. required: false type: string default: en-US diff --git a/source/_integrations/bang_olufsen.markdown b/source/_integrations/bang_olufsen.markdown index 349bdb45072..baf66548185 100644 --- a/source/_integrations/bang_olufsen.markdown +++ b/source/_integrations/bang_olufsen.markdown @@ -71,7 +71,7 @@ A number of features are available through the media player entity: ## Limitations -Currently, some features of the Mozart platform such as: +Currently, some features of the Mozart platform are not available through the [public API](https://github.com/bang-olufsen/mozart-open-api). Some may become available at a later point, but until then the [Bang & Olufsen App](https://www.bang-olufsen.com/en/dk/story/apps) can be used to configure these settings and features: - Creating timers and alarms - Retrieving detailed alarm and timer information @@ -85,8 +85,6 @@ And more advanced app-centric features such as: - Adjusting specific sound settings - Pairing remotes -These features are not available through the API. Some may become available at a later point, but until then the [Bang & Olufsen App](https://www.bang-olufsen.com/en/dk/story/apps) can be used to configure these settings and features. - ## Actions ### play_media actions diff --git a/source/_integrations/decora_wifi.markdown b/source/_integrations/decora_wifi.markdown index ed78193941a..44e45d11811 100644 --- a/source/_integrations/decora_wifi.markdown +++ b/source/_integrations/decora_wifi.markdown @@ -15,14 +15,15 @@ related: ha_quality_scale: legacy --- -Support for [Leviton Decora Wi-Fi](https://www.leviton.com/products/residential/automation-smart-home/decora-smart-all/decora-smart-with-wifi-technology) dimmers/switches via the MyLeviton API. +Support for [Leviton Decora Wi-Fi](https://leviton.com/products/residential/smart-home/smart-switches) dimmers/switches via the MyLeviton API. Supported devices (tested): - [DW6HD1-BZ](https://www.leviton.com/products/dw6hd-1bz) (Decora Smart Wi-Fi 600W Dimmer) - [DW15P-1BW](https://www.leviton.com/products/dw15p-1bw) (Decora Smart Wi-Fi Plug-in Outlet) -- - [DW15S-1BZ](https://www.leviton.com/products/dw15s-1bz) (Decora Smart Wi-Fi 15A Switch) +- [DW15S-1BZ](https://www.leviton.com/products/dw15s-1bz) (Decora Smart Wi-Fi 15A Switch) - [D215S-2RW](https://store.leviton.com/products/decora-smart-wi-fi-switch-2nd-gen-d215s-2rw) (Decora Smart Wi-Fi 15A Switch - 2nd Gen) +- [DN15S-1BW](https://leviton.com/products/dn15s-1bw) (Decora Smart No-Neutral Switch) via [MLWSB-1BW](https://leviton.com/products/mlwsb-1bw) (Decora Smart Wi-Fi Bridge for No-Neutral Switch and Dimmer) To enable these lights, add the following lines to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} diff --git a/source/_integrations/elevenlabs.markdown b/source/_integrations/elevenlabs.markdown index e5ff68d2f02..a6b27e66389 100644 --- a/source/_integrations/elevenlabs.markdown +++ b/source/_integrations/elevenlabs.markdown @@ -47,3 +47,9 @@ data: ``` For more information about using text-to-speech with Home Assistant and more details on all the options it provides, see the [TTS documentation](/integrations/tts/). + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/google_sheets.markdown b/source/_integrations/google_sheets.markdown index 26ab362f9ac..46bc8ef141a 100644 --- a/source/_integrations/google_sheets.markdown +++ b/source/_integrations/google_sheets.markdown @@ -17,7 +17,7 @@ api2: Google Sheets API api2_link: https://console.cloud.google.com/apis/enableflow?apiid=sheets.googleapis.com --- -The Google Sheets integration allows you to connect your [Google Drive](https://drive.google.com) to Home Assistant. The integration adds an actiion to allow you to append rows to a Sheets document. The idea is that you can store data on there for further processing. When you set up a config entry, your drive will have a new sheet called Home Assistant. You can then rename this to whatever you like. +The Google Sheets integration allows you to connect your [Google Drive](https://drive.google.com) to Home Assistant. The integration adds an action to allow you to append rows to a Sheets document. The idea is that you can store data on there for further processing. When you set up a config entry, your drive will have a new sheet called Home Assistant. You can then rename this to whatever you like. **Note**: The integration currently only has access to that one document that is created during setup. diff --git a/source/_integrations/idasen_desk.markdown b/source/_integrations/idasen_desk.markdown index 7339162e1e0..fd479a02247 100644 --- a/source/_integrations/idasen_desk.markdown +++ b/source/_integrations/idasen_desk.markdown @@ -17,7 +17,7 @@ ha_codeowners: - '@abmantis' --- -The IKEA IDÅSEN integration allows you to connect your IKEA Idåsen motorized desk to Home Assistant, making it possible to control the desk height and also monitor height changes from the physical controller. +The IKEA IDÅSEN {% term integration %} allows you to connect your [IKEA Idåsen](https://www.ikea.com/us/en/cat/idasen-system-47424/) motorized desk to Home Assistant, making it possible to control the desk height and also monitor height changes from the physical controller. {% tip %} @@ -47,3 +47,9 @@ This integration provides two buttons to connect and disconnect to/from the desk Height: description: The current height of the desk, in meters. {% endconfiguration_basic %} + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/lock.template.markdown b/source/_integrations/lock.template.markdown index 8674d4b52f3..ddfeaf7f367 100644 --- a/source/_integrations/lock.template.markdown +++ b/source/_integrations/lock.template.markdown @@ -74,7 +74,7 @@ lock: required: false type: template default: None - lock: + lock: description: Defines an action to run when the lock is locked. required: true type: action diff --git a/source/_integrations/london_underground.markdown b/source/_integrations/london_underground.markdown index f91ff1123d2..78a5bea5b37 100644 --- a/source/_integrations/london_underground.markdown +++ b/source/_integrations/london_underground.markdown @@ -35,12 +35,17 @@ sensor: - Elizabeth line - Hammersmith & City - Jubilee - - London Overground - Metropolitan - Northern - Piccadilly - Victoria - Waterloo & City + - Liberty + - Lioness + - Mildmay + - Suffragette + - Weaver + - Windrush ``` {% configuration %} diff --git a/source/_integrations/mastodon.markdown b/source/_integrations/mastodon.markdown index 2d69ed5232f..108b8969de4 100644 --- a/source/_integrations/mastodon.markdown +++ b/source/_integrations/mastodon.markdown @@ -22,7 +22,10 @@ The `mastodon` platform uses [Mastodon](https://joinmastodon.org/) to deliver no ### Setup Go to **Preferences** in the Mastodon web interface, then to **Development** and create a new application. -If you want to grant only required accesses, uncheck all checkboxes then check only **read:accounts** and **write:statuses**. + +Check the following scopes **read:accounts**, **write:statuses** and **write:media**. + +Select **Submit** to create the application and generate the key, secret, and token required for the integration. {% include integrations/config_flow.md %} diff --git a/source/_integrations/monzo.markdown b/source/_integrations/monzo.markdown index afcfa7b1cf6..0534bc085b6 100644 --- a/source/_integrations/monzo.markdown +++ b/source/_integrations/monzo.markdown @@ -3,6 +3,7 @@ title: Monzo description: Instructions on how to integrate Monzo integration into Home Assistant. ha_category: - Sensor + - Finance ha_release: 2024.6 ha_iot_class: Cloud Polling ha_codeowners: diff --git a/source/_integrations/mpd.markdown b/source/_integrations/mpd.markdown index fb6aa21850b..fa556397494 100644 --- a/source/_integrations/mpd.markdown +++ b/source/_integrations/mpd.markdown @@ -40,4 +40,4 @@ relaxdeck: volume_level: 0.60 ``` -This platform works with [Music Player Daemon](https://www.musicpd.org/) and [mopidy](https://www.mopidy.com/) with [Mopidy-MPD](https://mopidy.com/ext/mpd/) as used by [Pi MusicBox](https://www.pimusicbox.com/). While all of these rely on the common MPD protocol, not all implementations support all features, especially with regard to album artwork, embedded artwork and volume control. The platform will fall back gracefully if support isn't detected. +This platform works with [Music Player Daemon](https://www.musicpd.org/) and [mopidy](https://www.mopidy.com/) with [Mopidy-MPD](https://mopidy.com/ext/mpd/) as used by [Pi MusicBox](https://pimusicbox.github.io/). While all of these rely on the common MPD protocol, not all implementations support all features, especially with regard to album artwork, embedded artwork and volume control. The platform will fall back gracefully if support isn't detected. diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown index d4934d0088a..c03222ba98f 100644 --- a/source/_integrations/mqtt.markdown +++ b/source/_integrations/mqtt.markdown @@ -133,7 +133,7 @@ Note: This action does not remove the [MQTT broker](#setting-up-a-broker) or its Your first step to get MQTT and Home Assistant working is to choose a broker. The easiest option is to install the official Mosquitto Broker add-on. You can choose to set up and configure this add-on automatically when you set up the MQTT integration. Home Assistant will automatically generate and assign a safe username and password, and no further attention is required. This also works if you have already set up this add-on yourself in advance. -You can set up additional logins for your MQTT devices and services using the [Mosquitto add-on configuration](https://my.home-assistant.io/create-link/?redirect=supervisor_addon&addon=core_mosquitto). +You can set up additional logins for your MQTT devices and services using the [Mosquitto add-on configuration](https://my.home-assistant.io/redirect/supervisor_addon/?addon=core_mosquitto). {% important %} When MQTT is set up with the official Mosquitto MQTT broker add-on, the broker's credentials are generated and kept secret. If the official Mosquitto MQTT broker needs to be re-installed, make sure you save a copy of the add-on user options, like the additional logins. After re-installing the add-on, the MQTT integration will automatically update the new password for the re-installed broker. It will then reconnect automatically. diff --git a/source/_integrations/openai_conversation.markdown b/source/_integrations/openai_conversation.markdown index 977e8458891..c2bc2ffe991 100644 --- a/source/_integrations/openai_conversation.markdown +++ b/source/_integrations/openai_conversation.markdown @@ -57,7 +57,7 @@ If you choose to not use the recommended settings, you can configure the followi {% configuration_basic %} Model: - description: The GPT language model is used for text generation. You can find more details on the available models in the [OpenAI GPT-3.5 Turbo Documentation](https://platform.openai.com/docs/models/gpt-3-5-turbo), [OpenAI GPT-4 Turbo and GPT-4 Documentation](https://platform.openai.com/docs/models/gpt-4-turbo-and-gpt-4), or [GPT-4o Documentation](https://platform.openai.com/docs/models/gpt-4o). The default is "gpt-4o". + description: The GPT language model is used for text generation. You can find more details on the available models in the [GPT-4o Documentation](https://platform.openai.com/docs/models/gpt-4o). The default is "gpt-4o-mini". Maximum Tokens to Return in Response: description: The maximum number of words or "tokens" that the AI model should generate in its completion of the prompt. For more information, see the [OpenAI Completion Documentation](https://platform.openai.com/docs/guides/completion/introduction). Temperature: diff --git a/source/_integrations/overkiz.markdown b/source/_integrations/overkiz.markdown index f3ba6d7c814..c6ff4a345af 100644 --- a/source/_integrations/overkiz.markdown +++ b/source/_integrations/overkiz.markdown @@ -1,6 +1,6 @@ --- title: Overkiz -description: Instructions on how to integrate hubs whom use the Overkiz platform with Home Assistant. +description: Instructions on how to integrate hubs that use the Overkiz IoT platform with Home Assistant. ha_category: - Alarm - Binary sensor @@ -49,39 +49,70 @@ ha_platforms: ha_integration_type: hub --- -The Overkiz (by Somfy) integration platform is used by many different vendors, like Somfy, Hitachi, and Atlantic. This integration will allow users to integrate their devices into Home Assistant using the Overkiz API. +The Overkiz (by Somfy) IoT platform is used by many different vendors, like Somfy, Hitachi, and Atlantic. This integration will allow users to integrate their devices into Home Assistant using the Overkiz API. -## Supported hubs +## Supported hubs & devices - Atlantic Cozytouch +- Bouygues Flexom - Hitachi Hi Kumo - Nexity Eugénie -- Rexel Energeasy +- Sauter Cozytouch +- Simu LiveIn2 - Somfy Connectivity Kit - Somfy Connexoon IO _(local API available)_ - Somfy Connexoon RTS _(local API available)_ -- Somfy TaHoma _(local API available)_ +- Somfy TaHoma v2 _(local API available)_ - Somfy TaHoma Beecon _(local API available)_ - Somfy TaHoma Switch _(local API available)_ - Thermor Cozytouch - -## Supported devices +- Ubiwizz Over 6000 devices from 60 brands are compatible with the Overkiz platform. This integration will retrieve your devices and map them to the relevant Home Assistant platforms. {% include integrations/config_flow.md %} +The Overkiz integration supports both the Overkiz cloud API and the local API (only supported by some Somfy hubs). For compatible Somfy hubs, you can connect locally, allowing device control without an internet connection. Start by selecting the server or app that you use to control your devices. + +### Login to Overkiz (Cloud API) + +{% configuration_basic %} +"Username": + description: "Username for your Overkiz cloud account (account you use in your IoT app)." +Password: + description: "Password for your Overkiz cloud account (account you use in your IoT app)." +{% endconfiguration_basic %} + +### Login to Overkiz (Local API) + +To use the local API, you will need to activate the [Somfy TaHoma Developer Mode](https://github.com/Somfy-Developer/Somfy-TaHoma-Developer-Mode?tab=readme-ov-file#getting-started) via the Somfy website. Activating this mode will enable a local API on your TaHoma box. Your cloud credentials are required to negotiate a token with the cloud API to authenticate your calls to the local API. This is a one-time setup and the token will be stored in your Home Assistant configuration. + +Scenarios and climate entities are **not** supported via the Somfy TaHoma Developer Mode. + +{% configuration_basic %} +"Host": + description: "The hostname or IP address of your Overkiz hub. The hostname is your Gateway PIN + .local:8443 (e.g. 1234-4567-8912.local)." +"Username": + description: "Username for your Overkiz cloud account (account you use in your IoT app)." +Password: + description: "Password for your Overkiz cloud account (account you use in your IoT app)." +Verify SSL: + description: "Verify the SSL certificate of your hub. This option is available only when connecting via the hostname." +{% endconfiguration_basic %} + +## Data updates + +This integration retrieves data from Overkiz every 30 seconds to ensure timely updates. If you only have stateless devices (RTS protocol), the integration will poll for new data every hour to reduce unnecessary load on the Overkiz API. + ## Known limitations ### Zigbee, Z-Wave, Hue, and Sonos devices not supported -Even though most Overkiz hubs support adding Zigbee, Z-Wave, Hue, and Sonos devices, this isn't supported in the Overkiz integration. All these platforms have native integrations in Home Assistant which are more stable and feature-rich. +Even though most Overkiz hubs support adding Zigbee, Z-Wave, Hue, and Sonos devices, this isn't supported in the Overkiz integration. All these platforms have native integrations in Home Assistant, which provide more frequent state updates and are more feature-rich. ### Stateless RTS covers -Covers that use the RTS protocol are stateless and do not report their state back to the hub. This means that Home Assistant will not know the state of the device after it has been controlled. - -If you only control your RTS cover from Home Assistant, you can use the [template cover](/integrations/cover.template/) to create a stateful cover entity. This will allow you to keep track of the current state (open or closed) and use the cover in automations and scenes. +RTS covers do not report their state back to the hub, so Home Assistant cannot track their state after they are controlled. If you only control your RTS cover from Home Assistant, you can use the [template cover](/integrations/cover.template/) to create a stateful cover entity. This will help you track the current state (open or closed) and use the cover in automations and scenes. ```yaml cover: @@ -114,18 +145,22 @@ During peak hours, it could happen that the Overkiz platform is unable to execut The Overkiz API only supports 10 requests in its execution queue. If you try to command more devices at the same time, for example with a group, this will fail with `EXEC_QUEUE_FULL`. To work around this, you can create a scenario in the corresponding application and call that scenario instead after syncing it in the integration. -### Internet connectivity required +### Device support via the local API -This integration communicates via the cloud-based Overkiz API in most cases. Depending on your hub and devices, there are options which communicate over your local network. +Various sensors, scenarios, and climate entities are **not** supported via the Somfy TaHoma Developer Mode due to limitations of the local API. If your device functions with the Cloud API but not with the Local API, this is an inherent limitation of the Local API and cannot be resolved. -#### Local API via Somfy TaHoma Developer Mode +### Device support via HomeKit -The Somfy TaHoma v2, Somfy Connexoon and Somfy TaHoma Switch support the [Somfy TaHoma Developer Mode (local API)](https://github.com/Somfy-Developer/Somfy-TaHoma-Developer-Mode). During setup, you can choose **Local API**. This allows you to use the local API in Home Assistant. Climate devices are not supported via the Somfy TaHoma Developer Mode. +If your hub (e.g. Somfy Connectivity Kit) supports HomeKit, a sensor named **HomeKit Setup Code** will be added to Home Assistant. To configure the [HomeKit Controller](/integrations/homekit_controller/) integration for local control, follow these steps: -#### Local API via HomeKit Controller +1. Locate the **HomeKit Setup Code** sensor in Home Assistant. +2. Retrieve the setup code value from the sensor. +3. Use this setup code to configure the [HomeKit Controller](/integrations/homekit_controller/) integration in Home Assistant. -If your hub (e.g. Somfy Connectivity Kit) supports HomeKit natively, your setup code will be added as a sensor in Home Assistant. Find your hub in Home Assistant and retrieve the value from the **HomeKit Setup Code** sensor. You can now configure the [HomeKit Controller](/integrations/homekit_controller/) integration in Home Assistant and benefit from local support. Only a [limited set of devices is supported](https://service.somfy.com/downloads/nl_v5/tahoma-homekitcompatibilitylist_eng.pdf). +Please note that only a [limited set of devices is supported via HomeKit](https://service.somfy.com/downloads/nl_v5/tahoma-homekitcompatibilitylist_eng.pdf). -#### Local API via Velux KLF200 hub +## Removing the integration -If you are only using Somfy IO-compatible devices, you could purchase a Velux KLF200 hub and use [the Velux integration](/integrations/velux/) which has a local API. +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} \ No newline at end of file diff --git a/source/_integrations/plugwise.markdown b/source/_integrations/plugwise.markdown index b72b652da89..1dbc71b3f0c 100644 --- a/source/_integrations/plugwise.markdown +++ b/source/_integrations/plugwise.markdown @@ -1,6 +1,6 @@ --- title: Plugwise -description: Plugwise Smile platform integration. +description: Plugwise Gateway platform integration. ha_category: - Binary sensor - Button @@ -30,56 +30,135 @@ ha_platforms: ha_integration_type: hub --- -This enables [Plugwise](https://www.plugwise.com) integrations with a central Smile gateway to be integrated. This integration talks locally to your **Smile** interface, and you will need its password and IP address. -The platform supports [Anna](https://www.plugwise.com/en_US/products/anna), [Adam (zonecontrol)](https://www.plugwise.com/en_US/zonecontrol), [P1](https://www.plugwise.com/en_US/products/smile-p1) Smile products and the Stretch products (not in sale). See below list for more details. +[Plugwise](https://www.plugwise.com) provides smart home devices that allow you to monitor and control your climate, energy (including gas) consumption, and energy production. The energy information can be used for the [energy dashboard](/home-energy-management). -Platforms available - depending on your Smile and setup include: - - - `climate` (for the stand-alone Anna, for Adam, a climate entity is shown for each zone containing devices like an Anna or another type of wired-thermostat, Jip or Lisa combined with one or more Tom/Floor devices) - - `binary_sensor` (for showing the status of e.g. domestic hot water heating or secondary heater) - - `button` (for the Adam and the non-legacy Anna and P1 gateways) - - `number` (for changing a boiler setpoint, a temperature offset) - - `sensor` (for all relevant products including the Smile P1) - - `select` (for changing a thermostat schedule, a regulation mode (Adam only)) - - `switch` (for Plugs connected to Adam, or Circles and Stealths connected to a Stretch) +This integration supports one or multiple Plugwise Gateways connected to your network. You can connect to these gateways using your browser, the Plugwise App, or Home Assistant. There are 4 [supported](#supported-devices) types of gateways: +- Full zonecontrol using the [Adam](https://www.plugwise.com/en_US/zonecontrol) using [additional devices](#adam) such as zone thermostats, smart valves and smart-plugs. +- A stand-alone smart thermostat called [Anna](https://www.plugwise.com/en_US/products/anna). +- For power and gas-usage monitoring there is a device simply called the [P1](https://www.plugwise.com/en_US/products/smile-p1). +- Although no longer sold, there also is support for Stretch, a gateway to create network connectivity for their older power products. ## Pre-requisites -The Plugwise Smile(s) in your network will be automatically discovered and shown on the integrations dashboard. All you need is the Smile ID as its password, which is an 8-character string printed on the sticker on the bottom of your Smile. Repeat this for each individual Smile. +Plugwise gateways on your network are automatically discovered and displayed on the integrations dashboard. Each gateway requires its unique 8-character ID, found on a sticker at the bottom, as its password. Repeat this process for each gateway. {% include integrations/config_flow.md %} {% configuration_basic %} Host: - description: "The hostname or IP address of your Smile. For example: `192.168.1.25`. You can find it in your router or in the Plugwise app using the **Settings** icon (☰) -> **System** -> **Network**. If you are looking for a different device in the Plugwise App, on the main screen first select **Gateways** -> the Smile of your choice, and then follow the previous instruction. Normally, the Smile(s) are automatically discovered, and you don't have to provide the hostname or IP address." + description: "The hostname or IP address of your gateway. For example: `192.168.1.25`. You can find it in your router or in the Plugwise app using the **Settings** icon (☰) -> **System** -> **Network**. In the Plugwise App, to locate a specific device, select **Gateways** on the main screen, choose your desired gateway, and then follow the previous instructions. Normally, the gateway(s) are automatically discovered, and you don't have to provide the hostname or IP address." Username: - description: "Username to log in to the Smile. This should be just `smile` - or `stretch` for a Stretch." + description: "Username to log in to the gateway. This should be 'smile' for most devices, or 'stretch' for a Stretch." Password: - description: "This is the password (i.e. Smile ID) printed on the sticker on the back of your Smile (i.e. Adam, Smile-T, or P1) and should be 8 characters long." + description: "Each gateway requires its unique 8-character ID, found on a sticker at the bottom, as its password." {% endconfiguration_basic %} -### Further configuration +### Schedule Management -For a thermostat, the active schedule can be deactivated or reactivated via the climate card. Please note, that when no schedule is active, one must first be activated in the Plugwise App. Once that has been done, the Plugwise Integration can manage future operations. +1. **Initial Setup**: First, activate a schedule using the Plugwise App or browser. +2. **Control via Home Assistant**: + - Use the climate card to activate/deactivate schedules. + - 'Auto' mode indicates the schedule is active. + - 'Heat', 'Cool' or 'Heat_cool' modes signify the schedule is inactive. +3. **Changing Schedules**: Use the thermostat [select](#change-climate-schedule) entity. -Auto means the schedule is active, and Heat means it's not active. The active thermostat schedule can be changed via the connected thermostat select entity. Please note that only schedules with two or more schedule points will be shown as select options. +{% note %} +Only schedules with two or more schedule points will appear as options. +{% endnote %} -## Entities +## Supported functionality -This integration will show all Plugwise devices (like hardware devices, multi-thermostat climate-zones, and virtual switchgroups) present in your Plugwise configuration. In addition, you will see a Gateway device representing your central Plugwise gateway (i.e., the Smile Anna, Smile P1, Adam or Stretch). +This integration displays all Plugwise devices in your configuration, including hardware devices, multi-thermostat climate zones, and virtual switch groups. Additionally, a device representing your Plugwise gateway (e.g., Adam, Smile-T, or P1) will be visible. -For example, if you have an Adam setup with a Lisa named 'Living' and a Tom named 'Bathroom', these will show up as individual devices. The heating/cooling device connected to your Smile will be shown as 'OpenTherm' or 'OnOff', depending on how the Smile communicates with the device. If you have Plugs (as in, pluggable switches connecting to an Adam) those will be shown as devices as well. +For example, if you have an Adam setup with a Lisa named 'Living' and a Tom named 'Bathroom', these will show up as individual devices. The heating/cooling device connected to your gateway will be shown as 'OpenTherm' or 'OnOff', depending on how the gateway communicates with the device. If you have Plugs (as in, pluggable switches connecting to an Adam) or Aqara Smart Plugs, those will be shown as devices as well. -Under each device there will be entities shown like binary_sensors, sensors, etc. depending on the capabilities of the device: for instance centralized measurements such as 'power' for a P1, 'outdoor_temperature' on Anna or Adam will be assigned to your gateway device. Heating/cooling device measurements such as 'boiler_temperature' will be assigned to the OpenTherm/OnOff device. +Each device will list entities such as `binary sensors`, `sensors`, etc., depending on its capabilities: for instance, centralized measurements such as `power` for a P1, `outdoor_temperature` on Anna or Adam will be assigned to your gateway device. Heating/cooling device measurements such as `boiler_temperature` will be assigned to the OpenTherm/OnOff device. + +### Climate entities + +#### Binary sensors + +Depending on your setup, one or more binary sensors will provide the state of your connected elements. Examples include: + +- **Cooling** & **Heating** + - **Description**: Indicates if your system is actively cooling or heating. +- **DHW State** + - **Description**: Indicates active heating of domestic hot water. +- **Flame State** + - **Description**: If gas is being consumed by your heater, i.e., firing for space or DHW-heating. + +#### Numbers + +Modifying specific number-based settings allows you to fine-tune your setup. + +- **Maximum boiler temperature setpoint** + - **Description**: Adjust the maximum temperature for secondary heater. +- **Domestic hot water setpoint** + - **Description**: Adjust the temperature for your domestic hot water. +- **Temperature offset** + - **Description**: Fine-tune the perceived temperature. + +#### Sensors + +A generous number of sensors is provided for your climate setup. Examples include: + +- **Setpoint** + - **Description**: The setpoint for the current zone (Adam) or generic (Anna). +- **Indoor temperature** + - **Description**: For Anna, Lisa or Jip this will show the temperature measured at the specific thermostat. +- **Outdoor temperature** + - **Description**: The temperature your climate gateway retrieves online. +- **Outdoor air temperature** + - **Description**: The temperature reported by the sensor present in the outdoor unit of your HVAC system, such as a heat pump. + +#### Selects + +- **Thermostat schedule** + - **Description**: Select between available schedules, generic (Anna) or for the current zone (Adam). + - **Remark**: Please check the [further configuration](#further-configuration) for requirements on configuring schedules. + +#### Switches + +- **Cooling** + - **Description**: Toggle if cooling should be enabled. +- **DHW Comfort Mode** + - **Description**: Toggle comfort mode for domestic hot water. + +### Power and gas entities + +#### Sensors + +A generous number of sensors is provided. Examples include: + +- **Electricity consumed point** + - **Description**: Electricity (in Watt) consumed currently by a phase (P1) or a plug. + - **Gateways**: Adam, P1 or Stretch. +- **Gas Consumed Interval** + - **Description**: The gas consumed since the last interval. + - **Gateways**: P1. +- **P1 Net Electricity Point** + - **Description**: Your netto electricity use at this time, can be negative when producing energy, i.e. though solar panels. + - **Gateways**: P1. +- **P1 Electricity Produced off-peak cumulative** + - **Description**: The total produced electricity during off-peak. + - **Gateways**: P1. + +#### Switches + +- **Relay** + - **Description**: Switch a plug on or off + - **Gateways**: Adam, P1 or Stretch. ## Data updates -The interval which the integration fetches data from the Smile depends on the device: +The interval at which the integration fetches data from the gateway depends on the device-type. -- Power entities, such as the P1, will be refreshed every 10 seconds. -- Climate entities will be refreshed every 60 seconds. -- Stretch entities will be refreshed every 60 seconds. +|Device-type|Interval| +--- | --- +| Climate entities |60 seconds| +| Energy and gas entities |10 seconds| +| Stretch entities |60 seconds| ## Removing the integration @@ -236,33 +315,120 @@ script: preset_mode: asleep ``` -### Supported devices +## Supported devices -The current implementation of the Python module (Plugwise-Smile) includes: +### Adam -Adam (zone_control) with On/Off, OpenTherm, and Loria/Thermastage heating and cooling support: +A complete zone control system also known as [Adam HA](https://www.plugwise.com/en_US/zonecontrol), supporting: - - v3.x - - v2.3 +- On/Off, OpenTherm heating and cooling support. +- Running firmwares v3.x or v2.3. +- Additional devices: + - Zone thermostats such as Lisa or Anna (see warning below on Anna), + - A temperature sensor, Jip, + - Valve controllers called Floor or Tom, + - An under-floor heating controller Koen (note: a Koen always comes with a Plug, which is the active part), + - Smart switches, either Plug or Aqara Smart Plug. - - Devices supported are Anna, Lisa, Jip, Floor, Tom, Plug, Aqara Smart Plug, and Koen (a Koen always comes with a Plug, the active part) +{% note %} +You can also use the Adam SA (Stand-alone, no Zigbee stick present) to make your regular OpenTherm thermostat smart. +{% endnote %} -Anna (thermostat) with OnOff, OpenTherm heating, and Elga and Loria/Thermastage with heating and cooling support: +### Anna - - v4.x - - v3.x - - v1.x +A [smart thermostat](https://www.plugwise.com/en_US/products/anna), supporting: -On the Elga, the cooling-mode can only be turned on, or off, via a switch present on the device, not via a toggle in the Plugwise App. -Please make sure to reload the Plugwise integration after the cooling-mode-switch is turned off after being on, or the other way around. This will ensure that the Plugwise integration is being adapted to the change in function of the Elga. +- On/Off, OpenTherm heating and cooling support. +- Running firmware v4.x, v3.x or v1.x. -Smile P1 (DSMR): +### P1 (DSMR) - - v4.x - - v3.x - - v2.x +A [P1](https://www.plugwise.com/en_US/products/smile-p1) smart meter monitor for the single- or multi-phase grid power connection to your home including gas usage monitoring. Running firmware v4.x, v3.x or v2.x. -Stretch (power switches): +### Stretch (end-of-sale) + +For controlling and monitoring legacy power switches, such as the Circles or Stealths, with v3.x or v2.x Stretch firmware. + +### Unsupported devices + +#### Anna P1 + +A smart thermostat [combined](https://www.plugwise.com/en_US/products/anna-p1) with an energy monitor can transform the way you manage energy. If your solar setup generates surplus energy and you're charged for it, this combination ensures that excess solar power is redirected efficiently. Powering your heat pump for instance to make the most of renewable energy. Do you have a setup like this? We’d love to hear your experience! + +#### Stick + +Plugwise formerly sold power-based products comprised of a USB stick, as the controller, and smart plugs (amongst a few other items). This integration does not support the USB-stick. Reuse of the these products, such as Circles and Stealths using a Stretch or an Adam is supported. Work for USB support is in development by the community, but not ready to become a formal Home Assistant integration just yet. - v3.x - v2.x + +## Troubleshooting + +### Accessing the local device + +If you need to configure the gateway directly, without using the Plugwise App, you can find the link to your device by: + +1. Go to {% my integrations title="**Settings** > **Devices & services**" %}, and select your integration. +2. If you have more than one Plugwise gateway, select the one to configure. +3. Select the gateway device, this should be called 'Adam', 'Stretch' or contain 'Smile' in its name. +4. On the integration entry, choose to open the configuration URL left of the {% icon "mdi:dots-vertical" %} icon. +5. A new window/tab will open, enter 'smile' (or 'stretch') as the username and the ID, from the sticker on the back, as the password. +6. Consult the manual or click the 'search' button on the [Plugwise Support](https://plugwise.com/support/) page for interactive help. + +### Adjusting the update interval + +Please note that the [default intervals](#data-updates) are considered best practice and according to how Plugwise normally updates their data. Updating too frequently may induce considerable load on your gateway(s) resulting in unexpected results or missing data. + +{% include common-tasks/define_custom_polling.md %} + +### Diagnostic data + +If you need to create an issue to report a bug or want to inspect diagnostic data, use the below method to retrieve diagnostics: + +1. Go to {% my integrations title="**Settings** > **Devices & services**" %}, and select your integration. +2. If you have more than one Plugwise gateway, select the gateway that is experiencing issues. +3. Select the gateway device, this should be called 'Adam', 'Stretch' or contain 'Smile' in its name. +4. On the integration entry, select the {% icon "mdi:dots-vertical" %}. + - Then, select **Download diagnostics** and a JSON file will be downloaded. +5. You can inspect the downloaded file or, when requested, upload it to your issue report. + +### Rebooting your gateway + +For each gateway, there will be a reboot button available in your integration. + +1. Go to {% my integrations title="**Settings** > **Devices & services**" %}, and select your integration. +2. If you have more than one Plugwise Smile, select the gateway that is experiencing issues. +3. Select the gateway device, this should be called 'Adam', 'Stretch' or contain 'Smile' in its name. +4. On the integration entry, look for the 'Reboot' button to press in the **Configuration** section. + +## Known limitations + +### Schedule configuration and pre-requisites + +Creation, modification or deleting of climate schedules is not supported through this integration. We recommend using the Plugwise App or visit the local device to configure schedules. See [accessing the local device](#accessing-the-local-device) above on how to access the local device from Home Assistant. + +To display your schedule as a valid `select` option for this integration, ensure that the schedule has a minimal of two schedule points. + +### Anna connected to Adam + +If you are using your Anna as part of your Adam zone control system, it becomes a zone thermostat, and cannot be configured as a smart thermostat. The integration will not discover your Anna or allow manual configuration. + +### Anna with Elga + +The cooling mode can only be toggled via a **physical switch** on the device (not through a toggle in the Plugwise App or using Home Assistant). + +The change in cooling mode should be detected by Home Assistant. If not, please try to **reload** the Plugwise integration as indicated below and report your findings. + +1. Create an issue including your [diagnostic data](#diagnostic-data). +2. Go to {% my integrations title="**Settings** > **Devices & services**" %}, and select your integration. +3. On the "**Hubs**" page, use the {% icon "mdi:dots-vertical" %} icon next to your Anna and choose "**Reload**". + +### Vacation preset + +The `vacation` preset is only available on an Anna. Adam has a vacation-mode (called Action in the Plugwise App) that disables the active schedule and sets the vacation-preset for all zones. + +Also, there's a pause-mode that disables the active schedule and sets the away-preset for all zones. + +### Idling climate actions + +You can only stop climate actions on an Adam, see [turn on / turn off](#turn-on--turn-off). An alternative could be to adjust your [preset mode](#set-preset-mode) to `no_frost` to stop any heating actions. diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown index f1c5a7f4979..a5e22e0474d 100644 --- a/source/_integrations/reolink.markdown +++ b/source/_integrations/reolink.markdown @@ -497,7 +497,7 @@ You can receive rich notifications on your phone when someone rings a Reolink do - Turn on (outdoor) lights near the camera to improve image clarity at night once the camera detects a person, vehicle, or animal. - Turn off notifications and recording when you get home (based on, e.g., geofencing) and turn it back on when you leave home. -When someone presses the doorbell, Play ringtones on speakers (Echo Dot/Google Home/smart hubs) throughout the house. +- When someone presses the doorbell, play ringtones on speakers (Echo Dot/Google Home/smart hubs) throughout the house. - Pause a TV and show a notification badge on the TV when the doorbell is pressed (only when the TV is already on). - Play the quick replay messages of a Reolink doorbell only when not home (geofencing) - Wake up and start recording on other battery cameras nearby if one camera/motion sensor detects an event. diff --git a/source/_integrations/roomba.markdown b/source/_integrations/roomba.markdown index 6c5f4db1601..d56981f0dcb 100644 --- a/source/_integrations/roomba.markdown +++ b/source/_integrations/roomba.markdown @@ -88,3 +88,9 @@ Use this credentials in dorita980 lib :) ``` Copy the password (everything between `=>` and `<=`, not including leading and trailing whitespace) into the Home Assistant password dialog. + +## Troubleshooting + +- **Integration wizard shows "Failed to connect" after submitting the password**: Before attempting a factory reset (which can be a cumbersome process), attempt submitting the password in the integration wizard while the Roomba is actively running (i.e. cleaning). Avoid opening the app to start a manual job to help with this. Instead, push the physical clean button on the device directly to start the manual job. This appears to resolve the issue on some models because they answer queries only while actively running. + + If this still does not resolve the issue, factory reset the model. diff --git a/source/_integrations/scrape.markdown b/source/_integrations/scrape.markdown index d8a38008830..bf9a9e8ae55 100644 --- a/source/_integrations/scrape.markdown +++ b/source/_integrations/scrape.markdown @@ -39,7 +39,7 @@ scrape: - resource: https://www.home-assistant.io sensor: - name: "Current version" - select: ".current-version h1" + select: ".release-date" ``` {% configuration %} @@ -178,8 +178,7 @@ scrape: - resource: https://www.home-assistant.io sensor: - name: Release - select: ".current-version h1" - value_template: '{{ value.split(":")[1] }}' + select: ".release-date" ``` {% endraw %} diff --git a/source/_integrations/sensor.rest.markdown b/source/_integrations/sensor.rest.markdown index 346285725ff..51b8b4fb04f 100644 --- a/source/_integrations/sensor.rest.markdown +++ b/source/_integrations/sensor.rest.markdown @@ -172,7 +172,7 @@ In this section you find some real-life examples of how to use this sensor. ### External IP address -You can find your external IP address using the service [JSON Test](https://www.jsontest.com/) at their [http://ip.jsontest.com/](http://ip.jsontest.com/) URL. +You can find your external IP address using the [ipify](https://www.ipify.org) service for both IPv4 and IPv6. {% raw %} @@ -182,6 +182,11 @@ sensor: name: "External IP" resource: "https://api.ipify.org/?format=json" value_template: "{{ value_json.ip }}" + + - platform: rest + name: "External IPv6" + resource: "https://api6.ipify.org/?format=json" + value_template: "{{ value_json.ip }}" ``` {% endraw %} diff --git a/source/_integrations/shell_command.markdown b/source/_integrations/shell_command.markdown index bc720ca3e7c..c19c8da114c 100644 --- a/source/_integrations/shell_command.markdown +++ b/source/_integrations/shell_command.markdown @@ -109,7 +109,7 @@ The following example shows how the shell command response may be used in automa ```yaml # Create a ToDo notification based on file contents automation: - - alias: "run_set_ac" + - alias: "run_get_file_contents" triggers: - ... actions: diff --git a/source/_integrations/sky_remote.markdown b/source/_integrations/sky_remote.markdown index 322e9a7ec90..18b9ba28269 100644 --- a/source/_integrations/sky_remote.markdown +++ b/source/_integrations/sky_remote.markdown @@ -22,7 +22,7 @@ The **Sky Remote** {% term integration %} lets you control a [Sky](https://www.s ## Supported models -This integration is intended to control all Sky satellite receiver boxes with a LAN port. It will not control Sky stream pucks. +This integration is intended to control Sky+ HD and Sky Q satellite receiver boxes with a LAN port. It will not control Sky stream pucks. {% include integrations/config_flow.md %} diff --git a/source/_integrations/template.markdown b/source/_integrations/template.markdown index a4fed8e1ece..67be19f7cb5 100644 --- a/source/_integrations/template.markdown +++ b/source/_integrations/template.markdown @@ -939,7 +939,7 @@ binary_sensor: sensors: sun_up: friendly_name: "Sun is up" - value_template: {{ state_attr('sun.sun', 'elevation') > 0 }} + value_template: "{{ state_attr('sun.sun', 'elevation') > 0 }}" ``` {% endraw %} diff --git a/source/_integrations/totalconnect.markdown b/source/_integrations/totalconnect.markdown index 275910d0942..0ee19234a80 100644 --- a/source/_integrations/totalconnect.markdown +++ b/source/_integrations/totalconnect.markdown @@ -21,19 +21,100 @@ ha_integration_type: integration The `totalconnect` integration provides connectivity with Resideo Total Connect 2.0-enabled alarm systems. +The integration allows automations based on the state of the alarm system. For example: when the alarm is armed, turn on the outside light. + +The integration can also arm or disarm the alarm panel. For example: when I arrive home, disarm the alarm panel + +## Supported devices + +This integration supports alarm panels with "communicator modules" that are compatible with the Total Connect 2.0 service. An active account is required via a third party alarm monitoring company. Panels may be branded as Resideo, Honeywell, Ademco or other third party alarm companies. + +Device models known to work include: + +- ProSeries (ProA7, ProA7Plus) +- Lyric (AIO, Gateway) +- Lynx Touch (L5100, L5200, L5210, L7000) +- Lynx Plus (L3000) +- VISTA (15P, 20P, 21iP) + +## Unsupported devices + +The following devices are not supported: + +- Older Lynx models (not Touch or Plus) +- Other panels without a Total Connect compatible communicator module + ## Prerequisites Log in to the [Total Connect website](https://totalconnect2.com) and create a "standard" Total Connect user account specifically for use with Home Assistant. It should not have full administrative privileges. Give the user access to your Location, along with a user code, usually a 4 digit number. +{% details "Notes for Home Assistant Core Installations" %} + +If you have issues running this integration, you may require `libxml2-dev` and `libxmlsec1-dev` packages. To install these on Raspbian, run the command: + +```bash +sudo apt install libxml2-dev libxmlsec1-dev +``` + +{% enddetails %} + {% include integrations/config_flow.md %} ## Configuration Options **Auto Bypass Low Battery:** if enabled, TotalConnect zones will immediately be bypassed when they report low battery. This option helps because zones tend to report low battery in the middle of the night. The downside of this option is that when the alarm system is armed, the bypassed zone will not be monitored. -**Require Code:** if enabled, you must enter the user code to disarm the alarm. +**Require Code:** if enabled, you must enter the user code to arm or disarm the alarm. + +## Alarm control panel + +The integration provides an alarm control panel for each Total Connect location. It uses the name of your location from Total Connect. For example, if your location name in Total Connect is "Home", Home Assistant will use `alarm_control_panel.home`. + +The `triggered` state also provides a state attribute called `triggered_source` giving more detail on what triggered the alarm: + +- `Police/Medical` is when sensors detected a burglar and/or the Police or Medical button was pressed +- `Fire/Smoke` is when fire or smoke is detected, and/or the Fire button was pressed +- `Carbon Monoxide` is when carbon monoxide is detected + +## Binary sensor + +The integration provides a binary sensor for each Total Connect zone. To see faulted zones in Home Assistant, your Total Connect account must have "Sensor Activities" enabled. Your alarm monitoring company may charge an extra fee to enable this. If available, these can be found in the Total Connect 2 web portal at **Notifications** -> **Sensor Activities**. Alternately, they can be found in the Total Connect mobile app at **More** -> **Settings** -> **Notifications** -> **Sensor Activities**. Enable each zone you want to monitor. Unmonitored zones will display as `Closed` in Home Assistant. + +Home Assistant device class `door` is assigned to Total Connect entry/exit, perimeter, and motion zones; along with most alarm panel buttons. The sensor will appear as `True` if the zone is opened (either fault or triggered in Total Connect) and `False` if closed. Device class `smoke` is assigned to Total Connect smoke detectors and alarm panel buttons set to a "Fire No Verification" response type. The sensor will appear as `True` if smoke is detected or the respective button is pressed. Device class `gas` is assigned to Total Connect carbon monoxide detectors. The sensor will appear as `True` if carbon monoxide is detected. + +## Buttons + +The integration provides a bypass button for each zone that can be bypassed. The **Bypass All** button for the alarm panel will bypass all faulted or troubled zones. The **Clear Bypass** button for the alarm panel will clear all bypassed zones. + +## Actions + +The alarm control panel supports the following basic actions: `alarm_arm_away`, `alarm_arm_home`, `alarm_arm_night`, and `alarm_disarm`. + +### Action: Arm home instant + +The `totalconnect.arm_home_instant` action puts the alarm panel in "arm home" with zero entry delay, triggering the alarm instantly if an entry/exit zone is faulted. This is equivalent to "arm stay instant" in most alarm panels. + +| Data attribute | Optional | Description | +|------------------------|----------|------------------------------------------------------| +| `entity_id` | No | The ID of the alarm panel to arm. | + +### Action: Arm away instant + +The `totalconnect.arm_away_instant` action puts the alarm panel in "arm away" with zero entry delay, triggering the alarm instantly if an entry/exit zone is faulted. This is equivalent to "arm away instant" in most alarm panels. + +| Data attribute | Optional | Description | +|------------------------|----------|------------------------------------------------------| +| `entity_id` | No | The ID of the alarm panel to arm. | + +## Diagnostic Sensors + +The following diagnostic sensors are available: + +- Low Battery for Zones and Alarm Panels will be `On` if the battery is low. +- Tamper for Zones and Alarm Panels will be `On` if in a tampered state. +- Power for Alarm Panels will be `On` if main power is connected or `Off` if running on the backup battery. ## Automation example @@ -42,7 +123,7 @@ automation: - alias: "Alarm: Disarmed Daytime" triggers: - trigger: state - entity_id: alarm_control_panel.total_connect + entity_id: alarm_control_panel.home to: "disarmed" conditions: - condition: sun @@ -55,7 +136,7 @@ automation: - alias: "Alarm: Armed Away" triggers: - trigger: state - entity_id: alarm_control_panel.total_connect + entity_id: alarm_control_panel.home to: "armed_away" actions: - action: scene.turn_on @@ -70,45 +151,37 @@ automation: actions: - action: totalconnect.arm_home_instant target: - entity_id: alarm_control_panel.total_connect + entity_id: alarm_control_panel.home ``` -{% details "Notes for Home Assistant Core Installations" %} +## Removing the integration -If you have issues running this integration, you may require `libxml2-dev` and `libxmlsec1-dev` packages. To install these on Raspbian, run the command: +This integration follows standard integration removal. No extra steps are required. -```bash -sudo apt install libxml2-dev libxmlsec1-dev -``` +{% include integrations/remove_device_service.md %} -{% enddetails %} +After deleting the integration, go to Total Connect and remove the user account you created for Home Assistant. -## Alarm control panel +## Data Updates -The integration provides an alarm control panel for each Total Connect location. It uses the name of your location from Total Connect. For example, if your location name in Total Connect is "Home", Home Assistant will use `alarm_control_panel.home`. +Your alarm panel contacts the Total Connect 2.0 server to provide status updates. This is a "polling integration" that contacts the Total Connect 2.0 server every 30 seconds to retrieve the status of your alarm panel and sensors. Home Assistant cannot communicate locally with the alarm panel. -The alarm control panel supports the following actions: `alarm_arm_away`, `alarm_arm_home`, `alarm_arm_night`, and `alarm_disarm`. The integration also provides unique actions for `totalconnect.arm_home_instant` and `totalconnect.arm_away_instant` which arms the system with zero entry delay, triggering the alarm instantly if an entry/exit zone is faulted. +## Limitations -The `triggered` state also provides a state attribute called `triggered_source` giving more detail on what triggered the alarm: +The polling window is 30 seconds. If your door opens and then closes again within 30 seconds, it may not be visible in Home Assistant. Automations based on the short term status of doors and windows are not recommended. -- `Police/Medical` is when sensors detected a burglar and/or the Police or Medical button was pressed -- `Fire/Smoke` is when fire or smoke is detected, and/or the Fire button was pressed -- `Carbon Monoxide` is when carbon monoxide is detected +The Total Connect API has limited zone type information. Many zones are simply described as "perimeter" and thus appear as a `door` in Home Assistant. You may have to manually adjust some entities. -## Binary sensor +Some alarm panels integrate Z-Wave, cameras, smart locks or garage door openers, and those add-on devices can be controlled by the Total Connect app. This integration does not yet support awareness of or control of these add-on devices. -The integration provides a binary sensor for each Total Connect zone. To see faulted zones in Home Assistant, your Total Connect account must have "Sensor Activities" enabled. Your alarm monitoring company may charge an extra fee to enable this. If available, these can be found in the Total Connect 2 web portal at **Notifications** -> **Sensor Activities**. Alternately, they can be found in the Total Connect mobile app at **More** -> **Settings** -> **Notifications** -> **Sensor Activities**. Enable each zone you want to monitor. Unmonitored zones will display as `Closed` in Home Assistant. +This integration cannot "trigger" the alarm panel or cause the alarm to sound. -The Total Connect API has limited zone type information. Home Assistant device class `door` is assigned to Total Connect entry/exit, perimeter, and motion zones; along with most alarm panel buttons. The sensor will appear as `True` if the zone is opened (either fault or triggered in Total Connect) and `False` if closed. Device class `smoke` is assigned to Total Connect smoke detectors and alarm panel buttons set to a "Fire No Verification" response type. The sensor will appear as `True` if smoke is detected or the respective button is pressed. Device class `gas` is assigned to Total Connect carbon monoxide detectors. The sensor will appear as `True` if carbon monoxide is detected. +## Troubleshooting -## Buttons +### Error Connecting or Service Unavailable -The integration provides a bypass button for each zone that can be bypassed. The **Bypass All** button for the alarm panel will bypass all faulted or troubled zones. The **Clear Bypass** button for the alarm panel will clear all bypassed zones. +The integration depends on the Total Connect 2.0 servers and your internet connection. Verify your internet is working and check https://status.resideo.com/ for server outages. -## Diagnostic Sensors +### Unknown ResultCode, ArmingState, ZoneType or ZoneStatus -The following diagnostic sensors are available: - -- Low Battery for Zones and Alarm Panels will be `On` if the battery is low. -- Tamper for Zones and Alarm Panels will be `On` if in a tampered state. -- Power for Alarm Panels will be `On` if main power is connected or `Off` if running on the backup battery. +The Total Connect API does not fully document all modes of every alarm panel so the integration was developed based on testing with the developers' own hardware. New or different hardware may result in unknown ResultCode, ArmingState, ZoneType, ZoneStatus or similar messages in the Home Assistant logs. If encountered, please [submit an issue](https://github.com/craigjmidwinter/total-connect-client/issues) for `total-connect-client` which enables this integration. diff --git a/source/_integrations/tradfri.markdown b/source/_integrations/tradfri.markdown index cd51168b901..55802cdff94 100644 --- a/source/_integrations/tradfri.markdown +++ b/source/_integrations/tradfri.markdown @@ -23,7 +23,7 @@ ha_platforms: ha_integration_type: integration --- -The IKEA TRÅDFRI integration allows you to connect your IKEA Trådfri Gateway to Home Assistant. The gateway can control compatible Zigbee-based lights (certified Zigbee Light Link products) connected to it. Home Assistant will automatically discover the gateway's presence on your local network if `discovery:` is present in your {% term "`configuration.yaml`" %} file. +The IKEA TRÅDFRI integration allows you to connect your IKEA Trådfri Gateway to Home Assistant. The gateway can control compatible Zigbee-based lights (certified Zigbee Light Link products) connected to it. {% include integrations/config_flow.md %} diff --git a/source/_integrations/transmission.markdown b/source/_integrations/transmission.markdown index 2f3208d2543..75417e85de2 100644 --- a/source/_integrations/transmission.markdown +++ b/source/_integrations/transmission.markdown @@ -26,23 +26,25 @@ Your Transmission client must first be configured to allow remote access. In you {% include integrations/config_flow.md %} -## Integration entities +## Supported functionality The Transmission integration will add the following sensors and switches. -**Sensors**: -- `sensor.transmission_current_status`: The status of your Transmission daemon. -- `sensor.transmission_download_speed`: The current download speed [MB/s]. -- `sensor.transmission_upload_speed`: The current upload speed [MB/s]. -- `sensor.transmission_active_torrents`: The current number of active torrents. -- `sensor.transmission_paused_torrents`: The current number of paused torrents. -- `sensor.transmission_total_torrents`: The total number of torrents present in the client. -- `sensor.transmission_started_torrents`: The current number of started torrents (downloading). -- `sensor.transmission_completed_torrents`: The current number of completed torrents (seeding). +### Sensors -**Switches**: -- `switch.transmission_switch`: A switch to start/stop all torrents. -- `switch.transmission_turtle_mode`: A switch to enable turtle mode (a.k.a. alternative speed limits). +- The status of your Transmission daemon. +- The current download speed [MB/s]. +- The current upload speed [MB/s]. +- The current number of active torrents. +- The current number of paused torrents. +- The total number of torrents present in the client. +- The current number of started torrents (downloading). +- The current number of completed torrents (seeding). + +### Switches + +- A switch to start/stop all torrents. +- A switch to enable turtle mode (a.k.a. alternative speed limits). ## Event automation diff --git a/source/_integrations/valve.markdown b/source/_integrations/valve.markdown index 4b38e165503..6b47dca70ef 100644 --- a/source/_integrations/valve.markdown +++ b/source/_integrations/valve.markdown @@ -46,8 +46,8 @@ The following device classes are supported for valves: ### Valve control actions -All valves respond to `valve.open`, `valve.close`, and `valve.toggle`. -Valves that allow setting a specific position may also be controlled with `valve.set_position` and `valve.stop`. +All valves respond to `valve.open_valve`, `valve.close_valve`, and `valve.toggle`. +Valves that allow setting a specific position may also be controlled with `valve.set_valve_position` and `valve.stop_valve`. | Data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -61,12 +61,12 @@ automation: - trigger: time at: "07:15:00" actions: - - action: valve.close + - action: valve.close_valve target: entity_id: valve.demo ``` -### Action `valve.set_position` +### Action `valve.set_valve_position` Set the position of one or multiple valves if they support setting a specific position. @@ -83,7 +83,7 @@ automation: - trigger: time at: "07:15:00" actions: - - action: valve.set_position + - action: valve.set_valve_position target: entity_id: valve.demo data: diff --git a/source/_integrations/vicare.markdown b/source/_integrations/vicare.markdown index f03288982d3..6801075769b 100644 --- a/source/_integrations/vicare.markdown +++ b/source/_integrations/vicare.markdown @@ -190,3 +190,9 @@ Invalid data from Vicare server: { ``` Usually, this resolves itself after a while, but if this state persists, try to power cycle your gateway. + +## Removing the integration + +This integration follows standard integration removal. Once the integration is removed, you can remove the API client (assuming it was only used by this integration) by going to the [Viessmann developer portal](https://app.developer.viessmann.com/) and deleting the client you created for Home Assistant. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/workday.markdown b/source/_integrations/workday.markdown index 067f3ac54b4..6827d51c485 100644 --- a/source/_integrations/workday.markdown +++ b/source/_integrations/workday.markdown @@ -26,7 +26,7 @@ This can be used to make daily automations that act differently on workdays than ## Setup -Check the [country list](https://github.com/dr-prodigy/python-holidays#available-countries) for available provinces (and other subdivisions, like states and territories) for each country. +Check the [country list](https://github.com/vacanza/holidays#available-countries) for available provinces (and other subdivisions, like states and territories) for each country. {% include integrations/config_flow.md %} diff --git a/source/voice-pe/index.html b/source/voice-pe/index.html index 603c6c0022b..31a1eb1c6db 100644 --- a/source/voice-pe/index.html +++ b/source/voice-pe/index.html @@ -942,7 +942,7 @@ frontpage_image: /images/frontpage/voice-pe-frontpage.jpg