Merge branch 'current' into rc

This commit is contained in:
Franck Nijhof 2024-02-07 18:16:18 +01:00
commit ae75499061
No known key found for this signature in database
GPG Key ID: D62583BA8AB11CA3
25 changed files with 521 additions and 223 deletions

View File

@ -10,7 +10,7 @@ jobs:
- name: Check out files from GitHub
uses: actions/checkout@v4.1.1
- name: Setting up Node.js
uses: actions/setup-node@v4.0.1
uses: actions/setup-node@v4.0.2
with:
node-version: 20
cache: "npm"
@ -27,7 +27,7 @@ jobs:
- name: Check out files from GitHub
uses: actions/checkout@v4.1.1
- name: Setting up Node.js
uses: actions/setup-node@v4.0.1
uses: actions/setup-node@v4.0.2
with:
node-version: 20
cache: "npm"

View File

@ -23,7 +23,7 @@ group :jekyll_plugins do
end
gem 'sinatra', '4.0.0'
gem 'nokogiri', '1.16.0'
gem 'nokogiri', '1.16.2'
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
# and associated library

View File

@ -73,7 +73,7 @@ GEM
multi_json (1.15.0)
mustermann (3.0.0)
ruby2_keywords (~> 0.0.1)
nokogiri (1.16.0-x86_64-linux)
nokogiri (1.16.2-x86_64-linux)
racc (~> 1.4)
parallel (1.24.0)
parser (3.3.0.5)
@ -84,7 +84,7 @@ GEM
prism (0.19.0)
public_suffix (5.0.4)
racc (1.7.3)
rack (3.0.8)
rack (3.0.9)
rack-protection (4.0.0)
base64 (>= 0.1.0)
rack (>= 3.0.0, < 4)
@ -134,14 +134,14 @@ GEM
rack-protection (= 4.0.0)
rack-session (>= 2.0.0, < 3)
tilt (~> 2.0)
sorbet-runtime (0.5.11222)
sorbet-runtime (0.5.11230)
stringex (2.8.6)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
tilt (2.3.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
tzinfo-data (1.2023.4)
tzinfo-data (1.2024.1)
tzinfo (>= 1.0.0)
unicode-display_width (2.5.0)
webrick (1.8.1)
@ -156,7 +156,7 @@ DEPENDENCIES
jekyll-paginate (= 1.1.0)
jekyll-sitemap (= 1.4.0)
jekyll-toc (= 0.18.0)
nokogiri (= 1.16.0)
nokogiri (= 1.16.2)
rackup (= 2.1.0)
rake (= 13.1.0)
rubocop (= 1.60.2)

240
package-lock.json generated
View File

@ -20,7 +20,7 @@
"remark-lint-prohibited-strings": "^3.1.0",
"remark-lint-unordered-list-marker-style": "^3.1.2",
"remark-stringify": "^11.0.0",
"textlint": "^13.4.1",
"textlint": "^14.0.1",
"textlint-filter-rule-comments": "^1.2.2",
"textlint-rule-common-misspellings": "^1.0.1",
"textlint-rule-terminology": "^4.0.1"
@ -416,56 +416,68 @@
"dev": true
},
"node_modules/@textlint/ast-tester": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-13.4.1.tgz",
"integrity": "sha512-YSHUR1qDgMPGF5+nvrquEhif6zRJ667xUnfP/9rTNtThIhoTQINvczr5/7xa43F1PDWplL6Curw+2jrE1qHwGQ==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.0.1.tgz",
"integrity": "sha512-SOdWGQCoJHOSTvYMKXRh/GLfAqK7gPuYEg+ATFviO+0eETWvQEj9Z5C7PGeVaA9R8nbiP6fFOyZ4C91yhnMuBQ==",
"dev": true,
"dependencies": {
"@textlint/ast-node-types": "^13.4.1",
"@textlint/ast-node-types": "^14.0.1",
"debug": "^4.3.4"
}
},
"node_modules/@textlint/ast-tester/node_modules/@textlint/ast-node-types": {
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.1.tgz",
"integrity": "sha512-7yc69/ip20OG3TrueSeGh/fSwZSuzxFkrxlMDDhWwSxq+/MXczshRx9HRczoy4uvecLgl1NHy/A1En6j4ag34A==",
"dev": true
},
"node_modules/@textlint/ast-traverse": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-13.4.1.tgz",
"integrity": "sha512-uucuC7+NHWkXx2TX5vuyreuHeb+GFiA83V65I+FnYP5EC4dAMOQ86rTSPrZmCwLz+qIWgfDgihGzPccpj3EZGg==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.0.1.tgz",
"integrity": "sha512-WABFpyDqq9gHQAvqMd/XpUmuj7U/vQrR+9WIxHUbJbaUNidJLJuSq6+beVj4bVJwcuYvH3OHn7iANHkh8JIrmA==",
"dev": true,
"dependencies": {
"@textlint/ast-node-types": "^13.4.1"
"@textlint/ast-node-types": "^14.0.1"
}
},
"node_modules/@textlint/ast-traverse/node_modules/@textlint/ast-node-types": {
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.1.tgz",
"integrity": "sha512-7yc69/ip20OG3TrueSeGh/fSwZSuzxFkrxlMDDhWwSxq+/MXczshRx9HRczoy4uvecLgl1NHy/A1En6j4ag34A==",
"dev": true
},
"node_modules/@textlint/config-loader": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-13.4.1.tgz",
"integrity": "sha512-ggh6her5PdgcEsvgm3FfCY2+r7IhoQoBTGYxM+IbfkwyVoSoQ2CrXbCVlQkpLPFzhHVbIwgNxkiMr1o2npwfJQ==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.0.1.tgz",
"integrity": "sha512-8W0YaE3kfmADdsfNBUY3yxG+mr4HRI+4/rji9D2gCndI2O+x/H5R9PUEC/KRJY4K0qBuOFlr83HIWtPJkTHaoQ==",
"dev": true,
"dependencies": {
"@textlint/kernel": "^13.4.1",
"@textlint/module-interop": "^13.4.1",
"@textlint/types": "^13.4.1",
"@textlint/utils": "^13.4.1",
"@textlint/kernel": "^14.0.1",
"@textlint/module-interop": "^14.0.1",
"@textlint/types": "^14.0.1",
"@textlint/utils": "^14.0.1",
"debug": "^4.3.4",
"rc-config-loader": "^4.1.3",
"try-resolve": "^1.0.1"
}
},
"node_modules/@textlint/feature-flag": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-13.4.1.tgz",
"integrity": "sha512-qY8gKUf30XtzWMTkwYeKytCo6KPx6milpz8YZhuRsEPjT/5iNdakJp5USWDQWDrwbQf7RbRncQdU+LX5JbM9YA==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.0.1.tgz",
"integrity": "sha512-hxYfrCrDswKpHJUyFyGfDGWGxScfzRnqUPTI4teXya29koVJ0GU0+tzR2yJKICYfZRrmPYDAb3NFeXvLWV5gLQ==",
"dev": true
},
"node_modules/@textlint/fixer-formatter": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-13.4.1.tgz",
"integrity": "sha512-P195Soyxmzv7S5QyCJIjuDXl5t3EyOhYwxR4ukKBZ7bw5hp/P1+e4GEhzqrXWx3z7h0nZZ0TuTjepNxOMo6cAQ==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.0.1.tgz",
"integrity": "sha512-jS+Sykeapt51LKrJ46ZMRrNd4P+ip+WBNzLF+wSn+XLZ9dmTj0Qz7AWIDm/5+XK0c63hyMxwntZj26sET/3JQg==",
"dev": true,
"dependencies": {
"@textlint/module-interop": "^13.4.1",
"@textlint/types": "^13.4.1",
"@textlint/module-interop": "^14.0.1",
"@textlint/types": "^14.0.1",
"chalk": "^4.1.2",
"debug": "^4.3.4",
"diff": "^4.0.2",
"diff": "^5.1.0",
"is-file": "^1.0.0",
"string-width": "^4.2.3",
"strip-ansi": "^6.0.1",
@ -474,33 +486,39 @@
}
},
"node_modules/@textlint/kernel": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-13.4.1.tgz",
"integrity": "sha512-r2sUhjPysFjl2Ax37x9AfWkJM8jgKN0bL4SX3xRzOukdcj69Dst5On5qBZtULaVMX1LDkwkdxA6ZEADmq27qQA==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.0.1.tgz",
"integrity": "sha512-2iKxRlpLy3lgRGtT72fg7cI7wtYeN2lGwyGduKseHiVFatUXXsOK57i/rXZ0sV4Uewk/KNfjaFZKRtFzWpw25Q==",
"dev": true,
"dependencies": {
"@textlint/ast-node-types": "^13.4.1",
"@textlint/ast-tester": "^13.4.1",
"@textlint/ast-traverse": "^13.4.1",
"@textlint/feature-flag": "^13.4.1",
"@textlint/source-code-fixer": "^13.4.1",
"@textlint/types": "^13.4.1",
"@textlint/utils": "^13.4.1",
"@textlint/ast-node-types": "^14.0.1",
"@textlint/ast-tester": "^14.0.1",
"@textlint/ast-traverse": "^14.0.1",
"@textlint/feature-flag": "^14.0.1",
"@textlint/source-code-fixer": "^14.0.1",
"@textlint/types": "^14.0.1",
"@textlint/utils": "^14.0.1",
"debug": "^4.3.4",
"fast-equals": "^4.0.3",
"structured-source": "^4.0.0"
}
},
"node_modules/@textlint/kernel/node_modules/@textlint/ast-node-types": {
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.1.tgz",
"integrity": "sha512-7yc69/ip20OG3TrueSeGh/fSwZSuzxFkrxlMDDhWwSxq+/MXczshRx9HRczoy4uvecLgl1NHy/A1En6j4ag34A==",
"dev": true
},
"node_modules/@textlint/linter-formatter": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-13.4.1.tgz",
"integrity": "sha512-VDLnyHRO9hf6CGxMJLM5oi7NH9s0mqiWxtgi95nuXmJZWbQLZVfcxkD1Cp16pwk8zTvlbyMZFqamFCYZyD9Sww==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.0.1.tgz",
"integrity": "sha512-K5YJGRlhbSnXAE/a6OrObjPOq+VMG/sueBAUHtC+8EBDedZd6mynaOyMOhaRt10hVuijA9GDrSbAu8YwZBNwYA==",
"dev": true,
"dependencies": {
"@azu/format-text": "^1.0.2",
"@azu/style-format": "^1.0.1",
"@textlint/module-interop": "^13.4.1",
"@textlint/types": "^13.4.1",
"@textlint/module-interop": "^14.0.1",
"@textlint/types": "^14.0.1",
"chalk": "^4.1.2",
"debug": "^4.3.4",
"js-yaml": "^3.14.1",
@ -514,22 +532,28 @@
}
},
"node_modules/@textlint/markdown-to-ast": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-13.4.1.tgz",
"integrity": "sha512-jUa5bTNmxjEgfCXW4xfn7eSJqzUXyNKiIDWLKtI4MUKRNhT3adEaa/NuQl0Mii3Hu3HraZR7hYhRHLh+eeM43w==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.0.1.tgz",
"integrity": "sha512-PBNQ1+fhkj9I1wTg010WZxXndt/Cw1R7ytJIomKa56dWuhM6KUjCsFfwa1HfrWjP7PBJdTghL6wlyvktyvaW2A==",
"dev": true,
"dependencies": {
"@textlint/ast-node-types": "^13.4.1",
"@textlint/ast-node-types": "^14.0.1",
"debug": "^4.3.4",
"mdast-util-gfm-autolink-literal": "^0.1.3",
"remark-footnotes": "^3.0.0",
"remark-frontmatter": "^3.0.0",
"remark-gfm": "^1.0.0",
"remark-parse": "^9.0.0",
"traverse": "^0.6.7",
"traverse": "^0.6.8",
"unified": "^9.2.2"
}
},
"node_modules/@textlint/markdown-to-ast/node_modules/@textlint/ast-node-types": {
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.1.tgz",
"integrity": "sha512-7yc69/ip20OG3TrueSeGh/fSwZSuzxFkrxlMDDhWwSxq+/MXczshRx9HRczoy4uvecLgl1NHy/A1En6j4ag34A==",
"dev": true
},
"node_modules/@textlint/markdown-to-ast/node_modules/bail": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
@ -757,61 +781,73 @@
}
},
"node_modules/@textlint/module-interop": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-13.4.1.tgz",
"integrity": "sha512-keM5zHwyifijEDqEvAFhhXHC5UbmZjfGytRJzPPJaW3C3UsGbIzDCnfOSE9jUVTWZcngHuSJ7aKGv42Rhy9nEg==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.0.1.tgz",
"integrity": "sha512-vpoT90VnfpzfzEd5uo8M3TINi4d47SP5ERq8Zr8lUGiQfgSFOwdhTU6+BxbywlP3HAb69B6cHccBr6ArRGApYg==",
"dev": true
},
"node_modules/@textlint/source-code-fixer": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-13.4.1.tgz",
"integrity": "sha512-Sl29f3Tpimp0uVE3ysyJBjxaFTVYLOXiJX14eWCQ/kC5ZhIXGosEbStzkP1n8Urso1rs1W4p/2UemVAm3NH2ng==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.0.1.tgz",
"integrity": "sha512-6P7tH+kd/4q+m7P2SAvgE8W7RyEOj65KSpCWjLYqB9UFXbz2XUhMJhGYZ8U2wqPLfvL+nV8KHBd9DHH+jPgo0w==",
"dev": true,
"dependencies": {
"@textlint/types": "^13.4.1",
"@textlint/types": "^14.0.1",
"debug": "^4.3.4"
}
},
"node_modules/@textlint/text-to-ast": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-13.4.1.tgz",
"integrity": "sha512-vCA7uMmbjRv06sEHPbwxTV5iS8OQedC5s7qwmXnWAn2LLWxg4Yp98mONPS1o4D5cPomzYyKNCSfbLwu6yJBUQA==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.0.1.tgz",
"integrity": "sha512-0e9fqTS7xU1JZfkja4rFE9IROrngzOBe0Oq7cl8gf0m2QM7dTxEmiPux37eHM1+mmBaP6zKMv9c5YlE4TW9sNg==",
"dev": true,
"dependencies": {
"@textlint/ast-node-types": "^13.4.1"
"@textlint/ast-node-types": "^14.0.1"
}
},
"node_modules/@textlint/text-to-ast/node_modules/@textlint/ast-node-types": {
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.1.tgz",
"integrity": "sha512-7yc69/ip20OG3TrueSeGh/fSwZSuzxFkrxlMDDhWwSxq+/MXczshRx9HRczoy4uvecLgl1NHy/A1En6j4ag34A==",
"dev": true
},
"node_modules/@textlint/textlint-plugin-markdown": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-13.4.1.tgz",
"integrity": "sha512-OcLkFKYmbYeGJ0kj2487qcicCYTiE2vJLwfPcUDJrNoMYak5JtvHJfWffck8gON2mEM00DPkHH0UdxZpFjDfeg==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.0.1.tgz",
"integrity": "sha512-Q5ht+anCAj7X2PmK6yJF8t0dCEXUQouX5O9X+jpPzaOKcZHlHQqU5ta4NpjUAyHyxtkzlrOP+5hA9FoHiM0jvw==",
"dev": true,
"dependencies": {
"@textlint/markdown-to-ast": "^13.4.1"
"@textlint/markdown-to-ast": "^14.0.1"
}
},
"node_modules/@textlint/textlint-plugin-text": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-13.4.1.tgz",
"integrity": "sha512-z0p5B8WUfTCIRmhjVHFfJv719oIElDDKWOIZei4CyYkfMGo0kq8fkrYBkUR6VZ6gofHwc+mwmIABdUf1rDHzYA==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.0.1.tgz",
"integrity": "sha512-Exe3waiRWSdkT6d1o4rNN1KKnrTA9v6VmR6x9wpBYxLxciPPQILwSYhPLKywSOzkZXEvgBZFLWSz5cAFBep5ng==",
"dev": true,
"dependencies": {
"@textlint/text-to-ast": "^13.4.1"
"@textlint/text-to-ast": "^14.0.1"
}
},
"node_modules/@textlint/types": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-13.4.1.tgz",
"integrity": "sha512-1ApwQa31sFmiJeJ5yTNFqjbb2D1ICZvIDW0tFSM0OtmQCSDFNcKD3YrrwDBgSokZ6gWQq/FpNjlhi6iETUWt0Q==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.0.1.tgz",
"integrity": "sha512-LkM32+LgEFRBYnNuB8OqVfAV7t6X7qSh2l6QEC7OTr1HQi4hB5by8ahnasn8FJzGh7ytFAHLDUXZKoN6LuduoQ==",
"dev": true,
"dependencies": {
"@textlint/ast-node-types": "^13.4.1"
"@textlint/ast-node-types": "^14.0.1"
}
},
"node_modules/@textlint/types/node_modules/@textlint/ast-node-types": {
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.1.tgz",
"integrity": "sha512-7yc69/ip20OG3TrueSeGh/fSwZSuzxFkrxlMDDhWwSxq+/MXczshRx9HRczoy4uvecLgl1NHy/A1En6j4ag34A==",
"dev": true
},
"node_modules/@textlint/utils": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-13.4.1.tgz",
"integrity": "sha512-wX8RT1ejHAPTDmqlzngf0zI5kYoe3QvGDcj+skoTxSv+m/wOs/NyEr92d+ahCP32YqFYzXlqU7aDx2FkULKT+g==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.0.1.tgz",
"integrity": "sha512-rrFLvom82FBjSMUyAox1CcdPmJeS6S/nyDPnwjNJgTmZ8TQQinYS32j8JICbgH/oXEh8FB6Pj2rAe9fmqU/asg==",
"dev": true
},
"node_modules/@types/concat-stream": {
@ -1284,9 +1320,9 @@
}
},
"node_modules/diff": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
"integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==",
"dev": true,
"engines": {
"node": ">=0.3.1"
@ -5925,23 +5961,23 @@
"dev": true
},
"node_modules/textlint": {
"version": "13.4.1",
"resolved": "https://registry.npmjs.org/textlint/-/textlint-13.4.1.tgz",
"integrity": "sha512-ev6XkQEUMWcW90hTHJKlvt23ca1AtmmK2iw4mazqKnSVz8PTSMg45NB68ht3ev92lIPD+8Wt4D6JxCInZkh4GQ==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/textlint/-/textlint-14.0.1.tgz",
"integrity": "sha512-WZhLn33VFP5apfGbSqPDmpZdZWZvutnSiJG+o1R11ZKi37dWhDfWGn4gqGtNZoM9W7WfgGAoPi+/9ulNtTX8Yg==",
"dev": true,
"dependencies": {
"@textlint/ast-node-types": "^13.4.1",
"@textlint/ast-traverse": "^13.4.1",
"@textlint/config-loader": "^13.4.1",
"@textlint/feature-flag": "^13.4.1",
"@textlint/fixer-formatter": "^13.4.1",
"@textlint/kernel": "^13.4.1",
"@textlint/linter-formatter": "^13.4.1",
"@textlint/module-interop": "^13.4.1",
"@textlint/textlint-plugin-markdown": "^13.4.1",
"@textlint/textlint-plugin-text": "^13.4.1",
"@textlint/types": "^13.4.1",
"@textlint/utils": "^13.4.1",
"@textlint/ast-node-types": "^14.0.1",
"@textlint/ast-traverse": "^14.0.1",
"@textlint/config-loader": "^14.0.1",
"@textlint/feature-flag": "^14.0.1",
"@textlint/fixer-formatter": "^14.0.1",
"@textlint/kernel": "^14.0.1",
"@textlint/linter-formatter": "^14.0.1",
"@textlint/module-interop": "^14.0.1",
"@textlint/textlint-plugin-markdown": "^14.0.1",
"@textlint/textlint-plugin-text": "^14.0.1",
"@textlint/types": "^14.0.1",
"@textlint/utils": "^14.0.1",
"debug": "^4.3.4",
"file-entry-cache": "^5.0.1",
"get-stdin": "^5.0.1",
@ -5961,7 +5997,7 @@
"textlint": "bin/textlint.js"
},
"engines": {
"node": ">=16.0.0"
"node": ">=18.14.0"
}
},
"node_modules/textlint-filter-rule-comments": {
@ -6066,6 +6102,12 @@
"url": "https://opencollective.com/unified"
}
},
"node_modules/textlint/node_modules/@textlint/ast-node-types": {
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.1.tgz",
"integrity": "sha512-7yc69/ip20OG3TrueSeGh/fSwZSuzxFkrxlMDDhWwSxq+/MXczshRx9HRczoy4uvecLgl1NHy/A1En6j4ag34A==",
"dev": true
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@ -6079,10 +6121,13 @@
}
},
"node_modules/traverse": {
"version": "0.6.7",
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz",
"integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==",
"version": "0.6.8",
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz",
"integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==",
"dev": true,
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@ -6604,15 +6649,6 @@
"node": ">=8"
}
},
"node_modules/uvu/node_modules/diff": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
"integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==",
"dev": true,
"engines": {
"node": ">=0.3.1"
}
},
"node_modules/validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",

