Merge branch 'current' into next
2
.github/workflows/stale.yml
vendored
@ -8,7 +8,7 @@ jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v3.0.18
|
||||
- uses: actions/stale@v3.0.19
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
days-before-stale: 60
|
||||
|
8
.github/workflows/test.yml
vendored
@ -8,7 +8,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out files from GitHub
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v2.3.4
|
||||
- name: Setting up Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v2.1.5
|
||||
with:
|
||||
@ -31,7 +31,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out files from GitHub
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v2.3.4
|
||||
- name: Setting up Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v2.1.5
|
||||
with:
|
||||
@ -55,9 +55,9 @@ jobs:
|
||||
needs: [markdown-lint]
|
||||
steps:
|
||||
- name: Check out files from GitHub
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v2.3.4
|
||||
- name: Setting up Ruby 2.6
|
||||
uses: ruby/setup-ruby@v1.70.1
|
||||
uses: ruby/setup-ruby@v1.71.0
|
||||
with:
|
||||
ruby-version: 2.6
|
||||
- name: Setup Ruby Gems cache
|
||||
|
4
Gemfile
@ -17,11 +17,11 @@ group :jekyll_plugins do
|
||||
gem 'jekyll-sitemap', '1.4.0'
|
||||
gem 'jekyll-time-to-read', '0.1.2'
|
||||
gem 'jekyll-commonmark', '1.3.1'
|
||||
gem 'jekyll-toc', '0.17.0'
|
||||
gem 'jekyll-toc', '0.17.1'
|
||||
end
|
||||
|
||||
gem 'sinatra', '2.1.0'
|
||||
gem 'nokogiri', '1.11.3'
|
||||
gem 'nokogiri', '1.11.4'
|
||||
|
||||
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||
# and associated library
|
||||
|
14
Gemfile.lock
@ -56,9 +56,9 @@ GEM
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-time-to-read (0.1.2)
|
||||
jekyll
|
||||
jekyll-toc (0.17.0)
|
||||
jekyll-toc (0.17.1)
|
||||
jekyll (>= 3.9)
|
||||
nokogiri (~> 1.10)
|
||||
nokogiri (~> 1.11)
|
||||
jekyll-watch (2.2.1)
|
||||
listen (~> 3.0)
|
||||
kramdown (2.3.1)
|
||||
@ -74,10 +74,10 @@ GEM
|
||||
multi_json (1.15.0)
|
||||
mustermann (1.1.1)
|
||||
ruby2_keywords (~> 0.0.1)
|
||||
nokogiri (1.11.3)
|
||||
nokogiri (1.11.4)
|
||||
mini_portile2 (~> 2.5.0)
|
||||
racc (~> 1.4)
|
||||
nokogiri (1.11.3-x64-mingw32)
|
||||
nokogiri (1.11.4-x64-mingw32)
|
||||
racc (~> 1.4)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
@ -87,7 +87,7 @@ GEM
|
||||
rack-protection (2.1.0)
|
||||
rack
|
||||
rake (13.0.3)
|
||||
rb-fsevent (0.10.4)
|
||||
rb-fsevent (0.11.0)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
rexml (3.2.5)
|
||||
@ -129,8 +129,8 @@ DEPENDENCIES
|
||||
jekyll-paginate (= 1.1.0)
|
||||
jekyll-sitemap (= 1.4.0)
|
||||
jekyll-time-to-read (= 0.1.2)
|
||||
jekyll-toc (= 0.17.0)
|
||||
nokogiri (= 1.11.3)
|
||||
jekyll-toc (= 0.17.1)
|
||||
nokogiri (= 1.11.4)
|
||||
rake (= 13.0.3)
|
||||
sass-globbing (= 1.1.5)
|
||||
sassc (= 2.1.0)
|
||||
|
@ -8,8 +8,7 @@ title: Home Assistant
|
||||
subtitle: Open source home automation that puts local control and privacy first.
|
||||
author: Home Assistant
|
||||
simple_search: https://www.google.com/search
|
||||
description:
|
||||
Open source home automation that puts local control and privacy first.
|
||||
description: Open source home automation that puts local control and privacy first.
|
||||
|
||||
# Default date format is "ordinal" (resulting in "July 22nd 2007")
|
||||
# You can customize the format as defined in
|
||||
@ -105,9 +104,9 @@ social:
|
||||
|
||||
# Home Assistant release details
|
||||
current_major_version: 2021
|
||||
current_minor_version: 4
|
||||
current_patch_version: 6
|
||||
date_released: 2021-04-19
|
||||
current_minor_version: 5
|
||||
current_patch_version: 5
|
||||
date_released: 2021-05-19
|
||||
|
||||
# Either # or the anchor link to latest release notes in the blog post.
|
||||
# Must be prefixed with a # and have double quotes around it.
|
||||
|
276
package-lock.json
generated
@ -104,56 +104,56 @@
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/ast-tester": {
|
||||
"version": "2.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-2.3.4.tgz",
|
||||
"integrity": "sha512-2gIsnJ1Dmr5jjF+u/vusNRqk2bJi0WwwbjP9WV/op51DhDTi7BUNjVSiZtcP9NVxidvs51XNEg+EMTRoKP3Msg==",
|
||||
"version": "2.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-2.3.5.tgz",
|
||||
"integrity": "sha512-sbw0Edx22/Fa9fwObpus5KyhCnGKhyP1tU7flA7kwTi9EqQq2KFztz1c/QQWpgqymbdSPWg7HpAvGf4ru4FDZg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.2"
|
||||
"@textlint/ast-node-types": "^4.4.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz",
|
||||
"integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==",
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.3.tgz",
|
||||
"integrity": "sha512-qi2jjgO6Tn3KNPGnm6B7p6QTEPvY95NFsIAaJuwbulur8iJUEenp1OnoUfiDaC/g2WPPEFkcfXpmnu8XEMFo2A==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"@textlint/ast-traverse": {
|
||||
"version": "2.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-2.3.4.tgz",
|
||||
"integrity": "sha512-NcjPXCvP8r4D2/azeQhwjPvh2+099I9RRBUrg6IpMfTW4IUUJb4BwZOPgjW+XRIVc71Dhgm82VSIagDL90FYcg==",
|
||||
"version": "2.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-2.3.5.tgz",
|
||||
"integrity": "sha512-yo1gIoXDx2bNs1JjC9viRxJpErNsfPtzb585KcVwWxxWmu3tXlT2iz13iKdjj5FMYPJe/PORe7lYqymkSUZ7kg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.2"
|
||||
"@textlint/ast-node-types": "^4.4.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz",
|
||||
"integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==",
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.3.tgz",
|
||||
"integrity": "sha512-qi2jjgO6Tn3KNPGnm6B7p6QTEPvY95NFsIAaJuwbulur8iJUEenp1OnoUfiDaC/g2WPPEFkcfXpmnu8XEMFo2A==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"@textlint/feature-flag": {
|
||||
"version": "3.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-3.3.4.tgz",
|
||||
"integrity": "sha512-ULAqdD2y1sPAhbkaMjS2fltrZYCNQGsNDv/NQWFsCmDpQ1R8kxoUaTiXpebTM+nVuyvU5GfdkxhHyMarPIjmYw==",
|
||||
"version": "3.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-3.3.5.tgz",
|
||||
"integrity": "sha512-S4JhbDQGu1Sutnvqs96nwxqwaErHrL49/QQDR8i/YNsINlurfKJbmktotb+w+qzeSibDibKzB8feOMVBXmO9Ww==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"map-like": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@textlint/fixer-formatter": {
|
||||
"version": "3.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-3.3.4.tgz",
|
||||
"integrity": "sha512-H4i+N+uN7EiI5vRnfRIccFc5yekNHnO8795fiOK2TZPb6SzY3iwLOGZ2rDKvgu7ZKdyGW945w3T0elUF3Fkr5A==",
|
||||
"version": "3.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-3.3.5.tgz",
|
||||
"integrity": "sha512-FHfOQLvJV88vgAI9wwbAjtffo4ZtAW0bV8xkC3dY2DdVyo+7Tnhz0l2XPw2VFmyzpeHx9Slqw8nEv46YEs4JaQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/module-interop": "^1.2.4",
|
||||
"@textlint/types": "^1.5.4",
|
||||
"@textlint/module-interop": "^1.2.5",
|
||||
"@textlint/types": "^1.5.5",
|
||||
"chalk": "^1.1.3",
|
||||
"debug": "^4.3.1",
|
||||
"diff": "^4.0.2",
|
||||
@ -165,18 +165,18 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz",
|
||||
"integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==",
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.3.tgz",
|
||||
"integrity": "sha512-qi2jjgO6Tn3KNPGnm6B7p6QTEPvY95NFsIAaJuwbulur8iJUEenp1OnoUfiDaC/g2WPPEFkcfXpmnu8XEMFo2A==",
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/types": {
|
||||
"version": "1.5.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.4.tgz",
|
||||
"integrity": "sha512-bhSrOjW8AFSa/xf6lYZ2akE0j+4O/WEAA2S/R8RrjNMkA5Az2j57mxPNpqMhEeyHDkpzN/coIlqUwgYvcJHv1A==",
|
||||
"version": "1.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.5.tgz",
|
||||
"integrity": "sha512-80P6fcqgsG9bP6JgR6W/E/oIx+71pplaicYCvvB4vMIeGk0OnWls4Q21kCpDYmq/C/ABtZ/Gy/Ov/8ExQPeQ7A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.2"
|
||||
"@textlint/ast-node-types": "^4.4.3"
|
||||
}
|
||||
},
|
||||
"ansi-regex": {
|
||||
@ -264,18 +264,18 @@
|
||||
}
|
||||
},
|
||||
"@textlint/kernel": {
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-3.4.4.tgz",
|
||||
"integrity": "sha512-ro9TPnE16C6gtKkY3aOjTs8ZfzAxdXLCV9JD4BuV5P+xBiiu9NdiE2Hwm3LyEGQjMxaKnXjbm/DTCAxA4gz0Dg==",
|
||||
"version": "3.4.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-3.4.5.tgz",
|
||||
"integrity": "sha512-KGeOq4mbjPe3okDtPw7mbnTX/wP66ndmRKAoOz8gOKDIDRlH8nOG/av6k6xbVhdMk9+ZnomqU8jSSYwTZHzAnA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.2",
|
||||
"@textlint/ast-tester": "^2.3.4",
|
||||
"@textlint/ast-traverse": "^2.3.4",
|
||||
"@textlint/feature-flag": "^3.3.4",
|
||||
"@textlint/source-code-fixer": "^3.4.4",
|
||||
"@textlint/types": "^1.5.4",
|
||||
"@textlint/utils": "^1.2.4",
|
||||
"@textlint/ast-node-types": "^4.4.3",
|
||||
"@textlint/ast-tester": "^2.3.5",
|
||||
"@textlint/ast-traverse": "^2.3.5",
|
||||
"@textlint/feature-flag": "^3.3.5",
|
||||
"@textlint/source-code-fixer": "^3.4.5",
|
||||
"@textlint/types": "^1.5.5",
|
||||
"@textlint/utils": "^1.2.5",
|
||||
"debug": "^4.3.1",
|
||||
"deep-equal": "^1.1.1",
|
||||
"map-like": "^2.0.0",
|
||||
@ -283,18 +283,18 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz",
|
||||
"integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==",
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.3.tgz",
|
||||
"integrity": "sha512-qi2jjgO6Tn3KNPGnm6B7p6QTEPvY95NFsIAaJuwbulur8iJUEenp1OnoUfiDaC/g2WPPEFkcfXpmnu8XEMFo2A==",
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/types": {
|
||||
"version": "1.5.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.4.tgz",
|
||||
"integrity": "sha512-bhSrOjW8AFSa/xf6lYZ2akE0j+4O/WEAA2S/R8RrjNMkA5Az2j57mxPNpqMhEeyHDkpzN/coIlqUwgYvcJHv1A==",
|
||||
"version": "1.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.5.tgz",
|
||||
"integrity": "sha512-80P6fcqgsG9bP6JgR6W/E/oIx+71pplaicYCvvB4vMIeGk0OnWls4Q21kCpDYmq/C/ABtZ/Gy/Ov/8ExQPeQ7A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.2"
|
||||
"@textlint/ast-node-types": "^4.4.3"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
@ -309,15 +309,15 @@
|
||||
}
|
||||
},
|
||||
"@textlint/linter-formatter": {
|
||||
"version": "3.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-3.3.4.tgz",
|
||||
"integrity": "sha512-k1lyvR+w7ctwr5dWhMVRTKk19GH99BAO2dLk8ZS0ZcYyKqKAKu6Iyb1cWEg/u3dT3KFbWwoegnAelfz5828SHQ==",
|
||||
"version": "3.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-3.3.5.tgz",
|
||||
"integrity": "sha512-ujQwgGGK4nVYRuNeW8zDyxax2Z8FTRips5f3VBhWpJaR7hlqdh1iNahul8iJ+1JbfXiHm+51a01myoqGGh1ENA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@azu/format-text": "^1.0.1",
|
||||
"@azu/style-format": "^1.0.0",
|
||||
"@textlint/module-interop": "^1.2.4",
|
||||
"@textlint/types": "^1.5.4",
|
||||
"@textlint/module-interop": "^1.2.5",
|
||||
"@textlint/types": "^1.5.5",
|
||||
"chalk": "^1.1.3",
|
||||
"concat-stream": "^1.6.2",
|
||||
"debug": "^4.3.1",
|
||||
@ -334,18 +334,18 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz",
|
||||
"integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==",
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.3.tgz",
|
||||
"integrity": "sha512-qi2jjgO6Tn3KNPGnm6B7p6QTEPvY95NFsIAaJuwbulur8iJUEenp1OnoUfiDaC/g2WPPEFkcfXpmnu8XEMFo2A==",
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/types": {
|
||||
"version": "1.5.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.4.tgz",
|
||||
"integrity": "sha512-bhSrOjW8AFSa/xf6lYZ2akE0j+4O/WEAA2S/R8RrjNMkA5Az2j57mxPNpqMhEeyHDkpzN/coIlqUwgYvcJHv1A==",
|
||||
"version": "1.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.5.tgz",
|
||||
"integrity": "sha512-80P6fcqgsG9bP6JgR6W/E/oIx+71pplaicYCvvB4vMIeGk0OnWls4Q21kCpDYmq/C/ABtZ/Gy/Ov/8ExQPeQ7A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.2"
|
||||
"@textlint/ast-node-types": "^4.4.3"
|
||||
}
|
||||
},
|
||||
"ansi-regex": {
|
||||
@ -479,12 +479,12 @@
|
||||
}
|
||||
},
|
||||
"@textlint/markdown-to-ast": {
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-6.3.4.tgz",
|
||||
"integrity": "sha512-LLScbDRXov1l4U4OCLJ5clu9eWNonBG+rhuArwYAHpf0hwIoNoETfAQvrNtXZG/NZ96fdWv4PLtaN6dA4ldRdQ==",
|
||||
"version": "6.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-6.3.5.tgz",
|
||||
"integrity": "sha512-DjVEy61klC8OjQYP+iIukI95pjCM58jhpE046apqGWLo6JQSatfscJlcxmbRivfTQSVsa00RF2ciUFBmw3bobg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.2",
|
||||
"@textlint/ast-node-types": "^4.4.3",
|
||||
"debug": "^4.3.1",
|
||||
"remark-frontmatter": "^1.3.3",
|
||||
"remark-parse": "^5.0.0",
|
||||
@ -494,9 +494,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz",
|
||||
"integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==",
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.3.tgz",
|
||||
"integrity": "sha512-qi2jjgO6Tn3KNPGnm6B7p6QTEPvY95NFsIAaJuwbulur8iJUEenp1OnoUfiDaC/g2WPPEFkcfXpmnu8XEMFo2A==",
|
||||
"dev": true
|
||||
},
|
||||
"debug": {
|
||||
@ -597,34 +597,34 @@
|
||||
}
|
||||
},
|
||||
"@textlint/module-interop": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-1.2.4.tgz",
|
||||
"integrity": "sha512-/wUKvDbBEujrhpcuD7Et4Mcicm3SG2oAe/tyMruLxSJ86umGxd34dEcHRON8fJzou9qyt0gFoczcypd4k3hJow==",
|
||||
"version": "1.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-1.2.5.tgz",
|
||||
"integrity": "sha512-+yEluCSbj6oxk9ENFojVcSxURvXOg7AU3vBiVHPjPEShaqbzZZ6tcut6gbDcIYhEDUkegZGmGwyfOe+wNABhKw==",
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/source-code-fixer": {
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-3.4.4.tgz",
|
||||
"integrity": "sha512-GDHVin2EJ9PGJ33VMGlqtPcvUlY+pkTbaWs4jWv8oBaEK8UUBzS5ZpEc4xi7Xp5vIXnVsCSLKNC6bgvR9X/AoQ==",
|
||||
"version": "3.4.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-3.4.5.tgz",
|
||||
"integrity": "sha512-YUcBg6zs7H5ycLwWdfv5LHWlBx7iBAQL6vHY2uPw8AMPYgzU6/f91NGBU/QR7/FVw0e7v9zMngcRN1hMOxpFCw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/types": "^1.5.4",
|
||||
"@textlint/types": "^1.5.5",
|
||||
"debug": "^4.3.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz",
|
||||
"integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==",
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.3.tgz",
|
||||
"integrity": "sha512-qi2jjgO6Tn3KNPGnm6B7p6QTEPvY95NFsIAaJuwbulur8iJUEenp1OnoUfiDaC/g2WPPEFkcfXpmnu8XEMFo2A==",
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/types": {
|
||||
"version": "1.5.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.4.tgz",
|
||||
"integrity": "sha512-bhSrOjW8AFSa/xf6lYZ2akE0j+4O/WEAA2S/R8RrjNMkA5Az2j57mxPNpqMhEeyHDkpzN/coIlqUwgYvcJHv1A==",
|
||||
"version": "1.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.5.tgz",
|
||||
"integrity": "sha512-80P6fcqgsG9bP6JgR6W/E/oIx+71pplaicYCvvB4vMIeGk0OnWls4Q21kCpDYmq/C/ABtZ/Gy/Ov/8ExQPeQ7A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.2"
|
||||
"@textlint/ast-node-types": "^4.4.3"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
@ -639,38 +639,38 @@
|
||||
}
|
||||
},
|
||||
"@textlint/text-to-ast": {
|
||||
"version": "3.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-3.3.4.tgz",
|
||||
"integrity": "sha512-oDwGNQCAo7ROnHqaksPEogf8fxXGU3Z61C6NEv0n9vEWEkUX9oUVX4c9kh5UieZL5nN/xIdzVc3TrXywkkOK3g==",
|
||||
"version": "3.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-3.3.5.tgz",
|
||||
"integrity": "sha512-+1+Kj7wuQHgc43RowVN/KWz3/aevk2RHARX8/p9Y+pE25HRJ36KZo1PLSYYx82NnWpvZTXB3QONWiAukdv6jBg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.2"
|
||||
"@textlint/ast-node-types": "^4.4.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz",
|
||||
"integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==",
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.3.tgz",
|
||||
"integrity": "sha512-qi2jjgO6Tn3KNPGnm6B7p6QTEPvY95NFsIAaJuwbulur8iJUEenp1OnoUfiDaC/g2WPPEFkcfXpmnu8XEMFo2A==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"@textlint/textlint-plugin-markdown": {
|
||||
"version": "5.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.3.4.tgz",
|
||||
"integrity": "sha512-g8KKuwhzzlRjvKrpq3SbGc+JJMAJoy5Xp0Ibvq7QKgNVxwN/f5WtmrJc8CdgFG7++jgtkDPlofz0c9xG63xKwQ==",
|
||||
"version": "5.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.3.5.tgz",
|
||||
"integrity": "sha512-x1/DJa+6wsR4LwkL+JA5OdEoZ/PhxtkKb20IqHTsLwQIeDL4aNWT6GrAk0HKTOomzsyNrUBuvzYiCy/f75LtBw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/markdown-to-ast": "^6.3.4"
|
||||
"@textlint/markdown-to-ast": "^6.3.5"
|
||||
}
|
||||
},
|
||||
"@textlint/textlint-plugin-text": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.3.4.tgz",
|
||||
"integrity": "sha512-ZtctKFR8V9mIZAMibS97xPWlt2lViizIRAy4oDaKCnxAwJ0uAjxm/OlHHdaFwNydGaEDtN60mcmarDqOOAZIiA==",
|
||||
"version": "4.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.3.5.tgz",
|
||||
"integrity": "sha512-ygjzswWrzlCiNNCy1+WF0oI8tNCk+1fS/nJEtG7DHuTVvE0OTn4MdWJXOD8sd+ZffXr+uFmEqMisHo06+RpQCg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/text-to-ast": "^3.3.4"
|
||||
"@textlint/text-to-ast": "^3.3.5"
|
||||
}
|
||||
},
|
||||
"@textlint/types": {
|
||||
@ -683,9 +683,9 @@
|
||||
}
|
||||
},
|
||||
"@textlint/utils": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-1.2.4.tgz",
|
||||
"integrity": "sha512-FREWc8n6bJFsKehtUlHPtbqnXULWhdnlazqWiHMjiBtcxUfD+1kY3P7PNGbChdzeZGmwBkgFQyGkok8bAGnZOw==",
|
||||
"version": "1.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-1.2.5.tgz",
|
||||
"integrity": "sha512-2vgz4x3tKK+R9N0OlOovJClRCHubxZi86ki218cvRVpoU9pPrHwkwZud+rjItDl2xFBj7Gujww7c0W1wyytWVQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/mdast": {
|
||||
@ -1200,9 +1200,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"hosted-git-info": {
|
||||
"version": "2.8.8",
|
||||
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
|
||||
"integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
|
||||
"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
|
||||
},
|
||||
"ignore": {
|
||||
@ -1280,18 +1280,18 @@
|
||||
"dev": true
|
||||
},
|
||||
"is-core-module": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
|
||||
"integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz",
|
||||
"integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"has": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"is-date-object": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
|
||||
"integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz",
|
||||
"integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==",
|
||||
"dev": true
|
||||
},
|
||||
"is-decimal": {
|
||||
@ -1352,13 +1352,13 @@
|
||||
"dev": true
|
||||
},
|
||||
"is-regex": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz",
|
||||
"integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==",
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz",
|
||||
"integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"call-bind": "^1.0.2",
|
||||
"has-symbols": "^1.0.1"
|
||||
"has-symbols": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"is-utf8": {
|
||||
@ -1543,9 +1543,9 @@
|
||||
}
|
||||
},
|
||||
"lodash": {
|
||||
"version": "4.17.19",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
|
||||
"integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||
"dev": true
|
||||
},
|
||||
"log-symbols": {
|
||||
@ -2534,27 +2534,27 @@
|
||||
"dev": true
|
||||
},
|
||||
"textlint": {
|
||||
"version": "11.9.0",
|
||||
"resolved": "https://registry.npmjs.org/textlint/-/textlint-11.9.0.tgz",
|
||||
"integrity": "sha512-a9ZCfCOcOTNxEQsRbYBDFNu8m5cjJC+znnXCBommGSdP0W+9QmwZnkralwpxrVhRgWvLz+QyuDXtLBZcqfDmHg==",
|
||||
"version": "11.9.1",
|
||||
"resolved": "https://registry.npmjs.org/textlint/-/textlint-11.9.1.tgz",
|
||||
"integrity": "sha512-7eC76od8ILhLl3O10h1rd0QxlVaQkR1nqTD7PrszrlGGe8mXS2VNaOXEiAm8PPUMQBdjB5n8/cpeZ+AbDJdNTw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.2",
|
||||
"@textlint/ast-traverse": "^2.3.4",
|
||||
"@textlint/feature-flag": "^3.3.4",
|
||||
"@textlint/fixer-formatter": "^3.3.4",
|
||||
"@textlint/kernel": "^3.4.4",
|
||||
"@textlint/linter-formatter": "^3.3.4",
|
||||
"@textlint/module-interop": "^1.2.4",
|
||||
"@textlint/textlint-plugin-markdown": "^5.3.4",
|
||||
"@textlint/textlint-plugin-text": "^4.3.4",
|
||||
"@textlint/types": "^1.5.4",
|
||||
"@textlint/utils": "^1.2.4",
|
||||
"@textlint/ast-node-types": "^4.4.3",
|
||||
"@textlint/ast-traverse": "^2.3.5",
|
||||
"@textlint/feature-flag": "^3.3.5",
|
||||
"@textlint/fixer-formatter": "^3.3.5",
|
||||
"@textlint/kernel": "^3.4.5",
|
||||
"@textlint/linter-formatter": "^3.3.5",
|
||||
"@textlint/module-interop": "^1.2.5",
|
||||
"@textlint/textlint-plugin-markdown": "^5.3.5",
|
||||
"@textlint/textlint-plugin-text": "^4.3.5",
|
||||
"@textlint/types": "^1.5.5",
|
||||
"@textlint/utils": "^1.2.5",
|
||||
"debug": "^4.3.1",
|
||||
"deep-equal": "^1.1.1",
|
||||
"file-entry-cache": "^5.0.1",
|
||||
"get-stdin": "^5.0.1",
|
||||
"glob": "^7.1.6",
|
||||
"glob": "^7.1.7",
|
||||
"is-file": "^1.0.0",
|
||||
"log-symbols": "^1.0.2",
|
||||
"map-like": "^2.0.0",
|
||||
@ -2571,18 +2571,18 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.2.tgz",
|
||||
"integrity": "sha512-m5brKbI7UY/Q8sbIZ7z1KB8ls04nRILshz5fPQ4EZ04jL19qrrUHJR8A6nK3vJ/GelkDWl4I0VDYSAjLEFQV8g==",
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.4.3.tgz",
|
||||
"integrity": "sha512-qi2jjgO6Tn3KNPGnm6B7p6QTEPvY95NFsIAaJuwbulur8iJUEenp1OnoUfiDaC/g2WPPEFkcfXpmnu8XEMFo2A==",
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/types": {
|
||||
"version": "1.5.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.4.tgz",
|
||||
"integrity": "sha512-bhSrOjW8AFSa/xf6lYZ2akE0j+4O/WEAA2S/R8RrjNMkA5Az2j57mxPNpqMhEeyHDkpzN/coIlqUwgYvcJHv1A==",
|
||||
"version": "1.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.5.tgz",
|
||||
"integrity": "sha512-80P6fcqgsG9bP6JgR6W/E/oIx+71pplaicYCvvB4vMIeGk0OnWls4Q21kCpDYmq/C/ABtZ/Gy/Ov/8ExQPeQ7A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.2"
|
||||
"@textlint/ast-node-types": "^4.4.3"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
@ -2595,9 +2595,9 @@
|
||||
}
|
||||
},
|
||||
"glob": {
|
||||
"version": "7.1.6",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
||||
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
||||
"version": "7.1.7",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
|
||||
"integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fs.realpath": "^1.0.0",
|
||||
|
@ -10,7 +10,7 @@
|
||||
"remark-lint-fenced-code-flag": "^2.0.1",
|
||||
"remark-lint-no-shell-dollars": "^2.0.2",
|
||||
"remark-stringify": "^9.0.1",
|
||||
"textlint": "^11.9.0",
|
||||
"textlint": "^11.9.1",
|
||||
"textlint-rule-common-misspellings": "^1.0.1",
|
||||
"textlint-rule-terminology": "^2.1.5"
|
||||
},
|
||||
|
@ -13,10 +13,10 @@ Example of using condition:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Enciende Despacho"
|
||||
- alias: "Turn on office lights"
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: sensor.mini_despacho
|
||||
entity_id: sensor.office_motion_sensor
|
||||
to: "on"
|
||||
condition:
|
||||
- condition: or
|
||||
@ -26,12 +26,12 @@ automation:
|
||||
attribute: elevation
|
||||
below: 4
|
||||
- condition: numeric_state
|
||||
entity_id: sensor.sensorluz_7_0
|
||||
entity_id: sensor.office_lux_sensor
|
||||
below: 10
|
||||
action:
|
||||
- service: scene.turn_on
|
||||
target:
|
||||
entity_id: scene.DespiertaDespacho
|
||||
entity_id: scene.office_lights
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
@ -42,16 +42,16 @@ The `condition` option of an automation, also accepts a single condition templat
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Enciende Despacho"
|
||||
- alias: "Turn on office lights"
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: sensor.mini_despacho
|
||||
entity_id: sensor.office_motion_sensor
|
||||
to: "on"
|
||||
condition: "{{ state_attr('sun.sun', 'elevation') < 4 }}"
|
||||
action:
|
||||
- service: scene.turn_on
|
||||
target:
|
||||
entity_id: scene.DespiertaDespacho
|
||||
entity_id: scene.office_lights
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
@ -92,6 +92,40 @@ mqtt:
|
||||
certificate: /home/paulus/downloads/mosquitto.org.crt
|
||||
```
|
||||
|
||||
### HiveMQ Cloud
|
||||
|
||||
HiveMQ Cloud is a fully managed MQTT broker that provides you a private broker.
|
||||
A free plan for up to 100 devices is available. You can see all of HiveMQ's
|
||||
different plan options here: <https://www.hivemq.com/mqtt-cloud-broker/>
|
||||
|
||||
Home Assistant is not affiliated with HiveMQ Cloud and does not receive any kickbacks.
|
||||
|
||||
1. [Create an account](http://console.hivemq.cloud) (links to sign up).
|
||||
2. When sign up you will receive automatically the free plan that allows you to
|
||||
connect up to 100 devices.
|
||||
3. Create MQTT credentials in the "Access Management" tab of your
|
||||
"Cluster Detail View" you can use to connect Home Assistant
|
||||
and any MQTT device.
|
||||
4. [Download](https://letsencrypt.org/certs/trustid-x3-root.pem) the trusted
|
||||
certificate from let’s encrypt to ensure secure communication between
|
||||
Home Assistant and your HiveMQ Cloud cluster.
|
||||
5. Copy the broker info to your `configuration.yaml`. You can find the
|
||||
"Broker Hostname" in the "Cluster Overview". Use the credentials you just
|
||||
created as username and password and the path from the downloaded certificate:
|
||||

|
||||
|
||||
```yaml
|
||||
mqtt:
|
||||
broker: "HIVEMQ_BROKER_HOSTNAME"
|
||||
port: 8883
|
||||
username: "MQTT_USERNAME"
|
||||
password: "MQTT_PASSWORD"
|
||||
certificate: PATH_TO_STORED_CERTIFICATE
|
||||
```
|
||||
|
||||
After restarting Home Assistant, your MQTT integration connected to HiveMQ Cloud
|
||||
will appear.
|
||||
|
||||
### CloudMQTT
|
||||
|
||||
[CloudMQTT](https://www.cloudmqtt.com) is a hosted private MQTT instance. Plans start at 5$ per month.
|
||||
|
@ -23,7 +23,7 @@
|
||||
and it's used by <a title="Open analytics.home-assistant.io" href="https://analytics.home-assistant.io" target="_blank" rel="noopener">
|
||||
{{ 100.0 | times: site.data.analytics_data.integrations[page.ha_domain] | divided_by: site.data.analytics_data.reports_integrations | round: 1 | remove: ".0" }}%</a> of the active installations.
|
||||
|
||||
{%- if page.ha_iot_class -%}
|
||||
{%- if page.ha_iot_class %}
|
||||
Its IoT class is <a href='/blog/2016/02/12/classifying-the-internet-of-things/#classifiers'>{{ page.ha_iot_class }}</a>
|
||||
{%- endif -%}
|
||||
|
||||
|
@ -57,7 +57,7 @@ If you are running Home Assistant Operating System, this will also contain:
|
||||
},
|
||||
"operating_system": {
|
||||
"board": "odroid-n2",
|
||||
"version:": "{{site.data.version_data.hassos['odroid-n2']}}"
|
||||
"version": "{{site.data.version_data.hassos['odroid-n2']}}"
|
||||
}
|
||||
}
|
||||
```
|
||||
@ -94,7 +94,7 @@ If your system includes the Supervisor, this will also contain:
|
||||
},
|
||||
"operating_system": {
|
||||
"board": "odroid-n2",
|
||||
"version:": "{{site.data.version_data.hassos['odroid-n2']}}"
|
||||
"version": "{{site.data.version_data.hassos['odroid-n2']}}"
|
||||
},
|
||||
"integrations": ["awesome_integration"],
|
||||
"addons": [
|
||||
@ -138,7 +138,7 @@ If your system includes the Supervisor, this will also contain:
|
||||
},
|
||||
"operating_system": {
|
||||
"board": "odroid-n2",
|
||||
"version:": "{{site.data.version_data.hassos['odroid-n2']}}"
|
||||
"version": "{{site.data.version_data.hassos['odroid-n2']}}"
|
||||
},
|
||||
"state_count": 1,
|
||||
"automation_count": 2,
|
||||
|
@ -31,7 +31,7 @@ notify:
|
||||
|
||||
{% configuration %}
|
||||
name:
|
||||
description: he name of the notifier. The notifier will bind to the service `notify.NOTIFIER_NAME`.
|
||||
description: The name of the notifier. The notifier will bind to the service `notify.NOTIFIER_NAME`.
|
||||
required: true
|
||||
type: string
|
||||
cert_file:
|
||||
|
@ -57,7 +57,7 @@ Now use the Discord Authorization page with the **Client ID** of your [bot](http
|
||||
|
||||
Wait for the confirmation which should say "Authorized".
|
||||
|
||||
Once the bot has been added to your server, get the channel ID of the channel you want the bot to operate in. In The Discord application go to **Settings** > **Appearance** > **Check developer mode**.
|
||||
Once the bot has been added to your server, get the channel ID of the channel you want the bot to operate in. In The Discord application go to **Settings** > **Advanced** > **Enable Developer Mode**.
|
||||
|
||||
<p class='img'>
|
||||
<img src='/images/screenshots/discord-api.png' />
|
||||
|
@ -23,7 +23,7 @@ ha_platforms:
|
||||
|
||||
The [EnOcean](https://en.wikipedia.org/wiki/EnOcean) standard is supported by many different vendors. There are switches and sensors of many different kinds, and typically they employ energy harvesting to get power such that no batteries are necessary.
|
||||
|
||||
The `enocean` integration adds support for some of these devices. You will need a controller like the [USB300](https://www.enocean.com/en/enocean_modules/usb-300-oem/) in order for it to work.
|
||||
The EnOcean integration adds support for some of these devices. You will need a controller like the [USB300](https://www.enocean.com/en/enocean_modules/usb-300-oem/) in order for it to work.
|
||||
|
||||
There is currently support for the following device types within Home Assistant:
|
||||
|
||||
@ -43,17 +43,13 @@ The following devices have been confirmed to work out of the box:
|
||||
- EnOcean STM-330 temperature sensor
|
||||
- Hoppe SecuSignal window handle from Somfy
|
||||
|
||||
If you own a device not listed here, please check whether your device can talk in one of the listed [EnOcean Equipment Profiles](https://www.enocean-alliance.org/what-is-enocean/specifications/) (EEP).
|
||||
If it does, it will most likely work.
|
||||
The available profiles are usually listed somewhere in the device manual.
|
||||
If you own a device not listed here, please check whether your device can talk in one of the listed [EnOcean Equipment Profiles](https://www.enocean-alliance.org/what-is-enocean/specifications/) (EEP). If it does, it will most likely work. The available profiles are usually listed somewhere in the device manual.
|
||||
|
||||
Support for tech-in messages is not implemented.
|
||||
|
||||
## Configuration
|
||||
|
||||
{% include integrations/config_flow.md %}
|
||||
|
||||
Despite the UI-based configuration of the hub, the entities are still configured using YAML see mext chapters).
|
||||
Despite the UI-based configuration of the hub, the entities are still configured using YAML see next chapters).
|
||||
|
||||
## Binary Sensor
|
||||
|
||||
|
@ -119,7 +119,7 @@ name:
|
||||
type: string
|
||||
default: MQTT Fan
|
||||
optimistic:
|
||||
description: Flag that defines if lock works in optimistic mode
|
||||
description: Flag that defines if fan works in optimistic mode
|
||||
required: false
|
||||
type: boolean
|
||||
default: "`true` if no state topic defined, else `false`."
|
||||
@ -266,8 +266,8 @@ fan:
|
||||
oscillation_command_topic: "bedroom_fan/oscillation/set"
|
||||
percentage_state_topic: "bedroom_fan/speed/percentage_state"
|
||||
percentage_command_topic: "bedroom_fan/speed/percentage"
|
||||
preset_mode_state_topic: "bedroom_fan/speed/preset_mode_state"
|
||||
preset_mode_command_topic: "bedroom_fan/speed/preset_mode"
|
||||
preset_mode_state_topic: "bedroom_fan/preset/preset_mode_state"
|
||||
preset_mode_command_topic: "bedroom_fan/preset/preset_mode"
|
||||
preset_modes:
|
||||
- "auto"
|
||||
- "smart"
|
||||
@ -299,7 +299,7 @@ fan:
|
||||
oscillation_command_template: "{ oscillation: '{{ value }}'}"
|
||||
percentage_command_topic: "bedroom_fan/speed/percentage"
|
||||
percentage_command_template: "{ percentage: '{{ value }}'}"
|
||||
preset_mode_command_topic: "bedroom_fan/speed/preset_mode"
|
||||
preset_mode_command_topic: "bedroom_fan/preset/preset_mode"
|
||||
preset_mode_command_template: "{ preset_mode: '{{ value }}'}"
|
||||
preset_modes:
|
||||
- "auto"
|
||||
|
@ -68,4 +68,6 @@ If you have a dynamic IP address, most likely it will change.
|
||||
|
||||
## Additional info
|
||||
|
||||
The configuration in the UI asks for a username. Starting from FRITZ!OS 7.24 the FRITZ!Box creates a random username for the admin user if you didn't set one yourself. This can be found after logging into the FRITZ!Box and visiting System -> FRITZ!Box Users -> Users. The username starts with `fritz` followed by four random numbers. Under properties on the right it says `created automatically`. Prior to FRITZ!OS 7.24 the default username was `admin`.
|
||||
|
||||
See the [device tracker integration page](/integrations/device_tracker/) for instructions how to configure the people to be tracked.
|
||||
|
@ -17,7 +17,7 @@ The `google_travel_time` sensor provides travel time from the [Google Distance M
|
||||
|
||||
You need to register for an API key by following the instructions [here](https://github.com/googlemaps/google-maps-services-python#api-keys). You only need to turn on the Distance Matrix API.
|
||||
|
||||
[Google now requires billing](https://mapsplatform.googleblog.com/2018/05/introducing-google-maps-platform.html) to be enabled (and a valid credit card loaded) to access Google Maps APIs. The Distance Matrix API is billed at US$10 per 1000 requests, however, a US$200 per month credit is applied (20,000 requests). By default, the sensor will update the travel time every 5 minutes, making approximately 288 calls per day. Note that at this rate, more than 2 sensors will likely exceed the free credit amount. If you need to run more than 2 sensors, consider changing the [scan interval](/docs/configuration/platform_options/#scan-interval) to something longer than 5 minutes to stay within the free credit limit or update the sensors on-demand using an automation (see example below).
|
||||
[Google now requires billing](https://mapsplatform.googleblog.com/2018/05/introducing-google-maps-platform.html) to be enabled (and a valid credit card loaded) to access Google Maps APIs. The Distance Matrix API is billed at US$10 per 1000 requests, however, a US$200 per month credit is applied (20,000 requests). The sensor will update the travel time every 5 minutes, making approximately 288 calls per day. Note that at this rate, more than 2 sensors will likely exceed the free credit amount. While this call frequency can not be decreased, you may have a use case which requires the data to be updated more often, to do this you may update on-demand (see automation example below).
|
||||
|
||||
A quota can be set against the API to avoid exceeding the free credit amount. Set the 'Elements per day' to a limit of 645 or less. Details on how to configure a quota can be found [here](https://developers.google.com/maps/documentation/distance-matrix/usage-and-billing#set-caps)
|
||||
|
||||
|
@ -65,7 +65,7 @@ vapid_prv_key:
|
||||
required: true
|
||||
type: string
|
||||
vapid_email:
|
||||
description: The e-mail account associated with your Firebase project, [see configuring the platform](#configuring-the-platform).
|
||||
description: The e-mail account of your Google account associated with your Firebase project, [see configuring the platform](#configuring-the-platform).
|
||||
required: true
|
||||
type: string
|
||||
gcm_api_key:
|
||||
@ -99,18 +99,19 @@ The `html5` platform can only function if all of the following requirements are
|
||||
6. Select the ['Cloud Messaging' tab](https://console.firebase.google.com/project/_/settings/cloudmessaging).
|
||||
7. Generate a new key pair under the Web configuration listing at the bottom of the page. To view the private key click the three dots to the right and 'Show private key'.
|
||||
8. Select the ['Service Accounts' tab](https://console.firebase.google.com/project/_/settings/serviceaccounts/adminsdk).
|
||||
9. Get the email address for the project under the text that says "Firebase service account".
|
||||
9. Get the email address for the project under the text that says "Firebase service account" for reference. This is not what you have to insert in `vapid_email`! You'll have to insert your Google account e-mail there.
|
||||
|
||||
### Setting up your browser
|
||||
|
||||
Assuming you have already configured the platform:
|
||||
|
||||
1. Open Home Assistant in Chrome or Firefox.
|
||||
2. Load profile page by clicking on the badge next to the Home Assistant title in the sidebar. Assuming you have met all the [requirements](#requirements) above then you should see a new slider for Push Notifications. If the slider is greyed out, ensure you are viewing Home Assistant via its external HTTPS address (and that you have configured the `notify` HTML5 integration in Home Assistant). If the slider is not visible, ensure you are not in the user configuration (Sidebar, Configuration, Users, View User).
|
||||
3. Slide it to the on position.
|
||||
4. Name the device you're using in the alert that appears.
|
||||
5. Within a few seconds you should be prompted to allow notifications from Home Assistant.
|
||||
6. Assuming you accept, that's all there is to it!
|
||||
{% my profile badge %}
|
||||
|
||||
1. Open Home Assistant in Chrome or Firefox and load profile page by clicking the My button above or by clicking on the badge next to the Home Assistant title in the sidebar. Assuming you have met all the [requirements](#requirements) above then you should see a new slider for Push Notifications. If the slider is greyed out, ensure you are viewing Home Assistant via its external HTTPS address (and that you have configured the `notify` HTML5 integration in Home Assistant). If the slider is not visible, ensure you are not in the user configuration (Sidebar, Configuration, Users, View User).
|
||||
2. Slide it to the on position.
|
||||
3. Name the device you're using in the alert that appears.
|
||||
4. Within a few seconds you should be prompted to allow notifications from Home Assistant.
|
||||
5. Assuming you accept, that's all there is to it!
|
||||
|
||||
**Note:** If you aren't prompted for a device name when enabling notifications, open the `html5_push_registrations.conf` file in your configuration directory. You will see a new entry for the browser you just added. Rename it from `unnamed device` to a name of your choice, which will make it easier to identify later. _Do not change anything else in this file!_ You need to restart Home Assistant after making any changes to the file.
|
||||
|
||||
@ -118,11 +119,12 @@ Assuming you have already configured the platform:
|
||||
|
||||
Assuming the previous test completed successfully and your browser was registered, you can test the notification as follows:
|
||||
|
||||
1. Open Home Assistant in Chrome or Firefox.
|
||||
2. Open the sidebar and click the Services button at the bottom (shaped like a remote control), located below the Developer Tools.
|
||||
3. From the Services dropdown, search for your HTML5 notify service (e.g., notify.NOTIFIER_NAME) and select it.
|
||||
4. In the Service Data text box enter: `{"message":"hello world"}`, then press the CALL SERVICE button.
|
||||
5. If everything worked you should see a popup notification.
|
||||
{% my developer_services badge %}
|
||||
|
||||
1. Click on the My button above, or open Home Assistant in Chrome or Firefox, open the sidebar and click the Services button at the bottom (shaped like a remote control), located below the Developer Tools.
|
||||
2. From the Services dropdown, search for your HTML5 notify service (e.g., notify.NOTIFIER_NAME) and select it.
|
||||
3. In the Service Data text box enter: `{"message":"hello world"}`, then press the CALL SERVICE button.
|
||||
4. If everything worked you should see a popup notification.
|
||||
|
||||
### Usage
|
||||
|
||||
|
@ -716,6 +716,12 @@ create_temperature_sensors:
|
||||
|
||||
The KNX cover platform is used as an interface to KNX covers.
|
||||
|
||||
<div class='note'>
|
||||
|
||||
Unlike most KNX devices, Home Assistant defines 0% as closed and 100% as fully open in regards to covers. The corresponding value inversion is done internally by the KNX integration.
|
||||
|
||||
</div>
|
||||
|
||||
To use your KNX covers in your installation, add the following lines to your top level [KNX Integration](/integrations/knx) configuration key in `configuration.yaml`:
|
||||
|
||||
```yaml
|
||||
@ -743,11 +749,11 @@ move_long_address:
|
||||
required: false
|
||||
type: [string, list]
|
||||
move_short_address:
|
||||
description: KNX group address for moving the cover short time up or down. Used by some covers also as the means to stop the cover, if no dedicated `stop_address` exists on the actuator. *DPT 1*
|
||||
description: KNX group address for moving the cover stepwise up or down. Used by some covers also as the means to stop the cover, if no dedicated `stop_address` exists on the actuator. *DPT 1*
|
||||
required: false
|
||||
type: [string, list]
|
||||
stop_address:
|
||||
description: KNX group address for stopping the current movement from the cover. *DPT 1*
|
||||
description: KNX group address for stopping the current movement of the cover. *DPT 1*
|
||||
required: false
|
||||
type: [string, list]
|
||||
position_address:
|
||||
@ -759,11 +765,11 @@ position_state_address:
|
||||
required: false
|
||||
type: [string, list]
|
||||
angle_address:
|
||||
description: KNX group address for moving the cover to the dedicated angle. *DPT 5.001*
|
||||
description: KNX group address for tilting the cover to the dedicated angle. *DPT 5.001*
|
||||
required: false
|
||||
type: [string, list]
|
||||
angle_state_address:
|
||||
description: Separate KNX group address for requesting the current angle of cover. *DPT 5.001*
|
||||
description: Separate KNX group address for requesting the current tilt angle of the cover. *DPT 5.001*
|
||||
required: false
|
||||
type: [string, list]
|
||||
travelling_time_down:
|
||||
@ -777,12 +783,12 @@ travelling_time_up:
|
||||
default: 25
|
||||
type: integer
|
||||
invert_position:
|
||||
description: Set this to `true` if your actuator reports fully closed as 0% in KNX.
|
||||
description: Set this to `true` if your actuator reports fully closed position as 0% in KNX.
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
invert_angle:
|
||||
description: Set this to `true` if your actuator reports tilt fully closed as 0% in KNX.
|
||||
description: Set this to `true` if your actuator reports fully closed tilt as 0% in KNX.
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
@ -1106,7 +1112,7 @@ always_callback:
|
||||
### Value Types
|
||||
|
||||
| KNX DPT | type | size in byte | range | unit |
|
||||
|--------:|-------------------------------|-------------:|:--------------------------:|----------------|
|
||||
| ------: | ----------------------------- | -----------: | :------------------------: | -------------- |
|
||||
| 5 | 1byte_unsigned | 1 | 0 ... 255 | |
|
||||
| 5.001 | percent | 1 | 0 ... 100 | % |
|
||||
| 5.003 | angle | 1 | 0 ... 360 | ° |
|
||||
@ -1404,3 +1410,80 @@ sync_state:
|
||||
type: boolean
|
||||
default: true
|
||||
{% endconfiguration %}
|
||||
|
||||
## Troubleshooting / Common issues
|
||||
|
||||
### Logs for the KNX integration
|
||||
|
||||
`xknx`, the library used for KNX communication, provides various logging handlers for monitoring and debug purposes.
|
||||
Add the following lines to your Home Assistant `configuration.yaml` to activate them:
|
||||
|
||||
```yaml
|
||||
logger:
|
||||
default: warning
|
||||
logs:
|
||||
# For most debugging needs `xnx.log` and one of `xknx.knx` or `xknx.telegram` are a good choice.
|
||||
xknx: debug # sets the level of all loggers
|
||||
xknx.log: debug # provides general information (connection, etc.)
|
||||
xknx.raw_socket: debug # logs incoming UDP frames in raw hex format
|
||||
xknx.knx: debug # logs incoming and outgoing KNX/IP frames at socket level
|
||||
xknx.telegram: debug # logs telegrams before they are being processed at device level or sent to an interface
|
||||
xknx.state_updater: debug # provides information about the state updater
|
||||
```
|
||||
|
||||
You can use the service `logger.set_level` to change the log level of a handler on a running instance.
|
||||
{% my developer_call_service badge service="logger.set_level" %}
|
||||
|
||||
### Group address can not be read
|
||||
|
||||
Every `*_state_address` is read on startup sequentially if not configured differently. If you see the following errors in your log, a group address could not be read by a GroupValueRead request from Home Assistant in time.
|
||||
|
||||
```log
|
||||
> Could not sync group address '1/2/3' (Entity name - Feature)
|
||||
> Error: KNX bus did not respond in time (2.0 secs) to GroupValueRead request for: '1/2/3'
|
||||
```
|
||||
|
||||
#### No communication object (CO) assigned to the group address (GA) has the Read-Flag set in ETS
|
||||
|
||||
- Enable the read flag for *one* CO assigned to the GA. Use the one most likely to hold the current state (e.g., for a light entity's `brightness_state_address` the according CO of the dimming actuator).
|
||||
|
||||
#### Response telegrams are not passing a line coupler, router or other filter in the installation
|
||||
|
||||
- Use a dummy device in ETS for Home Assistant. These can be found in the ETS online catalog. Assign it to the line your interface connects Home Assistant to and link its communication objects to the group addresses you are using in Home Assistant. ETS will generate filter tables that are applied to your line couplers after updating their application.
|
||||
|
||||
#### Unresponsive system
|
||||
|
||||
- The timeout for logging the errors (2 seconds) is started when the GroupValueRead request is scheduled to be sent. On systems experiencing high loads sending can be delayed (e.g., Raspberry Pi running lots of integrations at startup).
|
||||
Incoming response telegrams are always processed, so no information gets lost.
|
||||
|
||||
### Duplicate entities
|
||||
|
||||
If you find following error in your log you seem to have a duplicated entity in your configuration.
|
||||
|
||||
```log
|
||||
Platform knx does not generate unique IDs. ID 1/2/3 already exists - ignoring platform.name
|
||||
```
|
||||
|
||||
The `unique_id` for KNX entities is generated based on required configuration values.
|
||||
|
||||
- binary_sensor: `state_address`
|
||||
- climate: `temperature_address` `target_temperature_state_address` `target_temperature_address` `setpoint_shift_address`
|
||||
- cover: `move_long_address` `position_address`
|
||||
- fan: `address`
|
||||
- light: `address` or all combined `brightness_address` if only `individual_colors` is used
|
||||
- notify: `address`
|
||||
- scene: `address` and `scene_number`
|
||||
- sensor: `state_address`
|
||||
- switch: `address`
|
||||
- weather: `address_temperature`
|
||||
|
||||
There can not be multiple entities on the same platform sharing these exact group addresses, even if they differ in other configuration.
|
||||
|
||||
### xknx.yaml configuration
|
||||
|
||||
```log
|
||||
> The 'config_file' option near /homeassistant/configuration.yaml:42 is deprecated, please remove it from your configuration
|
||||
> Invalid config for [knx]: [config_file] is an invalid option for [knx]. Check: knx->knx->config_file.
|
||||
```
|
||||
|
||||
The feature to specify a xknx configuration schema file in the Home Assistant configuration YAML file (via `config_file:`) is deprecated since Home Assistant 2021.4. You can use the [xknx.yaml config converter](https://xknx.io/config-converter/) to convert it to a Home Assistant compatible `configuration.yaml` schema.
|
||||
|
@ -51,15 +51,18 @@ Just add the token to your configuration and restart Home Assistant and the medi
|
||||
|
||||
## Advanced configuration
|
||||
|
||||
The example below shows how you can use the `turn_on_action`
|
||||
The example below shows how you can use the `turn_on_action` the [`wake_on_lan` integration](/integrations/wake_on_lan/).
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
wake_on_lan: # enables `wake_on_lan` integration
|
||||
|
||||
# Enables the `lg_netcast` media player
|
||||
media_player:
|
||||
- platform: lg_netcast
|
||||
host: 192.168.0.20
|
||||
turn_on_action:
|
||||
service: switch.turn_on
|
||||
target:
|
||||
entity_id: switch.tv_switch
|
||||
service: wake_on_lan.send_magic_packet
|
||||
data:
|
||||
mac: AA-BB-CC-DD-EE-FF
|
||||
broadcast_address: 11.22.33.44
|
||||
```
|
||||
|
@ -26,7 +26,7 @@ The `.default` suffix should be added to the entity identifier of each light to
|
||||
|
||||
<div class='note'>
|
||||
|
||||
If a light entity is in the `on` state, the default profile brightness and will only be applied if it is called in the service call data attribute `profile`, like any other named profile. The transition attribute will be applied for all `light.turn_on`, `light.toggle` and `light.turn_off` service calls, unless specified otherwise in the service call data.
|
||||
If a light entity is in the `on` state, the default profile brightness will only be applied if it is called in the service call data attribute `profile`, like any other named profile. The transition attribute will be applied for all `light.turn_on`, `light.toggle` and `light.turn_off` service calls, unless specified otherwise in the service call data.
|
||||
|
||||
</div>
|
||||
|
||||
|
@ -51,60 +51,55 @@ Some entities have attributes in addition to the default ones that are available
|
||||
| status_code | string | The [status code](https://github.com/natekspencer/pylitterbot/blob/884944b011f5fea9639b7d21d19fa3f7708e25a7/pylitterbot/enums.py#L44) associated with the current status of the vacuum. |
|
||||
| last_seen | string | UTC datetime the unit last reported its status. |
|
||||
|
||||
## Commands
|
||||
## Services
|
||||
|
||||
Commands are utilized for additional functionality that is available in the Litter-Robot companion app. The following are currently available:
|
||||
Services are utilized for additional functionality that is available in the Litter-Robot companion app. The following are currently available:
|
||||
|
||||
### reset_waste_drawer
|
||||
|
||||
Resets the waste drawer level on the Litter-Robot. This will reset the cycle count returned by the Litter-Robot API to `0` such that the waste drawer entity will report as `0.0 %`.
|
||||
|
||||
```yaml
|
||||
service: vacuum.send_command
|
||||
service: litterrobot.reset_waste_drawer
|
||||
target:
|
||||
entity_id: vacuum.litter_robot_litter_box
|
||||
data:
|
||||
command: reset_waste_drawer
|
||||
```
|
||||
|
||||
### set_sleep_mode
|
||||
|
||||
Enables (with `sleep_time` param) or disables sleep mode on the Litter-Robot.
|
||||
Enables (with `start_time` parameter) or disables sleep mode on the Litter-Robot.
|
||||
|
||||
| Param | Type | Required | Description |
|
||||
| Parameter | Type | Required | Description |
|
||||
| ---------- | ------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| enabled | bool | yes | Set to true to enable and false to disable. |
|
||||
| sleep_time | string | no | Time at which the unit will enter sleep mode and prevent an automatic clean cycle for 8 hours. This param uses the 24-hour format string `%H:%M:%S`, with seconds being optional, and is based on the timezone configured for your Home Assistant installation. As such, `10:30:00` would indicate 10:30 AM, whereas `22:30:00` would indicate 10:30 PM. |
|
||||
| start_time | string | no | Time at which the unit will enter sleep mode and prevent an automatic clean cycle for 8 hours. This param uses the 24-hour format string `%H:%M:%S`, with seconds being optional, and is based on the timezone configured for your Home Assistant installation. As such, `10:30:00` would indicate 10:30 AM, whereas `22:30:00` would indicate 10:30 PM. |
|
||||
|
||||
Example of setting the sleep mode to begin at 10:30 PM.
|
||||
|
||||
```yaml
|
||||
service: vacuum.send_command
|
||||
service: litterrobot.set_sleep_mode
|
||||
target:
|
||||
entity_id: vacuum.litter_robot_litter_box
|
||||
data:
|
||||
command: set_sleep_mode
|
||||
params:
|
||||
enabled: true
|
||||
sleep_time: "22:30:00"
|
||||
start_time: '23:30:00'
|
||||
|
||||
```
|
||||
|
||||
### set_wait_time
|
||||
|
||||
Sets the wait time, in minutes, between when your cat uses the Litter-Robot and when the unit cycles automatically.
|
||||
|
||||
| Param | Type | Required | Description |
|
||||
| Parameter | Type | Required | Description |
|
||||
| --------- | ---- | -------- | --------------------------- |
|
||||
| wait_time | int | yes | Must be one of: 3, 7 or 15. |
|
||||
| minutes | int | yes | Must be one of: 3, 7 or 15. |
|
||||
|
||||
Example of setting the wait time to 3 minutes.
|
||||
|
||||
```yaml
|
||||
service: vacuum.send_command
|
||||
service: litterrobot.set_wait_time
|
||||
target:
|
||||
entity_id: vacuum.litter_robot_litter_box
|
||||
data:
|
||||
command: set_wait_time
|
||||
params:
|
||||
wait_time: 3
|
||||
minutes: 3
|
||||
```
|
||||
|
@ -12,8 +12,6 @@ ha_platforms:
|
||||
|
||||
The MH-Z19 is a small non-dispersive infrared sensor that can measure CO2 level. High CO2 levels can lead to drowsiness, poor concentration, loss of attention or increased heart rate. The CO2 level outside is around 400ppm, but inside levels can reach between 1000 and 5000 ppm. High CO2 levels indicate that you should increase ventilation.
|
||||
|
||||
Check out the [Open Home Automation web site](https://www.open-homeautomation.com/2016/08/24/monitor-co2-levels-in-your-house/) for a quick guide how to connect the sensor to your PC or Raspberry Pi.
|
||||
|
||||
**Note:** the new version MH-Z19B requires the VIN to be connected to a 5V pin, rather than 3.3V.
|
||||
|
||||
## Configuration
|
||||
|
@ -22,3 +22,7 @@ There is currently support for the following platforms within Home Assistant:
|
||||
- Binary sensor - mic muted/unmuted and meeting live/not-live
|
||||
|
||||
{% include integrations/config_flow.md %}
|
||||
|
||||
Please note, when setting the integration, the UI will ask for "Host". This is
|
||||
the hostname or IP address of the machine you run MuteSync on (which is most
|
||||
likely your desktop computer).
|
||||
|
@ -10,7 +10,7 @@ ha_platforms:
|
||||
- switch
|
||||
---
|
||||
|
||||
The `netio` switch platform allows you to control your [Netio](https://www.netio-products.com/en/overview/) Netio4, Netio4 All, and Netio 230B. These are smart outlets controllable through Ethernet and/or Wi-Fi that reports consumptions (Netio4all).
|
||||
The `netio` switch platform allows you to control your [Netio](https://www.netio-products.com/en/overview/) Netio4, Netio4 All, and Netio 230B. These are smart outlets controllable through Ethernet and/or Wi-Fi that reports consumptions (Netio4all). This integration requires Telnet to be enabled on the Netio device.
|
||||
|
||||
To use Netio devices in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
|
@ -13,7 +13,7 @@ ha_platforms:
|
||||
- remote
|
||||
---
|
||||
|
||||
The `panasonic_viera` platform allows you to control a Panasonic Viera TV.
|
||||
The Panasonic Viera integration allows you to control a Panasonic Viera TV.
|
||||
|
||||
There is currently support for the following device types within Home Assistant:
|
||||
|
||||
@ -61,6 +61,10 @@ When you restart Home Assistant, make sure the TV is turned on and connected to
|
||||
|
||||
### Example `turn_on_action`
|
||||
|
||||
This example uses a `turn_on_action`, to turn on the TV using a magic wake on
|
||||
LAN packet. This example requires the [Wake on LAN](/integrations/wake_on_lan)
|
||||
integration to be set up.
|
||||
|
||||
```yaml
|
||||
# Example turn_on_action configuration.yaml entry with Wake-on-LAN
|
||||
panasonic_viera:
|
||||
|
@ -215,6 +215,15 @@ Call the service `recorder.disable` to stop saving events and states to the data
|
||||
|
||||
Call the service `recorder.enable` to start again saving events and states to the database. This is the opposite of `recorder.disable`.
|
||||
|
||||
## Recommended engines and minimum versions
|
||||
|
||||
The following database engines are tested when major changes are made to the recorder. Other database engines do not have an active core maintainer at this time and may require additional work to maintain.
|
||||
|
||||
- SQLite 3.32.1+
|
||||
- MariaDB 10.3+
|
||||
- MySQL 5.7+
|
||||
- PostgresSQL 12+
|
||||
|
||||
## Custom database engines
|
||||
|
||||
| Database engine | `db_url` |
|
||||
@ -232,7 +241,7 @@ Call the service `recorder.enable` to start again saving events and states to th
|
||||
| PostgreSQL | `postgresql://user:password@SERVER_IP/DB_NAME` |
|
||||
| PostgreSQL (Socket) | `postgresql://@/DB_NAME` |
|
||||
| PostgreSQL (Custom socket dir) | `postgresql://@/DB_NAME?host=/path/to/dir` |
|
||||
| MS SQL Server | `mssql+pyodbc://username:password@SERVER_IP/DB_NAME?charset=utf8;DRIVER={DRIVER};Port=1433;` |
|
||||
| MS SQL Server | `mssql+pyodbc://username:password@SERVER_IP:1433/DB_NAME?charset=utf8&driver=DRIVER` |
|
||||
|
||||
<div class='note'>
|
||||
|
||||
@ -340,7 +349,13 @@ sudo apt-get install postgresql-server-dev-X.Y
|
||||
pip3 install psycopg2
|
||||
```
|
||||
|
||||
For using Unix Sockets, add the following line to your [`pg_hba.conf`](https://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html):
|
||||
For using Unix Sockets, first create your user from the `postgres` user account;
|
||||
```bash
|
||||
createuser USER_NAME
|
||||
```
|
||||
Where `USER_NAME` is the name of the user running the Home Assistant instance (see [securing your installation](/docs/configuration/securing/)).
|
||||
|
||||
Then add the following line to your [`pg_hba.conf`](https://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html):
|
||||
|
||||
`local DB_NAME USER_NAME peer`
|
||||
|
||||
@ -377,6 +392,6 @@ You will also need to install an ODBC Driver. Microsoft ODBC drivers are recomme
|
||||
|
||||
<div class='note'>
|
||||
|
||||
If you are using Hass.io, FreeTDS is already installed for you. The db_url you need to use is `mssql+pyodbc://username:password@SERVER_IP/DB_NAME?charset=utf8mb4;DRIVER={FreeTDS};Port=1433;`.
|
||||
If you are using Hass.io, FreeTDS is already installed for you. The db_url you need to use is `mssql+pyodbc://username:password@SERVER_IP:1433/DB_NAME?charset=utf8mb4&driver=FreeTDS`.
|
||||
|
||||
</div>
|
||||
|
@ -179,7 +179,7 @@ sensor:
|
||||
|
||||
### Value from another Home Assistant instance
|
||||
|
||||
The Home Assistant [API](/developers/rest_api/) exposes the data from your attached sensors. If you are running multiple Home Assistant instances which are not [connected](/developers/architecture/#multiple-connected-instances) you can still get information from them.
|
||||
The Home Assistant [API](/developers/rest_api/) exposes the data from your attached sensors. If you are running multiple Home Assistant instances which are not connected you can still get information from them.
|
||||
|
||||
If the Home Assistant instance in the resource variable is protected by an API password, you can append `?api_password=YOUR_PASSWORD` to the resource URL to authenticate or use `headers:`.
|
||||
|
||||
|
@ -88,3 +88,21 @@ For any property denoting a volume, the following values should be used:
|
||||
| `exit_delay_home` | yes | The number of seconds to delay triggering when exiting with a "home" state |
|
||||
| `light` | yes | Whether the light on the base station should display when armed |
|
||||
| `voice_prompt_volume` | yes | The volume of the base station's voice prompts |
|
||||
|
||||
## Events
|
||||
|
||||
### `SIMPLISAFE_NOTIFICATION`
|
||||
|
||||
`SIMPLISAFE_NOTIFICATION` events represent system notifications that would appear in the
|
||||
messages section of the SimpliSafe web and mobile apps. When received, they come with
|
||||
event data that contains the following keys:
|
||||
|
||||
* `category`: The notification category (e.g., `error`)
|
||||
* `code`: The SimpliSafe code for the notification
|
||||
* `message`: The actual text of the notification
|
||||
* `timestamp`: The UTC timestamp of the notification
|
||||
|
||||
Note that when Home Assistant restarts, `SIMPLISAFE_NOTIFICATION` events will fire once
|
||||
again for any notifications still active in the SimpliSafe web and mobile apps. To
|
||||
prevent this, either (a) clear them in the web/mobile app or (b) utilize the
|
||||
`simplisafe.clear_notifications` service described above.
|
||||
|
@ -24,7 +24,9 @@ The `sonos` integration allows you to control your [Sonos](https://www.sonos.com
|
||||
|
||||
## Battery support
|
||||
|
||||
Battery sensors are currently supported for the `Sonos Roam` and `Sonos Move` devices. For each speaker with a battery, a `sensor` showing the current battery charge level and a `binary_sensor` showing the power state of the speaker are created. The `binary_sensor` reports if the speaker is currently powered by an external source and its `power_source` attribute shows which specific source is providing the current power. This source attribute can be one of `BATTERY`, `SONOS_CHARGING_RING` if using wireless charging, or `USB_POWER` if charging via USB cable. Note that the Roam will report `SONOS_CHARGING_RING` even when using a generic Qi charger.
|
||||
Battery sensors are supported for the `Sonos Roam` and `Sonos Move` devices on S2 firmware.
|
||||
|
||||
For each speaker with a battery, a `sensor` showing the current battery charge level and a `binary_sensor` showing the power state of the speaker are created. The `binary_sensor` reports if the speaker is currently powered by an external source and its `power_source` attribute shows which specific source is providing the current power. This source attribute can be one of `BATTERY`, `SONOS_CHARGING_RING` if using wireless charging, or `USB_POWER` if charging via USB cable. Note that the Roam will report `SONOS_CHARGING_RING` even when using a generic Qi charger.
|
||||
|
||||
## Services
|
||||
|
||||
|
@ -15,38 +15,28 @@ ha_platforms:
|
||||
- sensor
|
||||
---
|
||||
|
||||
The `speedtestdotnet` integration uses the [Speedtest.net](https://speedtest.net/) web service to measure network bandwidth performance.
|
||||
The Speedtest.net integration uses the [Speedtest.net](https://speedtest.net/) web service to measure network bandwidth performance.
|
||||
|
||||
By default, a speed test will be run every hour. The user can change the update frequency in the configuration by defining the `scan_interval` for a speed test to run.
|
||||
|
||||
{% include integrations/config_flow.md %}
|
||||
|
||||
Most Speedtest.net servers require TCP port 8080 outbound to function. Without this port open you may experience significant delays or no results at all. See note on their [help page](https://www.speedtest.net/help).
|
||||
|
||||
{% include integrations/config_flow.md %}
|
||||
By default, a speed test will be run every hour. You can update frequency in the integration configuration.
|
||||
|
||||
## Integration Sensors
|
||||
|
||||
The following sensors are added by the integration:
|
||||
|
||||
sensors:
|
||||
- Ping sensor: Reaction time in ms of your connection (how fast you get a response after you’ve sent out a request).
|
||||
- Download sensor: The download speed (Mbit/s).
|
||||
- Upload sensor: The upload speed (Mbit/s).
|
||||
|
||||
### Time period dictionary example
|
||||
|
||||
```yaml
|
||||
scan_interval:
|
||||
# At least one of these must be specified:
|
||||
days: 0
|
||||
hours: 0
|
||||
minutes: 3
|
||||
seconds: 30
|
||||
milliseconds: 0
|
||||
```
|
||||
- Ping sensor: Reaction time in ms of your connection (how fast you get a response after you’ve sent out a request).
|
||||
- Download sensor: The download speed (Mbit/s).
|
||||
- Upload sensor: The upload speed (Mbit/s).
|
||||
|
||||
### Service
|
||||
|
||||
Once loaded, the `speedtestdotnet` integration will expose a service (`speedtestdotnet.speedtest`) that can be called to run a Speedtest.net speed test on demand. This service takes no parameters. This can be useful if you have enabled manual mode.
|
||||
Once loaded, the integration will expose a service (`speedtestdotnet.speedtest`) that can be called to run a Speedtest.net speed test on demand. This service takes no parameters. This can be useful when auto update has been disabled in the integration options.
|
||||
|
||||
```yaml
|
||||
action:
|
||||
@ -59,18 +49,6 @@ Please be aware of the potential [inconsistencies](https://github.com/sivel/spee
|
||||
## Examples
|
||||
|
||||
In this section you will find some real-life examples of how to use this component.
|
||||
|
||||
### Run periodically
|
||||
|
||||
Every half hour of every day:
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
speedtestdotnet:
|
||||
scan_interval:
|
||||
minutes: 30
|
||||
```
|
||||
|
||||
### Using as a trigger in an automation
|
||||
|
||||
{% raw %}
|
||||
|
@ -176,7 +176,7 @@ Use the same `db_url` as for the `recorder` integration. Change `DB_NAME` to the
|
||||
```yaml
|
||||
sensor:
|
||||
- platform: sql
|
||||
db_url: "mssql+pyodbc://username:password@SERVER_IP/DB_NAME?charset=utf8;DRIVER={FreeTDS};Port=1433;"
|
||||
db_url: "mssql+pyodbc://username:password@SERVER_IP:1433/DB_NAME?charset=utf8&driver=FreeTDS"
|
||||
queries:
|
||||
- name: DB size
|
||||
query: "SELECT TOP 1 SUM(m.size) * 8 / 1024 as size FROM sys.master_files m INNER JOIN sys.databases d ON d.database_id=m.database_id WHERE d.name='DB_NAME';"
|
||||
|
@ -85,7 +85,7 @@ tmpfs 934M 0 934M 0% /dev/shm
|
||||
/dev/mmcblk0p1 253M 54M 199M 22% /boot
|
||||
```
|
||||
|
||||
Defining a `disk_use` sensor for `/` and `/home/pi` is redundant and will return the same values, since they both belong to the same "disk". However, defining separate sensors for `/dev` and `dev/shm` is possible and provides different values, since those are treated as separate "disks" by the integration.
|
||||
Defining a `disk_use` sensor for `/` and `/home/pi` is redundant and will return the same values, since they both belong to the same "disk". However, defining separate sensors for `/dev` and `/dev/shm` is possible and provides different values, since those are treated as separate "disks" by the integration.
|
||||
|
||||
## Processor temperature
|
||||
|
||||
|
@ -64,7 +64,7 @@ template:
|
||||
|
||||
## Trigger-based template sensors
|
||||
|
||||
If you want more control over when an entity updates, you can define a trigger. Triggers follow the same format and work exactly the same as [triggers in automations][trigger-doc]. This feature is a great way to create entities based on webhook data, or update entities based on a schedule.
|
||||
If you want more control over when an entity updates, you can define a trigger. Triggers follow the same format and work exactly the same as [triggers in automations][trigger-doc]. This feature is a great way to create entities based on webhook data ([example](#storing-webhook-information)), or update entities based on a schedule.
|
||||
|
||||
Whenever the trigger fires, all related entities will re-render and it will have access to [the trigger data](/docs/automation/templating/) in the templates.
|
||||
|
||||
|
@ -16,8 +16,7 @@ as firmware.
|
||||
|
||||
Because of a limitation in Tomato's API, this integration will only track wireless devices.
|
||||
|
||||
It could be that the integration is also working with [AdvancedTomato](https://advancedtomato.com/)
|
||||
but this was never tested.
|
||||
This integration is confirmed to be working with [FreshTomato](https://freshtomato.org) 2020.8 and may also be working with [AdvancedTomato](https://advancedtomato.com/).
|
||||
|
||||
## Setup
|
||||
|
||||
|
@ -59,5 +59,6 @@ automation:
|
||||
- '+14151234567'
|
||||
- '+15105555555'
|
||||
data:
|
||||
- media_url: 'https://www.home-assistant.io/images/supported_brands/home-assistant.png'
|
||||
media_url:
|
||||
- "https://www.home-assistant.io/images/supported_brands/home-assistant.png"
|
||||
```
|
||||
|
@ -117,7 +117,7 @@ This usually only works if the TV is connected to the same network. Routing the
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
wake_on_lan: # enables `wake_on_lan` domain
|
||||
wake_on_lan: # enables `wake_on_lan` integration
|
||||
|
||||
webostv:
|
||||
host: 192.168.0.10
|
||||
|
@ -78,7 +78,7 @@ Some other Zigbee coordinator hardware may not support a firmware that is capabl
|
||||
- [Elelabs Zigbee Raspberry Pi Shield](https://elelabs.com/products/elelabs_zigbee_shield.html) (Note! Not a must but recommend [upgrade the EmberZNet NCP application firmware](https://github.com/Elelabs/elelabs-zigbee-ezsp-utility))
|
||||
- Bitron Video/Smabit BV AV2010/10 USB-Stick with Silicon Labs Ember 3587
|
||||
- Telegesis ETRX357USB/ETRX357USB-LR/ETRX357USB-LRS+8M (Note! These first have to be [flashed with other EmberZNet firmware](https://github.com/walthowd/husbzb-firmware))
|
||||
- Texas Instruments based radios with Z-Stack 3.x.x (via the [zigpy-znp](https://github.com/zha-ng/zigpy-znp) library for zigpy)
|
||||
- Texas Instruments based radios (via the [zigpy-znp](https://github.com/zigpy/zigpy-znp) library for zigpy)
|
||||
- [CC2652P/CC2652R/CC2652RB USB stick or dev board hardware flashed with Z-Stack 3.x.x coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters)
|
||||
- [CC1352P/CC1352R USB stick or dev board hardware flashed with Z-Stack 3.x.x coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters)
|
||||
- [CC2538 USB stick or dev board hardware flashed with Z-Stack 3.x.x coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters)
|
||||
@ -101,13 +101,6 @@ it is expected to see `NCP entered failed state. Requesting APP controller resta
|
||||
|
||||
</div>
|
||||
|
||||
### Experimental support for additional Zigbee radio modules
|
||||
|
||||
- Texas Instruments based radios with Z-Stack Home 1.2.x (via the [zigpy-cc](https://github.com/zigpy/zigpy-cc) library for zigpy)
|
||||
- [CC2531 USB stick hardware flashed with Z-Stack Home 1.2.x coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters)
|
||||
- [CC2530 + CC2591/CC2592 USB stick hardware flashed with Z-Stack Home 1.2.x coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters)
|
||||
- [CC2538 + CC2592 dev board hardware flashed with Z-Stack Home 1.2.x coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters)
|
||||
|
||||
## Configuration - GUI
|
||||
|
||||
Connect your radio module and restart Home Assistant.
|
||||
@ -131,8 +124,8 @@ a new pop-up asking for a radio type. In the pop-up:
|
||||
| ------------- | ------------- |
|
||||
| `ezsp` | Silicon Labs EmberZNet protocol (e.g., Elelabs, HUSBZB-1, Telegesis) |
|
||||
| `deconz` | dresden elektronik deCONZ protocol (e.g., ConBee I/II, RaspBee I/II) |
|
||||
| `znp` | Texas Instruments new (active): Z-Stack 3.x.x ZNP protocol (e.g., CC26x2, CC13x2) |
|
||||
| `ti_cc` | Texas Instruments legacy & HA12: Z-Stack Home 1.2.x ZNP protocol (e.g., CC253x) |
|
||||
| `znp` | Texas Instruments (e.g., CC2531, CC26x2, CC13x2, zzh!, Slaesh's coordinator) |
|
||||
| `ti_cc` | Texas Instruments (legacy) |
|
||||
| `zigate` | ZiGate Serial protocol (e.g., ZiGate USB-TTL, PiZiGate, ZiGate WiFi) |
|
||||
| `xbee` | Digi XBee ZB Coordinator Firmware protocol (e.g., Digi XBee Series 2, 2C, 3) |
|
||||
|
||||
|
@ -579,7 +579,8 @@ The integration will add as many useable entities for you as possible from the i
|
||||
|
||||
### I renamed my devices in Z-Wave JS 2 MQTT but those names are not visible in Home Assistant
|
||||
|
||||
Correct. Only a few devices actually support having their name stored in the hardware. In case your device supports it, you can rename it from the control panel and it will be stored on your device (and Home Assistant will prefer that name). Most devices don't support that feature. Zwavejs2mqtt changes are only available within the application and not stored/synced with the actual Z-Wave network and thus not populated to Home Assistant.
|
||||
The names are only loaded when the Z-Wave JS integration is started. For Home Assistant
|
||||
to pick up those new names, either reload the integration or restart Home Assistant.
|
||||
|
||||
## Troubleshooting Issues
|
||||
|
||||
|
2477
source/_posts/2021-05-05-release-20215.markdown
Normal file
147
source/_posts/2021-05-07-community-highlights.markdown
Normal file
@ -0,0 +1,147 @@
|
||||
---
|
||||
title: "Community Highlights: 20th edition"
|
||||
description: "New inspiration for your own Lovelace dashboard, get started with a browser extension and try the pulse meter component in the latest ESPHome release"
|
||||
date: 2021-05-07 00:00:00
|
||||
date_formatted: "May 7, 2021"
|
||||
author: Klaas Schoute
|
||||
author_twitter: klaasnicolaas
|
||||
categories: Community
|
||||
og_image: /images/blog/2021-05-07-community-highlights/social.png
|
||||
---
|
||||
|
||||
Damn! We are already at the 20th edition of the Home Assistant Community
|
||||
Highlights! Some interesting things popped up around our community, we
|
||||
thought was worth sharing.
|
||||
|
||||
Do you want to share something for the next edition?
|
||||
Information on [how to share](#got-a-tip-for-the-next-edition).
|
||||
|
||||
./Klaas <br>
|
||||
*Intern on Home Assistant Energy*
|
||||
|
||||
## Blueprint of the week
|
||||
------
|
||||
|
||||
<div style="margin:0 auto; text-align:center">
|
||||
<a href="https://community.home-assistant.io/t/deconz-simple-alarm-control-panel-blueprint/305397" target="_blank">
|
||||
<img
|
||||
src='/images/blog/2021-05-07-community-highlights/keypad.jpg'
|
||||
alt="Zigbee alarm Keypad"
|
||||
style='border: 0;box-shadow: none;width:60%;margin-bottom:15px;'
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
Recently Home Assistant has received support for the use of alarm keypads
|
||||
with deCONZ, which works with an alarm control panel entity and the `deconz_alarm_event`.
|
||||
|
||||
Therefore this week's blueprint is that of [Robban](https://community.home-assistant.io/u/Robban),
|
||||
with which you can use a physical (Zigbee) keypad to switch your alarm on
|
||||
or off.
|
||||
|
||||
Keep in mind: the support in deCONZ rest plugin is still in an **alpha** stage.
|
||||
|
||||
Try it out! Read more about it on the [community forum][week_blueprint] or
|
||||
install this automation in your instance with a click on the My button!
|
||||
|
||||
{% my blueprint_import badge blueprint_url="https://community.home-assistant.io/t/deconz-simple-alarm-control-panel-blueprint/305397" %}
|
||||
|
||||
## Lovelace Dashboard
|
||||
------
|
||||
|
||||
Also this week we have a new Lovelace dashboard for the necessary portion
|
||||
of inspiration 💡 This time it has become that of [StreetInevitable5427](https://www.reddit.com/user/StreetInevitable5427/),
|
||||
a beautiful Neon UI that looks so sleek that you would love to hang it
|
||||
on your wall 🖼️
|
||||
|
||||
<div style="margin:0 auto; text-align:center">
|
||||
<a href="https://www.reddit.com/r/homeassistant/comments/n4xnp3/i_made_neon_ui_for_my_tablet_does_it_have" target="_blank">
|
||||
<img
|
||||
src='/images/blog/2021-05-07-community-highlights/dashboard.jpg'
|
||||
alt="Preview of the dashboard"
|
||||
style='border: 0;box-shadow: none;width:80%;margin-bottom:15px;'
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
Take also a look at the [original post][dashboard] on Reddit. Would you
|
||||
like your dashboard to be in the community highlight? Drop it on
|
||||
[Reddit][reddit] and maybe I'll pick it out for the next edition.
|
||||
|
||||
## Browser Extension
|
||||
------
|
||||
|
||||
<div style="margin:0 auto; text-align:center">
|
||||
<a href="https://github.com/bokub/home-assistant-extension" target="_blank">
|
||||
<img
|
||||
src='/images/blog/2021-05-07-community-highlights/browser.png'
|
||||
alt="Home Assistant Browser Extension"
|
||||
style='border: 0;box-shadow: none;width:90%;margin-bottom:15px;'
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
Fresh off the press, we came across something really cool on
|
||||
the [community forum](https://community.home-assistant.io/t/home-assistant-browser-extension/305992).
|
||||
|
||||
[bokub](https://github.com/bokub) has made browser extensions for
|
||||
[Chrome](https://chrome.google.com/webstore/detail/home-assistant/hpoiflhmfklhfcfpibmdmpeonphmdbda)
|
||||
and [Firefox](https://addons.mozilla.org/nl/firefox/addon/home-assistant/) with
|
||||
which you can display a Lovelace dashboard in your browser and thus quickly
|
||||
switch a light, for example.
|
||||
|
||||
<a href="https://github.com/bokub/home-assistant-extension"><img style="border: 0;" src="https://gh-card.dev/repos/bokub/home-assistant-extension.svg"></a>
|
||||
|
||||
## ESPHome 1.17
|
||||
------
|
||||
|
||||
<div style="margin:0 auto; text-align:center">
|
||||
<a href="https://esphome.io/changelog/v1.17.0.html" target="_blank">
|
||||
<img
|
||||
src='/images/blog/2021-05-07-community-highlights/esphome.png'
|
||||
alt="ESPHome changelog"
|
||||
style='border: 0;box-shadow: none;width:90%;margin-bottom:15px;'
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
A new version of [ESPHome][esphome] has also been released this week! 🥳
|
||||
|
||||
In particular, I would like to point out the new [pulse_meter](https://esphome.io/components/sensor/pulse_meter.html)
|
||||
component, which is ideal for if you want to measure all your energy via a
|
||||
pulse LED on your smart meter or when you want to read what your water
|
||||
consumption is.
|
||||
|
||||
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">The pulse meter component is also what I’ve used for the hardware I’ve been working on. I’ve made a range of improvements since the last time I shared it. Now including a status LED so it’s easy to check if it’s working. <a href="https://t.co/GwaVZS0HQj">pic.twitter.com/GwaVZS0HQj</a></p>— Klaas Schoute (@klaasnicolaas) <a href="https://twitter.com/klaasnicolaas/status/1389683162683518979?ref_src=twsrc%5Etfw">May 4, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
|
||||
|
||||
By combining measuring how many pulses there are within a time frame and
|
||||
the time between each pulse, you get even better accurate readings!
|
||||
|
||||
## Got a tip for the next edition?
|
||||
------
|
||||
|
||||
Have you seen (or made) something awesome, interesting, unique, amazing,
|
||||
inspirational, unusual or funny, using Home Assistant?
|
||||
|
||||
[Click here to send us your Community Highlight suggestion](/suggest-community-highlight).
|
||||
|
||||
Also, don't forget to share your creations with us via Social Media:
|
||||
|
||||
- Tweet it! Be sure to mention [@home_assistant][twitter]
|
||||
- Share it on our [Facebook group][facebook-group]
|
||||
- Post it to our [subreddit][reddit]
|
||||
- Tag [@homeasssistant][instagram] on Instagram
|
||||
- Or via chat, drop us a line in the [#lounge at Discord][chat]
|
||||
|
||||
See you next edition!
|
||||
|
||||
[chat]: https://www.home-assistant.io/join-chat
|
||||
[facebook-group]: https://www.facebook.com/groups/HomeAssistant
|
||||
[instagram]: https://www.instagram.com/homeassistant
|
||||
[reddit]: https://www.reddit.com/r/homeassistant
|
||||
[twitter]: https://www.twitter.com/home_assistant
|
||||
[blueprints]: https://community.home-assistant.io/c/blueprints-exchange
|
||||
[community]: https://community.home-assistant.io
|
||||
[esphome]: https://esphome.io
|
||||
[week_blueprint]: https://community.home-assistant.io/t/deconz-simple-alarm-control-panel-blueprint/305397
|
||||
[dashboard]: https://www.reddit.com/r/homeassistant/comments/n4xnp3/i_made_neon_ui_for_my_tablet_does_it_have
|
135
source/_posts/2021-05-10-ios-20215.markdown
Normal file
@ -0,0 +1,135 @@
|
||||
---
|
||||
title: "Easier notifications in iOS 2021.5"
|
||||
description: "The latest release of the iOS app allows writing easier notifications for both mobile apps."
|
||||
date: 2021-05-10 00:00:00
|
||||
date_formatted: "May 10, 2021"
|
||||
author: Zac West
|
||||
author_twitter: zacwest
|
||||
categories: Release-Notes
|
||||
og_image: /images/blog/2021-05-10-ios-20215/social.png
|
||||
---
|
||||
|
||||
Notifications are a popular feature of the [Companion apps](https://companion.home-assistant.io), but the differences between Android and iOS made it painful to use them to their full potential. Starting with today's release of iOS 2021.5, the vast majority of functionality is now shared across both platforms. As part of this, the [notifications documentation](https://companion.home-assistant.io/docs/notifications/notifications-basic/) has been extensively updated as well.
|
||||
|
||||
## Actionable notifications
|
||||
|
||||
Building [actionable notifications](https://companion.home-assistant.io/docs/notifications/actionable-notifications) for iOS and watchOS no longer requires defining categories in advance of using them; instead, you can include the actions right in the notification. Support for macOS will be included [in a future release](https://github.com/home-assistant/iOS/issues/1592). Categories were one of the hurdles around multi-server support, so removing them entirely solves that part!
|
||||
|
||||
Included in the documentation is how to migrate [from categories to dynamic actions](https://companion.home-assistant.io/docs/notifications/actionable-notifications#migrating-from-ios-20214-and-earlier). Both are still supported in the app at this time, but categories will be removed in the future.
|
||||
|
||||
Below is an example script which sends an actionable notification and uses [script variables](/docs/scripts/#variables), [wait for trigger](/docs/scripts/#wait-for-trigger), and [choose](/docs/scripts/#choose-a-group-of-actions) to decide what to run.
|
||||
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
# In a script's `sequence` or an automation's `actions`
|
||||
- alias: "Set up action variables"
|
||||
variables:
|
||||
# Including 'id' in 'action' allows us to identify this script run
|
||||
# and not accidentally trigger for other notification actions
|
||||
action_very: "{{ 'VERY_' ~ context.id }}"
|
||||
action_mod: "{{ 'MOD_' ~ context.id }}"
|
||||
- alias: "Send the notification"
|
||||
service: notify.mobile_app_zac_iphone
|
||||
data:
|
||||
message: "Are you hungry?"
|
||||
data:
|
||||
actions:
|
||||
- action: "{{ action_very }}"
|
||||
title: "Very Hungry"
|
||||
- action: "{{ action_mod }}"
|
||||
title: "Moderately Hungry"
|
||||
- alias: "Wait for a response"
|
||||
wait_for_trigger:
|
||||
# We wait for specific actions because we don't want to run for
|
||||
# any action, only for a response to the one we just sent
|
||||
- platform: event
|
||||
event_type: mobile_app_notification_action
|
||||
event_data:
|
||||
action: "{{ action_very }}"
|
||||
- platform: event
|
||||
event_type: mobile_app_notification_action
|
||||
event_data:
|
||||
action: "{{ action_mod }}"
|
||||
- alias: "Handle the response"
|
||||
choose:
|
||||
- conditions: "{{ wait.trigger.event.data.action == action_very }}"
|
||||
sequence:
|
||||
- service: notify.notify
|
||||
data:
|
||||
message: "⚠️ Soylent Launch Incoming"
|
||||
- service: homeassistant.turn_on
|
||||
target:
|
||||
entity_id: switch.soylent_dispenser
|
||||
- conditions: "{{ wait.trigger.event.data.action == action_mod }}"
|
||||
sequence:
|
||||
- service: notify.notify
|
||||
data:
|
||||
message: "Anyone want to grab a croissant? -Zac"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
||||
This works for both platforms without including any platform-specific logic! Other features around actionable notifications are also shared, including adding a URL to open when picking an action:
|
||||
|
||||
```yaml
|
||||
actions:
|
||||
- action: "URI"
|
||||
title: "View More"
|
||||
uri: "/lovelace/some-dashboard"
|
||||
```
|
||||
|
||||
## Replacing, grouping, clearing
|
||||
|
||||
Replacing existing notifications or threading certain notifications was another difference between platforms, and the iOS-specific versions were a bit less ergonomic, so the Android versions now work for both. You can now use the simpler [`tag` and `group` keys](https://companion.home-assistant.io/docs/notifications/notifications-basic):
|
||||
|
||||
```yaml
|
||||
- service: notify.mobile_app_<your_device>
|
||||
data:
|
||||
message: "The front door is unlocked!"
|
||||
data:
|
||||
# replace any existing front_door_lock notifications
|
||||
tag: front_door_lock
|
||||
# thread with other doors notifications
|
||||
group: doors
|
||||
```
|
||||
|
||||
You can also remove an existing notification by its tag:
|
||||
|
||||
```yaml
|
||||
- service: notify.mobile_app_<your_device>
|
||||
data:
|
||||
message: clear_notification
|
||||
data:
|
||||
tag: front_door_lock
|
||||
```
|
||||
|
||||
## Attachments
|
||||
|
||||
Attachments no longer require certain categories for [dynamic attachment](https://companion.home-assistant.io/docs/notifications/dynamic-content), so you can include streaming playback of a camera for any notification:
|
||||
|
||||
```yaml
|
||||
- service: notify.mobile_app_<your_device>
|
||||
data:
|
||||
message: "Motion detected"
|
||||
data:
|
||||
entity_id: camera.outside
|
||||
```
|
||||
|
||||
Specifying a [non-dynamic attachment](https://companion.home-assistant.io/docs/notifications/notification-attachments) is a little easier now, allowing you to short-hand the attachment part:
|
||||
|
||||
```yaml
|
||||
- service: notify.mobile_app_<your_device>
|
||||
data:
|
||||
message: "3D Print Complete"
|
||||
data:
|
||||
image: /media/local/3dprinter/latest.jpg
|
||||
```
|
||||
|
||||
You can use `video`, `image` and `audio`. Only `image` is supported on Android.
|
||||
|
||||
You may have noticed that iOS notifications have file limits; this release adds on-demand downloading of attachments that exceed the size limit or when requested using the `lazy` attachment option.
|
||||
|
||||
## Future areas of improvement
|
||||
|
||||
We're still on the lookout for places of confusion or redundancy in notifications across the iOS and Android apps. What would you like to see improved?
|
28
source/_posts/2021-05-12-integrations-api.markdown
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
title: "Why Home Assistant doesn't have an external API for integrations"
|
||||
description: "How our API design promotes an open IoT ecosystem."
|
||||
date: 2021-05-12 00:00:00
|
||||
date_formatted: "May 12, 2021"
|
||||
author: Paulus Schoutsen
|
||||
author_twitter: balloob
|
||||
categories: Public-Service-Announcement
|
||||
og_image: /images/blog/2021-05-integrations-api/social.png
|
||||
---
|
||||
|
||||
Home Assistant is the world’s largest home automation platform talking with [over 1700 different devices and services](/integrations/). Home Assistant works with these via “integrations”.
|
||||
|
||||
Each integration runs inside Home Assistant. They convert the data from the device into data that Home Assistant understands and forward commands from Home Assistant back to the device. For this to work a device or service needs to have an application programming interface (API).
|
||||
|
||||
It is not possible for a device or service to provide lights, switches or other device types via the Home Assistant API without an integration. It can be faked, but it won’t work correctly. We explicitly did not add this feature because of interoperability.
|
||||
|
||||
If Home Assistant were to offer this option, devices and services would no longer be required to create an API for control – they could just implement ours. This creates vendor lock-in, locks other home automation platforms out and hurts the open Internet of Things ecosystem.
|
||||
|
||||
You should be able to access your data from your devices without any restrictions. Requiring a specific application to get to your data is not the solution.
|
||||
|
||||
Our goal is a home where all smart devices can be managed locally.
|
||||
|
||||
This stance will hurt us in the short term because we get less integrations. It is more work for a manufacturer to create an API and a Home Assistant integration.
|
||||
|
||||
In the long term the user will win. Devices with local APIs will still work 10 years from now and no one will be held hostage by vendor lock-in because some of their devices only work with Home Assistant.
|
||||
|
||||
_Note about Home Assistant APIs: Home Assistant does have [an API](https://developers.home-assistant.io/docs/api/websocket), just not for integrations. It allows you to access all your data in real-time. We also have a [data science portal](https://data.home-assistant.io/) that documents how you can query the historical data stored on disk._
|
111
source/_posts/2021-05-14-community-highlights.markdown
Normal file
@ -0,0 +1,111 @@
|
||||
---
|
||||
title: "Community Highlights: 21st edition"
|
||||
description: "Mute your media player when you are on the phone, get started with telemetry data from your car and switch a light via Minecraft"
|
||||
date: 2021-05-14 00:00:00
|
||||
date_formatted: "May 14, 2021"
|
||||
author: Klaas Schoute
|
||||
author_twitter: klaasnicolaas
|
||||
categories: Community
|
||||
og_image: /images/blog/2021-05-14-community-highlights/social.png
|
||||
---
|
||||
|
||||
The 21st edition of the Home Assistant Community Highlights! Some interesting
|
||||
things popped up around our community, we thought was worth sharing.
|
||||
|
||||
Do you want to share something for the next edition?
|
||||
Information on [how to share](#got-a-tip-for-the-next-edition).
|
||||
|
||||
./Klaas <br>
|
||||
*Intern on Home Assistant Energy*
|
||||
|
||||
## Blueprint of the week
|
||||
------
|
||||
|
||||
Imagine, you are listening to music and suddenly you get a call, then of course
|
||||
you first want to turn the music down a bit to understand the person, what if
|
||||
we automate that with a blueprint!
|
||||
|
||||
This week's blueprint is that of [JackPoint](https://community.home-assistant.io/u/JackPoint),
|
||||
which will mute your media player when you receive a call and are at home. Try
|
||||
it out! Read more about it on the [community forum][week_blueprint] or install
|
||||
this automation in your instance with a click on the My button!
|
||||
|
||||
{% my blueprint_import badge blueprint_url="https://gist.github.com/JackPoint/2375dd5d15f0b4c52161207170c14f60" %}
|
||||
|
||||
Would you rather not have the media player muted but, for example, paused or take
|
||||
another action? More variants can be found on the [Blueprint Exchange][blueprints]!
|
||||
|
||||
## Car Telemetry
|
||||
------
|
||||
|
||||
A few editions earlier we had shown the dashboard of [Make_Itt_Work](https://www.reddit.com/user/Make_Itt_Work/)
|
||||
and it contained telemetry data from his car. The question was of course how does
|
||||
he do that?! Well, that question now has an answer, a video has come online with
|
||||
all the details.
|
||||
|
||||
<div style="margin:0 auto; text-align:center">
|
||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/ZggbvMXGOxg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
|
||||
</div>
|
||||
|
||||
## Shower Duration
|
||||
------
|
||||
|
||||
<div style="margin:0 auto; text-align:center">
|
||||
<a href="https://github.com/farstreet/shower" target="_blank">
|
||||
<img
|
||||
src='/images/blog/2021-05-14-community-highlights/shower.png'
|
||||
alt="Shower illustration"
|
||||
style='border: 0;box-shadow: none;width:60%;margin-bottom:15px;'
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
We've talked enough about saving energy, but using water efficiently is
|
||||
just as important. With the [project](https://github.com/farstreet/shower)
|
||||
from [farstreet](https://github.com/farstreet), which consists of some hardware
|
||||
and an automation, you could time how long you are in the shower and indicate
|
||||
with a LED light how long you have been under it.
|
||||
|
||||
Finished taking a shower? Then you can hear what your shower time was
|
||||
through a media player.
|
||||
|
||||
<a href="https://github.com/farstreet/shower"><img style="border: 0;" src="https://gh-card.dev/repos/farstreet/shower.svg"></a>
|
||||
|
||||
## Mine Assistant
|
||||
------
|
||||
|
||||
This item is especially nice for the Minecraft players, [Andy](https://gitlab.com/klikini)
|
||||
has managed to switch a light in Home Assistant by means of a redstone block
|
||||
in Minecraft! In the Reddit post you can find more information about this
|
||||
project, as well code to get started yourself.
|
||||
|
||||
<div style="margin:0 auto; text-align:center">
|
||||
<iframe id="reddit-embed" src="https://www.redditmedia.com/r/homeassistant/comments/nb4p5v/mine_assistant/?ref_source=embed&ref=share&embed=true" sandbox="allow-scripts allow-same-origin allow-popups" style="border: none;" height="418" width="640" scrolling="no"></iframe>
|
||||
</div>
|
||||
|
||||
## Got a tip for the next edition?
|
||||
------
|
||||
|
||||
Have you seen (or made) something awesome, interesting, unique, amazing,
|
||||
inspirational, unusual or funny, using Home Assistant?
|
||||
|
||||
[Click here to send us your Community Highlight suggestion](/suggest-community-highlight).
|
||||
|
||||
Also, don't forget to share your creations with us via Social Media:
|
||||
|
||||
- Tweet it! Be sure to mention [@home_assistant][twitter]
|
||||
- Share it on our [Facebook group][facebook-group]
|
||||
- Post it to our [subreddit][reddit]
|
||||
- Tag [@homeasssistant][instagram] on Instagram
|
||||
- Or via chat, drop us a line in the [#lounge at Discord][chat]
|
||||
|
||||
See you next edition!
|
||||
|
||||
[chat]: https://www.home-assistant.io/join-chat
|
||||
[facebook-group]: https://www.facebook.com/groups/HomeAssistant
|
||||
[instagram]: https://www.instagram.com/homeassistant
|
||||
[reddit]: https://www.reddit.com/r/homeassistant
|
||||
[twitter]: https://www.twitter.com/home_assistant
|
||||
[blueprints]: https://community.home-assistant.io/c/blueprints-exchange
|
||||
[community]: https://community.home-assistant.io
|
||||
[week_blueprint]: https://community.home-assistant.io/t/mute-media-player-when-on-phone-only-when-home/255221
|
@ -2,7 +2,7 @@
|
||||
#
|
||||
|
||||
# General use redirects
|
||||
/join-chat https://discord.gg/BzQNTqK
|
||||
/join-chat https://discord.gg/home-assistant
|
||||
/suggest-community-highlight https://docs.google.com/forms/d/e/1FAIpQLSd9VWPeVM0xg0swWL6kT3wkQUKt8vWsTL5WtPO95LAy-0cYZw/viewform
|
||||
/get-blueprints https://community.home-assistant.io/c/blueprints-exchange/53
|
||||
/latest-security-alert /blog/2021/01/23/security-disclosure2/
|
||||
|
BIN
source/images/blog/2021-05-07-community-highlights/browser.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
source/images/blog/2021-05-07-community-highlights/dashboard.jpg
Normal file
After Width: | Height: | Size: 87 KiB |
BIN
source/images/blog/2021-05-07-community-highlights/esphome.png
Normal file
After Width: | Height: | Size: 205 KiB |
BIN
source/images/blog/2021-05-07-community-highlights/keypad.jpg
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
source/images/blog/2021-05-07-community-highlights/social.png
Normal file
After Width: | Height: | Size: 223 KiB |
BIN
source/images/blog/2021-05-10-ios-20215/social.png
Normal file
After Width: | Height: | Size: 154 KiB |
BIN
source/images/blog/2021-05-14-community-highlights/shower.png
Normal file
After Width: | Height: | Size: 391 KiB |
BIN
source/images/blog/2021-05-14-community-highlights/social.png
Normal file
After Width: | Height: | Size: 283 KiB |
BIN
source/images/blog/2021-05-integrations-api/social.png
Normal file
After Width: | Height: | Size: 142 KiB |
BIN
source/images/blog/2021-05/integrations-dashboard.png
Normal file
After Width: | Height: | Size: 122 KiB |
BIN
source/images/blog/2021-05/rgbww-light.png
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
source/images/blog/2021-05/setup-time.png
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
source/images/blog/2021-05/social.png
Normal file
After Width: | Height: | Size: 146 KiB |
BIN
source/images/blog/2021-05/still-starting.png
Normal file
After Width: | Height: | Size: 5.0 KiB |
BIN
source/images/integrations/mqtt/hivemq-details.png
Normal file
After Width: | Height: | Size: 56 KiB |