Merge branch 'current' into next
4
.github/workflows/test.yml
vendored
@ -10,7 +10,7 @@ jobs:
|
||||
- name: Check out files from GitHub
|
||||
uses: actions/checkout@v2
|
||||
- name: Setting up Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v2.1.3
|
||||
uses: actions/setup-node@v2.1.4
|
||||
with:
|
||||
node-version: 12.x
|
||||
- name: Setup NPM cache
|
||||
@ -33,7 +33,7 @@ jobs:
|
||||
- name: Check out files from GitHub
|
||||
uses: actions/checkout@v2
|
||||
- name: Setting up Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v2.1.3
|
||||
uses: actions/setup-node@v2.1.4
|
||||
with:
|
||||
node-version: 12.x
|
||||
- name: Setup NPM cache
|
||||
|
6
Gemfile
@ -3,8 +3,8 @@ source 'https://rubygems.org'
|
||||
ruby '> 2.5.0'
|
||||
|
||||
group :development do
|
||||
gem 'rake', '13.0.1'
|
||||
gem 'jekyll', '4.1.1'
|
||||
gem 'rake', '13.0.3'
|
||||
gem 'jekyll', '4.2.0'
|
||||
gem 'compass', '1.0.3'
|
||||
gem 'sass-globbing', '1.1.5'
|
||||
gem 'stringex', '2.8.5'
|
||||
@ -15,7 +15,7 @@ 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.15.0'
|
||||
gem 'jekyll-toc', '0.16.1'
|
||||
end
|
||||
|
||||
gem 'sinatra', '2.1.0'
|
||||
|
28
Gemfile.lock
@ -3,7 +3,7 @@ GEM
|
||||
specs:
|
||||
addressable (2.7.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
chunky_png (1.3.14)
|
||||
chunky_png (1.3.15)
|
||||
colorator (1.1.0)
|
||||
commonmarker (0.21.0)
|
||||
ruby-enum (~> 0.5)
|
||||
@ -25,27 +25,27 @@ GEM
|
||||
http_parser.rb (~> 0.6.0)
|
||||
eventmachine (1.2.7)
|
||||
eventmachine (1.2.7-x64-mingw32)
|
||||
ffi (1.13.1)
|
||||
ffi (1.13.1-x64-mingw32)
|
||||
ffi (1.14.2)
|
||||
ffi (1.14.2-x64-mingw32)
|
||||
forwardable-extended (2.6.0)
|
||||
http_parser.rb (0.6.0)
|
||||
i18n (1.8.5)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (4.1.1)
|
||||
jekyll (4.2.0)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
em-websocket (~> 0.5)
|
||||
i18n (~> 1.0)
|
||||
jekyll-sass-converter (~> 2.0)
|
||||
jekyll-watch (~> 2.0)
|
||||
kramdown (~> 2.1)
|
||||
kramdown (~> 2.3)
|
||||
kramdown-parser-gfm (~> 1.0)
|
||||
liquid (~> 4.0)
|
||||
mercenary (~> 0.4.0)
|
||||
pathutil (~> 0.9)
|
||||
rouge (~> 3.0)
|
||||
safe_yaml (~> 1.0)
|
||||
terminal-table (~> 1.8)
|
||||
terminal-table (~> 2.0)
|
||||
jekyll-commonmark (1.3.1)
|
||||
commonmarker (~> 0.14)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
@ -56,7 +56,7 @@ GEM
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-time-to-read (0.1.2)
|
||||
jekyll
|
||||
jekyll-toc (0.15.0)
|
||||
jekyll-toc (0.16.1)
|
||||
jekyll (>= 3.8)
|
||||
nokogiri (~> 1.10)
|
||||
jekyll-watch (2.2.1)
|
||||
@ -84,7 +84,7 @@ GEM
|
||||
rack (2.2.3)
|
||||
rack-protection (2.1.0)
|
||||
rack
|
||||
rake (13.0.1)
|
||||
rake (13.0.3)
|
||||
rb-fsevent (0.10.4)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
@ -107,12 +107,12 @@ GEM
|
||||
rack-protection (= 2.1.0)
|
||||
tilt (~> 2.0)
|
||||
stringex (2.8.5)
|
||||
terminal-table (1.8.0)
|
||||
terminal-table (2.0.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
tilt (2.0.10)
|
||||
tzinfo (2.0.3)
|
||||
tzinfo (2.0.4)
|
||||
concurrent-ruby (~> 1.0)
|
||||
tzinfo-data (1.2020.4)
|
||||
tzinfo-data (1.2020.5)
|
||||
tzinfo (>= 1.0.0)
|
||||
unicode-display_width (1.7.0)
|
||||
|
||||
@ -122,14 +122,14 @@ PLATFORMS
|
||||
|
||||
DEPENDENCIES
|
||||
compass (= 1.0.3)
|
||||
jekyll (= 4.1.1)
|
||||
jekyll (= 4.2.0)
|
||||
jekyll-commonmark (= 1.3.1)
|
||||
jekyll-paginate (= 1.1.0)
|
||||
jekyll-sitemap (= 1.4.0)
|
||||
jekyll-time-to-read (= 0.1.2)
|
||||
jekyll-toc (= 0.15.0)
|
||||
jekyll-toc (= 0.16.1)
|
||||
nokogiri (= 1.10.10)
|
||||
rake (= 13.0.1)
|
||||
rake (= 13.0.3)
|
||||
sass-globbing (= 1.1.5)
|
||||
sinatra (= 2.1.0)
|
||||
stringex (= 2.8.5)
|
||||
|
@ -99,10 +99,10 @@ social:
|
||||
account: home_assistant
|
||||
|
||||
# Home Assistant release details
|
||||
current_major_version: 0
|
||||
current_minor_version: 118
|
||||
current_patch_version: 5
|
||||
date_released: 2020-12-05
|
||||
current_major_version: 2020
|
||||
current_minor_version: 12
|
||||
current_patch_version: 1
|
||||
date_released: 2020-12-16
|
||||
|
||||
# Either # or the anchor link to latest release notes in the blog post.
|
||||
# Must be prefixed with a # and have double quotes around it.
|
||||
|
551
package-lock.json
generated
@ -104,79 +104,79 @@
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/ast-tester": {
|
||||
"version": "2.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-2.2.4.tgz",
|
||||
"integrity": "sha512-676xpY3/+Xa+tPaiUPaD4sl//+p3xsnSPYLrQjSmHWXX78F3MwAWd/Lek+SCn4wwvf1tCIx0SPtjfOCa6ru8qw==",
|
||||
"version": "2.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-2.2.5.tgz",
|
||||
"integrity": "sha512-kKolF3xDI0G1sjM2HJE1EZAf407026b/wHC0FAdo9/FAipUTtAATKDnvjYeN++W1b5TxtIWRF5SbHppK7eRXGQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.3.4"
|
||||
"@textlint/ast-node-types": "^4.3.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.4.tgz",
|
||||
"integrity": "sha512-Grq+vJuNH7HCa278eFeiqJvowrD+onMCoG2ctLyoN+fXYIQGIr1/8fo8AcIg+VM16Kga+N6Y1UWNOWPd8j1nFg==",
|
||||
"version": "4.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.5.tgz",
|
||||
"integrity": "sha512-syl8VE34DQDTV7+IADP1jYtGsxTC9MmCKLmpJX90G6nNv9CzgAZIukd7WMiJFZpFgcDAlibEaCKlJRxjfEmmPA==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"@textlint/ast-traverse": {
|
||||
"version": "2.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-2.2.5.tgz",
|
||||
"integrity": "sha512-YduGVn7iaUYOfo7TwHO4b0K/qQpj61Ol/M884ck3vetNd0zBxpHO3GpQKW87SZGGtlsBa9v5Suz/yypnlPo3Og==",
|
||||
"version": "2.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-2.2.6.tgz",
|
||||
"integrity": "sha512-cpBF4UsbQ95oFU8gaGrkYar1H75ORvfRWN78dXneyinJFG1KBajXN9lLYhXhg+Z1Rn/9Ifw+SCjLZKnFmnwM0g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.3.4"
|
||||
"@textlint/ast-node-types": "^4.3.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.4.tgz",
|
||||
"integrity": "sha512-Grq+vJuNH7HCa278eFeiqJvowrD+onMCoG2ctLyoN+fXYIQGIr1/8fo8AcIg+VM16Kga+N6Y1UWNOWPd8j1nFg==",
|
||||
"version": "4.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.5.tgz",
|
||||
"integrity": "sha512-syl8VE34DQDTV7+IADP1jYtGsxTC9MmCKLmpJX90G6nNv9CzgAZIukd7WMiJFZpFgcDAlibEaCKlJRxjfEmmPA==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"@textlint/feature-flag": {
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-3.2.4.tgz",
|
||||
"integrity": "sha512-ABhbZ5rfkwa/kTBFxVmeMzE1flcnUjLJ5LTZvOaxH/pElfLLN1J4FEmAZTRCvXGAB498II6nkM2CqcikbKzh6A==",
|
||||
"version": "3.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-3.2.5.tgz",
|
||||
"integrity": "sha512-OePponYtxPGjNf6GBqioRaOr1m8LJZQLCj49LgoGZnolm9hmKq3QP1jEKGbzxsHCADL7YHoKZ6zxKGkicmsxPA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"map-like": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@textlint/fixer-formatter": {
|
||||
"version": "3.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-3.2.5.tgz",
|
||||
"integrity": "sha512-fh6XiLbX9WF8+79g20qb1I85k/Yc9+h7LRccmaLzTBjVQDNYxX5BtfvGsY0Vf5tBZKT2xFZH4eSLH/EWoL3weg==",
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-3.2.6.tgz",
|
||||
"integrity": "sha512-xVVEHcpUeBBFI7Ug4y/tGTRLf6XX9lsg/iLvk6cjWJhxnFsVOkSFJRrZFetIJnAKnhQmCAv/i+ybgnTHhas7pw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/module-interop": "^1.1.4",
|
||||
"@textlint/types": "^1.4.5",
|
||||
"@textlint/module-interop": "^1.1.5",
|
||||
"@textlint/types": "^1.4.6",
|
||||
"chalk": "^1.1.3",
|
||||
"debug": "^4.1.1",
|
||||
"diff": "^4.0.1",
|
||||
"debug": "^4.3.1",
|
||||
"diff": "^4.0.2",
|
||||
"is-file": "^1.0.0",
|
||||
"string-width": "^1.0.1",
|
||||
"string-width": "^1.0.2",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"text-table": "^0.2.0",
|
||||
"try-resolve": "^1.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.4.tgz",
|
||||
"integrity": "sha512-Grq+vJuNH7HCa278eFeiqJvowrD+onMCoG2ctLyoN+fXYIQGIr1/8fo8AcIg+VM16Kga+N6Y1UWNOWPd8j1nFg==",
|
||||
"version": "4.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.5.tgz",
|
||||
"integrity": "sha512-syl8VE34DQDTV7+IADP1jYtGsxTC9MmCKLmpJX90G6nNv9CzgAZIukd7WMiJFZpFgcDAlibEaCKlJRxjfEmmPA==",
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/types": {
|
||||
"version": "1.4.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.4.5.tgz",
|
||||
"integrity": "sha512-7pA1rdiw1jsDNGwxupMC6fPlRNAHY6fKZ3s+jAY53o6RroOSR+5qO0sAjJ26lsSOhveH8imZzyyD08dk58IVJQ==",
|
||||
"version": "1.4.6",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.4.6.tgz",
|
||||
"integrity": "sha512-hoKPvIzNf+vI0goRk90HfsVUbXkAp4BfpvRxh51TGqVG27dlYrQJZkYheuUNUAwyj0Id09qzVwXno/xQPMYPcg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.3.4"
|
||||
"@textlint/ast-node-types": "^4.3.5"
|
||||
}
|
||||
},
|
||||
"ansi-regex": {
|
||||
@ -215,6 +215,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
|
||||
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "2.1.2"
|
||||
}
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
|
||||
@ -255,78 +264,87 @@
|
||||
}
|
||||
},
|
||||
"@textlint/kernel": {
|
||||
"version": "3.3.6",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-3.3.6.tgz",
|
||||
"integrity": "sha512-M2ciQDAo5W6rpRADzGnMXyxhvJ+lnqYG9iHrqmfDQ2MA0VcolWuA37H67/UstqTs3NYaGC7RZkq9FAV//pl30w==",
|
||||
"version": "3.3.7",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-3.3.7.tgz",
|
||||
"integrity": "sha512-zLk78gCwiQIl0ElkzT8DVMOLJ5PCDWZnuRaYk7YkwmGpjJSoJcGSCqiRGhmmc4d7CCZ+AcoM0DQUSyrFzJjyMA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.3.4",
|
||||
"@textlint/ast-tester": "^2.2.4",
|
||||
"@textlint/ast-traverse": "^2.2.5",
|
||||
"@textlint/feature-flag": "^3.2.4",
|
||||
"@textlint/types": "^1.4.5",
|
||||
"@textlint/utils": "^1.1.4",
|
||||
"debug": "^4.1.1",
|
||||
"@textlint/ast-node-types": "^4.3.5",
|
||||
"@textlint/ast-tester": "^2.2.5",
|
||||
"@textlint/ast-traverse": "^2.2.6",
|
||||
"@textlint/feature-flag": "^3.2.5",
|
||||
"@textlint/types": "^1.4.6",
|
||||
"@textlint/utils": "^1.1.5",
|
||||
"debug": "^4.3.1",
|
||||
"deep-equal": "^1.1.1",
|
||||
"map-like": "^2.0.0",
|
||||
"structured-source": "^3.0.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.4.tgz",
|
||||
"integrity": "sha512-Grq+vJuNH7HCa278eFeiqJvowrD+onMCoG2ctLyoN+fXYIQGIr1/8fo8AcIg+VM16Kga+N6Y1UWNOWPd8j1nFg==",
|
||||
"version": "4.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.5.tgz",
|
||||
"integrity": "sha512-syl8VE34DQDTV7+IADP1jYtGsxTC9MmCKLmpJX90G6nNv9CzgAZIukd7WMiJFZpFgcDAlibEaCKlJRxjfEmmPA==",
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/types": {
|
||||
"version": "1.4.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.4.5.tgz",
|
||||
"integrity": "sha512-7pA1rdiw1jsDNGwxupMC6fPlRNAHY6fKZ3s+jAY53o6RroOSR+5qO0sAjJ26lsSOhveH8imZzyyD08dk58IVJQ==",
|
||||
"version": "1.4.6",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.4.6.tgz",
|
||||
"integrity": "sha512-hoKPvIzNf+vI0goRk90HfsVUbXkAp4BfpvRxh51TGqVG27dlYrQJZkYheuUNUAwyj0Id09qzVwXno/xQPMYPcg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.3.4"
|
||||
"@textlint/ast-node-types": "^4.3.5"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
|
||||
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "2.1.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@textlint/linter-formatter": {
|
||||
"version": "3.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-3.2.5.tgz",
|
||||
"integrity": "sha512-oy5RcBWrC2d7r0Mjw/FBH8cvQuOaCB5PeOPG0Pp44Yr5JbIGLXfh84umHQOTCmxfRxw3ccnUfA9wjbxuL8rWOQ==",
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-3.2.6.tgz",
|
||||
"integrity": "sha512-39R2PAKRDqq8p6jQj3u9ERUzrrhK33BnHK622oegaXzPeaBLjN2brBXsxnBpNJFPUW2L9BDmJcBd92E/ajLTGg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@azu/format-text": "^1.0.1",
|
||||
"@azu/style-format": "^1.0.0",
|
||||
"@textlint/module-interop": "^1.1.4",
|
||||
"@textlint/types": "^1.4.5",
|
||||
"chalk": "^1.0.0",
|
||||
"concat-stream": "^1.5.1",
|
||||
"debug": "^4.1.1",
|
||||
"@textlint/module-interop": "^1.1.5",
|
||||
"@textlint/types": "^1.4.6",
|
||||
"chalk": "^1.1.3",
|
||||
"concat-stream": "^1.6.2",
|
||||
"debug": "^4.3.1",
|
||||
"is-file": "^1.0.0",
|
||||
"js-yaml": "^3.2.4",
|
||||
"optionator": "^0.8.1",
|
||||
"js-yaml": "^3.14.1",
|
||||
"optionator": "^0.9.1",
|
||||
"pluralize": "^2.0.0",
|
||||
"string-width": "^1.0.1",
|
||||
"string-width": "^1.0.2",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"table": "^3.7.8",
|
||||
"table": "^3.8.3",
|
||||
"text-table": "^0.2.0",
|
||||
"try-resolve": "^1.0.1",
|
||||
"xml-escape": "^1.0.0"
|
||||
"xml-escape": "^1.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.4.tgz",
|
||||
"integrity": "sha512-Grq+vJuNH7HCa278eFeiqJvowrD+onMCoG2ctLyoN+fXYIQGIr1/8fo8AcIg+VM16Kga+N6Y1UWNOWPd8j1nFg==",
|
||||
"version": "4.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.5.tgz",
|
||||
"integrity": "sha512-syl8VE34DQDTV7+IADP1jYtGsxTC9MmCKLmpJX90G6nNv9CzgAZIukd7WMiJFZpFgcDAlibEaCKlJRxjfEmmPA==",
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/types": {
|
||||
"version": "1.4.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.4.5.tgz",
|
||||
"integrity": "sha512-7pA1rdiw1jsDNGwxupMC6fPlRNAHY6fKZ3s+jAY53o6RroOSR+5qO0sAjJ26lsSOhveH8imZzyyD08dk58IVJQ==",
|
||||
"version": "1.4.6",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.4.6.tgz",
|
||||
"integrity": "sha512-hoKPvIzNf+vI0goRk90HfsVUbXkAp4BfpvRxh51TGqVG27dlYrQJZkYheuUNUAwyj0Id09qzVwXno/xQPMYPcg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.3.4"
|
||||
"@textlint/ast-node-types": "^4.3.5"
|
||||
}
|
||||
},
|
||||
"ansi-regex": {
|
||||
@ -377,6 +395,15 @@
|
||||
"typedarray": "^0.0.6"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
|
||||
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "2.1.2"
|
||||
}
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
|
||||
@ -386,6 +413,16 @@
|
||||
"number-is-nan": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"js-yaml": {
|
||||
"version": "3.14.1",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
|
||||
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"argparse": "^1.0.7",
|
||||
"esprima": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "2.3.7",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
|
||||
@ -441,26 +478,35 @@
|
||||
}
|
||||
},
|
||||
"@textlint/markdown-to-ast": {
|
||||
"version": "6.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-6.2.5.tgz",
|
||||
"integrity": "sha512-9vlQbylGjnnRGev3yt9ntNy6I9FQH3p+MkbijybKnwobK/msoAX9sThDHOMbGM24PsUHxcDjktDlj2vHN/pwDA==",
|
||||
"version": "6.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-6.2.6.tgz",
|
||||
"integrity": "sha512-TjZTMGYla9Nznegy0r23EEzNMfWva0oksj+48aqMlbQ+UvBA5vdEC0VzCO3l0Z137RgEJ+glInbvEilo2zcjZg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.3.4",
|
||||
"debug": "^4.1.1",
|
||||
"remark-frontmatter": "^1.2.0",
|
||||
"@textlint/ast-node-types": "^4.3.5",
|
||||
"debug": "^4.3.1",
|
||||
"remark-frontmatter": "^1.3.3",
|
||||
"remark-parse": "^5.0.0",
|
||||
"structured-source": "^3.0.2",
|
||||
"traverse": "^0.6.6",
|
||||
"unified": "^6.1.6"
|
||||
"unified": "^6.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.4.tgz",
|
||||
"integrity": "sha512-Grq+vJuNH7HCa278eFeiqJvowrD+onMCoG2ctLyoN+fXYIQGIr1/8fo8AcIg+VM16Kga+N6Y1UWNOWPd8j1nFg==",
|
||||
"version": "4.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.5.tgz",
|
||||
"integrity": "sha512-syl8VE34DQDTV7+IADP1jYtGsxTC9MmCKLmpJX90G6nNv9CzgAZIukd7WMiJFZpFgcDAlibEaCKlJRxjfEmmPA==",
|
||||
"dev": true
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
|
||||
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "2.1.2"
|
||||
}
|
||||
},
|
||||
"is-buffer": {
|
||||
"version": "1.1.6",
|
||||
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
|
||||
@ -550,44 +596,44 @@
|
||||
}
|
||||
},
|
||||
"@textlint/module-interop": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-1.1.4.tgz",
|
||||
"integrity": "sha512-9M3kYG5nBoD2lhp05sqi6fieNU6rBcf+A8Trp+4d8o5uJ4RRsWeRtAQMWM7Tv15onqIITRq7fm3la7xovVB9KA==",
|
||||
"version": "1.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-1.1.5.tgz",
|
||||
"integrity": "sha512-YXz4qV6thEuwNfamHFhRsebZM7FWe1x3fD7XAqPxE8J+HLQea3Y0i52hU/rTQvt85omYq+37g3YtqjX60mYjog==",
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/text-to-ast": {
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-3.2.4.tgz",
|
||||
"integrity": "sha512-uIiNg52OdQ3Fn8aOYaV7BLW2QakNsmf4doypIwrW4q+gHYQ3jxdPHHkq6RxuYoO112vO40M3zmAoEZmM1qmPhw==",
|
||||
"version": "3.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-3.2.5.tgz",
|
||||
"integrity": "sha512-1B43L9tVr2b6Qm37KsdI8dbutL8b5AN95PFGzPpxaJbShz8TjVUFQ5bxPrnKGc7wV5MFpazf+/UVjZx6JtUbMA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.3.4"
|
||||
"@textlint/ast-node-types": "^4.3.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.4.tgz",
|
||||
"integrity": "sha512-Grq+vJuNH7HCa278eFeiqJvowrD+onMCoG2ctLyoN+fXYIQGIr1/8fo8AcIg+VM16Kga+N6Y1UWNOWPd8j1nFg==",
|
||||
"version": "4.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.5.tgz",
|
||||
"integrity": "sha512-syl8VE34DQDTV7+IADP1jYtGsxTC9MmCKLmpJX90G6nNv9CzgAZIukd7WMiJFZpFgcDAlibEaCKlJRxjfEmmPA==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"@textlint/textlint-plugin-markdown": {
|
||||
"version": "5.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.2.6.tgz",
|
||||
"integrity": "sha512-S65wy2npaBLT7pwPPlrN9Pw40hOJsxiW+T6peMJOFEMLRem5qlCIlT+02Wlf0Rrtr6/gKDckpphTUiZT1+xRnQ==",
|
||||
"version": "5.2.7",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.2.7.tgz",
|
||||
"integrity": "sha512-GKx79nbsLwvDdyv98wnX2BSF83MKTM5j09OFJp2+wi2qrWO3U0+7YMILfdHDqyPfUk+osuy65BAFeq5jlXPomQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/markdown-to-ast": "^6.2.5"
|
||||
"@textlint/markdown-to-ast": "^6.2.6"
|
||||
}
|
||||
},
|
||||
"@textlint/textlint-plugin-text": {
|
||||
"version": "4.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.2.6.tgz",
|
||||
"integrity": "sha512-KCgb5GVjoEDIi37UpQN6kFciiouyATNYrj/JufCeLNJEcVcxSm12EoFRKjpXpXmTOVqZUyGnIDU797z1usAZDw==",
|
||||
"version": "4.2.7",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.2.7.tgz",
|
||||
"integrity": "sha512-uMoASP8kIJrMqMJCXePvKSh0tOEuiQS9vFjH+kq2kS8/+Po6Wwgma9IdJsLWuSI8H4ufcvbozREuY+DceQAp/w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/text-to-ast": "^3.2.4"
|
||||
"@textlint/text-to-ast": "^3.2.5"
|
||||
}
|
||||
},
|
||||
"@textlint/types": {
|
||||
@ -600,9 +646,9 @@
|
||||
}
|
||||
},
|
||||
"@textlint/utils": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-1.1.4.tgz",
|
||||
"integrity": "sha512-KmU+kGi7vG5toUhNdLHHPxyVN1mNGcjMVe1tNDEXT1wU/3oqA96bunElrROWHYw5iNt1QVRaIAtNeMVyzyAdVA==",
|
||||
"version": "1.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-1.1.5.tgz",
|
||||
"integrity": "sha512-wv1m6yyaQpt1QrGKIUYwMoL5LLhDhXk05+pXg3i0+8PC8X95jNin10fSkxRMyXOsEqB6481GR3XgQ8Ia7DO1tg==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/mdast": {
|
||||
@ -727,6 +773,16 @@
|
||||
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
|
||||
"dev": true
|
||||
},
|
||||
"call-bind": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz",
|
||||
"integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"function-bind": "^1.1.1",
|
||||
"get-intrinsic": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"camelcase": {
|
||||
"version": "5.3.1",
|
||||
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
|
||||
@ -796,9 +852,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"collapse-white-space": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.5.tgz",
|
||||
"integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==",
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz",
|
||||
"integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==",
|
||||
"dev": true
|
||||
},
|
||||
"color-convert": {
|
||||
@ -906,20 +962,20 @@
|
||||
}
|
||||
},
|
||||
"es-abstract": {
|
||||
"version": "1.17.6",
|
||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
|
||||
"integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
|
||||
"version": "1.17.7",
|
||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
|
||||
"integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"es-to-primitive": "^1.2.1",
|
||||
"function-bind": "^1.1.1",
|
||||
"has": "^1.0.3",
|
||||
"has-symbols": "^1.0.1",
|
||||
"is-callable": "^1.2.0",
|
||||
"is-regex": "^1.1.0",
|
||||
"object-inspect": "^1.7.0",
|
||||
"is-callable": "^1.2.2",
|
||||
"is-regex": "^1.1.1",
|
||||
"object-inspect": "^1.8.0",
|
||||
"object-keys": "^1.1.1",
|
||||
"object.assign": "^4.1.0",
|
||||
"object.assign": "^4.1.1",
|
||||
"string.prototype.trimend": "^1.0.1",
|
||||
"string.prototype.trimstart": "^1.0.1"
|
||||
}
|
||||
@ -1052,6 +1108,17 @@
|
||||
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
|
||||
"dev": true
|
||||
},
|
||||
"get-intrinsic": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz",
|
||||
"integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"function-bind": "^1.1.1",
|
||||
"has": "^1.0.3",
|
||||
"has-symbols": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"get-stdin": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
|
||||
@ -1176,10 +1243,13 @@
|
||||
}
|
||||
},
|
||||
"is-arguments": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
|
||||
"integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
|
||||
"dev": true
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz",
|
||||
"integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"call-bind": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"is-arrayish": {
|
||||
"version": "0.2.1",
|
||||
@ -1203,11 +1273,20 @@
|
||||
"dev": true
|
||||
},
|
||||
"is-callable": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
|
||||
"integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
|
||||
"integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==",
|
||||
"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==",
|
||||
"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",
|
||||
@ -1272,9 +1351,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"is-regex": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
|
||||
"integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
|
||||
"integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"has-symbols": "^1.0.1"
|
||||
@ -1296,15 +1375,15 @@
|
||||
"dev": true
|
||||
},
|
||||
"is-whitespace-character": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz",
|
||||
"integrity": "sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ==",
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz",
|
||||
"integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==",
|
||||
"dev": true
|
||||
},
|
||||
"is-word-character": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.3.tgz",
|
||||
"integrity": "sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A==",
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz",
|
||||
"integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==",
|
||||
"dev": true
|
||||
},
|
||||
"isarray": {
|
||||
@ -1366,13 +1445,13 @@
|
||||
"dev": true
|
||||
},
|
||||
"levn": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
|
||||
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
|
||||
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"prelude-ls": "~1.1.2",
|
||||
"type-check": "~0.3.2"
|
||||
"prelude-ls": "^1.2.1",
|
||||
"type-check": "~0.4.0"
|
||||
}
|
||||
},
|
||||
"libnpmconfig": {
|
||||
@ -1540,9 +1619,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"markdown-escapes": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz",
|
||||
"integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==",
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz",
|
||||
"integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==",
|
||||
"dev": true
|
||||
},
|
||||
"markdown-extensions": {
|
||||
@ -1552,14 +1631,14 @@
|
||||
"dev": true
|
||||
},
|
||||
"md5": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz",
|
||||
"integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
|
||||
"integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"charenc": "~0.0.1",
|
||||
"crypt": "~0.0.1",
|
||||
"is-buffer": "~1.1.1"
|
||||
"charenc": "0.0.2",
|
||||
"crypt": "0.0.2",
|
||||
"is-buffer": "~1.1.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"is-buffer": {
|
||||
@ -1751,19 +1830,19 @@
|
||||
"dev": true
|
||||
},
|
||||
"object-inspect": {
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
|
||||
"integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
|
||||
"version": "1.9.0",
|
||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz",
|
||||
"integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==",
|
||||
"dev": true
|
||||
},
|
||||
"object-is": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz",
|
||||
"integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==",
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz",
|
||||
"integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"define-properties": "^1.1.3",
|
||||
"es-abstract": "^1.17.5"
|
||||
"call-bind": "^1.0.0",
|
||||
"define-properties": "^1.1.3"
|
||||
}
|
||||
},
|
||||
"object-keys": {
|
||||
@ -1773,15 +1852,15 @@
|
||||
"dev": true
|
||||
},
|
||||
"object.assign": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
|
||||
"integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
|
||||
"integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"define-properties": "^1.1.2",
|
||||
"function-bind": "^1.1.1",
|
||||
"has-symbols": "^1.0.0",
|
||||
"object-keys": "^1.0.11"
|
||||
"call-bind": "^1.0.0",
|
||||
"define-properties": "^1.1.3",
|
||||
"has-symbols": "^1.0.1",
|
||||
"object-keys": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"once": {
|
||||
@ -1794,17 +1873,17 @@
|
||||
}
|
||||
},
|
||||
"optionator": {
|
||||
"version": "0.8.3",
|
||||
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
|
||||
"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
|
||||
"version": "0.9.1",
|
||||
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
|
||||
"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"deep-is": "~0.1.3",
|
||||
"fast-levenshtein": "~2.0.6",
|
||||
"levn": "~0.3.0",
|
||||
"prelude-ls": "~1.1.2",
|
||||
"type-check": "~0.3.2",
|
||||
"word-wrap": "~1.2.3"
|
||||
"deep-is": "^0.1.3",
|
||||
"fast-levenshtein": "^2.0.6",
|
||||
"levn": "^0.4.1",
|
||||
"prelude-ls": "^1.2.1",
|
||||
"type-check": "^0.4.0",
|
||||
"word-wrap": "^1.2.3"
|
||||
}
|
||||
},
|
||||
"p-limit": {
|
||||
@ -1923,9 +2002,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"prelude-ls": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
|
||||
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
|
||||
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
|
||||
"dev": true
|
||||
},
|
||||
"process-nextick-args": {
|
||||
@ -2222,11 +2301,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"resolve": {
|
||||
"version": "1.17.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
|
||||
"integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
|
||||
"version": "1.19.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz",
|
||||
"integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-core-module": "^2.1.0",
|
||||
"path-parse": "^1.0.6"
|
||||
}
|
||||
},
|
||||
@ -2296,9 +2376,9 @@
|
||||
}
|
||||
},
|
||||
"spdx-license-ids": {
|
||||
"version": "3.0.5",
|
||||
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
|
||||
"integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
|
||||
"version": "3.0.7",
|
||||
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
|
||||
"integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==",
|
||||
"dev": true
|
||||
},
|
||||
"sprintf-js": {
|
||||
@ -2308,9 +2388,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"state-toggle": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.2.tgz",
|
||||
"integrity": "sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw==",
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz",
|
||||
"integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==",
|
||||
"dev": true
|
||||
},
|
||||
"string-width": {
|
||||
@ -2325,23 +2405,23 @@
|
||||
}
|
||||
},
|
||||
"string.prototype.trimend": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
|
||||
"integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz",
|
||||
"integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"define-properties": "^1.1.3",
|
||||
"es-abstract": "^1.17.5"
|
||||
"call-bind": "^1.0.0",
|
||||
"define-properties": "^1.1.3"
|
||||
}
|
||||
},
|
||||
"string.prototype.trimstart": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
|
||||
"integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz",
|
||||
"integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"define-properties": "^1.1.3",
|
||||
"es-abstract": "^1.17.5"
|
||||
"call-bind": "^1.0.0",
|
||||
"define-properties": "^1.1.3"
|
||||
}
|
||||
},
|
||||
"string_decoder": {
|
||||
@ -2493,33 +2573,33 @@
|
||||
"dev": true
|
||||
},
|
||||
"textlint": {
|
||||
"version": "11.7.6",
|
||||
"resolved": "https://registry.npmjs.org/textlint/-/textlint-11.7.6.tgz",
|
||||
"integrity": "sha512-o9nhbylWjOErba1gq2bMoJzughp9JK2VbENR+NCiMsNNEiaJ1P8jbnrL3ES86D6e0QMxziR79w5l7VmmdmLjCw==",
|
||||
"version": "11.7.7",
|
||||
"resolved": "https://registry.npmjs.org/textlint/-/textlint-11.7.7.tgz",
|
||||
"integrity": "sha512-YSF2xLyvX5odEb142kqU2x0oUmL6yj4+mDolKb+ul5y7/HKEUgjq2G4GwkEtIOij1B52mbvS+MApI4Fx5VhhMA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.3.4",
|
||||
"@textlint/ast-traverse": "^2.2.5",
|
||||
"@textlint/feature-flag": "^3.2.4",
|
||||
"@textlint/fixer-formatter": "^3.2.5",
|
||||
"@textlint/kernel": "^3.3.6",
|
||||
"@textlint/linter-formatter": "^3.2.5",
|
||||
"@textlint/module-interop": "^1.1.4",
|
||||
"@textlint/textlint-plugin-markdown": "^5.2.6",
|
||||
"@textlint/textlint-plugin-text": "^4.2.6",
|
||||
"@textlint/types": "^1.4.5",
|
||||
"@textlint/utils": "^1.1.4",
|
||||
"debug": "^4.1.1",
|
||||
"deep-equal": "^1.1.0",
|
||||
"@textlint/ast-node-types": "^4.3.5",
|
||||
"@textlint/ast-traverse": "^2.2.6",
|
||||
"@textlint/feature-flag": "^3.2.5",
|
||||
"@textlint/fixer-formatter": "^3.2.6",
|
||||
"@textlint/kernel": "^3.3.7",
|
||||
"@textlint/linter-formatter": "^3.2.6",
|
||||
"@textlint/module-interop": "^1.1.5",
|
||||
"@textlint/textlint-plugin-markdown": "^5.2.7",
|
||||
"@textlint/textlint-plugin-text": "^4.2.7",
|
||||
"@textlint/types": "^1.4.6",
|
||||
"@textlint/utils": "^1.1.5",
|
||||
"debug": "^4.3.1",
|
||||
"deep-equal": "^1.1.1",
|
||||
"file-entry-cache": "^5.0.1",
|
||||
"get-stdin": "^5.0.1",
|
||||
"glob": "^7.1.3",
|
||||
"glob": "^7.1.6",
|
||||
"is-file": "^1.0.0",
|
||||
"log-symbols": "^1.0.2",
|
||||
"map-like": "^2.0.0",
|
||||
"md5": "^2.2.1",
|
||||
"md5": "^2.3.0",
|
||||
"mkdirp": "^0.5.0",
|
||||
"optionator": "^0.8.0",
|
||||
"optionator": "^0.9.1",
|
||||
"path-to-glob-pattern": "^1.0.2",
|
||||
"rc-config-loader": "^3.0.0",
|
||||
"read-pkg": "^1.1.0",
|
||||
@ -2530,18 +2610,41 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@textlint/ast-node-types": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.4.tgz",
|
||||
"integrity": "sha512-Grq+vJuNH7HCa278eFeiqJvowrD+onMCoG2ctLyoN+fXYIQGIr1/8fo8AcIg+VM16Kga+N6Y1UWNOWPd8j1nFg==",
|
||||
"version": "4.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.3.5.tgz",
|
||||
"integrity": "sha512-syl8VE34DQDTV7+IADP1jYtGsxTC9MmCKLmpJX90G6nNv9CzgAZIukd7WMiJFZpFgcDAlibEaCKlJRxjfEmmPA==",
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/types": {
|
||||
"version": "1.4.5",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.4.5.tgz",
|
||||
"integrity": "sha512-7pA1rdiw1jsDNGwxupMC6fPlRNAHY6fKZ3s+jAY53o6RroOSR+5qO0sAjJ26lsSOhveH8imZzyyD08dk58IVJQ==",
|
||||
"version": "1.4.6",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.4.6.tgz",
|
||||
"integrity": "sha512-hoKPvIzNf+vI0goRk90HfsVUbXkAp4BfpvRxh51TGqVG27dlYrQJZkYheuUNUAwyj0Id09qzVwXno/xQPMYPcg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.3.4"
|
||||
"@textlint/ast-node-types": "^4.3.5"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
|
||||
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "2.1.2"
|
||||
}
|
||||
},
|
||||
"glob": {
|
||||
"version": "7.1.6",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
||||
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fs.realpath": "^1.0.0",
|
||||
"inflight": "^1.0.4",
|
||||
"inherits": "2",
|
||||
"minimatch": "^3.0.4",
|
||||
"once": "^1.3.0",
|
||||
"path-is-absolute": "^1.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2628,9 +2731,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"trim-trailing-lines": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz",
|
||||
"integrity": "sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q==",
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz",
|
||||
"integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==",
|
||||
"dev": true
|
||||
},
|
||||
"trough": {
|
||||
@ -2646,12 +2749,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"type-check": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
|
||||
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
|
||||
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"prelude-ls": "~1.1.2"
|
||||
"prelude-ls": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"typedarray": {
|
||||
@ -2661,13 +2764,13 @@
|
||||
"dev": true
|
||||
},
|
||||
"unherit": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.2.tgz",
|
||||
"integrity": "sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w==",
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz",
|
||||
"integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"inherits": "^2.0.1",
|
||||
"xtend": "^4.0.1"
|
||||
"inherits": "^2.0.0",
|
||||
"xtend": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"unified": {
|
||||
|
@ -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.7.6",
|
||||
"textlint": "^11.7.7",
|
||||
"textlint-rule-common-misspellings": "^1.0.1",
|
||||
"textlint-rule-terminology": "^2.1.4"
|
||||
},
|
||||
|
45
plugins/details.rb
Normal file
@ -0,0 +1,45 @@
|
||||
module Jekyll
|
||||
class DetailsBlock < Liquid::Block
|
||||
|
||||
def render_details_block(vars:, converter:, classes: nil, parent_type: nil)
|
||||
result = Array.new
|
||||
result << vars.map do |entry|
|
||||
markup = Array.new
|
||||
markup << "<div class='details-block-item' onclick='showDetails(this)'>"
|
||||
markup << "<div class='details-block-title'>#{entry['title']}"
|
||||
markup << '<svg id="down" style="display: block;" width="24" height="24" viewBox="0 0 24 24"><path d="M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z" /></svg>'
|
||||
markup << '<svg id="up" style="display: none;" width="24" height="24" viewBox="0 0 24 24"><path d="M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z" /></svg>'
|
||||
markup << "</div>"
|
||||
markup << "<div class='details-block-content' hidden onclick>#{converter.convert(entry['content'].to_s)}</div>"
|
||||
markup << "</div>"
|
||||
end
|
||||
result.join
|
||||
end
|
||||
|
||||
def render(context)
|
||||
contents = super(context)
|
||||
vars = SafeYAML.load(contents)
|
||||
|
||||
site = context.registers[:site]
|
||||
converter = site.find_converter_instance(::Jekyll::Converters::Markdown)
|
||||
|
||||
<<~MARKUP
|
||||
<script>
|
||||
function showDetails(el) {
|
||||
const content = el.querySelector(".details-block-content");
|
||||
const up = el.querySelector(".details-block-title").querySelector("svg#up");
|
||||
const down = el.querySelector(".details-block-title").querySelector("svg#down");
|
||||
up.style.display = up.style.display === "none" ? "block" : "none";
|
||||
down.style.display = down.style.display === "none" ? "block" : "none";
|
||||
content.hidden = !content.hidden;
|
||||
}
|
||||
</script>
|
||||
<div class="details-block">
|
||||
#{render_details_block(vars: vars, converter: converter)}
|
||||
</div>
|
||||
MARKUP
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Liquid::Template.register_tag('details', Jekyll::DetailsBlock)
|
998
sass/custom/_blue.scss
Normal file
@ -0,0 +1,998 @@
|
||||
$blue__deep_color: #161d61;
|
||||
$blue__light_color: #18abfd;
|
||||
$ha__primary_color: #03a9f4;
|
||||
|
||||
#blue {
|
||||
$blue__hero_height: 670px;
|
||||
font-family: Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
.site-header {
|
||||
.grid-wrapper {
|
||||
max-width: 1100px !important;
|
||||
padding: 0 25px !important;
|
||||
}
|
||||
}
|
||||
.grid-wrapper {
|
||||
max-width: 1500px;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.page-content {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
.banner {
|
||||
height: $blue__hero_height;
|
||||
margin-bottom: 16px;
|
||||
margin-top: -42px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
.title {
|
||||
position: relative;
|
||||
width: 550px;
|
||||
height: 168px;
|
||||
left: calc(50% - 550px / 2 - 0.5px);
|
||||
font-weight: 900;
|
||||
font-size: 68px;
|
||||
line-height: 55px;
|
||||
text-align: center;
|
||||
color: #ffffff;
|
||||
bottom: 226px;
|
||||
svg {
|
||||
stroke: $ha__primary_color;
|
||||
}
|
||||
}
|
||||
img {
|
||||
width: 100%;
|
||||
object-fit: cover;
|
||||
object-position: bottom;
|
||||
border-radius: 0;
|
||||
border: 0;
|
||||
height: $blue__hero_height;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
.content {
|
||||
max-width: 1000px;
|
||||
margin: auto;
|
||||
|
||||
.sub-title {
|
||||
font-weight: bold;
|
||||
font-size: 42px;
|
||||
line-height: 49px;
|
||||
margin: 32px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.missing-piece {
|
||||
z-index: 2;
|
||||
position: relative;
|
||||
display: flex;
|
||||
width: 600px;
|
||||
border-radius: 8px;
|
||||
margin: -36px auto 0;
|
||||
|
||||
.missing-piece-header {
|
||||
font-weight: 900;
|
||||
font-size: 24px;
|
||||
line-height: 28px;
|
||||
}
|
||||
|
||||
.missing-piece-content {
|
||||
font-size: 16px;
|
||||
line-height: 19px;
|
||||
margin-top: 16px;
|
||||
width: 420px;
|
||||
}
|
||||
|
||||
.missing-piece-overlay {
|
||||
width: 210px;
|
||||
border-radius: 8px;
|
||||
margin: -50px -50px 0 0;
|
||||
padding: 22px;
|
||||
display: flex;
|
||||
flex-flow: wrap;
|
||||
justify-content: space-between;
|
||||
|
||||
.missing-piece-overlay-header {
|
||||
font-weight: 500;
|
||||
font-size: 12px;
|
||||
line-height: 14px;
|
||||
letter-spacing: 0.1em;
|
||||
color: #0c0c0c;
|
||||
opacity: 0.33;
|
||||
width: 100%;
|
||||
text-align: right;
|
||||
}
|
||||
.missing-piece-overlay-price {
|
||||
width: calc(100% - 6px);
|
||||
text-align: right;
|
||||
font-weight: 900;
|
||||
font-size: 24px;
|
||||
line-height: 28px;
|
||||
color: #0c0c0c;
|
||||
display: inline-flex;
|
||||
justify-content: flex-end;
|
||||
|
||||
div {
|
||||
width: 6px;
|
||||
margin-top: 2px;
|
||||
font-size: 12px;
|
||||
line-height: 14px;
|
||||
color: #0c0c0c;
|
||||
opacity: 0.4;
|
||||
}
|
||||
}
|
||||
|
||||
.missing-piece-overlay-images {
|
||||
display: grid;
|
||||
grid-template-columns: 47px 47px 47px;
|
||||
grid-template-rows: 47px 47px;
|
||||
grid-auto-flow: row;
|
||||
gap: 2px;
|
||||
|
||||
.img-container {
|
||||
border: 1px solid #e9e9e9;
|
||||
box-sizing: border-box;
|
||||
border-radius: 4px;
|
||||
height: 47px;
|
||||
width: 47px;
|
||||
display: flex;
|
||||
|
||||
img {
|
||||
margin: auto;
|
||||
box-shadow: none;
|
||||
border-radius: 0;
|
||||
border: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.img-container:first-of-type {
|
||||
grid-column: 1 / span 2;
|
||||
grid-row: 1 / span 2;
|
||||
height: 96px;
|
||||
width: 96px;
|
||||
}
|
||||
}
|
||||
.missing-piece-overlay-button {
|
||||
background-color: $ha__primary_color;
|
||||
margin-top: 12px;
|
||||
border-radius: 4px;
|
||||
width: 154px;
|
||||
height: 46px;
|
||||
display: flex;
|
||||
cursor: pointer;
|
||||
|
||||
div {
|
||||
margin: auto;
|
||||
font-weight: 900;
|
||||
font-size: 18px;
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.missing-piece-disclaimer {
|
||||
font-size: 12px;
|
||||
line-height: 14px;
|
||||
color: #0c0c0c;
|
||||
opacity: 0.4;
|
||||
text-align: center;
|
||||
margin: 12px auto 50px;
|
||||
}
|
||||
|
||||
.bullet-points {
|
||||
margin: 24px 136px;
|
||||
display: grid;
|
||||
gap: 32px;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
.item {
|
||||
display: grid;
|
||||
text-align: center;
|
||||
span:nth-of-type(1) {
|
||||
color: rgba(0, 0, 0, 0.87);
|
||||
font-size: 24px;
|
||||
font-weight: 300;
|
||||
letter-spacing: 0.1em;
|
||||
line-height: 28px;
|
||||
opacity: 0.66;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
span:nth-of-type(2) {
|
||||
color: rgba(0, 0, 0, 0.87);
|
||||
font-size: 48px;
|
||||
letter-spacing: -2px;
|
||||
line-height: 56px;
|
||||
}
|
||||
span:nth-of-type(3) {
|
||||
color: rgba(0, 0, 0, 0.87);
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
letter-spacing: -1px;
|
||||
line-height: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.vision {
|
||||
position: sticky;
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
margin-bottom: 160px;
|
||||
|
||||
svg {
|
||||
z-index: 0;
|
||||
width: 100vw;
|
||||
margin-left: calc(-100vw / 2);
|
||||
position: absolute;
|
||||
|
||||
path {
|
||||
z-index: 0;
|
||||
}
|
||||
}
|
||||
.vision-content {
|
||||
z-index: 1;
|
||||
position: relative;
|
||||
|
||||
.vision-header {
|
||||
margin-top: 172px;
|
||||
font-weight: 900;
|
||||
font-size: 68px;
|
||||
line-height: 80px;
|
||||
color: $blue__deep_color;
|
||||
}
|
||||
.vision-statement {
|
||||
font-size: 18px;
|
||||
line-height: 21px;
|
||||
}
|
||||
|
||||
.vision-blocks {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-flow: wrap;
|
||||
justify-content: space-between;
|
||||
|
||||
.vision-block {
|
||||
width: 335px;
|
||||
margin: 62px;
|
||||
|
||||
.vision-block-title {
|
||||
text-transform: uppercase;
|
||||
color: $blue__deep_color;
|
||||
letter-spacing: -2px;
|
||||
font-size: 48px;
|
||||
line-height: 56px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.vision-block-content {
|
||||
font-size: 18px;
|
||||
line-height: 133%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.mood {
|
||||
text-align: center;
|
||||
margin-bottom: 32px;
|
||||
margin-bottom: 80px;
|
||||
|
||||
.mood-cards {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin: 0 150px;
|
||||
width: calc(100% - 300px);
|
||||
position: relative;
|
||||
|
||||
.material-card {
|
||||
display: block;
|
||||
align-items: initial;
|
||||
width: 300px;
|
||||
z-index: 1;
|
||||
|
||||
img {
|
||||
box-shadow: none;
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.mood-card-type {
|
||||
width: 60px;
|
||||
text-align: start;
|
||||
font-weight: bold;
|
||||
font-size: 32px;
|
||||
line-height: 32px;
|
||||
|
||||
.mode {
|
||||
margin-top: -8px;
|
||||
font-weight: normal;
|
||||
font-size: 15px;
|
||||
text-align: justify;
|
||||
letter-spacing: 6px;
|
||||
}
|
||||
}
|
||||
|
||||
.mood-card-footer {
|
||||
display: flex;
|
||||
|
||||
.specifications {
|
||||
display: grid;
|
||||
height: 60px;
|
||||
margin-top: 16px;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
justify-items: left;
|
||||
align-items: self-end;
|
||||
flex-wrap: wrap;
|
||||
width: calc(100% - 75px);
|
||||
|
||||
.spec-item {
|
||||
height: 30px;
|
||||
font-size: 11px;
|
||||
display: inline-grid;
|
||||
line-height: 15px;
|
||||
justify-items: left;
|
||||
|
||||
span:first-of-type {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
.outline {
|
||||
display: flex;
|
||||
place-self: flex-end;
|
||||
color: #c4c4c4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mood-separator {
|
||||
z-index: 0;
|
||||
display: grid;
|
||||
height: 120px;
|
||||
width: 120px;
|
||||
align-content: center;
|
||||
justify-content: center;
|
||||
border-radius: 188px;
|
||||
border: 1px dashed #c4c4c4;
|
||||
margin: 0 -40px;
|
||||
padding: 120px;
|
||||
|
||||
span {
|
||||
display: block;
|
||||
width: inherit;
|
||||
}
|
||||
|
||||
span:first-of-type {
|
||||
color: $ha__primary_color;
|
||||
font-weight: bold;
|
||||
font-size: 16px;
|
||||
line-height: 15px;
|
||||
}
|
||||
|
||||
span:last-of-type {
|
||||
font-size: 12px;
|
||||
color: #0c0c0c;
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
.mood-separator-arrow {
|
||||
color: #c4c4c4;
|
||||
}
|
||||
|
||||
.mood-separator-arrow.right {
|
||||
margin-top: -118px;
|
||||
}
|
||||
|
||||
.mood-separator-arrow.left {
|
||||
margin-bottom: -118px;
|
||||
align-self: end;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.specifications {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
|
||||
.specifications-components {
|
||||
grid-column: 1 / span 3;
|
||||
margin-right: 24px;
|
||||
}
|
||||
|
||||
.component-list {
|
||||
display: grid;
|
||||
row-gap: 8px;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
font-size: 18px;
|
||||
line-height: 21px;
|
||||
|
||||
.spec-title {
|
||||
grid-column: 1;
|
||||
margin-right: 24px;
|
||||
margin-top: 16px;
|
||||
text-transform: uppercase;
|
||||
opacity: 0.4;
|
||||
}
|
||||
.spec-content {
|
||||
grid-column: 2 / span 4;
|
||||
font-weight: bold;
|
||||
margin-top: 16px;
|
||||
|
||||
.spec-content-additional {
|
||||
font-weight: normal;
|
||||
|
||||
ul {
|
||||
margin-bottom: 0;
|
||||
margin-left: 16px;
|
||||
|
||||
li {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
li::marker {
|
||||
content: "- ";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.specifications-form-factor {
|
||||
grid-column: 4 / span 2;
|
||||
|
||||
.specifications-form-factor-grid {
|
||||
display: grid;
|
||||
margin-left: 42px;
|
||||
|
||||
.sff-description {
|
||||
display: grid;
|
||||
|
||||
span:first-of-type {
|
||||
font-size: 1.525em;
|
||||
line-height: 24px;
|
||||
grid-column: 1;
|
||||
text-transform: uppercase;
|
||||
opacity: 0.4;
|
||||
align-self: self-end;
|
||||
}
|
||||
|
||||
span:last-of-type {
|
||||
font-weight: bold;
|
||||
font-size: 1.425em;
|
||||
word-spacing: -4px;
|
||||
}
|
||||
}
|
||||
|
||||
.sff-width {
|
||||
grid-column: 1 / span 2;
|
||||
}
|
||||
svg#zen {
|
||||
grid-column: 1;
|
||||
height: 100px;
|
||||
width: 200px;
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
.sff-height {
|
||||
grid-column: 2;
|
||||
margin-left: 14px;
|
||||
}
|
||||
|
||||
svg#depth {
|
||||
grid-column: 1;
|
||||
height: 200px;
|
||||
width: 200px;
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
.sff-depth {
|
||||
grid-column: 2;
|
||||
margin-left: 14px;
|
||||
}
|
||||
|
||||
svg#weight {
|
||||
grid-column: 1 / span 2;
|
||||
height: 200px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.sff-weight {
|
||||
grid-column: 1 / span 2;
|
||||
justify-content: center;
|
||||
margin-top: -24px;
|
||||
}
|
||||
}
|
||||
img {
|
||||
box-shadow: none;
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.faq-list {
|
||||
margin: 0 72px;
|
||||
}
|
||||
|
||||
.blue3d {
|
||||
text-decoration: none;
|
||||
|
||||
.blue3d-container {
|
||||
align-items: flex-end;
|
||||
background-image: url('/images/blue/blue_3d.jpg');
|
||||
background-position: bottom;
|
||||
background-size: cover;
|
||||
display: flex;
|
||||
height: 390px;
|
||||
margin: auto;
|
||||
margin-top: 62px;
|
||||
padding: 0;
|
||||
width: 720px;
|
||||
|
||||
.blue3d-description {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #000000ab;
|
||||
color: #FFFFFF;
|
||||
height: 60px;
|
||||
width: 100%;
|
||||
|
||||
svg {
|
||||
fill: white;
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
min-width: 32px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.blue-buy-fab {
|
||||
background-color: $ha__primary_color;
|
||||
border-radius: 62px;
|
||||
bottom: 16px;
|
||||
display: flex;
|
||||
box-shadow: rgba(0, 0, 0, 0.2) 0px 7px 8px -4px,
|
||||
rgba(0, 0, 0, 0.14) 0px 12px 17px 2px,
|
||||
rgba(0, 0, 0, 0.12) 0px 5px 22px 4px;
|
||||
box-sizing: border-box;
|
||||
color: #ffffff;
|
||||
cursor: pointer;
|
||||
display: inline-flex;
|
||||
float: right;
|
||||
font-size: 12.25px;
|
||||
font-weight: 400;
|
||||
font-weight: bold;
|
||||
line-height: 32px;
|
||||
padding: 8px 16px 4px;
|
||||
position: fixed;
|
||||
right: 24px;
|
||||
z-index: 1111;
|
||||
|
||||
svg {
|
||||
margin-top: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
#buy-dialog {
|
||||
z-index: 1000;
|
||||
display: none;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgb(0, 0, 0);
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
|
||||
.dialog-content {
|
||||
border-radius: 8px;
|
||||
margin: auto;
|
||||
width: 600px;
|
||||
padding: 0;
|
||||
overflow-y: auto;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
justify-content: space-between;
|
||||
|
||||
.close-container {
|
||||
position: fixed;
|
||||
float: right;
|
||||
width: 615px;
|
||||
text-align: right;
|
||||
margin-top: -17px;
|
||||
|
||||
.dialog-close {
|
||||
cursor: pointer;
|
||||
font-size: 32px;
|
||||
background-color: #ffffff;
|
||||
border-radius: 100px;
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
|
||||
.dialog-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 8px 16px;
|
||||
font-weight: bold;
|
||||
font-size: 24px;
|
||||
|
||||
svg {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.distributors {
|
||||
a {
|
||||
text-decoration: none;
|
||||
|
||||
.distributor {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 8px 16px;
|
||||
color: #222222;
|
||||
margin: auto;
|
||||
|
||||
svg {
|
||||
height: 100%;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
div {
|
||||
display: grid;
|
||||
line-height: 20px;
|
||||
|
||||
div:nth-of-type(1) {
|
||||
align-content: center;
|
||||
grid-column: 1;
|
||||
grid-row: 1 / span 2;
|
||||
margin-right: 8px;
|
||||
}
|
||||
div:nth-of-type(2) {
|
||||
grid-column: 2;
|
||||
}
|
||||
div:nth-of-type(3) {
|
||||
grid-column: 2;
|
||||
color: darkslategrey;
|
||||
font-size: small;
|
||||
}
|
||||
}
|
||||
}
|
||||
.distributor:hover {
|
||||
border-color: $ha__primary_color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.box-contents {
|
||||
margin: 0 16px 32px;
|
||||
ul {
|
||||
margin: 12px 0 12px 24px;
|
||||
color: darkslategrey;
|
||||
font-size: small;
|
||||
|
||||
li {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
}
|
||||
.ul-sub {
|
||||
margin: 0 0 0 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.tip {
|
||||
color: darkslategrey;
|
||||
font-size: small;
|
||||
text-align: center;
|
||||
padding: 12px 62px 12px;
|
||||
margin-top: 16px;
|
||||
border-top: 1px darkslategrey solid;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: $palm-end) {
|
||||
$blue__hero_height: 500px;
|
||||
#blue {
|
||||
.site-header {
|
||||
background-color: #ffffff66;
|
||||
transition: background 0.5s;
|
||||
|
||||
ul {
|
||||
margin: 0 4px;
|
||||
width: calc(100% - 8px);
|
||||
}
|
||||
}
|
||||
.page-content {
|
||||
margin-top: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.grid-wrapper {
|
||||
margin-left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.banner {
|
||||
margin-bottom: 8px;
|
||||
height: $blue__hero_height;
|
||||
img {
|
||||
height: $blue__hero_height;
|
||||
}
|
||||
.title {
|
||||
width: 100%;
|
||||
left: unset;
|
||||
font-size: 2em;
|
||||
line-height: 0px;
|
||||
|
||||
svg {
|
||||
width: 152px;
|
||||
height: 122px;
|
||||
|
||||
text {
|
||||
font-size: 65px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.content {
|
||||
margin: 0 8px;
|
||||
|
||||
.sub-title {
|
||||
font-size: 24px;
|
||||
line-height: 28px;
|
||||
}
|
||||
|
||||
.missing-piece {
|
||||
margin: -116px auto 0;
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
|
||||
.missing-piece-header {
|
||||
padding-left: 8px;
|
||||
padding-top: 8px;
|
||||
}
|
||||
|
||||
.missing-piece-content {
|
||||
padding-left: 8px;
|
||||
}
|
||||
|
||||
.missing-piece-content {
|
||||
width: 100%;
|
||||
}
|
||||
.secondary {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.missing-piece-overlay {
|
||||
margin: 0;
|
||||
margin-top: 12px;
|
||||
width: 100%;
|
||||
|
||||
.missing-piece-overlay-images {
|
||||
margin-top: -42px;
|
||||
margin-left: -8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.missing-piece-disclaimer {
|
||||
margin: 12px auto 12px;
|
||||
}
|
||||
|
||||
.bullet-points {
|
||||
margin: 24px 0;
|
||||
.item {
|
||||
span:nth-of-type(1) {
|
||||
font-size: 16px;
|
||||
line-height: 16px;
|
||||
}
|
||||
span:nth-of-type(2) {
|
||||
font-size: 32px;
|
||||
line-height: 32px;
|
||||
}
|
||||
span:nth-of-type(3) {
|
||||
font-size: 12px;
|
||||
line-height: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.vision {
|
||||
margin-bottom: 0;
|
||||
svg {
|
||||
display: none;
|
||||
}
|
||||
.vision-content {
|
||||
margin-top: 28px;
|
||||
.vision-header {
|
||||
font-size: 34px;
|
||||
line-height: 40px;
|
||||
margin-top: 8px;
|
||||
}
|
||||
.vision-statement {
|
||||
font-size: 12px;
|
||||
line-height: 14px;
|
||||
}
|
||||
.vision-blocks {
|
||||
.vision-block {
|
||||
width: 100%;
|
||||
margin: 9px;
|
||||
.vision-block-title {
|
||||
font-size: 24px;
|
||||
line-height: 28px;
|
||||
}
|
||||
.vision-block-content {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mood {
|
||||
.mood-cards {
|
||||
display: inline-grid;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
|
||||
.material-card {
|
||||
width: 100% !important;
|
||||
display: block;
|
||||
height: auto !important;
|
||||
margin: 0 !important;
|
||||
z-index: 4;
|
||||
|
||||
img {
|
||||
max-height: 180px;
|
||||
}
|
||||
|
||||
.mood-card-footer {
|
||||
.specifications {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
.mood-separator {
|
||||
margin: -80px calc((100% / 2) - 120px);
|
||||
|
||||
.mood-separator-arrow {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.faq-list {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.specifications {
|
||||
display: block;
|
||||
|
||||
h3 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.component-list {
|
||||
grid-template-columns: repeat(1, 1fr);
|
||||
|
||||
.spec-title,
|
||||
.spec-content {
|
||||
grid-column: 1;
|
||||
}
|
||||
|
||||
.spec-title {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.spec-content {
|
||||
margin-top: -4px;
|
||||
}
|
||||
}
|
||||
.specifications-form-factor {
|
||||
.specifications-form-factor-grid {
|
||||
margin-left: 0;
|
||||
|
||||
.sff-width {
|
||||
margin-left: 50px;
|
||||
}
|
||||
.sff-description {
|
||||
span:last-of-type {
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.blue-buy-fab {
|
||||
bottom: 12px;
|
||||
right: 12px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
#buy-dialog {
|
||||
padding-top: 0;
|
||||
|
||||
.dialog-content {
|
||||
border-radius: 0;
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
padding-bottom: 64px;
|
||||
display: block;
|
||||
|
||||
.tip {
|
||||
margin: 32px 8px 8px 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.blue3d {
|
||||
.blue3d-container {
|
||||
width: 100% !important;
|
||||
|
||||
.blue3d-description {
|
||||
height: auto !important;
|
||||
|
||||
i {
|
||||
align-self: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: $lap-end) {
|
||||
#blue {
|
||||
.page-content {
|
||||
.content {
|
||||
.bullet-points {
|
||||
margin: 24px 0;
|
||||
}
|
||||
.vision {
|
||||
margin-top: -200px;
|
||||
|
||||
.vision-content {
|
||||
padding-top: 200px;
|
||||
|
||||
.vision-blocks {
|
||||
margin: 32px 0;
|
||||
|
||||
.vision-block {
|
||||
margin: 8px !important;
|
||||
|
||||
.vision-block-content {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.mood {
|
||||
.mood-cards {
|
||||
margin: 0;
|
||||
width: inherit;
|
||||
.material-card {
|
||||
height: 300px;
|
||||
width: 230px;
|
||||
margin: 0 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.specifications {
|
||||
margin: 0 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
26
sass/custom/_details.scss
Normal file
@ -0,0 +1,26 @@
|
||||
div.details-block {
|
||||
width: 100%;
|
||||
display: block;
|
||||
|
||||
.details-block-item {
|
||||
background-color: white;
|
||||
padding: 4px 16px;
|
||||
margin: 8px;
|
||||
cursor: pointer;
|
||||
box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.1);
|
||||
border-radius: 16px;
|
||||
|
||||
.details-block-title {
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
line-height: 21px;
|
||||
height: 54px;
|
||||
justify-content: space-between;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.details-block-content {
|
||||
margin: 4px 32px 0 0;
|
||||
}
|
||||
}
|
||||
}
|
59
sass/custom/_features.scss
Normal file
@ -0,0 +1,59 @@
|
||||
.feature-cards {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 32px;
|
||||
margin: auto;
|
||||
|
||||
.card {
|
||||
border-radius: 8px;
|
||||
display: inline-block;
|
||||
width: calc(100% - 16px);
|
||||
vertical-align: top;
|
||||
|
||||
.card-header {
|
||||
font-size: 1.4rem;
|
||||
line-height: 1.6;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding-bottom: 8px;
|
||||
height: 62px;
|
||||
|
||||
i {
|
||||
height: 62px;
|
||||
min-width: 62px;
|
||||
text-align: center;
|
||||
font-size: 39px;
|
||||
}
|
||||
}
|
||||
|
||||
.card-content {
|
||||
padding-left: 24px;
|
||||
|
||||
.button {
|
||||
font-size: small;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
p:last-of-type,
|
||||
ul {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: $palm-end) {
|
||||
.feature-cards {
|
||||
width: 95%;
|
||||
grid-template-columns: repeat(1, 1fr);
|
||||
|
||||
.card {
|
||||
width: 100%;
|
||||
|
||||
.card-content {
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -157,6 +157,9 @@ $primary-color: #049cdb;
|
||||
color: white;
|
||||
border-bottom-left-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
.title {
|
||||
font-size: 20px;
|
||||
@ -167,6 +170,13 @@ $primary-color: #049cdb;
|
||||
font-size: 12px;
|
||||
font-weight: initial;
|
||||
}
|
||||
|
||||
svg {
|
||||
fill: white;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
min-width: 32px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,9 @@
|
||||
@import 'oscailte/oscailte';
|
||||
@import 'custom/paulus';
|
||||
@import 'custom/blue';
|
||||
@import 'custom/features';
|
||||
@import 'custom/component_page';
|
||||
@import 'custom/syntax';
|
||||
@import 'custom/details';
|
||||
@import 'custom/print';
|
||||
@import 'custom/layout';
|
@ -42,4 +42,4 @@ The Home Assistant Community forums have a specific tag for blueprints. This tag
|
||||
|
||||
[Visit the Home Assistant forums][blueprint-forums]
|
||||
|
||||
[blueprint-forums]: https://community.home-assistant.io/c/blueprints/53
|
||||
[blueprint-forums]: /get-blueprints
|
||||
|
@ -180,4 +180,4 @@ Additional examples, provided by the community, can be found on the
|
||||
[community forum][blueprint-forums].
|
||||
|
||||
[blueprint-built-in]: https://github.com/home-assistant/core/tree/dev/homeassistant/components/automation/blueprints
|
||||
[blueprint-forums]: https://community.home-assistant.io/c/blueprints/53
|
||||
[blueprint-forums]: /get-blueprints
|
||||
|
@ -47,7 +47,7 @@ of the input will be the area ID of the user-selected area.
|
||||
|
||||
An area selector can filter the list of areas, based on properties of the devices
|
||||
and entities that are assigned to those areas. For example, the areas list could
|
||||
be limited to areas with entities provided by the [ZHA](/integration/zha)
|
||||
be limited to areas with entities provided by the [ZHA](/integrations/zha)
|
||||
integration.
|
||||
|
||||
In its most basic form, it doesn't require any options, which will show
|
||||
|
@ -220,6 +220,10 @@ Don't forget to reload automations after you make changes to your blueprint to h
|
||||
|
||||
The final step is to share this blueprint with others. For this tutorial we're going to share it on GitHub Gists.
|
||||
|
||||
### Informal Sharing
|
||||
|
||||
For this tutorial, we're going to share it on GitHub Gists. This is a good option if you don't want to publish your blueprint to a larger audience.
|
||||
|
||||
- Go to [GitHub Gists](https://gist.github.com/)
|
||||
- Gist description: blueprint tutorial
|
||||
- Filename including extension: `motion_light_tutorial.yaml`
|
||||
@ -227,3 +231,7 @@ The final step is to share this blueprint with others. For this tutorial we're g
|
||||
- Click the "Create Gist" button
|
||||
|
||||
You can now copy the URL of your new Gist and share it with other people. They can import it by going to **Configuration**, **Blueprints** and clicking on the blue "Import Blueprint" button.
|
||||
|
||||
### Share on the Blueprint Exchange
|
||||
|
||||
If you follow the [Rules and format for posting](/get-blueprints), you can share your blueprint on the Home Assistant Blueprint Exchange forum. This option is accessible to the general Home Assistant community but recommended only for your original blueprints. Please don't post this tutorial to the Blueprint Exchange, but instead, remember this as an option for releasing your real blueprints.
|
||||
|
@ -480,4 +480,4 @@ The default priority of operators is that the filter (`|`) has priority over eve
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
Would round `10` to 2 decimal places, then divide `states('sensor.temperature')` by that.
|
||||
Would round `10` to 2 decimal places, then divide `states('sensor.temperature')` by `10` (rounded to 2 decimal places so 10.00). This behavior is maybe not the one expected, but priority rules imply that.
|
||||
|
@ -22,6 +22,28 @@ service: homeassistant.turn_on
|
||||
entity_id: group.living_room
|
||||
```
|
||||
|
||||
### Targeting areas and devices
|
||||
|
||||
Instead of targeting an entity, you can also target an area or device. Or a combination of these.
|
||||
This is done with the `target` key.
|
||||
|
||||
A `target` is a map thats contains atleast one of the following: `area_id`, `device_id`, `entity_id`.
|
||||
Each of these can be a list.
|
||||
|
||||
When the service is called, the area's and devices will be resolved to entities.
|
||||
|
||||
```yaml
|
||||
service: homeassistant.turn_on
|
||||
target:
|
||||
area_id: livingroom
|
||||
device_id:
|
||||
- ff22a1889a6149c5ab6327a8236ae704
|
||||
- 52c050ca1a744e238ad94d170651f96b
|
||||
entity_id:
|
||||
- light.hallway
|
||||
- light.landing
|
||||
```
|
||||
|
||||
### Passing data to the service call
|
||||
|
||||
You can also specify other parameters beside the entity to target. For example, the light turn on service allows specifying the brightness.
|
||||
|
@ -869,12 +869,12 @@ Button three (X) release|3|7740
|
||||
Button four (Triangle) single tap|4|7680
|
||||
Button four (Triangle) hold|4|7800
|
||||
Button four (Triangle) release|4|7740
|
||||
Button five (Triangle) single tap|5|7680
|
||||
Button five (Triangle) hold|5|7800
|
||||
Button five (Triangle) release|5|7740
|
||||
Button six (Triangle) single tap|6|7680
|
||||
Button six (Triangle) hold|6|7800
|
||||
Button six (Triangle) release|6|7740
|
||||
Button five (Minus) single tap|5|7680
|
||||
Button five (Minus) hold|5|7800
|
||||
Button five (Minus) release|5|7740
|
||||
Button six (Plus) single tap|6|7680
|
||||
Button six (Plus) hold|6|7800
|
||||
Button six (Plus) release|6|7740
|
||||
|
||||
Press circle and plus simultaneously to wake up the device.
|
||||
|
||||
@ -1179,7 +1179,7 @@ switch:
|
||||
data:
|
||||
node_id: 3
|
||||
value_id: "{{ state_attr('sensor.scene_contrl_indicator','value_id') }}"
|
||||
value: "{{ states(scene_contrl_indicator)|int + 8 }}"
|
||||
value: "{{ states('sensor.scene_contrl_indicator')|int + 8 }}"
|
||||
turn_off:
|
||||
service: zwave.set_node_value
|
||||
data:
|
||||
|
@ -8,7 +8,9 @@
|
||||
<b>Where</b>: online<br>
|
||||
</li>
|
||||
</ul>
|
||||
<!--
|
||||
<a class="btn btn--full" href="https://hopin.to/events/home-assistant-conference">Get your ticket</a>
|
||||
-->
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
|
98
source/_includes/custom/features.html
Normal file
@ -0,0 +1,98 @@
|
||||
<div class="feature-cards">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<i class="icon-lightbulb"></i>
|
||||
Works with over 1000 devices
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<p>
|
||||
Home Assistant integrates with over a thousand different devices
|
||||
and services.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Once started, Home Assistant will automatically scan your network for
|
||||
known devices and allow you to easily set them up.
|
||||
</p>
|
||||
<a class="button" href="/integrations">EXPLORE INTEGRATIONS</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<i class="icon-gears"></i>
|
||||
Powerful automations
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<p>
|
||||
Once you have integrated all your devices at home, you can unleash Home
|
||||
Assistant’s advanced automation engine to make your home work for you.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Turn on the light when the sun sets or when coming home</li>
|
||||
<li>Alert you when you leave your garage door open.</li>
|
||||
</ul>
|
||||
<a class="button" href="/docs/automation">EXPLORE AUTOMATIONS</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<i class="icon-puzzle-piece"></i>
|
||||
Extend your system with add-ons
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<p>
|
||||
Home Assistant is not just limited to Home Assistant. Easily install
|
||||
other applications that will help you manage your home.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Run AdGuard, a DNS-based ad blocker</li>
|
||||
<li>Run third party automation engines like NodeRed</li>
|
||||
<li>Turn Home Assistant Blue into a Spotify Connect target</li>
|
||||
</ul>
|
||||
<a class="button" href="/addons">EXPLORE ADD-ONS</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<i class="icon-shield"></i>
|
||||
All your smart home data stays local
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<p>Home Assistant keeps your data local, not need for a cloud.</p>
|
||||
|
||||
<p>
|
||||
Home Assistant communicates with your devices locally, and will fallback
|
||||
to pulling in data from the cloud if there is no other option. No data
|
||||
is stored in the cloud, and everything is processed locally.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<i class="icon-mobile-phone"></i>
|
||||
Companion Mobile Apps
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<p>
|
||||
Use the official Home Assistant apps, a convenient companion to quickly
|
||||
control your devices and be notified when things happen in your home,
|
||||
even on your wrist using the Apple Watch.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The apps can also be used to send your location home to use presence
|
||||
detection as part of your automations. Data is sent directly to your
|
||||
home, no access by third-parties.
|
||||
</p>
|
||||
<a
|
||||
class="button"
|
||||
href="https://companion.home-assistant.io/"
|
||||
target="_blank"
|
||||
>
|
||||
DOWNLOAD APPS
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -3,7 +3,7 @@ title: Blueprints
|
||||
description: Instructions on how to use Automation Blueprints with Home Assistant.
|
||||
ha_category:
|
||||
- Automation
|
||||
ha_release: 1.0
|
||||
ha_release: 2020.12
|
||||
ha_quality_scale: internal
|
||||
ha_codeowners:
|
||||
- '@home-assistant/core'
|
||||
|
@ -29,6 +29,7 @@ Generate a Client ID and Client Secret on
|
||||
1. Click on the field on the right of the screen, 'CONFIGURE CONSENT SCREEN', select "External" and create.
|
||||
1. Set the 'Application Name' (the name of the application asking for consent) to anything you want. We suggest "Home-Assistant".
|
||||
1. You then need to select a `Support email`. To do this, simply click the drop down box and select your email address.
|
||||
1. You finally need to complete the section: `Developer contact information`. To do this, simply enter your email address (same as above is fine).
|
||||
1. Scroll to the bottom and click `save`. (You don't have to fill out anything else)
|
||||
1. You will then be automatically taken to the OAuth consent screen, you don't need to do anything here. Instead, click Credentials in the menu on the left hand side of the screen, then click `+ Create credentials` (at the top of the screen), then select `OAuth client ID`.
|
||||
1. Set the Application type to `TV and Limited Input` and give this credential set a name (like "Home Assistant Credentials") then click 'Create'.
|
||||
|
@ -44,6 +44,7 @@ Known supported devices:
|
||||
- Denon AVR-2312CI
|
||||
- Denon AVR-3311CI
|
||||
- Denon AVR-3312
|
||||
- Denon AVR-3313CI
|
||||
- Denon AVR-4810
|
||||
- Denon AVR-S710W
|
||||
- Denon AVR-S720W
|
||||
|
@ -143,6 +143,10 @@ labels:
|
||||
|
||||
{% endconfiguration %}
|
||||
|
||||
## Supported labels
|
||||
|
||||
Both detectors "default" and "tensorflow" use the labels in [this file](https://raw.githubusercontent.com/amikelive/coco-labels/master/coco-labels-2014_2017.txt).
|
||||
|
||||
## Sample configuration
|
||||
|
||||
{% raw %}
|
||||
|
@ -16,7 +16,7 @@ Please visit the [eyezon website](http://www.eyezon.com/) for further informatio
|
||||
|
||||
There is currently support for the following device types within Home Assistant:
|
||||
|
||||
- Binary Sensor: Reports on zone status (Check the [type/class](/integrations/binary_sensor/) list for a possible visualization of your zone.)
|
||||
- Binary Sensor: Reports on zone status (Check the [type/class](/integrations/binary_sensor/#device-class) list for a possible visualization of your zone.)
|
||||
- Sensor: Emulates an alpha-numeric keypad attached to the alarm panel
|
||||
- Alarm Control Panel: Reports on partition status, and can be used to arm/disarm the system
|
||||
|
||||
@ -70,7 +70,7 @@ password:
|
||||
required: true
|
||||
type: string
|
||||
code:
|
||||
description: Your alarm panel's code, for authenticating user input during arm/disarm. If you do not provide this value, the integration will prompt the user to enter the code at runtime.
|
||||
description: Your alarm panel's code, for authenticating user input during arm/disarm. If you do not provide this value, the integration will prompt the user to enter the code at runtime.
|
||||
required: false
|
||||
type: string
|
||||
port:
|
||||
@ -104,7 +104,7 @@ panic_type:
|
||||
default: Police
|
||||
type: string
|
||||
zones:
|
||||
description: "Envisalink boards have no way to tell us which zones are actually in use, so each zone must be configured in Home Assistant. For each zone, at least a name must be given. For more information on the available zone types, take a look at the [Binary Sensor](/integrations/envisalink) documentation. *Note: If no zones are specified, Home Assistant will not load any binary_sensor components.*"
|
||||
description: "Envisalink boards have no way to tell us which zones are actually in use, so each zone must be configured in Home Assistant. For each zone, at least a name must be given. For more information about the visual representation of a zone, take a look at the [Binary Sensor](/integrations/binary_sensor/#device-class) documentation. *Note: If no zones are specified, Home Assistant will not load any binary_sensor components.*"
|
||||
required: false
|
||||
type: integer
|
||||
keys:
|
||||
|
@ -6,7 +6,7 @@ ha_category:
|
||||
- Sensor
|
||||
- Switch
|
||||
ha_iot_class: Cloud Polling
|
||||
ha_release: 0.119
|
||||
ha_release: 2020.12
|
||||
ha_codeowners:
|
||||
- '@cyberjunky'
|
||||
ha_config_flow: true
|
||||
|
@ -24,6 +24,7 @@ There is currently support for the following device types within Home Assistant:
|
||||
#### Tested Devices
|
||||
|
||||
- [FRITZ!Box 6490 Cable](https://en.avm.de/products/fritzbox/fritzbox-6490-cable/)
|
||||
- [FRITZ!Box 6591 Cable](https://en.avm.de/products/fritzbox/fritzbox-6591-cable/)
|
||||
- [FRITZ!Box 7590](https://en.avm.de/products/fritzbox/fritzbox-7590/)
|
||||
- [FRITZ!Box 7490](https://en.avm.de/service/fritzbox/fritzbox-7490/overview/)
|
||||
- [FRITZ!Box 7430](https://en.avm.de/service/fritzbox/fritzbox-7430/overview/)
|
||||
|
@ -94,7 +94,7 @@ arrival:
|
||||
required: false
|
||||
type: time
|
||||
departure:
|
||||
description: "Time when travel is expected to end. A 24 hour time string like `08:00:00`. On a sensor update it will be combined with the current date to get travel time for that moment. Cannot be used in combination with `arrival`. If departure is not provided each update of the sensor uses the current date and time."
|
||||
description: "Time when travel is expected to start. A 24 hour time string like `08:00:00`. On a sensor update it will be combined with the current date to get travel time for that moment. Cannot be used in combination with `arrival`. If departure is not provided each update of the sensor uses the current date and time."
|
||||
required: false
|
||||
type: time
|
||||
unit_system:
|
||||
|
@ -490,15 +490,15 @@ target_temperature_state_address:
|
||||
required: true
|
||||
type: string
|
||||
setpoint_shift_address:
|
||||
description: KNX address for setpoint_shift. *DPT 6.010 or 9.001 based on setpoint_shift_mode*
|
||||
description: KNX address for setpoint_shift. *DPT 6.010 or DPT 9.002 based on setpoint_shift_mode*
|
||||
required: false
|
||||
type: string
|
||||
setpoint_shift_state_address:
|
||||
description: KNX address for reading setpoint_shift. *DPT 6.010 or 9.001 based on setpoint_shift_mode*
|
||||
description: KNX address for reading setpoint_shift. *DPT 6.010 or DPT 9.002 based on setpoint_shift_mode*
|
||||
required: false
|
||||
type: string
|
||||
setpoint_shift_mode:
|
||||
description: Defines the internal device DPT used.
|
||||
description: Defines the internal device DPT used. Either 'DPT6010' or 'DPT9002'.
|
||||
required: false
|
||||
default: 0.5
|
||||
type: string
|
||||
@ -1102,10 +1102,6 @@ invert:
|
||||
required: false
|
||||
type: boolean
|
||||
default: False
|
||||
reset_after:
|
||||
description: Reset the switch back to OFF after specified seconds.
|
||||
required: false
|
||||
type: float
|
||||
{% endconfiguration %}
|
||||
|
||||
Some KNX devices can change their state internally without any messages on the KNX bus, e.g., if you configure a timer on a channel. The optional `state_address` can be used to inform Home Assistant about these state changes. If a KNX message is seen on the bus addressed to the given state address, this will overwrite the state of the switch object.
|
||||
|
@ -4,7 +4,7 @@ description: Instructions for integrating Brightech Kuler Sky Bluetooth floor la
|
||||
ha_category:
|
||||
- Light
|
||||
ha_iot_class: Local Polling
|
||||
ha_release: '1.0.0'
|
||||
ha_release: 2020.12
|
||||
ha_domain: kulersky
|
||||
ha_codeowners:
|
||||
- '@emlove'
|
||||
|
@ -10,7 +10,7 @@ ha_domain: microsoft_face_detect
|
||||
|
||||
The `microsoft_face_detect` image processing platform allows you to use the
|
||||
[Microsoft Face Identify](https://www.microsoft.com/cognitive-services/en-us/)
|
||||
API through Home Assistant. This platform enables you do detect face on camera
|
||||
API through Home Assistant. This platform enables you to detect face on camera
|
||||
and fire an event with attributes.
|
||||
|
||||
Please refer to the [Microsoft Face component](/integrations/microsoft_face/) configuration on
|
||||
|
@ -4,7 +4,7 @@ description: Instructions on how to integrate Motion Blinds from Coulisse B.V. i
|
||||
ha_category:
|
||||
- Cover
|
||||
ha_iot_class: Local Polling
|
||||
ha_release: 0.119.0
|
||||
ha_release: 2020.12
|
||||
ha_domain: motion_blinds
|
||||
ha_codeowners:
|
||||
- '@starkillerOG'
|
||||
|
@ -26,7 +26,7 @@ There is currently support for the following device types within Home Assistant:
|
||||
- [Sensor](#sensor)
|
||||
|
||||
<div class='note'>
|
||||
This integration continues to support the Legacy Works With Nest API which is not accepting new users. The documentation for this API is at the bottom of this page so existing users can keep using it.
|
||||
This integration supports two Nest APIs. The SDM API is the new primary API that accepts new users. The Legacy Works With Nest API is not accepting new users, but the documentation still exists at the bottom of the page so existing users can keep using it.
|
||||
</div>
|
||||
|
||||
## Overview: Supported Devices
|
||||
@ -35,7 +35,8 @@ Home Assistant is integrated with the following devices through the SDM API:
|
||||
|
||||
- Thermostat Devices
|
||||
- Every thermostat is exposed as a `climate` entity
|
||||
- Temperature and Humidity sensors each have a `sensor` entity
|
||||
- A Temperature `sensor` entity. Note: Additional Nest Temperature Sensors are not supported by the SDM API.
|
||||
- A Humidity `sensor` entity.
|
||||
- Example devices: All Google Nest Thermostat models
|
||||
- Display, Camera, and Doorbell Devices
|
||||
- The camera live stream is available as a `camera` entity
|
||||
@ -46,36 +47,86 @@ You are in control of the information and capabilities exposed to Home Assistant
|
||||
Others devices like Smoke and CO Alarms or Security systems are not currently
|
||||
supported by the SDM API.
|
||||
|
||||
## Account Setup
|
||||
The full detailed instructions for account setup are available in the [Device Access Registration](https://developers.google.com/nest/device-access/registration) Quick Start Guide. The instructions below are included to make this complex setup process a bit easier to follow.
|
||||
|
||||
You will need to follow the instructions in [Device Access Registration](https://developers.google.com/nest/device-access/registration) to authorize access to your devices. Follow these steps in the Quick Start Guide:
|
||||
## Device Access Registration
|
||||
|
||||
- Accept the Terms of Service.
|
||||
- Pay a fee (currently US$5).
|
||||
- [Register for Device Access](https://developers.google.com/nest/device-access/get-started#register_for_device_access) to get a `project_id`.
|
||||
- [Set up Google Cloud Platform](https://developers.google.com/nest/device-access/get-started#set_up_google_cloud_platform) and enable the
|
||||
API
|
||||
- Authorize your Google Account and create OAuth credentials to get a `client_id` and `client_secret`.
|
||||
- Configure *Authorized redirect URIs* with the URL you use to access Home Assistant including the path for the OAuth callback , e.g. `https://<your_home_assistant_url_or_local_ip>:<port>/auth/external/callback` (also see `redirect_url_mismatch` troubleshooting below)
|
||||
For the first phase, you will turn on the API and create the necessary credentials to have Home Assistant talk to the Nest API.
|
||||
|
||||
<div class='note warning'>
|
||||
It is currently not possible to share/be invited to a home with a G-Suite account. Make sure that you pay the fee with an account that has access to your devices.
|
||||
</div>
|
||||
1. First go to the [Device Access Registration](https://developers.google.com/nest/device-access/registration) page. Click on the button **Go to the Device Access Console**.
|
||||

|
||||
|
||||
Then you need to configure a Pub/Sub subscriber following the SDM API Event instructions under [Device Access: Events](https://developers.google.com/nest/device-access/api/events) though not using a service account. The basic
|
||||
steps are:
|
||||
1. Check the box to "Accept the Terms of Service" and click **Continue to Payment** where you need to pay a fee (currently US$5).
|
||||

|
||||
|
||||
- [Enable events](https://developers.google.com/nest/device-access/subscribe-to-events#enable_events) in the [Device Access Console](https://console.nest.google.com/device-access/project-list) which creates a Pub/Sub topic.
|
||||
- [Enable the Cloud Pub/Sub API](https://console.developers.google.com/apis/library/pubsub.googleapis.com) in the Cloud Console.
|
||||
- [Create a Pub/Sub subscription](https://console.cloud.google.com/cloudpubsub/subscription/list) in the Google Cloud Platform console. Make sure to create a pull subscription and get a `subscriber_id` ("Subscription name" in Google Cloud Console). The *Topic name* should match the topic name in the device access console.
|
||||
<div class='note'>
|
||||
It is currently not possible to share/be invited to a home with a G-Suite account. Make sure that you pay the fee with an account that has access to your devices.
|
||||
</div>
|
||||
|
||||
Follow all of the instructions in [Device Access: Quick Start Guide](https://developers.google.com/nest/device-access/get-started) carefully as it is easy to make a configuration mistake that is difficult to debug. It is recommended to exercise the entire guide, including the command to test out the API, to make sure that it is working before configuring Home Assistant.
|
||||
1. Now the "Device Access Console" should be visible. Click on **Create project**.
|
||||

|
||||
|
||||
When you get to the steps about configuring events make sure to follow guide under [Events](https://developers.google.com/nest/device-access/api/events) that configures the [Pub/Sub subscription](https://console.cloud.google.com/cloudpubsub/subscription/list) from the Google Cloud console. Make sure to use the *topic name* from the device access console and a unique subscription ID in the cloud console. Note the message retention is how long messages will queue while offline, so keep that short (e.g., under an hour) to avoid a potentially large backlog of updates.
|
||||
1. Give your project a name and click **Next**.
|
||||

|
||||
|
||||
1. Next you will be asked for an *OAuth client ID*. It is a good idea to go create that now. Open a new tab to the [Google Cloud Console](https://console.developers.google.com/apis/credentials) **Credentials** page and click **Create
|
||||
Credentials**.
|
||||

|
||||
|
||||
1. From the drop-down list select *OAuth client ID*.
|
||||

|
||||
|
||||
1. Pick a name for your credential.
|
||||
|
||||
1. Add **Authorized redirect URIs** for your Home Assistant URL, including the OAuth callback path e.g., `https://<your_home_assistant_url>:<port>/auth/external/callback`. See [Troubleshooting](#troubleshooting) below for more details on the subtle requirements for what kinds of URLs work here.
|
||||

|
||||
|
||||
1. You should now be presented with an *OAuth client created* message. Take note of *Your Client ID* and *Your Client Secret* as these are needed for Home Assistant set up.
|
||||

|
||||
|
||||
1. Now head back to the *Device Access Console* tab and *Add your OAuth client ID* then click **Next**.
|
||||

|
||||
|
||||
1. Enable Events by clicking on **Enable** and **Create project**.
|
||||

|
||||
|
||||
1. Take note of the *Project ID* as you will need it later. At this point you have the `project_id`, `client_id` and `client_secret` configuration options needed for Home Assistant.
|
||||
|
||||
1. At this point you should have a `Project ID`, `OAuth Client ID`, and an `OAuth Secret`.
|
||||
|
||||
1. Go back to the [Google Cloud Console: API & Services](https://console.developers.google.com/apis/dashboard)
|
||||
|
||||
1. Click on **Enable APIs and Services**
|
||||

|
||||
|
||||
1. Search for **Smart Device management** and enable the API.
|
||||

|
||||
|
||||
## Pub/Sub subscriber setup
|
||||
|
||||
The next phase is to enable the Pub/Sub API by creating a subscription that can keep Home Assistant informed of events or device changes in near real-time. See [Device Access: Events](https://developers.google.com/nest/device-access/api/events) for the full detailed instructions.
|
||||
|
||||
1. Visit [Enable the Cloud Pub/Sub API](https://console.developers.google.com/apis/library/pubsub.googleapis.com) in the Cloud Console and click **Enable**.
|
||||
|
||||
1. Go to the [Google Cloud Platform: Pub/Sub: Subscriptions](https://console.cloud.google.com/cloudpubsub/subscription/list) page and click **Create Subscription**.
|
||||
|
||||
1. You will need to pick a *Subscription ID*.
|
||||

|
||||
|
||||
1. The *Topic name* should match the topic name in your project in the [Device Access Console](https://console.nest.google.com/device-access/) and typically looks like `projects/sdm-prod/topics/EXAMPLE`. The SDM topic names do not show up by default so make sure to **Enter topic manually**.
|
||||

|
||||
|
||||
1. Select **Pull** as the *Delivery Type*.
|
||||
|
||||
1. Lower the message retention duration to be something short (e.g., 10 minutes or under an hour) to avoid a large backlog of updates when Home Assistant is turned off.
|
||||
|
||||
1. Leave the rest of the defaults and click **Create**.
|
||||
|
||||
1. Once created, copy the *Subscription name* which you will want to hold on to as your `subscriber_id` for configuring Home Assistant. This typically looks like `projects/MY-CLOUD-ID/subscriptions/EXAMPLE`. Don't confuse *Subscription name* with *Topic name* since they look similar.
|
||||
|
||||
## Configuration
|
||||
|
||||
```yaml
|
||||
Congratulations, you now should have everything you need to configure Home Assistant. Edit your `configuration.yaml` file and populate a `nest` entry in the format of the example [Configuration](#configuration) below.
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
@ -109,21 +160,50 @@ subscriber_id:
|
||||
|
||||
## Device Setup
|
||||
|
||||
Once your developer account is set up and you have a valid `nest` entry in `configuration.yaml` , you need to connect devices with the following steps:
|
||||
Once your developer account is set up and you have a valid `nest` entry in `configuration.yaml`, you need to connect devices with the following steps:
|
||||
|
||||
1. From the Home Assistant front-end, navigate to **Configuration** then *Integrations**. Under **Set up a new integration** locate 'Nest'.
|
||||
|
||||
1. From the Home Assistant front-end, navigate to **Configuration** then **Integrations**. Under **Set up a new integration** locate 'Nest'.
|
||||
1. You should get redirected to Google to choose an account. This should be the same developer account you configured above.
|
||||
|
||||
1. The *Google Nest permissions* screen will allow you to choose which devices to configure. You can leave out any device that you do not wish to use with Home Assistant.
|
||||
1. You will get redirected back to another account selection page.
|
||||

|
||||
|
||||
1. You will get redirected back to another account selection page. See [Troubleshooting](#troubleshooting) below if you get a `redirect_uri_mismatch` error.
|
||||
|
||||
1. Then you will be asked to grant access to additional permissions. Click *Allow*.
|
||||

|
||||

|
||||
|
||||
1. Confirm you want to allow persistent access to Home Assistant.
|
||||

|
||||
|
||||
1. If all went well, you are ready to go!
|
||||

|
||||
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- For general trouble with the SDM API OAuth authorization flow with Google, see [Troubleshooting](https://developers.google.com/nest/device-access/authorize#troubleshooting).
|
||||
|
||||
- *Error 500: redirect_url_mismatch* means that you need visit the [GCP credentials](https://console.developers.google.com/apis/credentials) page and modify your OAuth2.0 Client ID to add the correct Home Asssitant callback URL. The error message tells you the exact URL that needs to be added, including any ports or paths like `/auth/external/callback` path. See [Redirect uri mismatch](https://developers.google.com/nest/device-access/authorize#redirect_uri_mismatch) for more details.
|
||||
- *Error 400: Invalid Request* This error typically happens when there is a mismatch between how you are accessing Home Assistant and the Authorized Redirect URI you entered for OAuth. If you used a publicly facing URL, make sure that you are accessing Home Assistant with the same URL when you set up the integration. You will definitely hit this error if you are accessing Home Assistant by local IP during the initial setup.
|
||||
|
||||
- *No devices or entities are created* if the SDM API is not returning any devices for the authorized account. Double double check that GCP is configured correctly to [Enable the API](https://developers.google.com/nest/device-access/get-started#set_up_google_cloud_platform) and authorize at least one device in the OAuth setup flow. If you have trouble here, then you may want to walk through the [Get Started: Device Access](https://developers.google.com/nest/device-access/get-started) guide again and issue commands directly against the API until you successfully get back devices.
|
||||
- *Error 500: redirect_uri_mismatch* means that you need to visit the [GCP credentials](https://console.developers.google.com/apis/credentials) page and modify your OAuth2.0 Client ID to add the correct Home Assistant callback URL. The error message tells you the exact URL that needs to be added, including any ports or paths like `/auth/external/callback` path. See [Redirect URI mismatch](https://developers.google.com/nest/device-access/authorize#redirect_uri_mismatch) for more details.
|
||||
|
||||
- A convienent solution is to use [Nabu Casa](https://www.nabucasa.com/)
|
||||
- There are subtle rules for what types of URLs are allowed, namely that they must use a publicly known hostname, though your Home Assistant ports do not need to be exposed to the internet.
|
||||
- You can use any publicly known hostname you own
|
||||
- As a hack, you can use hosts tricks to temporarily assign a public hostname to your Home Assistant IP address.
|
||||
|
||||
- *Error: invalid_client no application name* means the [OAuth Consent Screen](https://console.developers.google.com/apis/credentials/consent) has not been fully configured for the project. Enter the required fields (App Name, Support Email, Developer Email) and leave everything else as default.
|
||||
|
||||
- *No devices or entities are created* if the SDM API is not returning any devices for the authorized account. Double-check that GCP is configured correctly to [Enable the API](https://developers.google.com/nest/device-access/get-started#set_up_google_cloud_platform) and authorize at least one device in the OAuth setup flow. If you have trouble here, then you may want to walk through the Google instructions and issue commands directly against the API until you successfully get back the devices.
|
||||
|
||||
- *Thermostat not created* may be resolved by restarting the *Nest Thermostat*. See [How to restart or reset a Nest thermostat](https://support.google.com/googlenest/answer/9247296) for more details.
|
||||
|
||||
- *Subscriber error: Subscription misconfigured. Expected subscriber_id to match...* means that the `configuration.yaml` has an incorrect `subscriber_id` field. Re-enter the the *Subscription Name* which looks like `projects/project-label-22ee1/subscriptions/SUBSCRIBER_ID`. Make sure this is not the *Topic name*.
|
||||
|
||||
- *Subscriber error: Subscription misconfigured. Expected topic name to match ...* means that the topic name in the Google Cloud Console was entered incorrectly. The topic name comes from the Device Console and must start with `projects/sdm-prod/topics/`. It is easy to make the mistake of creating a new topic rather than manually entering the right topic name.
|
||||
|
||||
- *Not receiving updates* typically means a problem with the subscriber configuration. Changes for things like sensors or thermostat temperature set points should be instantly published to a topic and received by the Home Assistant susbcriber when everything is configured correctly.
|
||||
|
||||
|
@ -56,54 +56,3 @@ action:
|
||||
data:
|
||||
message: "The sun is {% raw %}{% if is_state('sun.sun', 'above_horizon') %}up{% else %}down{% endif %}{% endraw %}!"
|
||||
```
|
||||
|
||||
For services which have support for sending images.
|
||||
|
||||
```json
|
||||
{ "message": "Test plugin",
|
||||
"data": {
|
||||
"photo": {
|
||||
"url": "https://raw.githubusercontent.com/home-assistant/home-assistant.io/current/source/images/default-social.png"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The automation equivalent would be:
|
||||
|
||||
```yaml
|
||||
action:
|
||||
service: notify.notify
|
||||
data:
|
||||
message: "Test plugin"
|
||||
data:
|
||||
photo:
|
||||
url: "https://raw.githubusercontent.com/home-assistant/home-assistant.io/current/source/images/default-social.png"
|
||||
```
|
||||
|
||||
|
||||
If the service support sending the location, the data from this sample can be used.
|
||||
|
||||
```json
|
||||
{ "message": "Test plugin",
|
||||
"data": {
|
||||
"location": {
|
||||
"latitude": 7.3284,
|
||||
"longitude": 46.38234
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The automation equivalent would be:
|
||||
|
||||
```yaml
|
||||
action:
|
||||
service: notify.notify
|
||||
data:
|
||||
message: "Test plugin"
|
||||
data:
|
||||
location:
|
||||
latitude: 7.3284
|
||||
longitude: 46.38234
|
||||
```
|
||||
|
@ -3,7 +3,7 @@ title: Number
|
||||
description: Instructions on how to manage your Number entities with Home Assistant.
|
||||
ha_category:
|
||||
- Number
|
||||
ha_release: 0.119
|
||||
ha_release: 2020.12
|
||||
ha_quality_scale: internal
|
||||
ha_domain: number
|
||||
ha_iot_class: ~
|
||||
|
@ -81,7 +81,7 @@ ssl:
|
||||
|
||||
In this section you find some real-life examples of how to use this sensor.
|
||||
|
||||
### Get Episodes airing in next 2 days
|
||||
### Show upcoming movie releases in the next 2 days
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
|
@ -1,6 +1,6 @@
|
||||
---
|
||||
title: ReCollect Waste
|
||||
description: Instructions on how to set up Recollect Waste sensor within Home Assistant.
|
||||
description: Instructions on how to set up ReCollect Waste sensor within Home Assistant.
|
||||
ha_category:
|
||||
- Sensor
|
||||
ha_release: 0.87
|
||||
@ -8,24 +8,20 @@ ha_iot_class: Cloud Polling
|
||||
ha_domain: recollect_waste
|
||||
---
|
||||
|
||||
The `recollect_waste` integration allows you to track the next scheduled waste pickup and what type of waste from [Recollect](https://recollect.net/private-waste-haulers/). To use this sensor your city's waste company must be Recollect and you will need to find your place_id and service_id.
|
||||
The `recollect_waste` integration allows you to track the next scheduled waste pickup and what type of waste from [ReCollect](https://recollect.net/private-waste-haulers/).
|
||||
|
||||
1. In Chrome open developer tools and go to the network tab.
|
||||
2. Go to your city's Recollect collection calendar.
|
||||
3. Search for and select your address in the UI.
|
||||
4. Watch for a request that looks like
|
||||
To use this integration, you must know both your ReCollect Place and Service IDs. In general, cities/municipalities that utilize ReCollect will give you a way to subscribe to a calendar with pickup dates. If you examine the iCal URL for this calendar, the Place and Service IDs are embedded in it:
|
||||
|
||||
ht<span>tps://api.recollect.net/api/places/**(place_id)**/services/**(service_id)**/events?nomerge ...
|
||||
```text
|
||||
webcal://recollect.a.ssl.fastly.net/api/places/PLACE_ID/services/SERVICE_ID/events.en-US.ics
|
||||
```
|
||||
|
||||
5. Use the place_id and service_id when configuring the sensor.
|
||||
|
||||
The default frequency for pulling data from Recollect Waste is once a day (86400 seconds).
|
||||
The default frequency for pulling data from ReCollect Waste is once a day (86400 seconds).
|
||||
|
||||
<div class='note warning'>
|
||||
The Recollect Waste sensor uses the Recollect API <strong>URL</strong> to obtain data not an official API from Recollect. Use at your own risk.
|
||||
The ReCollect Waste sensor uses the ReCollect API <strong>URL</strong> to obtain data and not an official API from ReCollect. Use at your own risk.
|
||||
</div>
|
||||
|
||||
## Configuration
|
||||
|
||||
This integration can be configured via the Home Assistant UI by navigating to
|
||||
**Configuration** -> **Integrations**.
|
||||
This integration can be configured via the Home Assistant UI by navigating to **Configuration** -> **Integrations**.
|
||||
|
@ -99,7 +99,7 @@ Please refer to [here](https://github.com/NickWaterton/Roomba980-Python#how-to-g
|
||||
For Home Assistant Container, the following command retrieves the BLID (username) and password:
|
||||
|
||||
```shell
|
||||
docker exec -it CONTAINER_NAME_OR_ID python -c 'import roomba.entry_points; roomba.entry_points.password()' ROOMBA_IP
|
||||
docker exec -it CONTAINER_NAME_OR_ID python -c 'import roombapy.entry_points; roombapy.entry_points.password()' ROOMBA_IP
|
||||
```
|
||||
|
||||
<div class='note'>
|
||||
|
@ -3,7 +3,7 @@ title: "MQTT Scene"
|
||||
description: "Instructions on how to integrate MQTT scenes into Home Assistant."
|
||||
ha_category:
|
||||
- Scene
|
||||
ha_release: 0.119
|
||||
ha_release: 2020.12
|
||||
ha_iot_class: Configurable
|
||||
ha_domain: mqtt
|
||||
---
|
||||
|
@ -2,6 +2,7 @@
|
||||
title: Shelly
|
||||
description: Integrate Shelly devices
|
||||
ha_category:
|
||||
- Binary Sensor
|
||||
- Cover
|
||||
- Light
|
||||
- Sensor
|
||||
@ -108,4 +109,4 @@ Not all devices support all input events. You can check on [Shelly API Reference
|
||||
|
||||
- Only supports firmware 1.8 and later
|
||||
- Support for RGB devices is limited
|
||||
- Support for battery-powered devices is limited
|
||||
- Support for battery-powered devices is limited (also applies to USB powered Shelly H&T)
|
||||
|
@ -3,7 +3,7 @@ title: "SRP Energy"
|
||||
description: "How to integrate SRP Energy within Home Assistant."
|
||||
ha_category:
|
||||
- Energy
|
||||
ha_release: 0.119
|
||||
ha_release: 2020.12
|
||||
ha_iot_class: Cloud Polling
|
||||
---
|
||||
|
||||
|
@ -1,8 +1,10 @@
|
||||
---
|
||||
title: Tasmota (beta)
|
||||
title: Tasmota
|
||||
description: Instructions on how to integrate Tasmota with Home Assistant.
|
||||
ha_category:
|
||||
- Binary Sensor
|
||||
- Cover
|
||||
- Fan
|
||||
- Light
|
||||
- Sensor
|
||||
- Switch
|
||||
@ -19,19 +21,21 @@ This integration allows you to control [Tasmota](https://tasmota.github.io/docs/
|
||||
## Requirements
|
||||
|
||||
- MQTT server and the [MQTT integration](/integrations/mqtt/) set up in Home Assistant.
|
||||
- Tasmota devices flashed with version 9.1, or later.
|
||||
- Tasmota devices flashed with version 9.2, or later.
|
||||
- Tasmota devices configured for native discovery (`SetOption19 0`)
|
||||
|
||||
## Supported Features
|
||||
|
||||
Lights, relays, sensors, switches and buttons are supported.
|
||||
Tasmota Buttons, Fans, Lights, relays, Sensors, Shutters and Switches are supported.
|
||||
|
||||
- Lights will be added as Home Assistant `light` entities. Single channel Dimmers, RGB lights, RGB lights with Color Temperature control and RGB lights with White control are supported.
|
||||
- Relays will be added as Home Assistant `switch` entities, if `SetOption30 = 0`. If `SetOption30 = 1`, relays will be added as `light` entities.
|
||||
- Sensors will be added as Home Assistant `sensor` entities.
|
||||
- Switches will be added as Home Assistant `binary_sensor` entities or `automation triggers` depending by the `switchmode` used when `SetOption114` is enabled.
|
||||
- Buttons will be added as Home Assistant `automation triggers` when `SetOption73` is enabled.
|
||||
- Tasmota Buttons will be added as Home Assistant `automation triggers` when `SetOption73` is enabled.
|
||||
- Tasmota Lights will be added as Home Assistant `light` entities. Single channel Dimmers, RGB lights, RGB lights with Color Temperature control and RGB lights with White control are supported.
|
||||
- Tasmota Relays will be added as Home Assistant `switch` entities, if `SetOption30 0`. If `SetOption30 1`, relays will be added as `light` entities.
|
||||
- Tasmota Sensors will be added as Home Assistant `sensor` entities.
|
||||
- Tasmota Shutters will be added as Home Assistant `cover` entities. Currently only Shutter modes 1 to 4 are supported. Shutter mode 5 and Tuya shutters are not supported.
|
||||
- Tasmota Switches will be added as Home Assistant `binary_sensor` entities or `automation triggers` depending by the `switchmode` used when `SetOption114` is enabled.
|
||||
- The integration will also create up to eight Status Sensors, each one with a different information. Please note all the Status Sensors are disabled by default.
|
||||
- The fan functionality in Tasmota devices with module configured as iFan02 or iFan03 will be added as Home Assistant `fan` entities. Tuya fans are not supported.
|
||||
|
||||

|
||||
|
||||
|
@ -3,7 +3,7 @@ title: Twinkly
|
||||
description: Instructions on how to integrate Twinkly LED string to Home Assistant.
|
||||
ha_category:
|
||||
- Light
|
||||
ha_release: 0.119
|
||||
ha_release: 2020.12
|
||||
ha_config_flow: true
|
||||
ha_domain: twinkly
|
||||
ha_iot_class: Local pull
|
||||
|
@ -10,16 +10,11 @@ ha_domain: ubus
|
||||
|
||||
This is a presence detection scanner for [OpenWrt](https://openwrt.org/) using [ubus](https://wiki.openwrt.org/doc/techref/ubus). It scans for changes in `hostapd.*`, which will detect and report changes in devices connected to the access point on the router.
|
||||
|
||||
Before this scanner can be used you have to install the ubus RPC package on OpenWRT:
|
||||
Before this scanner can be used you have to install the ubus RPC packages on OpenWrt (versions older than 18.06.x do not require the `uhttpd-mod-ubus` package):
|
||||
|
||||
```bash
|
||||
opkg install rpcd-mod-file
|
||||
```
|
||||
|
||||
For OpenWrt version 18.06.x the package uhttpd-mod-ubus should also be installed:
|
||||
|
||||
```bash
|
||||
opkg install uhttpd-mod-ubus
|
||||
opkg update
|
||||
opkg install rpcd-mod-file uhttpd-mod-ubus
|
||||
```
|
||||
|
||||
And create on your OpenWrt device a read-only user to be used by setting up the ACL file `/usr/share/rpcd/acl.d/user.json`.
|
||||
|
@ -15,6 +15,7 @@ Currently supported and tested thermostats:
|
||||
|
||||
- ColorTouch T7900
|
||||
- ColorTouch T7850 (No Humidity control)
|
||||
- Explorer Mini T2000
|
||||
|
||||
Currently supported functionality:
|
||||
- Setting heat/cool temperature when the thermostat is in the appropriate mode.
|
||||
|
@ -122,3 +122,47 @@ This service allows for loading a preset saved on the WLED device.
|
||||
| `preset` | no | ID of the preset slot to load from. |
|
||||
|
||||
More information on presets [is documented in the WLED Wiki](https://github.com/Aircoookie/WLED/wiki/Presets)
|
||||
|
||||
## Example Automations
|
||||
|
||||
### Activating Random Effect
|
||||
|
||||
You can automate changing the effect using a service call like this:
|
||||
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
service: wled.effect
|
||||
data:
|
||||
entity_id: light.wled
|
||||
effect: "{{ state_attr('light.wled', 'effect_list') | random }}"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
||||
### Activating Random Palette
|
||||
|
||||
Activating a random palette is a bit more complicated as there is currently no way to obtain a list of available palettes.
|
||||
To go around this issue, one solution is to leverage the fact that palettes can be activated by their IDs.
|
||||
As the IDs are based on an incrementing counter, picking a random number between zero and the number of palettes minus one works.
|
||||
|
||||
To do this, the first step is to use [WLED's JSON API](https://github.com/Aircoookie/WLED/wiki/JSON-API) find out how many palettes the device supports:
|
||||
|
||||
```bash
|
||||
$ curl --silent http://<ip address of the wled device>/json | jq ".palettes | length"
|
||||
|
||||
54
|
||||
```
|
||||
|
||||
In this case (using WLED v0.11.0) there are 54 palettes, so the following service call will activate a random palette by its ID between 0 and 53:
|
||||
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
service: wled.effect
|
||||
data:
|
||||
entity_id: light.wled
|
||||
palette: "{{ range(0,53) | random }}"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
@ -98,7 +98,7 @@ binary_sensor:
|
||||
```
|
||||
|
||||
This example excludes Saturdays, Sundays and holidays. Two custom holidays are added.
|
||||
The date February 24th, 2020 is a Monday but will be excluded because it was added to the `add_holiday` configuration.
|
||||
The date February 24th, 2020 is a Monday but will be excluded because it was added to the `add_holidays` configuration.
|
||||
|
||||
```yaml
|
||||
# Example 2 configuration.yaml entry
|
||||
|
@ -154,16 +154,10 @@ This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot Vacuu
|
||||
|
||||
Use of Miio should be done before the Vacuum is connected to Mi Home. If you already connected to the app you will need to delete it and then join the ad-hoc Wi-Fi network the Vacuum creates. If the vacuum is already paired it's likely this method will only return `???` as your token.
|
||||
|
||||
You can install the command line tool using the following command:
|
||||
|
||||
```bash
|
||||
npm install -g miio
|
||||
```
|
||||
|
||||
Discovering devices on the current network:
|
||||
|
||||
```bash
|
||||
miio discover
|
||||
npx miio discover
|
||||
```
|
||||
|
||||
This will list devices that are connected to the same network as your computer. Let it run for a while so it has a chance to reach all devices, as it might take a minute or two for all devices to answer.
|
||||
|
@ -17,6 +17,7 @@ Supported devices:
|
||||
- [RX-V573](https://ca.yamaha.com/en/products/audio_visual/av_receivers_amps/rx-v573/specs.html)
|
||||
- [RX-V585](https://ca.yamaha.com/en/products/audio_visual/av_receivers_amps/rx-v585_u/specs.html)
|
||||
- [RX-V673](https://ca.yamaha.com/en/products/audio_visual/av_receivers_amps/rx-v673/specs.html)
|
||||
- [RX-V685](https://ca.yamaha.com/en/products/audio_visual/av_receivers_amps/rx-v585_u/specs.html)
|
||||
- [RX-V773](https://ca.yamaha.com/en/products/audio_visual/av_receivers_amps/rx-v773/specs.html)
|
||||
- And more
|
||||
|
||||
|
@ -10,9 +10,9 @@ ha_iot_class: Local Polling
|
||||
ha_domain: yamaha_musiccast
|
||||
---
|
||||
|
||||
The `yamaha_musiccast` platform allows you to control [Yamaha MusicCast Receivers](https://usa.yamaha.com/products/audio_visual/hifi_components/index.html) from Home Assistant.
|
||||
The `yamaha_musiccast` platform allows you to control [Yamaha MusicCast Receivers](https://usa.yamaha.com/products/audio_visual/musiccast/index.html) from Home Assistant.
|
||||
|
||||
Supported devices are listed on their [German site](https://de.yamaha.com/de/products/contents/audio_visual/musiccast/products.html).
|
||||
Supported devices are listed on their [site](https://usa.yamaha.com/products/contents/audio_visual/musiccast/musiccast-compatiblity.html).
|
||||
|
||||
To add a Yamaha MusicCast Receiver to your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
|
@ -11,20 +11,20 @@ The Plant Status card is for all the lovely botanists out there.
|
||||
Screenshot of the plant status card.
|
||||
</p>
|
||||
|
||||
To add the Plant Status card to your user interface, click the Lovelace menu (three dots at the top right of the screen) and then **Edit Dashboard**. Click the plus button in the bottom right corner and select **Plant Status** from the card picker. All options for this card can be configured via the user interface.
|
||||
To add the Plant Status card to your user interface, click the Lovelace menu (three dots at the top right of the screen) and then **Edit Dashboard**. Click the "Add Card" button in the bottom right corner and select **Plant Status** from the card picker. All options for this card can be configured via the user interface.
|
||||
|
||||
{% configuration %}
|
||||
type:
|
||||
required: true
|
||||
description: plant-status
|
||||
description: "`plant-status`"
|
||||
type: string
|
||||
entity:
|
||||
required: true
|
||||
description: "Entity id of `plant` domain"
|
||||
description: "Entity ID from `plant` domain"
|
||||
type: string
|
||||
name:
|
||||
required: false
|
||||
description: Overwrites Friendly Name
|
||||
description: Overwrites friendly name
|
||||
type: string
|
||||
default: Entity Name
|
||||
theme:
|
||||
|
123
source/_posts/2020-12-13-home-assistant-os-release-5.markdown
Normal file
@ -0,0 +1,123 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Home Assistant OS Release 5"
|
||||
description: "Improved name resolution, external data disk, more reliability and supporting 3 new devices!"
|
||||
date: 2020-12-13 00:00:00
|
||||
date_formatted: "December 13, 2020"
|
||||
author: Stefan Agner
|
||||
author_twitter: falstaff_ch
|
||||
comments: true
|
||||
categories: Release-Notes
|
||||
og_image: /images/blog/2020-12-13-os5/social.png
|
||||
---
|
||||
|
||||
<img src='/images/blog/2020-12-13-os5/social.png' style='border: 0;box-shadow: none;'>
|
||||
|
||||
Today we also release Home Assistant OS 5.8, the first stable version of the 5.x
|
||||
release series.
|
||||
|
||||
**Highlights**:
|
||||
|
||||
- Improved Multicast Name Resolution on OS level
|
||||
- External Data Disk Feature
|
||||
- Improved Reliability against Container corruption
|
||||
|
||||
- New support: Raspberry Pi 4 – 8GB
|
||||
- New support: ASUS Tinker Board S
|
||||
- New support: ODROID-C4
|
||||
- Improved: OVA Virtual image includes more drivers
|
||||
|
||||
## Table of contents
|
||||
|
||||
- [Table of contents](#table-of-contents)
|
||||
- [Operating System Changes](#operating-system-changes)
|
||||
- [Multicast Name Resolution](#multicast-name-resolution)
|
||||
- [External Data Disk](#external-data-disk)
|
||||
- [Improved Reliability](#improved-reliability)
|
||||
- [Under the Hood](#under-the-hood)
|
||||
- [Board Support](#board-support)
|
||||
- [Raspberry Pi](#raspberry-pi)
|
||||
- [ODROID](#odroid)
|
||||
- [Open Virtualization Appliance/Intel NUC](#open-virtualization-appliance-intel-nuc)
|
||||
- [New Board Support](#new-board-suport)
|
||||
- [Other Changes](#other-changes)
|
||||
|
||||
## Operating System Changes
|
||||
|
||||
### Multicast Name Resolution
|
||||
|
||||
Release 5 uses systemd-resolved to provide DNS services on the operating system
|
||||
level and acts as a multicast name resolution responder. Besides, mDNS
|
||||
systemd-resolved also supports the LLMNR hostname resolution protocol. In
|
||||
practice, this makes discovering a new installation of Home Assistant OS working
|
||||
in most situations, either using `http://homeassistant.local:8123` or
|
||||
`http://homeassistant:8123`.
|
||||
|
||||
### External Data Disk
|
||||
|
||||
In release 4 we introduced external data disk support. The command `datactl`
|
||||
allows moving the main data partition to any disk connected to the system. The
|
||||
boot partition and main operating system partitions stay on the boot medium
|
||||
(typically the SD card). Using this approach is more reliable than booting the
|
||||
system from USB. Booting from USB requires several parts of the software stack
|
||||
to rediscover the external storage. In release 5 we made the external data disk
|
||||
feature more robust and the initial moving process much faster. We plan to
|
||||
improve that feature even more and are happy to get your feedback!
|
||||
|
||||
### Improved Reliability
|
||||
|
||||
The main system service to start Home Assistant Supervisor is now more reliable.
|
||||
Home Assistant OS is now able to detect a corrupted supervisor container in most
|
||||
situations and automatically downloads a new version of it. File system checks
|
||||
have also been expanded to the boot partition, which makes sure that all file
|
||||
systems are being checked now.
|
||||
|
||||
### Under the Hood
|
||||
|
||||
Under the hood, we updated to Buildroot 2020.11, which brings tons of new software
|
||||
versions along with bug and security fixes. Some key components which received
|
||||
an update were systemd 246 and AppArmor version 3.0.
|
||||
|
||||
## Board Support
|
||||
|
||||
### Raspberry Pi
|
||||
|
||||
All Raspberry Pi versions now use Linux Kernel 5.4, just like Raspberry Pi OS.
|
||||
With the move to U-Boot 2020.10, we are now also supporting Raspberry Pi with 8GB
|
||||
of memory. With the new kernel and U-Boot Home Assistant OS can now also run on
|
||||
the Compute Module 4 as well as the Pi 400 (the keyboard). A keyboard is
|
||||
probably not the ideal form factor for a headless system such as Home Assistant
|
||||
OS, but it comes with good cooling, which makes it not the worst choice :-). We
|
||||
recently tested the 64-bit variant of Home Assistant OS much more and feel
|
||||
comfortable to recommend the 64-bit version for Raspberry Pi 4.
|
||||
|
||||
### ODROID
|
||||
|
||||
The ODROID platforms now use Linux 5.9, which brings improved support for all
|
||||
ODROID platforms such as the ODROID N2(+). For the N2(+) the Real-Time Clock is
|
||||
now supported as well.
|
||||
|
||||
### Open Virtualization Appliance/Intel NUC
|
||||
|
||||
The x86 platforms (Intel NUC, OVA - Open Virtualization Appliance) now use
|
||||
Linux 5.9. The kernel for OVA images has new drivers enabled for Intel Network
|
||||
devices with Virtual Function, PCIe passthrough for Hyper-V, or support for
|
||||
Audio (HDA audio devices).
|
||||
|
||||
### New Board Support
|
||||
|
||||
Besides the ASUS Tinker Board, we now also support the Tinker Board S, a variant
|
||||
with fast on-board eMMC storage. Thanks to [@ubergeek801] we now also have support
|
||||
for ODROID-C4, a cost-effective alternative to Raspberry Pi in a similar form
|
||||
factor.
|
||||
|
||||
## Other Changes
|
||||
|
||||
The build pipeline is now using GitHub Actions and we compress the images using
|
||||
the xz compression algorithm instead of gz. The flashing process will stay the
|
||||
same: Etcher supports flashing from gz as well as xz.
|
||||
|
||||
This is all I can think of for now. The release 5.8 will be on the stable
|
||||
channel today, so watch out for the update notification in the Supervisor
|
||||
section. Images are available in the release section over on
|
||||
[GitHub](https://github.com/home-assistant/operating-system/releases).
|
1408
source/_posts/2020-12-13-release-202012.markdown
Normal file
776
source/blue/index.html
Normal file
@ -18,17 +18,13 @@ Paulus Schoutsen, the founder of Home Assistant, will give the opening and closi
|
||||
|
||||
After the talks, attendees will be able to join various sessions about different topics like automations, Lovelace and Q&A with Home Assistant developers.
|
||||
|
||||
## Attending
|
||||
## Watch it back
|
||||
|
||||
The Home Assistant Conference will be hosted on [Hopin](https://hopin.to/events/home-assistant-conference), an online conference platform. Tickets to attend will cost $1, which will cover the cost of the platform.
|
||||
The conference is over! The live stream of the main stage is available below. All other videos will come online when we have time.
|
||||
|
||||
<a class="btn" href="https://hopin.to/events/home-assistant-conference">Get your ticket</a>
|
||||
|
||||
The conference will also be available as a free YouTube live stream. The live stream will be limited to the keynotes and the "everyone" track. You won't have access to the chat and have that online conference feeling, so we recommend getting a ticket!
|
||||
|
||||
To be notified when the live stream is online, [visit YouTube](https://www.youtube.com/watch?v=xSB_MuKkgxE) and click "Set Reminder".
|
||||
|
||||
Recordings of the keynote and all tracks and sessions will be made available on YouTube after the conference.
|
||||
<div class="videoWrapper">
|
||||
<iframe width="853" height="480" src="https://www.youtube-nocookie.com/embed/xSB_MuKkgxE?start=231" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
|
||||
</div>
|
||||
|
||||
## Keynotes & Talks schedule
|
||||
|
||||
@ -44,3 +40,15 @@ The schedule is also available on our Hopin page. Which has more information
|
||||
available about our speakers.
|
||||
|
||||
[View the Home Assistant Conference schedule on Hopin](https://hopin.to/events/home-assistant-conference#schedule)
|
||||
|
||||
## Attending
|
||||
|
||||
The Home Assistant Conference will be hosted on [Hopin](https://hopin.to/events/home-assistant-conference), an online conference platform. Tickets to attend will cost $1, which will cover the cost of the platform.
|
||||
|
||||
<a class="btn" href="https://hopin.to/events/home-assistant-conference">Get your ticket</a>
|
||||
|
||||
The conference will also be available as a free YouTube live stream. The live stream will be limited to the keynotes and the "everyone" track. You won't have access to the chat and have that online conference feeling, so we recommend getting a ticket!
|
||||
|
||||
To be notified when the live stream is online, [visit YouTube](https://www.youtube.com/watch?v=xSB_MuKkgxE) and click "Set Reminder".
|
||||
|
||||
Recordings of the keynote and all tracks and sessions will be made available on YouTube after the conference.
|
||||
|
@ -46,7 +46,7 @@ You would then enter the IP address or hostname of your Home Assistant OS instan
|
||||
|
||||
### Installing and using the SSH add-on (requires enabling advanced mode for the HA user)
|
||||
|
||||
The Terminal & SSH add-on provides access over an SSH connection, and also inludes nano and vi editors. It can be installed from the add-on store's Official add-on repository after enabling advanced mode for your Home Assistant user's profile. Addtionally, this add-on provides access to the Home Assistant Command Line Interface (CLI) which provides custom commands for checking logs, stopping and starting Home Assistant and add-ons, creating/restoring snapshots, and more. (See [Home Assistant via Command Line](https://www.home-assistant.io/hassio/commandline/) for further info). The Terminal & SSH add-on does *not* provide access to the underlying host file system.
|
||||
The Terminal & SSH add-on provides access over an SSH connection, and also includes nano and vi editors. It can be installed from the add-on store's Official add-on repository after enabling advanced mode for your Home Assistant user's profile. Addtionally, this add-on provides access to the Home Assistant Command Line Interface (CLI) which provides custom commands for checking logs, stopping and starting Home Assistant and add-ons, creating/restoring snapshots, and more. (See [Home Assistant via Command Line](https://www.home-assistant.io/hassio/commandline/) for further info). The Terminal & SSH add-on does *not* provide access to the underlying host file system.
|
||||
|
||||
To use the add-on, enter a password or public key on its configuration page, then save and start the add-on.
|
||||
|
||||
@ -127,6 +127,8 @@ You often need a snapshot in case your system has crashed. If you only store the
|
||||
- [Google Drive Backup](https://github.com/sabeechen/hassio-google-drive-backup)
|
||||
|
||||
- [Dropbox Sync](https://github.com/danielwelch/hassio-dropbox-sync)
|
||||
|
||||
- [Nextcloud Backup](https://github.com/Sebclem/hassio-nextcloud-backup)
|
||||
|
||||
- [Samba backup](https://github.com/thomasmauerer/hassio-addons/tree/master/samba-backup)
|
||||
|
||||
|
@ -14,7 +14,7 @@ The following will take you through the steps required to install Home Assistant
|
||||
- [Raspberry Pi 4 Model B (1 GB, 2 GB and 4 GB model) 32-bit][pi4-32] (32-bit is required for GPIO support)
|
||||
- [Raspberry Pi 4 Model B (1 GB, 2 GB, 4 GB and 8 GB model) 64-bit][pi4-64] (64-bit is required for 8 GB model)
|
||||
- [Tinkerboard][tinker]
|
||||
- [Odroid-C2][odroid-c2], [Odroid-C4 (Beta)][odroid-c4], [Odroid-N2][odroid-n2], [Odroid-XU4][odroid-xu4]
|
||||
- [Odroid-C2][odroid-c2], [Odroid-C4][odroid-c4], [Odroid-N2][odroid-n2], [Odroid-XU4][odroid-xu4]
|
||||
- [Guide: Flashing Odroid-N2 using OTG-USB][otg-usb]
|
||||
- [Intel NUC][intel-nuc]
|
||||
|
||||
@ -30,6 +30,7 @@ The following will take you through the steps required to install Home Assistant
|
||||
- For Hyper-V create a new virtual machine, select "Generation 2", assign it at least 2 GB of memory and select "Connection -> "Your Virtual Switch that is bridged", then "Use an existing virtual hard disk" and select the VHDX file from above, after creation go to "Settings" -> "Security" and deselect "Enable Secure Boot".
|
||||
- For KVM create a new virtual machine in `virt-manager`, select "Import existing disk image", provide the path to the QCOW2 image above, choose "Generic Default" for the operating system, assign at least 2 GB memory and 1 vCPU, check the box for "Customize configuration before install" and select your bridge under "Network Selection", then under customization select "Overview" -> "Firmware" -> "UEFI x86_64: ...".
|
||||
- For Vmware Workstation create a new virtual machine, select "Custom", make it compatible with the default of Workstation and ESX, Choose "I will install the operating system later", select "Linux" -> "Other Linux 5.x or later kernel 64-bit", give it at least 2 GB RAM and 1vCPU, select "Use Bridged Networking" then "Use an existing virtual disk" and select the VMDK file above, after creation of VM go to "Settings" and "Options" then "Advanced" and select "Firmware type" to "UEFI".
|
||||
- For VMware ESXi/vSphere installation use the "E1001" or "E1001E" virtual network adapater. There are confirmed mDNS/Multicast discovery issues when using VMware's "VMXnet3" virtual network adapter.
|
||||
|
||||
3. Optional - set up the Wi-Fi or a static IP address. There are two possible places for that:
|
||||
- on a blank USB stick with a FAT32 partition having partition label `CONFIG`, while in its root directory, create the `network/my-network` file, or
|
||||
@ -87,12 +88,14 @@ To install the Terminal & SSH add-on, choose **Supervisor**, which is located in
|
||||
Use the web-based terminal or SSH to your Home Assistant system, or connect to the console, and run:
|
||||
|
||||
```bash
|
||||
ha core update --version=0.XX.X
|
||||
ha core update --version=X.Y.Z
|
||||
```
|
||||
|
||||
Replacing `X.Y.Z` with your desired version (i.e., `2020.12.0` or `0.118.5`).
|
||||
|
||||
## Run the beta version of Home Assistant
|
||||
|
||||
If you would like to test next release before anyone else, you can install the beta version released every three weeks:
|
||||
If you would like to test next release before anyone else, you can install the beta version released every month:
|
||||
|
||||
1. Backup your installation, using the snapshot functionality Home Assistant offers.
|
||||
2. Check the [Home Assistant Beta release notes](https://rc.home-assistant.io/latest-release-notes/) for breaking changes. Be sure to check all release notes between the version you are running and the one you are upgrading to. Use the search function in your browser (`CTRL + f`) and search for **Breaking Changes**.
|
||||
@ -102,24 +105,24 @@ If you would like to test next release before anyone else, you can install the b
|
||||
|
||||
[balenaEtcher]: https://www.balena.io/etcher
|
||||
[hassos-network]: https://github.com/home-assistant/operating-system/blob/dev/Documentation/network.md
|
||||
[pi3-32]: https://github.com/home-assistant/operating-system/releases/download/4.16/hassos_rpi3-4.16.img.gz
|
||||
[pi3-64]: https://github.com/home-assistant/operating-system/releases/download/4.16/hassos_rpi3-64-4.16.img.gz
|
||||
[pi4-32]: https://github.com/home-assistant/operating-system/releases/download/4.16/hassos_rpi4-4.16.img.gz
|
||||
[pi4-64]: https://github.com/home-assistant/operating-system/releases/download/4.16/hassos_rpi4-64-4.16.img.gz
|
||||
[tinker]: https://github.com/home-assistant/operating-system/releases/download/4.16/hassos_tinker-4.16.img.gz
|
||||
[odroid-c2]: https://github.com/home-assistant/operating-system/releases/download/4.16/hassos_odroid-c2-4.16.img.gz
|
||||
[odroid-c4]: https://github.com/home-assistant/operating-system/releases/download/5.5/hassos_odroid-c4-5.5.img.gz
|
||||
[odroid-n2]: https://github.com/home-assistant/operating-system/releases/download/4.16/hassos_odroid-n2-4.16.img.gz
|
||||
[odroid-xu4]: https://github.com/home-assistant/operating-system/releases/download/4.16/hassos_odroid-xu4-4.16.img.gz
|
||||
[intel-nuc]: https://github.com/home-assistant/operating-system/releases/download/4.16/hassos_intel-nuc-4.16.img.gz
|
||||
[vmdk]: https://github.com/home-assistant/operating-system/releases/download/4.16/hassos_ova-4.16.vmdk.gz
|
||||
[vhdx]: https://github.com/home-assistant/operating-system/releases/download/4.16/hassos_ova-4.16.vhdx.gz
|
||||
[vdi]: https://github.com/home-assistant/operating-system/releases/download/4.16/hassos_ova-4.16.vdi.gz
|
||||
[qcow2]: https://github.com/home-assistant/operating-system/releases/download/4.16/hassos_ova-4.16.qcow2.gz
|
||||
[Virtual Appliance]: https://github.com/home-assistant/operating-system/releases/download/4.16/hassos_ova-4.16.ova
|
||||
[pi3-32]: https://github.com/home-assistant/operating-system/releases/download/5.9/hassos_rpi3-5.9.img.xz
|
||||
[pi3-64]: https://github.com/home-assistant/operating-system/releases/download/5.9/hassos_rpi3-64-5.9.img.xz
|
||||
[pi4-32]: https://github.com/home-assistant/operating-system/releases/download/5.9/hassos_rpi4-5.9.img.xz
|
||||
[pi4-64]: https://github.com/home-assistant/operating-system/releases/download/5.9/hassos_rpi4-64-5.9.img.xz
|
||||
[tinker]: https://github.com/home-assistant/operating-system/releases/download/5.9/hassos_tinker-5.9.img.xz
|
||||
[odroid-c2]: https://github.com/home-assistant/operating-system/releases/download/5.9/hassos_odroid-c2-5.9.img.xz
|
||||
[odroid-c4]: https://github.com/home-assistant/operating-system/releases/download/5.9/hassos_odroid-c4-5.9.img.xz
|
||||
[odroid-n2]: https://github.com/home-assistant/operating-system/releases/download/5.9/hassos_odroid-n2-5.9.img.xz
|
||||
[odroid-xu4]: https://github.com/home-assistant/operating-system/releases/download/5.9/hassos_odroid-xu4-5.9.img.xz
|
||||
[intel-nuc]: https://github.com/home-assistant/operating-system/releases/download/5.9/hassos_intel-nuc-5.9.img.xz
|
||||
[vmdk]: https://github.com/home-assistant/operating-system/releases/download/5.9/hassos_ova-5.9.vmdk.xz
|
||||
[vhdx]: https://github.com/home-assistant/operating-system/releases/download/5.9/hassos_ova-5.9.vhdx.xz
|
||||
[vdi]: https://github.com/home-assistant/operating-system/releases/download/5.9/hassos_ova-5.9.vdi.xz
|
||||
[qcow2]: https://github.com/home-assistant/operating-system/releases/download/5.9/hassos_ova-5.9.qcow2.xz
|
||||
[Virtual Appliance]: https://github.com/home-assistant/operating-system/releases/download/5.9/hassos_ova-5.9.ova
|
||||
[local]: http://homeassistant.local:8123
|
||||
[samba]: /addons/samba/
|
||||
[ssh]: /addons/ssh/
|
||||
[pi-power]: https://www.raspberrypi.org/help/faqs/#powerReqs
|
||||
[configure]: /getting-started/configuration/
|
||||
[otg-usb]: hassio/flashing_n2_otg/
|
||||
[otg-usb]: /hassio/flashing_n2_otg/
|
||||
|
@ -50,6 +50,7 @@ Looking for [talking points](/help/talking-points/) or [trivia](/help/trivia)?
|
||||
Don't miss the regular [Home Assistant podcasts](https://hasspodcast.io/).
|
||||
|
||||
- [Why I use Home Assistant for open source home automation](https://opensource.com/article/20/11/home-assistant) - November 2020
|
||||
- [Home Assistant, the Python IoT hub](https://lwn.net/Articles/822350/) - June 2020
|
||||
- [Thomas-Krenn-Award 2020: Dino, Teckids und Home Assistant](https://www.thomas-krenn.com/de/tkmag/allgemein/gewinner-thomas-krenn-award-2020/) - June 2020
|
||||
- [Magical Smart Home Upgrade Lets Muggles Control Their Homes With a Wand Too](https://gizmodo.com/magical-smart-home-upgrade-lets-muggles-control-their-h-1833941228) - April 2019
|
||||
- [Thomas-Krenn-Award 2019 – The winners](https://www.thomas-krenn.com/de/tkmag/tk-insights/thomas-krenn-award-2019-gewinner/) - March 2019
|
||||
|
BIN
source/images/blog/2020-12-13-os5/social.png
Normal file
After Width: | Height: | Size: 109 KiB |
BIN
source/images/blog/2020-12/blueprint-ui.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
source/images/blog/2020-12/blueprints.png
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
source/images/blog/2020-12/disable-device.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
source/images/blog/2020-12/entity-areas.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
source/images/blog/2020-12/social.png
Normal file
After Width: | Height: | Size: 123 KiB |
BIN
source/images/blue/blue1.png
Normal file
After Width: | Height: | Size: 93 KiB |
BIN
source/images/blue/blue2.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
source/images/blue/blue3.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
source/images/blue/blue_3d.jpg
Normal file
After Width: | Height: | Size: 304 KiB |
BIN
source/images/blue/blue_dev_mode.png
Normal file
After Width: | Height: | Size: 270 KiB |
BIN
source/images/blue/blue_hero.jpg
Normal file
After Width: | Height: | Size: 382 KiB |
BIN
source/images/blue/blue_narrow.jpg
Normal file
After Width: | Height: | Size: 215 KiB |
BIN
source/images/blue/blue_zen_mode.png
Normal file
After Width: | Height: | Size: 258 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 43 KiB |
BIN
source/images/integrations/nest/accept_terms.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
source/images/integrations/nest/create_credentials.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
source/images/integrations/nest/create_project.png
Normal file
After Width: | Height: | Size: 107 KiB |
BIN
source/images/integrations/nest/create_subscription.png
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
source/images/integrations/nest/device_access.png
Normal file
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 50 KiB |
BIN
source/images/integrations/nest/device_access_pubsub_topic.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
source/images/integrations/nest/enable_api.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
source/images/integrations/nest/enable_events.png
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
source/images/integrations/nest/enable_sdm_api.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
source/images/integrations/nest/finished.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
source/images/integrations/nest/oauth_approve.png
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
source/images/integrations/nest/oauth_client_id.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
source/images/integrations/nest/oauth_confirm.png
Normal file
After Width: | Height: | Size: 86 KiB |
BIN
source/images/integrations/nest/oauth_created.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
source/images/integrations/nest/oauth_grant1.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
source/images/integrations/nest/oauth_grant2.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
source/images/integrations/nest/oauth_redirect_uri.png
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
source/images/integrations/nest/project_name.png
Normal file
After Width: | Height: | Size: 35 KiB |
@ -26,6 +26,18 @@ description:
|
||||
<a href="/latest-release-notes/">Release notes</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="recent-posts material-card text">
|
||||
<h1>Recent Blog Posts</h1>
|
||||
|
||||
{% for post in site.posts limit: 4 %}
|
||||
<li class="post" style="display: grid; font-size: 16px;">
|
||||
<a href="{{ post.url }}">{{ post.title }}</a>
|
||||
<small class="blog-date">{{ post.date_formatted }}</small>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="join-community material-card text">
|
||||
<h1>Join The Community</h1>
|
||||
We love to help with & talk about home automation.
|
||||
@ -37,13 +49,12 @@ description:
|
||||
</div>
|
||||
|
||||
<a
|
||||
class="material-card picture-promo"
|
||||
href="/conference/"
|
||||
style="
|
||||
background-image: url(/images/conference/frontpage-card.png);
|
||||
padding-top: 43%;
|
||||
"
|
||||
></a>
|
||||
class="material-card highlight-blog-post"
|
||||
href="/blog/2016/01/19/perfect-home-automation/"
|
||||
>
|
||||
Read our founder's vision for the perfect home automation
|
||||
<i class="icon-arrow-right"></i>
|
||||
</a>
|
||||
|
||||
<div class="material-card text">
|
||||
<h1>Alexa, turn on the lights</h1>
|
||||
@ -62,63 +73,63 @@ description:
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a
|
||||
class="material-card highlight-blog-post"
|
||||
href="/blog/2016/01/19/perfect-home-automation/"
|
||||
>
|
||||
Read our founder's vision for the perfect home automation
|
||||
<i class="icon-arrow-right"></i>
|
||||
</a>
|
||||
|
||||
<a
|
||||
class="material-card picture-promo"
|
||||
href="/blog/2019/08/06/home-assistant-cast/"
|
||||
style="background-image: url(/images/frontpage/cast-frontpage.png)"
|
||||
>
|
||||
<div class="caption">
|
||||
<div class="title">Take over all the screens</div>
|
||||
<div class="subtitle">
|
||||
Home Assistant Cast makes each TV a display.
|
||||
<div class="title">
|
||||
Take over all the screens
|
||||
<div class="subtitle">
|
||||
Home Assistant Cast makes each TV a display.
|
||||
</div>
|
||||
</div>
|
||||
<svg viewBox="0 0 24 24"><path d="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z" /></svg>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="grid__item two-thirds lap-two-thirds palm-one-whole">
|
||||
<div class="recent-posts material-card text">
|
||||
<h1>Recent Blog Posts</h1>
|
||||
|
||||
{% for post in site.posts limit: 4 %}
|
||||
<li class="post">
|
||||
<a href="{{ post.url }}">{{ post.title }}</a>
|
||||
<small class="blog-date">{{ post.date_formatted }}</small>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<a
|
||||
class="material-card picture-promo"
|
||||
href="/blog/2019/11/22/state-of-the-union/"
|
||||
href="/blue"
|
||||
style="
|
||||
background-image: url(/images/frontpage/sotu2019-paulus.jpeg);
|
||||
background-image: url(/images/blue/blue_narrow.jpg);
|
||||
background-size: cover;
|
||||
background-color: #41bdf5;
|
||||
"
|
||||
>
|
||||
<div class="caption">
|
||||
<div class="title">State of the Union 2019</div>
|
||||
<div class="subtitle">
|
||||
Learn why we do what we do and what is next.
|
||||
<div class="title">
|
||||
Home Assistant Blue!
|
||||
<div class="subtitle">
|
||||
Where style and performance meet privacy
|
||||
</div>
|
||||
</div>
|
||||
<svg viewBox="0 0 24 24"><path d="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z" /></svg>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a
|
||||
class="material-card highlight-blog-post large"
|
||||
href="/blog/2017/07/25/introducing-hassio/"
|
||||
class="material-card picture-promo"
|
||||
href="/conference/"
|
||||
style="
|
||||
background-image: url(/images/conference/frontpage-card.png);
|
||||
background-size: cover;
|
||||
background-color: #41bdf5;
|
||||
background-position: top;
|
||||
"
|
||||
>
|
||||
Learn how our OS can turn your Raspberry Pi into the ultimate home
|
||||
automation hub
|
||||
<i class="icon-arrow-right"></i>
|
||||
<div class="caption">
|
||||
<div class="title">
|
||||
December 13, 2020
|
||||
<div class="subtitle">
|
||||
It's all about Home Assistant!
|
||||
</div>
|
||||
</div>
|
||||
<svg viewBox="0 0 24 24"><path d="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z" /></svg>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a
|
||||
@ -129,10 +140,13 @@ description:
|
||||
"
|
||||
>
|
||||
<div class="caption">
|
||||
<div class="title">Home Assistant Tags</div>
|
||||
<div class="subtitle">
|
||||
Use NFC to bring music to your life or automate the mundane.
|
||||
<div class="title">
|
||||
Home Assistant Tags
|
||||
<div class="subtitle">
|
||||
Use NFC to bring music to your life or automate the mundane.
|
||||
</div>
|
||||
</div>
|
||||
<svg viewBox="0 0 24 24"><path d="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z" /></svg>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
@ -142,10 +156,13 @@ description:
|
||||
style="background-image: url(/images/merchandise/shirt-frontpage.png)"
|
||||
>
|
||||
<div class="caption">
|
||||
<div class="title">Join the Home Assistant t-shirt revolution!</div>
|
||||
<div class="subtitle">
|
||||
Look sharp in blue, black or gray. Wearing a HA t-shirt is okay.
|
||||
<div class="title">
|
||||
Join the Home Assistant t-shirt revolution!
|
||||
<div class="subtitle">
|
||||
Look sharp in blue, black or gray. Wearing a HA t-shirt is okay.
|
||||
</div>
|
||||
</div>
|
||||
<svg viewBox="0 0 24 24"><path d="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z" /></svg>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
@ -17,7 +17,7 @@ entity: light.living_room
|
||||
{% configuration state_label %}
|
||||
type:
|
||||
required: true
|
||||
description: entity-button
|
||||
description: state-label
|
||||
type: string
|
||||
entity:
|
||||
required: true
|
||||
|
@ -10,7 +10,7 @@ for it to work properly.
|
||||
|
||||
The current minimum supported version of Docker is: `19.03.0`.
|
||||
|
||||
However, the future set changes and improves over time and therefore, the minimal
|
||||
However, the feature set changes and improves over time and therefore, the minimal
|
||||
required version may change in the future. When that happens, it will be communicated
|
||||
before we publish a version that will require you to upgrade Docker.
|
||||
|
||||
|
@ -10,7 +10,7 @@ to be able to do everything it needs to do.
|
||||
|
||||
## The solution
|
||||
|
||||
If you are running an older version of our Home Assistant OS, update it the
|
||||
If you are running an older version of our Home Assistant OS, update it in the
|
||||
supervisor panel.
|
||||
|
||||
If this is not our Home Assistant OS, you need to re-run our
|
||||
|