View File

@ -15,7 +15,7 @@
"remark-lint-prohibited-strings": "^3.1.0",
"remark-lint-unordered-list-marker-style": "^3.1.2",
"remark-stringify": "^11.0.0",
"textlint": "^13.4.1",
"textlint": "^14.0.1",
"textlint-filter-rule-comments": "^1.2.2",
"textlint-rule-common-misspellings": "^1.0.1",
"textlint-rule-terminology": "^4.0.1"

View File

@ -2,14 +2,14 @@
title: Advantage Air
description: Instructions on how to integrate Advantage Air A/C controller into Home Assistant.
ha_category:
- Binary switch
- Binary sensor
- Climate
- Cover
- Light
- Select
- Sensor
- Switch
- Update
- Update
ha_release: 0.117
ha_iot_class: Local Polling
ha_config_flow: true

View File

@ -24,6 +24,16 @@ To generate an AirNow API key, go to the [AirNow Developer Tools Page](https://d
{% include integrations/config_flow.md %}
## Troubleshooting
The EPA AirNow API is often flaky and will occasionally not return any results for a particular location. This will prevent the integration from being added to Home Assistant, but the situation is usually temporary and will resolve itself later.
If the integration continues to report "No results found for that location" and cannot be added to Home Assistant, please do the following before submitting a bug report.
First, navigate to the [AirNow Current Observations By Lat/Lon](https://docs.airnowapi.org/CurrentObservationsByLatLon/query) page, enter the same latitude/longitude and station radius, select `application/json` as the output format, select "Build" and then "Run".
If the query returns a result other than `[]`, open a bug report and include the query result (you may sanitize the data to remove your latitude and longitude, but please do not remove any fields). This information will help a lot to figure out the source of the issue.
<div class="note">
The AirNow API allows 500 data updates per hour, but since observations are only updated hourly, the default update rate is set to 2 per hour and should not trigger rate limiting. If you use this API key for other purposes, ensure the total request rate does not exceed 500 per hour.

View File

@ -28,6 +28,10 @@ ha_integration_type: integration
The **Blink** {% term integration %} lets you view camera images and motion events from [Blink](https://blinkforhome.com/) camera and security systems.
<p class='note'>
This integration does NOT allow for live viewing of your Blink camera within Home Assistant.
</p>
## Setup
You will need your Blink login information (username, which is usually your email address, and password) to use this module.

View File

@ -32,7 +32,8 @@ Some very old Brother printers use different data format and these models are no
## Configuring the printer
To enable SNMP, navigate to the printer's web interface (for example: `http://192.168.5.6`) and turn it on under Network / Protocol / SNMP.
To enable SNMP, navigate to the printer's web interface (for example: `http://192.168.5.6`) and turn it on under Network / Protocol / SNMP. For some models, access to the web interface is password-protected. For some printers, the default password is printed on a sticker on the back of the printer, preceded by "Pwd:". If the printer does not have a password on the sticker, the default password is "initpass".
For some Brother devices, `SNMPv3 read-write access and v1/v2c read-only access` is the option required (under advanced settings).
![SNMP settings on Brother Printer web interface](/images/integrations/brother/brother-printer-webui.png)

View File

@ -69,6 +69,60 @@ The integration setup will next give you instructions to enter the [Application
{% enddetails %}
## Enable personal results (for advanced users)
This guide shows you how to enable personal commands such as "remind me tomorrow at 9 pm to take out the trash".
This guide is for advanced users only. It requires creating an OAuth client ID of the Desktop app, running a Python program on your desktop or laptop, copying the resulting credentials to your Home Assistant config files, and likely running an Android emulator.
### Prerequisites
- Successfully installed the Google Assistant integration.
{% details "Create credentials" %}
1. Navigate to [Google Developers Console > Credentials](https://console.cloud.google.com/apis/credentials).
2. Select the project you created earlier from the dropdown menu in the upper left corner.
3. Select **Create credentials** (at the top of the screen), then select **OAuth client ID**.
4. Set the Application type to **Desktop app** and give this credential set a name (like "Home Assistant Desktop Credentials").
5. Select **Create**.
6. In the OAuth client-created screen, select **Download JSON**.
7. Rename the downloaded file to `client_secret.json`.
8. On your Windows, Linux, or Mac machine, download Python if you don't have it already.
9. Open the terminal (on Windows, select **Start** and then type `cmd`).
10. In the terminal, run the following commands (preferably in a Python virtual environment):
11. `python -m pip install --upgrade google-auth-oauthlib[tool]`
- Under Windows: `google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype --scope https://www.googleapis.com/auth/gcm --save --client-secrets %userprofile%\Downloads\client_secret.json`
- Under Linux: `google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype --scope https://www.googleapis.com/auth/gcm --save --client-secrets ~/Downloads/client_secret.json`
- **Result**: A browser window will open, asking you to select the account to continue to the cloud project you created earlier.
12. Once you select the correct account, select both checkboxes:
- **Use your Google Assistant: broad access to your Google account**
- **Send information to your Android device**
13. Select **Continue**.
- **Result**: If everything was successful, you will get a **The authentication flow has completed. You may close this window** message in your browser.
- In your terminal you will see the path where the credentials were saved. For example: `credentials saved: C:\Users\user\AppData\Roaming\google-oauthlib-tool\credentials.json`
14. Open the `credentials.json` in a text editor. Keep it open since you will need to copy several values from it.
15. In the file editor of your Home Assistant, typically http://homeassistant.local:8123/core_configurator, open `/homeassistant/.storage/application_credentials`.
- Locate the entry for `google_assistant_sdk` and modify `client_id` and `client_secret` to match the ones from `credentials.json`.
- Save the file.
16. Open `/homeassistant/.storage/core.config_entries`.
- Locate the entry for `google_assistant_sdk` and modify `refresh_token` to match the one from `credentials.json`.
- Save the file.
17. Restart Home Assistant.
{% enddetails %}
{% details "Enable personal results" %}
1. Go to **{% my developer_services title="Developer Tools > Services" %}** and issue a query that requires personal results, for example call `google_assistant_sdk.send_text_command` with `command: "what is my name"`
2. On your phone, you should receive a notification **Allow personal answers** **Allow Google Assistant to answer your questions about your calendar, trips, and more**.
3. DO NOT tap on **ALLOW** (it won't work until you enter a device name). Instead, tap on the notification text.
4. If the app doesn't open, you need to retry on a device running Android 12. If you don't have such a device, you can use an Android emulator.
5. Tap on **Device Name**, enter any device name (like Home Assistant), and tap on **OK**.
6. Only after having a non-empty device name, enable the checkbox next to **Personal results**.
{% enddetails %}
## Troubleshooting
If you have an error with your credentials you can delete them in the [Application Credentials](/integrations/application_credentials/) user interface.
@ -82,7 +136,6 @@ The easiest way to check if the integration is working is to check [My Google Ac
## Limitations/known issues
- Multiple Google accounts are not supported.
- Personal results are not supported yet since that requires creating an OAuth client ID of the Desktop app.
- If you see the issued commands in [My Google Activity](https://myactivity.google.com/myactivity), the integration is working fine. If the commands don't have the expected outcome, don't open an issue in the Home Assistant Core project or the [underlying library](https://github.com/tronikos/gassist_text). You should instead report the issue directly to Google [here](https://github.com/googlesamples/assistant-sdk-python/issues). Examples of known Google Assistant API issues:
- Media playback commands (other than play news, play podcast, play white noise, or play rain sounds) don't work.
- Routines don't work.

View File

@ -37,7 +37,7 @@ The default InfluxDB configuration doesn't enforce authentication. If you have i
influxdb:
```
You will still need to create a database named `home_assistant` via InfluxDB's command-line interface. For instructions on how to create a database check the [InfluxDB documentation](https://docs.influxdata.com/influxdb/latest/introduction/getting_started/#creating-a-database) relevant to the version you have installed.
You will still need (not for version 2) to create a database named `home_assistant` via InfluxDB's command-line interface. For instructions on how to create a database check the [InfluxDB documentation](https://docs.influxdata.com/influxdb/latest/introduction/getting_started/#creating-a-database) relevant to the version you have installed.
{% configuration %}
api_version:

View File

@ -30,6 +30,8 @@ ha_integration_type: integration
The Matter integration allows you to control Matter devices on your local Wi-Fi or {% term Thread %} network.
For communicating with Matter devices, the Home Assistant integration runs its own "Matter controller" as add-on. This Matter Server add-on runs the controller software as a separate process and connects your Matter network (called Fabric in technical terms) and Home Assistant. The Home Assistant Matter integration connects to this server via a WebSocket connection.
<div class='note warning'>
The integration is marked BETA: Both the Matter standard itself and its implementation within Home Assistant are in an early stage. You may run into compatibility issues and/or other bugs.
</div>
@ -79,13 +81,9 @@ One of the great features of Matter is the so-called _Multi Fabric_ feature: you
For devices where Home Assistant provides a native integration (with local API), Matter may not be the best option. Matter, being a universal standard, might not have the nitty-gritty features that come with a product-specific protocol. A good example is Philips Hue: the communication over Matter only provides the basic controls over lights, while the official [Hue integration](/integrations/hue) brings all Hue unique features like (dynamic) scenes, entertainment mode, etc.
{% include integrations/config_flow.md %}
## Supported installation types
For communicating with Matter devices, the Home Assistant integration runs its own "Matter controller" in a separate process which will be launched as an add-on. This add-on runs the controller software and connects your Matter network (called Fabric in technical terms) and Home Assistant. The Home Assistant Matter integration connects to this server via a WebSocket connection.
### Supported installation types
It is recommended to run the Matter add-on on Home Assistant OS. This is currently the best-supported option.
It is recommended to run the Matter add-on on Home Assistant OS. This is currently the only supported option. Other installation types are without support and at your own risk.
If you run Home Assistant in a container, you can run a Docker image of the [Matter server](https://github.com/home-assistant-libs/python-matter-server). The requirements and instructions for your host setup are described on that GitHub page.
@ -95,16 +93,15 @@ Running Matter on a Home Assistant Core installation is not supported.
Each Matter network is called a fabric. Each home automation controller that controls Matter devices has its own "fabric". You can add devices directly to the fabric of your Home Assistant instance, or share them from another fabric (for example from Google or Apple) to Home Assistant's fabric. We're going to explore all these options below.
Note: The section below mentions third-party Thread border routers such as the Nest Hub v2 or the HomePod Mini. This doesnt mean you have to add your devices to these ecosystems. Home Assistant only uses them to access the Thread radio network. The communication between the Home Assistant Matter controller and your Matter devices is encrypted. The Thread border router passes the data along. It cannot read its content.
Note: The section below mentions third-party Thread border routers such as the Nest Hub (2nd Gen) or the HomePod Mini. This doesnt mean you have to add your devices to these ecosystems. Home Assistant only uses them to access the Thread radio network. The communication between the Home Assistant Matter controller and your Matter devices is encrypted. The Thread border router passes the data along. It cannot read its content.
### Prerequisites
- Make sure you have the latest version of Home Assistant installed.
- On the device packaging, check for both the Matter logo and for either the Wi-Fi or the {% term Thread %} logo.
- Check if the QR code is only on the packaging or if it is also on the device.
- If it is only on the packaging, snap a picture of the QR code and the device and store the image and the numerical code in a save place.
- If you lose the QR code and disconnect the device at some point, you won't be able to connect to that device again without the QR code.
- If you are adding a Wi-Fi-based Matter device: Matter devices often use the 2.4&nbsp;GHz frequency for Wi-Fi. For this reason, make sure your phone is in the same 2.4&nbsp;GHz network where you want to operate your devices.
Make sure you have all these components ready before trying to add a Matter device to Home Assistant.
#### Prepare Home Assistant
- Make sure you have the latest version of Home Assistant [installed](/installation/).
- In Home Assistant, have the Matter integration installed.
- Go to {% my integrations title="**Settings** > **Devices & services**" %}.
- Add the **Matter (BETA)** integration.
@ -114,18 +111,27 @@ Note: The section below mentions third-party Thread border routers such as the N
- If you are already running the Matter server in another add-on, in or a custom container:
- Deselect the checkbox, then select **Submit**.
- In the next step, provide the URL to your Matter server.
#### Check logos on the device
- On the device packaging, check for both the Matter logo and for either the Wi-Fi or the {% term Thread %} logo.
- Check if the QR code or the numeric setup code is on the device.
- If you reset your device you'll need the QR code *or* numeric setup code to {% term commission %} that device again! Without this information, commissioning won't be possible.
- If the QR code or the numeric setup code is only in accompanied documentation, it is good practice to snap a picture of the QR code and/or numeric setup code as a backup, ideally along with the device for reference, and store the code in a safe place.
#### Prepare Android or iPhone
- Have either an Android or iPhone ready and Bluetooth enabled. For information why Bluetooth is required, refer to the section on [Bluetooth used during commissioning](#bluetooth-used-during-commissioning):
- Android:
- Have an Android phone (a full Android, not F-Droid).
- Have the latest version of the Home Assistant Companion app installed.
- Have Google Home app installed on the Android.
- We are not going to add the new device to Google Home. The app is needed because Google included the Matter SDK there.
- If you are using {% term Thread %}: Make sure there is a Thread border router device (Nest Hub v2 or Nest Wi-Fi Pro) present in your home network.
- If you are using {% term Thread %}: Make sure there is a Thread border router device (Nest Hub (2nd Gen) or Nest Wi-Fi Pro) present in your home network.
- iPhone
- Have the iOS version 16 or higher
- Have the latest version of the Home Assistant Companion app installed.
- If you are using {% term Thread %}: Make sure there is a Thread border router device (HomePod Mini or V2, Apple TV 4K) present in your home network.
- Make sure the device is in close range of the border router and your phone.
- Make sure the phone is in close range of the border router and your device.
- If you are adding a Wi-Fi-based Matter device: Matter devices often use the 2.4&nbsp;GHz frequency for Wi-Fi. For this reason, make sure your phone is in the same 2.4&nbsp;GHz network where you want to operate your devices.
### To add a new device using the iOS Companion app
@ -279,7 +285,7 @@ NOTE for Android users: You need to follow the instructions at the bottom of the
- Using Thread-based Matter devices in Home Assistant requires Home Assistant OS version 10 and above. Not using Home Assistant OS is at your own risk. We do provide some [documentation](https://github.com/home-assistant-libs/python-matter-server/blob/main/README.md) on how to run the Matter Server as a Docker container. The documentation includes a description of the host and networking requirements.
- To use {% term Thread %} devices you will need a {% term Thread %} network with at least one Thread border router in your network nearby the {% term Thread %} device(s). Apple users, for example, need the Apple TV 4K or the HomePod Mini, while Google users need a Nest Hub V2. Use the Thread integration in Home Assistant to diagnose your {% term Thread %} network(s).
- To use {% term Thread %} devices you will need a {% term Thread %} network with at least one Thread border router in your network nearby the {% term Thread %} device(s). Apple users, for example, need the Apple TV 4K or the HomePod Mini, while Google users need a Nest Hub (2nd Gen). Use the Thread integration in Home Assistant to diagnose your {% term Thread %} network(s).
- Start simple and work from there, keep your network simple and add for example an ESP32 test device. Once that works, move on to the next step or more devices.

View File

@ -17,8 +17,8 @@ ha_platforms:
ha_integration_type: integration
---
The Möhlenhoff Alpha 2 integration allows you to control a
[Möhlenhoff Alpha 2](https://www.moehlenhoff.de/fileadmin/user_upload/Download/Broschueren/125297_1705_Broschuere_Alpha2_DEU_final_web.pdf)
The Möhlenhoff Alpha 2 integration allows you to control a [Möhlenhoff Alpha 2](https://dev.moehlenhoff.de/en/products/room-by-room-control/oem-alpha-2-system)
temperature control system.
## Prerequisites

View File

@ -23,5 +23,7 @@ The Mopeka integration will automatically discover devices once the [Bluetooth](
## Supported devices
The integration only supports measuring LPG (Liquefied petroleum gas). Other substances will produce incorrect readings.
- [Pro Plus](https://www.mopekaiot.com/product/mopeka-pro-plus-sensor) (M1015)
- [Pro Check](https://www.mopekaiot.com/product/mopeka-pro-check-sensor-aluminum-lpg-cylinders-w-collar) (M1017)

View File

@ -47,6 +47,71 @@ MQTT (aka MQ Telemetry Transport) is a machine-to-machine or "Internet of Things
{% include integrations/config_flow.md %}
<a name="configuration-via-mqtt-discovery"></a>
{% details "Configuration of MQTT components via MQTT discovery" %}
- [Alarm control panel](/integrations/alarm_control_panel.mqtt/)
- [Binary sensor](/integrations/binary_sensor.mqtt/)
- [Button](/integrations/button.mqtt/)
- [Camera](/integrations/camera.mqtt/)
- [Cover](/integrations/cover.mqtt/)
- [Device tracker](/integrations/device_tracker.mqtt/)
- [Device trigger](/integrations/device_trigger.mqtt/)
- [Event](/integrations/event.mqtt/)
- [Fan](/integrations/fan.mqtt/)
- [Humidifier](/integrations/humidifier.mqtt/)
- [Image](/integrations/image.mqtt/)
- [Climate/HVAC](/integrations/climate.mqtt/)
- [Lawn mower](/integrations/lawn_mower.mqtt/)
- [Light](/integrations/light.mqtt/)
- [Lock](/integrations/lock.mqtt/)
- [Number](/integrations/number.mqtt/)
- [Scene](/integrations/scene.mqtt/)
- [Select](/integrations/select.mqtt/)
- [Sensor](/integrations/sensor.mqtt/)
- [Siren](/integrations/siren.mqtt/)
- [Switch](/integrations/switch.mqtt/)
- [Update](/integrations/update.mqtt/)
- [Tag scanner](/integrations/tag.mqtt/)
- [Text](/integrations/text.mqtt/)
- [Vacuum](/integrations/vacuum.mqtt/)
- [Valve](/integrations/valve.mqtt/)
- [Water heater](/integrations/water_heater.mqtt/)
{% enddetails %}
<a name="configuration-via-yaml"></a>
{% details "Configuration of MQTT components via YAML" %}
- [Alarm control panel](/integrations/alarm_control_panel.mqtt/)
- [Binary sensor](/integrations/binary_sensor.mqtt/)
- [Button](/integrations/button.mqtt/)
- [Camera](/integrations/camera.mqtt/)
- [Cover](/integrations/cover.mqtt/)
- [Device tracker](/integrations/device_tracker.mqtt/)
- [Event](/integrations/event.mqtt/)
- [Fan](/integrations/fan.mqtt/)
- [Humidifier](/integrations/humidifier.mqtt/)
- [Image](/integrations/image.mqtt/)
- [Climate/HVACs](/integrations/climate.mqtt/)
- [Lawn mower](/integrations/lawn_mower.mqtt/)
- [Light](/integrations/light.mqtt/)
- [Lock](/integrations/lock.mqtt/)
- [Number](/integrations/number.mqtt/)
- [Scene](/integrations/scene.mqtt/)
- [Select](/integrations/select.mqtt/)
- [Sensor](/integrations/sensor.mqtt/)
- [Siren](/integrations/siren.mqtt/)
- [Switch](/integrations/switch.mqtt/)
- [Text](/integrations/text.mqtt/)
- [Update](/integrations/update.mqtt/)
- [Vacuum](/integrations/vacuum.mqtt/)
- [Valve](/integrations/valve.mqtt/)
- [Water heater](/integrations/water_heater.mqtt/)
{% enddetails %}
Your first step to get MQTT and Home Assistant working is to choose a broker.
## Choose an MQTT broker
@ -212,41 +277,15 @@ Note that on each MQTT entity, the `has_entity_name` attribute will be set to `T
The discovery of MQTT devices will enable one to use MQTT devices with only minimal configuration effort on the side of Home Assistant. The configuration is done on the device itself and the topic used by the device. Similar to the [HTTP binary sensor](/integrations/http/#binary-sensor) and the [HTTP sensor](/integrations/http/#sensor). To prevent multiple identical entries if a device reconnects, a unique identifier is necessary. Two parts are required on the device side: The configuration topic which contains the necessary device type and unique identifier, and the remaining device configuration without the device type.
{% details "Entity integrations supported by MQTT discovery" %}
- [Alarm control panel](/integrations/alarm_control_panel.mqtt/)
- [Binary sensor](/integrations/binary_sensor.mqtt/)
- [Button](/integrations/button.mqtt/)
- [Camera](/integrations/camera.mqtt/)
- [Cover](/integrations/cover.mqtt/)
- [Device tracker](/integrations/device_tracker.mqtt/)
- [Device trigger](/integrations/device_trigger.mqtt/)
- [Event](/integrations/event.mqtt/)
- [Fan](/integrations/fan.mqtt/)
- [Humidifier](/integrations/humidifier.mqtt/)
- [Image](/integrations/image.mqtt/)
- [Climate/HVAC](/integrations/climate.mqtt/)
- [Lawn mower](/integrations/lawn_mower.mqtt/)
- [Light](/integrations/light.mqtt/)
- [Lock](/integrations/lock.mqtt/)
- [Number](/integrations/number.mqtt/)
- [Scene](/integrations/scene.mqtt/)
- [Select](/integrations/select.mqtt/)
- [Sensor](/integrations/sensor.mqtt/)
- [Siren](/integrations/siren.mqtt/)
- [Switch](/integrations/switch.mqtt/)
- [Update](/integrations/update.mqtt/)
- [Tag scanner](/integrations/tag.mqtt/)
- [Text](/integrations/text.mqtt/)
- [Vacuum](/integrations/vacuum.mqtt/)
- [Valve](/integrations/valve.mqtt/)
- [Water heater](/integrations/water_heater.mqtt/)
{% enddetails %}
MQTT discovery is enabled by default, but can be disabled. The prefix for the discovery topic (default `homeassistant`) can be changed.
See the [MQTT Options sections](#configure-mqtt-options)
<div class='note info'>
Documentation on the MQTT components that support MQTT discovery [can be found here](/integrations/mqtt/#configuration-via-mqtt-discovery).
</div>
### Discovery messages
#### Discovery topic
@ -986,37 +1025,13 @@ mqtt:
...
```
{% details "MQTT components that support setup via YAML" %}
If you have a large number of manually configured items, you might want to consider [splitting up the configuration](/docs/configuration/splitting_configuration/).
- [Alarm control panel](/integrations/alarm_control_panel.mqtt/)
- [Binary sensor](/integrations/binary_sensor.mqtt/)
- [Button](/integrations/button.mqtt/)
- [Camera](/integrations/camera.mqtt/)
- [Cover](/integrations/cover.mqtt/)
- [Device tracker](/integrations/device_tracker.mqtt/)
- [Event](/integrations/event.mqtt/)
- [Fan](/integrations/fan.mqtt/)
- [Humidifier](/integrations/humidifier.mqtt/)
- [Image](/integrations/image.mqtt/)
- [Climate/HVACs](/integrations/climate.mqtt/)
- [Lawn mower](/integrations/lawn_mower.mqtt/)
- [Light](/integrations/light.mqtt/)
- [Lock](/integrations/lock.mqtt/)
- [Number](/integrations/number.mqtt/)
- [Scene](/integrations/scene.mqtt/)
- [Select](/integrations/select.mqtt/)
- [Sensor](/integrations/sensor.mqtt/)
- [Siren](/integrations/siren.mqtt/)
- [Switch](/integrations/switch.mqtt/)
- [Text](/integrations/text.mqtt/)
- [Update](/integrations/update.mqtt/)
- [Vacuum](/integrations/vacuum.mqtt/)
- [Valve](/integrations/valve.mqtt/)
- [Water heater](/integrations/water_heater.mqtt/)
<div class='note info'>
{% enddetails %}
Documentation on the MQTT components that support YAML [can be found here](/integrations/mqtt/#configuration-via-yaml).
If you have a lot of manual configured items you might want to consider [splitting up the configuration](/docs/configuration/splitting_configuration/).
</div>
## Using Templates

View File

@ -204,7 +204,71 @@ value_template:
## Examples
In this section you find some real-life examples of how to use this sensor.
In this section, you find some real-life examples showing how to use this sensor.
### Processing Unix EPOCH timestamps
The example below shows how an MQTT sensor can process a Unix EPOCH payload.
{% raw %}
Set up via YAML:
```yaml
# Example configuration.yaml entry
mqtt:
sensor:
- name: "turned on"
state_topic: "pump/timestamp_on"
device_class: "timestamp"
value_template: "{{ as_datetime(value) }}"
unique_id: "hp_1231232_ts_on"
device:
name: "Heat pump"
identifiers:
- "hp_1231232"
```
{% endraw %}
Or set up via MQTT discovery:
Discovery topic: `homeassistant/sensor/hp_1231232/config`
{% raw %}
```json
{
"name": "turned on",
"state_topic": "pump/timestamp_on",
"device_class": "timestamp",
"value_template": "{{ as_datetime(value) }}",
"unique_id": "hp_1231232_ts_on",
"device": {
"name": "Heat pump",
"identifiers": [
"hp_1231232"
]
}
}
```
{% endraw %}
To test, you can use the command line tool `mosquitto_pub` shipped with `mosquitto` or the `mosquitto-clients` package to send MQTT messages.
Payload topic: `pump/timestamp_on`
Payload: `1707294116`
To set the state of the sensor manually:
```bash
mosquitto_pub -h 127.0.0.1 -u username -p some_password -t pump/timestamp_on -m '1707294116'
```
Make sure the IP address of your MQTT broker is used and that user credentials have been set up correctly.
The `value_template` will render the Unix EPOCH timestamp to correct format: `2024-02-07 08:21:56+00:00`.
### JSON attributes topic configuration

View File

@ -115,6 +115,9 @@ action:
### Text message with an attachment
This example assumes you have an image stored in the default `www`-folder in Home Assistant Operating System.
```yaml
...
action:
@ -123,7 +126,7 @@ action:
message: "Alarm in the living room!"
data:
attachments:
- "/tmp/surveillance_camera.jpg"
- "/config/www/surveillance_camera.jpg"
```
### Text message with an attachment from a URL

View File

@ -43,6 +43,7 @@ Create a new application in the [StarLine developer profile](https://my.starline
<div class='note'>
The integration makes API calls to StarLine servers to retrieve data. It gets only the latest set of values that are valid for the moment of the API call. This means that the integration does not retrieve or store values, StarLine events, or parameters between the API calls.
You can make up to 1000 API calls per day, which means you could make one approximately every 86 seconds.
By default, the state of integration will be updated every 3 minutes and OBD information will be updated every 3 hours, making 488 calls per day.
It is not recommended to set an update interval of less than 90 seconds.

View File

@ -95,3 +95,9 @@ The iOS app will only save the offline key to your device's filesystem if Auto-U
The Android app will only save the offline key to your device's filesystem if Auto-Unlock has been enabled and used at least once. Auto-Unlock can be disabled once the key has been loaded.
Root access is required to read the `key` and `slot` stored in `/data/data/com.august.luna/shared_prefs/PeripheralInfoCache.xml`
### Android - Yale Home
The Android app will only save the offline key to your device's filesystem if Auto-Unlock has been enabled and used at least once. Auto-Unlock can be disabled once the key has been loaded.
Root access is required to copy the `ModelDatabase.sql` from `/data/data/com.assaabloy.yale/databases`. Once copied, you can use [DB Broser for SQLite](https://sqlitebrowser.org/) to open the `ModelDatabase.sql`, navigate to the table `LockData` and find the column `offlineKeys`.There, you will find a JSON that includes the `key` and `slot` properties.

View File

@ -55,24 +55,69 @@ Service data attribute | Optional | Description
The integration is tested and verified for the following devices from YoLink:
- YS6602/4 YS6704 (outlet | plug)
- YS7103/4/5 (siren)
- YS7704/7705/7706 (door sensor)
- YS7707 (Contact Sensor)
- YS7804/5 (motion sensor)
- YS7903/4 (leak sensor)
- YS8003/4/5/6 (temperature/humidity sensor)
- YS7201 (vibration sensor)
- YS7606/7 (lock)
- YS4909 YS5001 (valve controller)
- YS5705/6 (switch)
- YS7A01/2 (CO & Smoke Sensor)
- YS4002/3 (Thermostat)
- YS4906/8 (Garage Door Sensor/ Garage Door Controller)
- YS5707 (Dimmer)
- YS6801/2 (MultiOutlet)
- YS3604 (FlexFob)
- YS7106 (PowerFailureAlar)
- YS4908 (Finger)
- YS7805 (Outdoor Motion Detector Sensor)
- YS1604 (SpeakerHub)
- YS3604 (FlexFob)
- YS3604-UC (YoLink KeyFob)
- YS3605-UC (YoLink On/OffFob)
- YS3606-UC (YoLink DimmerFob)
- YS3607-UC (YoLink SirenFob)
- YS4002-UC (YoLink Thermostat)
- YS4002/3 (Thermostat)
- YS4003-UC (YoLink Thermostat Heatpump)
- YS4906-UC + YS7706-UC (Garage Door Kit 1)
- YS4906/8 (Garage Door Sensor/ Garage Door Controller)
- YS4908 (Finger)
- YS4908-UC + YS7706-UC (Garage Door Kit 2 (Finger))
- YS4909 YS5001 (valve controller)
- YS4909-UC (Water Valve Controller)
- YS5001-UC (X3 Water Valve Controller)
- YS5002-UC (YoLink Motorized Ball Valve)
- YS5003-UC (Water Valve Controller 2)
- YS5705-UC (In-Wall Switch)
- YS5705/6 (switch)
- YS5706-UC (YoLink Relay)
- YS5707 (Dimmer)
- YS5707-UC (Dimmer Switch)
- YS5708-UC (In-Wall Switch 2)
- YS6602-UC (YoLink Energy Plug)
- YS6602/4 YS6704 (outlet | plug)
- YS6604-UC (YoLink Plug Mini)
- YS6704-UC (In-wall Outlet)
- YS6801-UC (Smart Power Strip)
- YS6801/2 (MultiOutlet)
- YS6802-UC (Smart Outdoor Power Strip)
- YS7103-UC (Siren Alarm)
- YS7103/4/5 (siren)
- YS7104-UC (Outdoor Alarm Controller)
- YS7105-UC (X3 Outdoor Alarm Controller)
- YS7106 (PowerFailureAlar)
- YS7106-UC (Power Fail Alarm)
- YS7107-UC (Outdoor Alarm Controller 2)
- YS7201 (vibration sensor)
- YS7201-UC (Vibration Sensor)
- YS7606-UC (YoLink Smart Lock M1)
- YS7606/7 (lock)
- YS7607-UC (YoLink Smart Lock M2)
- YS7704-UC (Door Sensor)
- YS7704/7705/7706 (door sensor)
- YS7706-UC (Garage Door Sensor)
- YS7707 (Contact Sensor)
- YS7707-UC (Contact Sensor)
- YS7804-UC (Motion Sensor)
- YS7804/5 (motion sensor)
- YS7805 (Outdoor Motion Detector Sensor)
- YS7805-UC (Outdoor Motion Sensor)
- YS7903-UC (Water Leak Sensor)
- YS7903/4 (leak sensor)
- YS7904-UC (Water Leak Sensor 2)
- YS7906-UC (Water Leak Sensor 4)
- YS7916-UC (Water Leak Sensor 4 MoveAlert)
- YS7A01-UC (Smart Smoke/CO Alarm)
- YS7A01/2 (CO & Smoke Sensor)
- YS8003-UC (Temperature Humidity Sensor)
- YS8003/4/5/6 (temperature/humidity sensor)
- YS8004-UC (Weatherproof Temperature Sensor)
- YS8005-UC (Weatherproof Temperature & Humidity Sensor)
- YS8006-UC (X3 Temperature & Humidity Sensor)
- YS8014-UC (X3 Outdoor Temperature Sensor)
- YS8015-UC (X3 Outdoor Temperature & Humidity Sensor)

View File

@ -486,6 +486,8 @@ To help resolve any kinks or compatibility problems, report bugs as issues with
Note that ZHA only supports connecting a single dedicated Zigbee Coordinator radio adapter or module with a single Zigbee network and that the Zigbee Coordinator cannot already be connected or used by any other application. Any devices that are or have previously been connected to another Zigbee implementation will also need to first be reset to their factory default settings before they can be paired/joined to ZHA, please see each device manufacturer's documentation.
Any Zigbee device can only be connected to a single Zigbee Coordinator (only one Zigbee gateway). This is a limitation in the current (as well as previous) Zigbee protocol specifications, governed by the [CSA (Connectivity Standards Alliance)](https://csa-iot.org/all-solutions/zigbee/). As such, it is a limit that applies to all Zigbee implementations, not just the ZHA implementation.
Support for commissioning Zigbee 3.0 devices via "Install Code" or "QR Code" via the 'zha.permit' service has so far only been implemented for 'ezsp' (Silicon Labs EmberZNet) or 'znp' (Texas Instruments) radio type in ZHA. Other radio types are missing support in their respective [radio libraries for zigpy](https://github.com/zigpy/) or manufacturer's firmware commands/APIs.
ZHA does currently not support devices that can only use the ZGP ("Zigbee Green Power") profile which is used in a few batteryless self-powered or energy harvesting devices, (such as for example; Philips Hue Click, Philips Hue Tap, and some "Friends of Hue" partnership switches).

View File

@ -2606,6 +2606,23 @@ frontpage_image: /images/frontpage/green-frontpage.png
</div>
</a>
<a
href="https://www.wifishop.ro/home-assistant-45/home-assistant-green.html"
target="_blank"
>
<div class="distributor">
<div>
<div>🇷🇴</div>
<div>WIFIShop</div>
<div>Shipping from Romania</div>
</div>
<svg width="24" height="24" viewBox="0 0 24 24">
<path
d="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z"
/>
</svg>
</div>
</a>
</div>
</div>
</div>

View File

@ -34,7 +34,7 @@ regenerate: false
<a href='#all' class="btn">All ({{tot}})</a>
<div class="featured">
<a href='#featured' class="btn">Featured</a>
<a href='#works-with-home-assistant' class="btn">Partners</a>
<a href='#works-with-home-assistant' class="btn">Partner brands</a>
</div>
<div class="version_select">Added in: <select name="versions">
<option value="#"></option>
@ -213,7 +213,7 @@ allComponents.pop(); // remove placeholder element at the end
return comp.featured;
};
} else if (hash === '#works-with-home-assistant' || hash === '') {
} else if (hash === '#works-with-home-assistant') {
// only show those partners of the Works with Home Assistant program
filter = function (comp) {
return comp.wwha;

View File

@ -525,6 +525,24 @@ frontpage_image: /images/skyconnect/skyconnect-cover.png
</svg>
</div>
</a>
<a
href="https://www.wifishop.ro/home-assistant-45/home-assistant-skyconnect.html"
target="_blank"
>
<div class="distributor">
<div>
<div>🇷🇴</div>
<div>WIFIShop</div>
<div>Shipping from Romania</div>
</div>
<svg width="24" height="24" viewBox="0 0 24 24">
<path
d="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z"
/>
</svg>
</div>
</a>
</div>
</div>
</div>

View File

@ -2,17 +2,23 @@
title: "Enabling a wake word"
---
This tutorial shows how you can *enable* a wake word in Home Assistant. It does not describe how to *use* it.
To *use* the wake word, you need some extra hardware. A low cost option is the [M5Stack ATOM Echo Development Kit](https://shop.m5stack.com/products/atom-echo-smart-speaker-dev-kit?ref=NabuCasa). To set that up, follow the [$13 voice assistant for Home Assistant](/voice_control/thirteen-usd-voice-remote/).
## To enable a wake word
Enabling a wake word consists of 2 steps:
1. Installing the openWakeWord add-on.
2. Enabling the wake word for a specific voice assistant.
## Prerequisites
### Prerequisites
- Home Assistant version 2023.10 or later, installed with the Home Assistant Operating System
- [Home Assistant Cloud](/voice_control/voice_remote_cloud_assistant/) or a manually configured [local Assist pipeline](/voice_control/voice_remote_local_assistant)
## Installing the openWakeWord add-on
### Installing the openWakeWord add-on
1. Go to {% my supervisor_addon addon="core_openwakeword" title="**Settings** > **Add-ons** > **openWakeWord**" %} and select **Install**.
2. Start the add-on.
@ -21,7 +27,7 @@ Enabling a wake word consists of 2 steps:
- Select **Configure** and **Submit**.
- **Result**: You have successfully installed the openWakeWord add-on and Wyoming integration.
## Enabling wake word for your voice assistant
### Enabling wake word for your voice assistant
1. Go to {% my voice_assistants title="**Settings** > **Voice assistants**" %} and select **Add assistant**.
2. Give your assistant a name, for example the wake word you are going to use.
@ -39,7 +45,16 @@ Enabling a wake word consists of 2 steps:
## Related topics
### About wake words and assistants
- [Create your own wake words](/voice_control/create_wake_word/)
- [About wake words](/voice_control/about_wake_word/)
- [Create a cloud assistant](/voice_control/voice_remote_cloud_assistant/)
- [Create a local assistant](/voice_control/voice_remote_local_assistant)
### Extra hardware to use wake word
- [M5Stack ATOM Echo Development Kit](https://shop.m5stack.com/products/atom-echo-smart-speaker-dev-kit?ref=NabuCasa)
- [Tutorial: $13 voice assistant for Home Assistant](/voice_control/thirteen-usd-voice-remote/)
- [ESP32-S3-BOX-3](https://www.aliexpress.us/item/1005005920207976.html?gatewayAdapt=4itemAdapt)
- [Tutorial: ESP32-S3-BOX-3 voice assistant](/voice_control/s3_box_voice_assistant/)