mirror of
https://github.com/home-assistant/home-assistant.io.git
synced 2025-07-24 09:46:59 +00:00
Merge branch 'current' into next
This commit is contained in:
commit
3feb54c3c7
@ -1,36 +0,0 @@
|
||||
FROM ruby:2.6
|
||||
|
||||
# Avoid warnings by switching to noninteractive
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Use Bash as the default shell
|
||||
ENV SHELL=/bin/bash
|
||||
|
||||
# Set an environment variable to be able to detect we are in dev container
|
||||
ENV DEVCONTAINER=true
|
||||
|
||||
# Locale env vars
|
||||
ENV \
|
||||
LANG=en_US.UTF-8 \
|
||||
LANGUAGE=en_US:en \
|
||||
LC_ALL=en_US.UTF-8
|
||||
|
||||
# Install git, process tools
|
||||
RUN apt update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
ack \
|
||||
git \
|
||||
locales \
|
||||
procps \
|
||||
&& echo "en_US UTF-8" > /etc/locale.gen \
|
||||
&& locale-gen en_US.UTF-8 \
|
||||
&& echo 'export PS1="\\w\$ "' > /root/.bashrc \
|
||||
&& apt-get autoremove -y \
|
||||
&& apt-get clean -y \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install the specific version of bundler we need
|
||||
RUN gem install bundler -v 2.0.1
|
||||
|
||||
# Switch back to dialog for any ad-hoc use of apt-get
|
||||
ENV DEBIAN_FRONTEND=dialog
|
@ -1,8 +1,10 @@
|
||||
{
|
||||
"name": "home-assistant.io",
|
||||
"dockerFile": "Dockerfile",
|
||||
"context": "..",
|
||||
"dockerFile": "../Dockerfile",
|
||||
"appPort": [4000],
|
||||
"postCreateCommand": "bundle install",
|
||||
"postCreateCommand": "bundle install && npm install",
|
||||
"containerEnv": {"DEVCONTAINER": "true"},
|
||||
"extensions": [
|
||||
"davidanson.vscode-markdownlint",
|
||||
"editorconfig.editorconfig",
|
||||
@ -17,6 +19,6 @@
|
||||
"errorLens.gutterIconsEnabled": true,
|
||||
"errorLens.addAnnotationTextPrefixes": false,
|
||||
"errorLens.enabledDiagnosticLevels": ["error", "warning"],
|
||||
"terminal.integrated.shell.linux": "/bin/bash"
|
||||
"terminal.integrated.shell.linux": "/usr/bin/zsh",
|
||||
}
|
||||
}
|
||||
|
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
@ -8,7 +8,7 @@ jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v3.0.15
|
||||
- uses: actions/stale@v3.0.16
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
days-before-stale: 60
|
||||
|
8
.github/workflows/test.yml
vendored
8
.github/workflows/test.yml
vendored
@ -14,7 +14,7 @@ jobs:
|
||||
with:
|
||||
node-version: 12.x
|
||||
- name: Setup NPM cache
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v2.1.4
|
||||
with:
|
||||
path: ~/.npm
|
||||
key: npm-${{ hashFiles('**/package-lock.json') }}
|
||||
@ -37,7 +37,7 @@ jobs:
|
||||
with:
|
||||
node-version: 12.x
|
||||
- name: Setup NPM cache
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v2.1.4
|
||||
with:
|
||||
path: ~/.npm
|
||||
key: npm-${{ hashFiles('**/package-lock.json') }}
|
||||
@ -61,7 +61,7 @@ jobs:
|
||||
with:
|
||||
ruby-version: 2.6
|
||||
- name: Setup Ruby Gems cache
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v2.1.4
|
||||
with:
|
||||
path: vendor/bundle
|
||||
key: gems-${{ hashFiles('**/Gemfile.lock') }}
|
||||
@ -73,7 +73,7 @@ jobs:
|
||||
bundle config path vendor/bundle
|
||||
bundle install --jobs 4 --retry 3
|
||||
- name: Setting up Jekyll cache
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v2.1.4
|
||||
with:
|
||||
path: source/.jekyll-cache
|
||||
key: jekyll-${{ hashFiles('**/Gemfile.lock') }}-${{ hashFiles('**/_config.yml') }}
|
||||
|
29
Dockerfile
Normal file
29
Dockerfile
Normal file
@ -0,0 +1,29 @@
|
||||
ARG VARIANT=2.6
|
||||
FROM mcr.microsoft.com/vscode/devcontainers/ruby:${VARIANT}
|
||||
|
||||
# Install node
|
||||
COPY .nvmrc /tmp/.nvmrc
|
||||
RUN \
|
||||
su vscode -c \
|
||||
"source /usr/local/share/nvm/nvm.sh && nvm install $(cat /tmp/.nvmrc) 2>&1"
|
||||
|
||||
# Locale env vars
|
||||
ENV \
|
||||
LANG=en_US.UTF-8 \
|
||||
LANGUAGE=en_US:en \
|
||||
LC_ALL=en_US.UTF-8
|
||||
|
||||
# Install tools
|
||||
RUN \
|
||||
apt update \
|
||||
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||
ack \
|
||||
&& echo "en_US UTF-8" > /etc/locale.gen \
|
||||
&& locale-gen en_US.UTF-8 \
|
||||
&& apt-get autoremove -y \
|
||||
&& apt-get clean -y \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install the specific version of bundler we need
|
||||
COPY Gemfile.lock ./
|
||||
RUN gem install bundler -v `awk 'c&&c--;/BUNDLED WITH/{c=1}' Gemfile.lock`
|
2
Gemfile
2
Gemfile
@ -8,6 +8,8 @@ group :development do
|
||||
gem 'compass', '1.0.3'
|
||||
gem 'sass-globbing', '1.1.5'
|
||||
gem 'stringex', '2.8.5'
|
||||
# > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189
|
||||
gem 'sassc', '2.1.0'
|
||||
end
|
||||
|
||||
group :jekyll_plugins do
|
||||
|
@ -99,9 +99,9 @@ GEM
|
||||
sass (3.4.25)
|
||||
sass-globbing (1.1.5)
|
||||
sass (>= 3.1)
|
||||
sassc (2.4.0)
|
||||
sassc (2.1.0)
|
||||
ffi (~> 1.9)
|
||||
sassc (2.4.0-x64-mingw32)
|
||||
sassc (2.1.0-x64-mingw32)
|
||||
ffi (~> 1.9)
|
||||
sinatra (2.1.0)
|
||||
mustermann (~> 1.0)
|
||||
@ -133,6 +133,7 @@ DEPENDENCIES
|
||||
nokogiri (= 1.11.1)
|
||||
rake (= 13.0.3)
|
||||
sass-globbing (= 1.1.5)
|
||||
sassc (= 2.1.0)
|
||||
sinatra (= 2.1.0)
|
||||
stringex (= 2.8.5)
|
||||
tzinfo (~> 2.0)
|
||||
|
3
Rakefile
3
Rakefile
@ -60,7 +60,8 @@ task :preview, :listen do |t, args|
|
||||
listen_addr = args[:listen] || '127.0.0.1'
|
||||
listen_addr = '0.0.0.0' unless ENV['DEVCONTAINER'].nil?
|
||||
raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)
|
||||
puts "Starting to watch source with Jekyll and Compass. Starting Rack on port #{server_port}"
|
||||
puts "Starting to watch source with Jekyll and Compass."
|
||||
puts "Now listening on http://localhost:#{server_port}"
|
||||
system "compass compile --css-dir #{source_dir}/stylesheets" unless File.exist?("#{source_dir}/stylesheets/screen.css")
|
||||
jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll build -t --watch --incremental")
|
||||
compassPid = Process.spawn("compass watch")
|
||||
|
@ -102,8 +102,8 @@ social:
|
||||
# Home Assistant release details
|
||||
current_major_version: 2021
|
||||
current_minor_version: 2
|
||||
current_patch_version: 0
|
||||
date_released: 2021-02-03
|
||||
current_patch_version: 2
|
||||
date_released: 2021-02-09
|
||||
|
||||
# Either # or the anchor link to latest release notes in the blog post.
|
||||
# Must be prefixed with a # and have double quotes around it.
|
||||
|
179
package-lock.json
generated
179
package-lock.json
generated
@ -104,9 +104,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/ast-tester": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-2.3.1.tgz",
|
||||
"integrity": "sha512-L9M2VNTYJ5sVdkPs9jH7s01Gg900Nuk7m9zQmCz9WFa3YyzJFEd7GCSmAvLMgX31jw5bbvvmj7DngymlP+PahQ==",
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-2.3.2.tgz",
|
||||
"integrity": "sha512-4e1kyqsHks5POcQmuh7ITVrU/dbYyRUfQarQbeVRPP271n2HnlgnoYyZ10yV2Sb/Ksw+lQf7DPSnwNewXdCWww==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.1"
|
||||
@ -121,9 +121,9 @@
|
||||
}
|
||||
},
|
||||
"@textlint/ast-traverse": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-2.3.1.tgz",
|
||||
"integrity": "sha512-uOFKqm3M9by55Zl2ryZ7jOSiLdLhDmVgX0IG/MJfGKY1a/MSyt5qwy9cvZNcob6hNCPeRMW8boAH2uRJOwRcoQ==",
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-2.3.2.tgz",
|
||||
"integrity": "sha512-Dt1s/6x0XWhUNFH2rAa9gL6ODtq232BZuBHuHiOg+SrVwzl+VjOfa3fMQ0LoYixGSyDtwqAlksWcC0KyLz0eSw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.1"
|
||||
@ -138,22 +138,22 @@
|
||||
}
|
||||
},
|
||||
"@textlint/feature-flag": {
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-3.3.1.tgz",
|
||||
"integrity": "sha512-0a1UopFf30UrmEDKFNATXlotMqwbLGjJa1GTuljL/AKn2Adz7rPawclW4pHf/b//K7Da5GOtuzbIfVAZSFQRxA==",
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-3.3.2.tgz",
|
||||
"integrity": "sha512-7ErQ/UF0IBAd+PkQNBD7yYCDqL2o6leErMDENSWAgUHWLy5TcHr3Orn7qswtBMW5gIyXW9lh+EpllwLJ5qv35w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"map-like": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@textlint/fixer-formatter": {
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-3.3.1.tgz",
|
||||
"integrity": "sha512-ZPK66J61lv8UMdqJeG4YUPfKPlCom/jiv8kZkz5ELnLA587HLOlEIYLaNjKop0viW5z3Fz9cZd5glIHrPymiqQ==",
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-3.3.2.tgz",
|
||||
"integrity": "sha512-aTEyH/rHSzxRLrluSjNhDnMSgIYK60J5AAgprKJCkb9h3dDRuNoiJ+BXh5FXVSSm1tGF0d8pu+Ph8OFBgQOchQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/module-interop": "^1.2.1",
|
||||
"@textlint/types": "^1.5.1",
|
||||
"@textlint/module-interop": "^1.2.2",
|
||||
"@textlint/types": "^1.5.2",
|
||||
"chalk": "^1.1.3",
|
||||
"debug": "^4.3.1",
|
||||
"diff": "^4.0.2",
|
||||
@ -171,9 +171,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/types": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.1.tgz",
|
||||
"integrity": "sha512-YgPmxEeFUXuCjWOFx4p0afxFCHJbTf9Muw/6SJDLd/txQ6YrStst3Kvw+6QGefdJe44/UdiUYtI8sYa5T1ejaQ==",
|
||||
"version": "1.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.2.tgz",
|
||||
"integrity": "sha512-IdS0h2MCzdY+wjM0+qvl8IW/IxhmVFAVrGu5TmIBpJkihIV7WMa3ITFXIVb0oqwnePUmyLBRIVsCtC66E3QbfQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.1"
|
||||
@ -264,18 +264,18 @@
|
||||
}
|
||||
},
|
||||
"@textlint/kernel": {
|
||||
"version": "3.4.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-3.4.1.tgz",
|
||||
"integrity": "sha512-8ZpiLy5KgmIMjda7RNgbNzoHpDnF51OC0rmMBTUl5xFMrpOcmnKZ6qcnmP7hlyR1MQJxQVzG0PvWnLHFUZL53w==",
|
||||
"version": "3.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-3.4.2.tgz",
|
||||
"integrity": "sha512-PpxAtvLGI9ewn+Dbt4j0KMfmMM39/AY3cikmZffu59nyTdIymXMeVMEVkpVZTEUk5OlL27RAON9FF+2u+0fshg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.1",
|
||||
"@textlint/ast-tester": "^2.3.1",
|
||||
"@textlint/ast-traverse": "^2.3.1",
|
||||
"@textlint/feature-flag": "^3.3.1",
|
||||
"@textlint/source-code-fixer": "^3.4.1",
|
||||
"@textlint/types": "^1.5.1",
|
||||
"@textlint/utils": "^1.2.1",
|
||||
"@textlint/ast-tester": "^2.3.2",
|
||||
"@textlint/ast-traverse": "^2.3.2",
|
||||
"@textlint/feature-flag": "^3.3.2",
|
||||
"@textlint/source-code-fixer": "^3.4.2",
|
||||
"@textlint/types": "^1.5.2",
|
||||
"@textlint/utils": "^1.2.2",
|
||||
"debug": "^4.3.1",
|
||||
"deep-equal": "^1.1.1",
|
||||
"map-like": "^2.0.0",
|
||||
@ -289,9 +289,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/types": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.1.tgz",
|
||||
"integrity": "sha512-YgPmxEeFUXuCjWOFx4p0afxFCHJbTf9Muw/6SJDLd/txQ6YrStst3Kvw+6QGefdJe44/UdiUYtI8sYa5T1ejaQ==",
|
||||
"version": "1.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.2.tgz",
|
||||
"integrity": "sha512-IdS0h2MCzdY+wjM0+qvl8IW/IxhmVFAVrGu5TmIBpJkihIV7WMa3ITFXIVb0oqwnePUmyLBRIVsCtC66E3QbfQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.1"
|
||||
@ -309,15 +309,15 @@
|
||||
}
|
||||
},
|
||||
"@textlint/linter-formatter": {
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-3.3.1.tgz",
|
||||
"integrity": "sha512-tBtOSfpZWr3AwIJ1vbBSD+fwB4JSEtCQIE+AgfFqO8eDMOssjxKgVtIPX9dwh3/+6vlc6KozBJjIfXoxLuaWlg==",
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-3.3.2.tgz",
|
||||
"integrity": "sha512-MRa8D1/x6pWycKTwb1QLjtY7GyjgcsYRfV0Gu0Aze5szCa3UDwZSewHycpcAGlIqr8AkqPRfyXi653M47eJ0rA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@azu/format-text": "^1.0.1",
|
||||
"@azu/style-format": "^1.0.0",
|
||||
"@textlint/module-interop": "^1.2.1",
|
||||
"@textlint/types": "^1.5.1",
|
||||
"@textlint/module-interop": "^1.2.2",
|
||||
"@textlint/types": "^1.5.2",
|
||||
"chalk": "^1.1.3",
|
||||
"concat-stream": "^1.6.2",
|
||||
"debug": "^4.3.1",
|
||||
@ -340,9 +340,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/types": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.1.tgz",
|
||||
"integrity": "sha512-YgPmxEeFUXuCjWOFx4p0afxFCHJbTf9Muw/6SJDLd/txQ6YrStst3Kvw+6QGefdJe44/UdiUYtI8sYa5T1ejaQ==",
|
||||
"version": "1.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.2.tgz",
|
||||
"integrity": "sha512-IdS0h2MCzdY+wjM0+qvl8IW/IxhmVFAVrGu5TmIBpJkihIV7WMa3ITFXIVb0oqwnePUmyLBRIVsCtC66E3QbfQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.1"
|
||||
@ -479,9 +479,9 @@
|
||||
}
|
||||
},
|
||||
"@textlint/markdown-to-ast": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-6.3.1.tgz",
|
||||
"integrity": "sha512-piqeTN6dzMr7ljlo7GbRBILMcZ8zW2H9raN48qH+HYhfrGZfEOmL5HAMMeF8h0sDz9CzTvZixEwGWLMdlwsb+A==",
|
||||
"version": "6.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-6.3.2.tgz",
|
||||
"integrity": "sha512-uwndF3PRJ48wTVAEDSy0IAEVJg/scxpdZ1r+QKeGuFfdtaGSrtcgROI6qiVU1g/WNyNfQw+DAA7F8HfM+pmleg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.1",
|
||||
@ -597,18 +597,18 @@
|
||||
}
|
||||
},
|
||||
"@textlint/module-interop": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-1.2.1.tgz",
|
||||
"integrity": "sha512-ZvxTTvEm7nmkRctWKREfvNvnVtRxRbdUms8cqkiYbP2K0fRIMacrWpL8z8cdkkdNZbaYciaUnyE3be7UD4J8EA==",
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-1.2.2.tgz",
|
||||
"integrity": "sha512-B8HPS129lOqzEpRcafYl/OJ2TDxfBw1jGfEhebzwt3kGoMd5pQVih+hUIOl+SfAmLWqCDEniaKn0gw1s+hjSXA==",
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/source-code-fixer": {
|
||||
"version": "3.4.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-3.4.1.tgz",
|
||||
"integrity": "sha512-FqL+xdjIU2hswS4Cmhf/bL7SWTpXkKoK/wb8Lmo9sNmEE481fc5Ey/s8JgxAaOHRpwOcmErGd16c3gXcG6Y2ow==",
|
||||
"version": "3.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-3.4.2.tgz",
|
||||
"integrity": "sha512-mSGQNO8is21KcHgDh4S8Cx88r7uU+7xpzHLuEuzhgEZfgwz3+tnpk22TrEjNYe1V1+aseU9iCQegVQQr1wroKQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/types": "^1.5.1",
|
||||
"@textlint/types": "^1.5.2",
|
||||
"debug": "^4.3.1"
|
||||
},
|
||||
"dependencies": {
|
||||
@ -619,9 +619,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/types": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.1.tgz",
|
||||
"integrity": "sha512-YgPmxEeFUXuCjWOFx4p0afxFCHJbTf9Muw/6SJDLd/txQ6YrStst3Kvw+6QGefdJe44/UdiUYtI8sYa5T1ejaQ==",
|
||||
"version": "1.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.2.tgz",
|
||||
"integrity": "sha512-IdS0h2MCzdY+wjM0+qvl8IW/IxhmVFAVrGu5TmIBpJkihIV7WMa3ITFXIVb0oqwnePUmyLBRIVsCtC66E3QbfQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.1"
|
||||
@ -639,9 +639,9 @@
|
||||
}
|
||||
},
|
||||
"@textlint/text-to-ast": {
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-3.3.1.tgz",
|
||||
"integrity": "sha512-aN1IY3u98Wig2PTF/eEJdb7XfCH5VEwZagGdG1vajx6sdc7Sc3265UVv9uEB/ypJDteYnURRICfTd6NCGwkVGA==",
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-3.3.2.tgz",
|
||||
"integrity": "sha512-+DKAP62ho21KID8IcKy1kP6K+kUZk+Z0MwvS9u2l39J0cK+vX523KI+sA6AXxEhOMDA8zhdIsBf3onGvrAtyhA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.1"
|
||||
@ -656,21 +656,21 @@
|
||||
}
|
||||
},
|
||||
"@textlint/textlint-plugin-markdown": {
|
||||
"version": "5.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.3.1.tgz",
|
||||
"integrity": "sha512-IhQVGW9YqylkuZ4AjOfLFtOWHPXtLMhWTVfvIFzMQ2TIpquIaybws8KiFN2yZzLBNNduF+PFvm+H2NRhR0w/lQ==",
|
||||
"version": "5.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.3.2.tgz",
|
||||
"integrity": "sha512-6Ph7ESKR48tEz5Pnog3PpvF84LU3jkADvr4iBkkVz9vLQt3KbqGnmk8EV94Y0hLEX+UrZKWmH3cJfh6O1Zy/eA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/markdown-to-ast": "^6.3.1"
|
||||
"@textlint/markdown-to-ast": "^6.3.2"
|
||||
}
|
||||
},
|
||||
"@textlint/textlint-plugin-text": {
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.3.1.tgz",
|
||||
"integrity": "sha512-IqtO6TWOfVaw8sXMdVVwsvEYuqYk13ApKXBVjjJoLux0g+6G1rCEhFSZtopkrpC1Srr/OZCfb4nk8/zx+5M6Ng==",
|
||||
"version": "4.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.3.2.tgz",
|
||||
"integrity": "sha512-xnjad0bXaM6ZtgffuFKogHYkzXymUK3VTLP5MGA00kLitADlNUtwXQk82TebkXFcSPRhePU9+2XFipXNQDsg7g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/text-to-ast": "^3.3.1"
|
||||
"@textlint/text-to-ast": "^3.3.2"
|
||||
}
|
||||
},
|
||||
"@textlint/types": {
|
||||
@ -683,9 +683,9 @@
|
||||
}
|
||||
},
|
||||
"@textlint/utils": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-1.2.1.tgz",
|
||||
"integrity": "sha512-X/rLpqskTLWDPO5cvQO5CcA7zNnDimeBokwehiDwTg6aP9LYqFeOw5mKZ5lb4purY9zN9tLRxJGLle4Py1QobQ==",
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-1.2.2.tgz",
|
||||
"integrity": "sha512-7Mqcl9G9YYrPBv5d/tZ2NlWC66hTUpQEQxZEHDMTdF3gPmQUSNRNGjqUR9mhw00Wy8Wo6i3LUWuxwMT6heHNBQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/mdast": {
|
||||
@ -1116,9 +1116,9 @@
|
||||
"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==",
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
|
||||
"integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"function-bind": "^1.1.1",
|
||||
@ -1156,9 +1156,9 @@
|
||||
}
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.2.4",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
|
||||
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
|
||||
"version": "4.2.5",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.5.tgz",
|
||||
"integrity": "sha512-kBBSQbz2K0Nyn+31j/w36fUfxkBW9/gfwRWdUY1ULReH3iokVJgddZAFcD1D0xlgTmFxJCbUkUclAlc6/IDJkw==",
|
||||
"dev": true
|
||||
},
|
||||
"has": {
|
||||
@ -1352,11 +1352,12 @@
|
||||
"dev": true
|
||||
},
|
||||
"is-regex": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
|
||||
"integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz",
|
||||
"integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"call-bind": "^1.0.2",
|
||||
"has-symbols": "^1.0.1"
|
||||
}
|
||||
},
|
||||
@ -2533,22 +2534,22 @@
|
||||
"dev": true
|
||||
},
|
||||
"textlint": {
|
||||
"version": "11.8.1",
|
||||
"resolved": "https://registry.npmjs.org/textlint/-/textlint-11.8.1.tgz",
|
||||
"integrity": "sha512-FlXzJrR008O/H/ynCTVQnsaW2kX2I1zb/rIxkn0HIAoNxU/A4au+P4QJkeDg7FRE6h8qdlZjrXHx79MfSTWzDw==",
|
||||
"version": "11.8.2",
|
||||
"resolved": "https://registry.npmjs.org/textlint/-/textlint-11.8.2.tgz",
|
||||
"integrity": "sha512-YrTGagGzWKXYw6VjW4uhJ1y7LoW8zqWZIr8sWgeQVIFE84+G/cHPoZ8RhFlia+RZ4YryZPNOqevuF4vG+dbKNQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.1",
|
||||
"@textlint/ast-traverse": "^2.3.1",
|
||||
"@textlint/feature-flag": "^3.3.1",
|
||||
"@textlint/fixer-formatter": "^3.3.1",
|
||||
"@textlint/kernel": "^3.4.1",
|
||||
"@textlint/linter-formatter": "^3.3.1",
|
||||
"@textlint/module-interop": "^1.2.1",
|
||||
"@textlint/textlint-plugin-markdown": "^5.3.1",
|
||||
"@textlint/textlint-plugin-text": "^4.3.1",
|
||||
"@textlint/types": "^1.5.1",
|
||||
"@textlint/utils": "^1.2.1",
|
||||
"@textlint/ast-traverse": "^2.3.2",
|
||||
"@textlint/feature-flag": "^3.3.2",
|
||||
"@textlint/fixer-formatter": "^3.3.2",
|
||||
"@textlint/kernel": "^3.4.2",
|
||||
"@textlint/linter-formatter": "^3.3.2",
|
||||
"@textlint/module-interop": "^1.2.2",
|
||||
"@textlint/textlint-plugin-markdown": "^5.3.2",
|
||||
"@textlint/textlint-plugin-text": "^4.3.2",
|
||||
"@textlint/types": "^1.5.2",
|
||||
"@textlint/utils": "^1.2.2",
|
||||
"debug": "^4.3.1",
|
||||
"deep-equal": "^1.1.1",
|
||||
"file-entry-cache": "^5.0.1",
|
||||
@ -2576,9 +2577,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"@textlint/types": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.1.tgz",
|
||||
"integrity": "sha512-YgPmxEeFUXuCjWOFx4p0afxFCHJbTf9Muw/6SJDLd/txQ6YrStst3Kvw+6QGefdJe44/UdiUYtI8sYa5T1ejaQ==",
|
||||
"version": "1.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-1.5.2.tgz",
|
||||
"integrity": "sha512-IdS0h2MCzdY+wjM0+qvl8IW/IxhmVFAVrGu5TmIBpJkihIV7WMa3ITFXIVb0oqwnePUmyLBRIVsCtC66E3QbfQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@textlint/ast-node-types": "^4.4.1"
|
||||
|
@ -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.8.1",
|
||||
"textlint": "^11.8.2",
|
||||
"textlint-rule-common-misspellings": "^1.0.1",
|
||||
"textlint-rule-terminology": "^2.1.5"
|
||||
},
|
||||
|
@ -5,54 +5,54 @@
|
||||
{
|
||||
"appID": "UTQFCBPQRF.io.robbie.HomeAssistant.dev",
|
||||
"paths": [
|
||||
"/ios/*",
|
||||
"NOT /ios/beta",
|
||||
"NOT /ios/beta/*",
|
||||
"/ios/*",
|
||||
"/tag/*"
|
||||
]
|
||||
},
|
||||
{
|
||||
"appID": "UTQFCBPQRF.io.robbie.HomeAssistant.beta",
|
||||
"paths": [
|
||||
"/ios/*",
|
||||
"NOT /ios/beta",
|
||||
"NOT /ios/beta/*",
|
||||
"/ios/*",
|
||||
"/tag/*"
|
||||
]
|
||||
},
|
||||
{
|
||||
"appID": "UTQFCBPQRF.io.robbie.HomeAssistant",
|
||||
"paths": [
|
||||
"/ios/*",
|
||||
"NOT /ios/beta",
|
||||
"NOT /ios/beta/*",
|
||||
"/ios/*",
|
||||
"/tag/*"
|
||||
]
|
||||
},
|
||||
{
|
||||
"appID": "QMQYCKL255.io.robbie.HomeAssistant.dev",
|
||||
"paths": [
|
||||
"/ios/*",
|
||||
"NOT /ios/beta",
|
||||
"NOT /ios/beta/*",
|
||||
"/ios/*",
|
||||
"/tag/*"
|
||||
]
|
||||
},
|
||||
{
|
||||
"appID": "QMQYCKL255.io.robbie.HomeAssistant.beta",
|
||||
"paths": [
|
||||
"/ios/*",
|
||||
"NOT /ios/beta",
|
||||
"NOT /ios/beta/*",
|
||||
"/ios/*",
|
||||
"/tag/*"
|
||||
]
|
||||
},
|
||||
{
|
||||
"appID": "QMQYCKL255.io.robbie.HomeAssistant",
|
||||
"paths": [
|
||||
"/ios/*",
|
||||
"NOT /ios/beta",
|
||||
"NOT /ios/beta/*",
|
||||
"/ios/*",
|
||||
"/tag/*"
|
||||
]
|
||||
}
|
||||
|
@ -3,75 +3,11 @@ title: "Automation Templating"
|
||||
description: "Advanced automation documentation using templating."
|
||||
---
|
||||
|
||||
In Home Assistant 0.19 we introduced a new powerful feature: variables in scripts and automations. This makes it possible to adjust your condition and action based on the information of the trigger.
|
||||
|
||||
The trigger data made is available during [template](/docs/configuration/templating/) rendering as the `trigger` variable.
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
# Example configuration.yaml entries
|
||||
automation:
|
||||
trigger:
|
||||
platform: state
|
||||
entity_id: device_tracker.paulus
|
||||
action:
|
||||
service: notify.notify
|
||||
data:
|
||||
message: >
|
||||
Paulus just changed from {{ trigger.from_state.state }}
|
||||
to {{ trigger.to_state.state }}
|
||||
|
||||
automation 2:
|
||||
trigger:
|
||||
platform: mqtt
|
||||
topic: /notify/+
|
||||
action:
|
||||
service: >
|
||||
notify.{{ trigger.topic.split('/')[-1] }}
|
||||
data:
|
||||
message: "{{ trigger.payload }}"
|
||||
|
||||
automation 3:
|
||||
trigger:
|
||||
# Multiple entities for which you want to perform the same action.
|
||||
- platform: state
|
||||
entity_id:
|
||||
- light.bedroom_closet
|
||||
- light.kiddos_closet
|
||||
- light.linen_closet
|
||||
to: "on"
|
||||
# Trigger when someone leaves one of those lights on for 10 minutes.
|
||||
for: "00:10:00"
|
||||
action:
|
||||
- service: light.turn_off
|
||||
data:
|
||||
# Turn off whichever entity triggered the automation.
|
||||
entity_id: "{{ trigger.entity_id }}"
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
## Important Template Rules
|
||||
|
||||
There are a few very important rules to remember when writing automation templates:
|
||||
|
||||
1. You **must** surround single-line templates with double quotes (`"`) or single quotes (`'`).
|
||||
1. It is advised that you prepare for undefined variables by using `if ... is not none` or the [`default` filter](http://jinja.pocoo.org/docs/dev/templates/#default), or both.
|
||||
1. It is advised that when comparing numbers, you convert the number(s) to a [`float`](http://jinja.pocoo.org/docs/dev/templates/#float) or an [`int`](http://jinja.pocoo.org/docs/dev/templates/#int) by using the respective [filter](http://jinja.pocoo.org/docs/dev/templates/#list-of-builtin-filters).
|
||||
1. While the [`float`](http://jinja.pocoo.org/docs/dev/templates/#float) and [`int`](http://jinja.pocoo.org/docs/dev/templates/#int) filters do allow a default fallback value if the conversion is unsuccessful, they do not provide the ability to catch undefined variables.
|
||||
|
||||
Remembering these simple rules will help save you from many headaches and endless hours of frustration when using automation templates.
|
||||
|
||||
## Trigger State Object
|
||||
|
||||
Knowing how to access the [state object](/docs/configuration/state_object/) of a trigger entity can be useful in automations. Here are a few ways to access the [`state`](#state), [`numeric state`](#numeric-state) and [`template`](#template) triggers:
|
||||
|
||||
* `trigger.from_state` will return the **previous** [state object](/docs/configuration/state_object/) of the entity.
|
||||
* `trigger.to_state` will return the **new** [state object](/docs/configuration/state_object/) that triggered trigger.
|
||||
* `states[trigger.to_state.entity_id]` will return the **current** [state object](/docs/configuration/state_object/) of the entity.
|
||||
Automations support [templating](/docs/configuration/templating/) in the same way as scripts do. In addition to the [Home Assistant template extensions](/docs/configuration/templating/#home-assistant-template-extensions) available to scripts, the `trigger` template variable is available.
|
||||
|
||||
<div class='note'>
|
||||
|
||||
Be aware that if you reference a `trigger` state object in templates of automation `action`, attempting to test that automation by calling the `automation.trigger` service or by clicking EXECUTE in the More Info box for the automation will not work. This is because the trigger state object doesn't exist in those contexts. One way to test automations like these is to manually check that the templates work as expected by pasting them in Developer Tools > Template together with your trigger's definition like:
|
||||
Be aware that if you reference a `trigger` state object in templates of an automation' `action` or `condition` sections, attempting to test that automation by calling the `automation.trigger` service or by clicking EXECUTE in the More Info box for the automation will not work. This is because the trigger state object doesn't exist in those contexts. One way to test automations like these is to manually check that the templates work as expected by pasting them in Developer Tools > Template together with your trigger's definition like:
|
||||
|
||||
{%raw%}
|
||||
```yaml
|
||||
@ -180,4 +116,49 @@ The following tables show the available trigger data per platform.
|
||||
| `trigger.zone` | State object of zone
|
||||
| `trigger.event` | Event that trigger observed: `enter` or `leave`.
|
||||
|
||||
## Examples
|
||||
|
||||
{% raw %}
|
||||
```yaml
|
||||
# Example configuration.yaml entries
|
||||
automation:
|
||||
trigger:
|
||||
platform: state
|
||||
entity_id: device_tracker.paulus
|
||||
action:
|
||||
service: notify.notify
|
||||
data:
|
||||
message: >
|
||||
Paulus just changed from {{ trigger.from_state.state }}
|
||||
to {{ trigger.to_state.state }}
|
||||
|
||||
automation 2:
|
||||
trigger:
|
||||
platform: mqtt
|
||||
topic: /notify/+
|
||||
action:
|
||||
service: >
|
||||
notify.{{ trigger.topic.split('/')[-1] }}
|
||||
data:
|
||||
message: "{{ trigger.payload }}"
|
||||
|
||||
automation 3:
|
||||
trigger:
|
||||
# Multiple entities for which you want to perform the same action.
|
||||
- platform: state
|
||||
entity_id:
|
||||
- light.bedroom_closet
|
||||
- light.kiddos_closet
|
||||
- light.linen_closet
|
||||
to: "on"
|
||||
# Trigger when someone leaves one of those lights on for 10 minutes.
|
||||
for: "00:10:00"
|
||||
action:
|
||||
- service: light.turn_off
|
||||
data:
|
||||
# Turn off whichever entity triggered the automation.
|
||||
entity_id: "{{ trigger.entity_id }}"
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
[state object]: /docs/configuration/state_object/
|
||||
|
@ -117,6 +117,8 @@ automation:
|
||||
|
||||
If you want to migrate your manual automations to use the editor, you'll have to copy them to `automations.yaml`. Make sure that `automations.yaml` remains a list! For each automation that you copy over, you'll have to add an `id`. This can be any string as long as it's unique.
|
||||
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
# Example automations.yaml entry. Note, automations.yaml is always a list!
|
||||
- id: my_unique_id # <-- Required for editor to work, for automations created with the editor the id will be automatically generated.
|
||||
@ -131,11 +133,13 @@ If you want to migrate your manual automations to use the editor, you'll have to
|
||||
entity_id: sensor.temperature
|
||||
above: 17
|
||||
below: 25
|
||||
value_template: '{% raw %}{{ float(state.state) + 2 }}{% endraw %}'
|
||||
value_template: "{{ float(state.state) + 2 }}"
|
||||
action:
|
||||
- service: light.turn_on
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
||||
### Deleting Automations
|
||||
|
||||
When automations remain visible in the Home Assistant Dashboard, even after having deleted in the YAML file, you have to delete them in the UI.
|
||||
|
@ -96,7 +96,7 @@ a default value and also provide a [selector](/docs/blueprint/selectors/) that
|
||||
ensures a matching input field in the user interface.
|
||||
|
||||
Each input field can be referred to, outside of the blueprint metadata, using
|
||||
the `!input` custom tag.
|
||||
the `!input` custom YAML tag.
|
||||
|
||||
The following example shows a minimal blueprint with a single input:
|
||||
|
||||
@ -117,6 +117,19 @@ was used in the user interface, a text input field would be shown to the user.
|
||||
|
||||
A blueprint can have as many inputs as you like.
|
||||
|
||||
### Blueprint inputs in templates
|
||||
|
||||
The inputs are available as custom YAML tags, but not as template variables.
|
||||
To use a blueprint input in a template, it first needs to be exposed as either
|
||||
a [script level variable](/integrations/script/#-configuration-variables) or in
|
||||
a [variable script step](/docs/scripts/#variables).
|
||||
|
||||
```yaml
|
||||
variables:
|
||||
# Make input my_input available as a script level variable
|
||||
my_input: !input my_input
|
||||
```
|
||||
|
||||
## Example blueprints
|
||||
|
||||
The [built-in blueprints][blueprint-built-in]
|
||||
|
@ -54,7 +54,7 @@ blueprint:
|
||||
|
||||
Now we have to decide what steps we want to make configurable. We want to make it as re-usable as possible, without losing its original intent of turning on a light-based on a motion sensor.
|
||||
|
||||
Configurable parts in blueprints are called inputs. To make the motion sensor entity configurable, we're replacing the entity ID with a custom YAML tag `!input`. This YAML tag has to be combined with the name of the input:
|
||||
Configurable parts in blueprints are called [inputs](/docs/blueprint/schema/#blueprint-inputs). To make the motion sensor entity configurable, we're replacing the entity ID with a custom YAML tag `!input`. This YAML tag has to be combined with the name of the input:
|
||||
|
||||
```yaml
|
||||
trigger:
|
||||
|
@ -44,6 +44,17 @@ script:
|
||||
```
|
||||
{% endraw %}
|
||||
|
||||
### Important Template Rules
|
||||
|
||||
There are a few very important rules to remember when adding templates to YAML:
|
||||
|
||||
1. You **must** surround single-line templates with double quotes (`"`) or single quotes (`'`).
|
||||
1. It is advised that you prepare for undefined variables by using `if ... is not none` or the [`default` filter](http://jinja.pocoo.org/docs/dev/templates/#default), or both.
|
||||
1. It is advised that when comparing numbers, you convert the number(s) to a [`float`](http://jinja.pocoo.org/docs/dev/templates/#float) or an [`int`](http://jinja.pocoo.org/docs/dev/templates/#int) by using the respective [filter](http://jinja.pocoo.org/docs/dev/templates/#list-of-builtin-filters).
|
||||
1. While the [`float`](http://jinja.pocoo.org/docs/dev/templates/#float) and [`int`](http://jinja.pocoo.org/docs/dev/templates/#int) filters do allow a default fallback value if the conversion is unsuccessful, they do not provide the ability to catch undefined variables.
|
||||
|
||||
Remembering these simple rules will help save you from many headaches and endless hours of frustration when using automation templates.
|
||||
|
||||
## Home Assistant template extensions
|
||||
|
||||
Extensions allow templates to access all of the Home Assistant specific states and adds other convenience functions and filters.
|
||||
|
@ -422,7 +422,7 @@ Setting up a device tracker:
|
||||
"state_topic": "homeassistant/device_tracker/paulus/state",
|
||||
"payload_home": "home",
|
||||
"payload_not_home": "not_home",
|
||||
"source_type": "bluetooth",
|
||||
"source_type": "bluetooth"
|
||||
}
|
||||
```
|
||||
|
||||
@ -438,6 +438,6 @@ If the device supports gps co-ordinates then they can be sent to Home Assistant
|
||||
{
|
||||
"latitude": 32.87336,
|
||||
"longitude": -117.22743,
|
||||
"gps_accuracy": 1.2,
|
||||
"gps_accuracy": 1.2
|
||||
}
|
||||
```
|
||||
|
@ -5,6 +5,8 @@ description: "Documentation for the Home Assistant Script Syntax."
|
||||
|
||||
Scripts are a sequence of actions that Home Assistant will execute. Scripts are available as an entity through the standalone [Script component] but can also be embedded in [automations] and [Alexa/Amazon Echo] configurations.
|
||||
|
||||
When the script is executed within an automation the `trigger` variable is available. See [Available-Trigger-Data](/docs/automation/templating/#available-trigger-data).
|
||||
|
||||
The script syntax basic structure is a list of key/value maps that contain actions. If a script contains only 1 action, the wrapping list can be omitted.
|
||||
|
||||
```yaml
|
||||
@ -62,7 +64,7 @@ Scripts may also use a shortcut syntax for activating scenes instead of calling
|
||||
|
||||
## Variables
|
||||
|
||||
The variables command allows you to set/override variables that will be accessible by templates in actions after it. See also [script variables] for how to define variables accessible in the entire script.
|
||||
The variables action allows you to set/override variables that will be accessible by templates in actions after it. See also [script variables] for how to define variables accessible in the entire script.
|
||||
|
||||
{% raw %}
|
||||
|
||||
@ -141,8 +143,6 @@ All forms accept templates.
|
||||
|
||||
These actions allow a script to wait for entities in the system to be in a certain state as specified by a template, or some event to happen as expressed by one or more triggers.
|
||||
|
||||
When used within an automation the `trigger` variable is available. See [Available-Trigger-Data](/docs/automation/templating/#available-trigger-data).
|
||||
|
||||
### Wait Template
|
||||
|
||||
This action evaluates the template, and if true, the script will continue. If not, then it will wait until it is true.
|
||||
@ -272,6 +272,8 @@ This action allows you to fire an event. Events can be used for many things. It
|
||||
You can also use event_data to fire an event with custom data. This could be used to pass data to another script awaiting
|
||||
an event trigger.
|
||||
|
||||
The `event_data` accepts templates.
|
||||
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
@ -285,7 +287,7 @@ an event trigger.
|
||||
|
||||
### Raise and Consume Custom Events
|
||||
|
||||
The following automation shows how to raise a custom event called `event_light_state_changed` with `entity_id` as the event data. The action part could be inside a script or an automation.
|
||||
The following automation example shows how to raise a custom event called `event_light_state_changed` with `entity_id` as the event data. The action part could be inside a script or an automation.
|
||||
|
||||
```yaml
|
||||
- alias: Fire Event
|
||||
@ -299,7 +301,7 @@ The following automation shows how to raise a custom event called `event_light_s
|
||||
state: "on"
|
||||
```
|
||||
|
||||
The following automation shows how to capture the custom event `event_light_state_changed`, and retrieve corresponding `entity_id` that was passed as the event data.
|
||||
The following automation example shows how to capture the custom event `event_light_state_changed` with an [Event Automation Trigger](/docs/automation/trigger#event-trigger), and retrieve corresponding `entity_id` that was passed as the event trigger data, see [Available-Trigger-Data](/docs/automation/templating/#available-trigger-data) for more details.
|
||||
|
||||
{% raw %}
|
||||
|
||||
|
@ -51,7 +51,7 @@ To use your Mi Temperature and Humidity sensor in your installation, add the fol
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
- platform: beewi_smartclim
|
||||
mac: 'xx:xx:xx:xx:xx:xx'
|
||||
mac: "xx:xx:xx:xx:xx:xx"
|
||||
```
|
||||
|
||||
{% configuration %}
|
||||
@ -73,6 +73,6 @@ A full configuration example could look like the one below:
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
- platform: beewi_smartclim
|
||||
mac: 'xx:xx:xx:xx:xx:xx'
|
||||
mac: "xx:xx:xx:xx:xx:xx"
|
||||
name: Garden
|
||||
```
|
||||
|
@ -195,7 +195,7 @@ binary_sensor:
|
||||
payload_not_available: "offline"
|
||||
qos: 0
|
||||
device_class: opening
|
||||
value_template: '{{ value_json.state }}'
|
||||
value_template: "{{ value_json.state }}"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
@ -117,8 +117,8 @@ You can play MP3 streams like net radios, FLAC files or videos from your local n
|
||||
service: media_player.play_media
|
||||
data:
|
||||
entity_id: media_player.chromecast
|
||||
media_content_type: 'video'
|
||||
media_content_id: 'http://192.168.0.100/movies/sample-video.mkv'
|
||||
media_content_type: "video"
|
||||
media_content_id: "http://192.168.0.100/movies/sample-video.mkv"
|
||||
```
|
||||
|
||||
```yaml
|
||||
@ -126,8 +126,8 @@ data:
|
||||
service: media_player.play_media
|
||||
data:
|
||||
entity_id: media_player.chromecast
|
||||
media_content_type: 'image/jpeg'
|
||||
media_content_id: 'http://via.placeholder.com/1024x600.jpg/0B6B94/FFFFFF/?text=Hello,%20Home%20Assistant!'
|
||||
media_content_type: "image/jpeg"
|
||||
media_content_id: "http://via.placeholder.com/1024x600.jpg/0B6B94/FFFFFF/?text=Hello,%20Home%20Assistant!"
|
||||
```
|
||||
|
||||
Extra media metadata (for example title, subtitle, artist or album name) can be passed into the service and that will be shown on the Chromecast display.
|
||||
@ -138,15 +138,15 @@ For the possible metadata types and values check [Google cast documentation > Me
|
||||
service: media_player.play_media
|
||||
data:
|
||||
entity_id: media_player.chromecast
|
||||
media_content_type: 'video/mp4'
|
||||
media_content_id: 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4'
|
||||
media_content_type: "video/mp4"
|
||||
media_content_id: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"
|
||||
extra:
|
||||
metadata:
|
||||
metadataType: 1
|
||||
title: 'Big Buck Bunny'
|
||||
subtitle: 'By Blender Foundation, Licensed under the Creative Commons Attribution license'
|
||||
title: "Big Buck Bunny"
|
||||
subtitle: "By Blender Foundation, Licensed under the Creative Commons Attribution license"
|
||||
images:
|
||||
- url: 'https://peach.blender.org/wp-content/uploads/watchtrailer.gif'
|
||||
- url: "https://peach.blender.org/wp-content/uploads/watchtrailer.gif"
|
||||
```
|
||||
|
||||
```yaml
|
||||
@ -154,15 +154,15 @@ data:
|
||||
service: media_player.play_media
|
||||
data:
|
||||
entity_id: media_player.chromecast
|
||||
media_content_type: 'audio/mp3'
|
||||
media_content_id: 'http://stream.tilos.hu:8000/tilos'
|
||||
media_content_type: "audio/mp3"
|
||||
media_content_id: "http://stream.tilos.hu:8000/tilos"
|
||||
extra:
|
||||
metadata:
|
||||
metadataType: 3
|
||||
title: 'Radio TILOS'
|
||||
artist: 'LIVE'
|
||||
title: "Radio TILOS"
|
||||
artist: "LIVE"
|
||||
images:
|
||||
- url: 'https://tilos.hu/images/kockalogo.png'
|
||||
- url: "https://tilos.hu/images/kockalogo.png"
|
||||
```
|
||||
|
||||
## Advanced use
|
||||
|
@ -57,7 +57,7 @@ sender:
|
||||
description: The name or number of the sender. (Limited to 11 characters.)
|
||||
required: false
|
||||
type: string
|
||||
default: 'hass'
|
||||
default: "hass"
|
||||
{% endconfiguration %}
|
||||
|
||||
To use notifications, please see the [getting started with automation page](/getting-started/automation/).
|
||||
|
@ -68,7 +68,7 @@ automation:
|
||||
- service: climate.set_preset_mode
|
||||
data:
|
||||
entity_id: climate.kitchen
|
||||
preset_mode: 'eco'
|
||||
preset_mode: "eco"
|
||||
```
|
||||
|
||||
### Service `climate.set_temperature`
|
||||
@ -157,7 +157,7 @@ automation:
|
||||
- service: climate.set_fan_mode
|
||||
data:
|
||||
entity_id: climate.kitchen
|
||||
fan_mode: 'On Low'
|
||||
fan_mode: "On Low"
|
||||
```
|
||||
|
||||
### Service `climate.set_hvac_mode`
|
||||
|
@ -68,7 +68,7 @@ Example usage in an automation, taking the album art present on a Chromecast and
|
||||
action:
|
||||
- service: color_extractor.turn_on
|
||||
data_template:
|
||||
color_extract_url: '{{ states.media_player.chromecast.attributes.entity_picture }}'
|
||||
color_extract_url: "{{ states.media_player.chromecast.attributes.entity_picture }}"
|
||||
entity_id: light.shelf_leds
|
||||
```
|
||||
|
||||
@ -85,7 +85,7 @@ With a nicer transition period of 5 seconds and setting brightness to 100% each
|
||||
action:
|
||||
- service: color_extractor.turn_on
|
||||
data_template:
|
||||
color_extract_url: '{{ states.media_player.chromecast.attributes.entity_picture }}'
|
||||
color_extract_url: "{{ states.media_player.chromecast.attributes.entity_picture }}"
|
||||
entity_id: light.shelf_leds
|
||||
brightness_pct: 100
|
||||
transition: 5
|
||||
|
@ -19,7 +19,7 @@ To use your Command binary sensor in your installation, add the following to you
|
||||
# Example configuration.yaml entry
|
||||
binary_sensor:
|
||||
- platform: command_line
|
||||
command: 'cat /proc/sys/net/ipv4/ip_forward'
|
||||
command: "cat /proc/sys/net/ipv4/ip_forward"
|
||||
```
|
||||
|
||||
<div class='note'>
|
||||
@ -81,7 +81,7 @@ Check the state of an [SickRage](https://github.com/sickragetv/sickrage) instanc
|
||||
binary_sensor:
|
||||
- platform: command_line
|
||||
command: 'netstat -na | find "33322" | find /c "LISTENING" > nul && (echo "Running") || (echo "Not running")'
|
||||
name: 'sickragerunning'
|
||||
name: "sickragerunning"
|
||||
device_class: moving
|
||||
payload_on: "Running"
|
||||
payload_off: "Not running"
|
||||
@ -95,7 +95,7 @@ Check if [RasPlex](https://github.com/RasPlex/RasPlex) is `online`.
|
||||
binary_sensor:
|
||||
- platform: command_line
|
||||
command: 'ping -c 1 rasplex.local | grep "1 received" | wc -l'
|
||||
name: 'is_rasplex_online'
|
||||
name: "is_rasplex_online"
|
||||
device_class: connectivity
|
||||
payload_on: 1
|
||||
payload_off: 0
|
||||
@ -133,8 +133,8 @@ A binary command line sensor can check this:
|
||||
binary_sensor:
|
||||
- platform: command_line
|
||||
command: '/bin/systemctl is-active home-assistant@rock64.service'
|
||||
payload_on: 'active'
|
||||
payload_off: 'inactive'
|
||||
payload_on: "active"
|
||||
payload_off: "inactive"
|
||||
```
|
||||
|
||||
## Services
|
||||
|
@ -288,7 +288,7 @@ cover:
|
||||
payload_available: "online"
|
||||
payload_not_available: "offline"
|
||||
optimistic: false
|
||||
value_template: '{{ value.x }}'
|
||||
value_template: "{{ value.x }}"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
@ -319,7 +319,7 @@ cover:
|
||||
payload_available: "online"
|
||||
payload_not_available: "offline"
|
||||
optimistic: false
|
||||
value_template: '{{ value.x }}'
|
||||
value_template: "{{ value.x }}"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
@ -351,9 +351,9 @@ cover:
|
||||
payload_available: "online"
|
||||
payload_not_available: "offline"
|
||||
optimistic: false
|
||||
value_template: '{{ value.x }}'
|
||||
tilt_command_topic: 'home-assistant/cover/tilt'
|
||||
tilt_status_topic: 'home-assistant/cover/tilt-state'
|
||||
value_template: "{{ value.x }}"
|
||||
tilt_command_topic: "home-assistant/cover/tilt"
|
||||
tilt_status_topic: "home-assistant/cover/tilt-state"
|
||||
tilt_status_template: '{{ value_json["PWM"]["PWM1"] }}'
|
||||
tilt_min: 0
|
||||
tilt_max: 180
|
||||
|
@ -199,15 +199,15 @@ cover:
|
||||
open_cover:
|
||||
service: script.cover_group
|
||||
data:
|
||||
modus: 'open'
|
||||
modus: "open"
|
||||
close_cover:
|
||||
service: script.cover_group
|
||||
data:
|
||||
modus: 'close'
|
||||
modus: "close"
|
||||
stop_cover:
|
||||
service: script.cover_group
|
||||
data:
|
||||
modus: 'stop'
|
||||
modus: "stop"
|
||||
set_cover_position:
|
||||
service: script.cover_group_position
|
||||
data:
|
||||
@ -255,7 +255,7 @@ automation:
|
||||
trigger:
|
||||
- platform: sun
|
||||
event: sunset
|
||||
offset: '+00:30:00'
|
||||
offset: "+00:30:00"
|
||||
action:
|
||||
- service: cover.set_cover_position
|
||||
data:
|
||||
@ -280,15 +280,15 @@ cover:
|
||||
open_cover:
|
||||
service: script.cover_group
|
||||
data:
|
||||
modus: 'open'
|
||||
modus: "open"
|
||||
close_cover:
|
||||
service: script.cover_group
|
||||
data:
|
||||
modus: 'close'
|
||||
modus: "close"
|
||||
stop_cover:
|
||||
service: script.cover_group
|
||||
data:
|
||||
modus: 'stop'
|
||||
modus: "stop"
|
||||
value_template: "{{is_state('sensor.cover_group', 'open')}}"
|
||||
icon_template: >-
|
||||
{% if is_state('sensor.cover_group', 'open') %}
|
||||
@ -315,15 +315,15 @@ cover:
|
||||
open_cover:
|
||||
service: script.cover_group
|
||||
data:
|
||||
modus: 'open'
|
||||
modus: "open"
|
||||
close_cover:
|
||||
service: script.cover_group
|
||||
data:
|
||||
modus: 'close'
|
||||
modus: "close"
|
||||
stop_cover:
|
||||
service: script.cover_group
|
||||
data:
|
||||
modus: 'stop'
|
||||
modus: "stop"
|
||||
value_template: "{{is_state('sensor.cover_group', 'open')}}"
|
||||
icon_template: >-
|
||||
{% if is_state('sensor.cover_group', 'open') %}
|
||||
|
@ -280,7 +280,7 @@ automation:
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: binary_sensor.doorbell_motion
|
||||
to: 'on'
|
||||
to: "on"
|
||||
action:
|
||||
- service: deconz.configure
|
||||
data:
|
||||
|
@ -14,6 +14,7 @@ This integration is a meta-component and configures a default set of integration
|
||||
- [Home Assistant Cloud](/integrations/cloud/) (`cloud`)
|
||||
- [Configuration](/integrations/config/) (`config`)
|
||||
- [Counter](/integrations/counter/) (`counter`)
|
||||
- [DHCP Discovery](/integrations/dhcp/) (`dhcp`)
|
||||
- [Frontend](/integrations/frontend/) (`frontend`)
|
||||
- [History](/integrations/history/) (`history`)
|
||||
- [Image](/integrations/image/) (`image`)
|
||||
|
@ -27,7 +27,7 @@ To enable this sensor, add the following lines to your `configuration.yaml` file
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
- platform: delijn
|
||||
api_key: 'API_SUBSCRIPTION_KEY'
|
||||
api_key: "API_SUBSCRIPTION_KEY"
|
||||
next_departure:
|
||||
- stop_id: 'STOP_ID'
|
||||
```
|
||||
@ -64,7 +64,7 @@ The example below shows a full configuration with two sensors, only the abcdefg
|
||||
sensor:
|
||||
# De Lijn public transport
|
||||
- platform: delijn
|
||||
api_key: 'abcdefg'
|
||||
api_key: "abcdefg"
|
||||
next_departure:
|
||||
- stop_id: '200018'
|
||||
- stop_id: '201169'
|
||||
|
@ -42,14 +42,18 @@ only_direct:
|
||||
|
||||
This sensor stores a lot of attributes which can be accessed by other sensors, e.g., a [template sensor](/integrations/template).
|
||||
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
platform: template
|
||||
sensors:
|
||||
next_departure:
|
||||
value_template: '{% raw %}{{ state_attr('sensor.munich_to_ulm', 'next') }}{% endraw %}'
|
||||
friendly_name: 'Next departure'
|
||||
value_template: "{{ state_attr('sensor.munich_to_ulm', 'next') }}"
|
||||
friendly_name: "Next departure"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
||||
The data is coming from the [bahn.de](https://www.bahn.de/p/view/index.shtml) website.
|
||||
|
@ -9,9 +9,9 @@ ha_domain: mqtt
|
||||
---
|
||||
|
||||
|
||||
The `mqtt` device tracker platform allows you to detect presence by monitoring an MQTT topic for new locations. To use this platform, you specify a unique topic for each device.
|
||||
The `mqtt` device tracker platform allows you to define new device_trackers through [manual YAML configuration](#yaml-configuration) in `configuration.yaml` and also to automatically discover device_trackers through a [discovery schema](#discovery-schema) using the MQTT Discovery protocol.
|
||||
|
||||
## Configuration
|
||||
## YAML Configuration
|
||||
|
||||
To use this device tracker in your installation, add the following to your `configuration.yaml` file:
|
||||
|
||||
@ -20,8 +20,8 @@ To use this device tracker in your installation, add the following to your `conf
|
||||
device_tracker:
|
||||
- platform: mqtt
|
||||
devices:
|
||||
paulus_oneplus: 'location/paulus'
|
||||
annetherese_n4: 'location/annetherese'
|
||||
paulus_oneplus: "location/paulus"
|
||||
annetherese_n4: "location/annetherese"
|
||||
```
|
||||
|
||||
{% configuration %}
|
||||
@ -37,40 +37,181 @@ payload_home:
|
||||
description: The payload value that represents the 'home' state for the device.
|
||||
required: false
|
||||
type: string
|
||||
default: 'home'
|
||||
default: "home"
|
||||
payload_not_home:
|
||||
description: The payload value that represents the 'not_home' state for the device.
|
||||
required: false
|
||||
type: string
|
||||
default: 'not_home'
|
||||
default: "not_home"
|
||||
source_type:
|
||||
description: Attribute of a device tracker that affects state when being used to track a [person](/integrations/person/). Valid options are `gps`, `router`, `bluetooth`, or `bluetooth_le`.
|
||||
required: false
|
||||
type: string
|
||||
{% endconfiguration %}
|
||||
|
||||
## Complete example configuration
|
||||
## Complete YAML example configuration
|
||||
|
||||
```yaml
|
||||
# Complete configuration.yaml entry
|
||||
device_tracker:
|
||||
- platform: mqtt
|
||||
devices:
|
||||
paulus_oneplus: 'location/paulus'
|
||||
annetherese_n4: 'location/annetherese'
|
||||
paulus_oneplus: "location/paulus"
|
||||
annetherese_n4: "location/annetherese"
|
||||
qos: 1
|
||||
payload_home: 'present'
|
||||
payload_not_home: 'not present'
|
||||
payload_home: "present"
|
||||
payload_not_home: "not present"
|
||||
source_type: bluetooth
|
||||
```
|
||||
|
||||
## Usage
|
||||
## YAML Usage
|
||||
|
||||
Example JSON you can publish to the topic (e.g., via mqtt.publish service):
|
||||
To set the state of the device_tracker then you need to publish a JSON message to the topic (e.g., via mqtt.publish service). As an example, the following JSON message would set the `paulus_oneplus` device_tracker to `home`:
|
||||
|
||||
```json
|
||||
{
|
||||
"topic": "location/paulus",
|
||||
"payload": "home"
|
||||
"payload": "present"
|
||||
}
|
||||
```
|
||||
|
||||
## Discovery Schema
|
||||
|
||||
MQTT device_trackers are also supported through [MQTT discovery](/docs/mqtt/discovery/). This is different to the YAML configuration from above. Here, the device_tracker can be created via a discovery topic that follows the following topic name convention: `<discovery_prefix>/device_tracker/[<node_id>/]<object_id>/config` and the JSON message content of a specific format as defined below.
|
||||
|
||||
{% configuration %}
|
||||
availability:
|
||||
description: A list of MQTT topics subscribed to receive availability (online/offline) updates. Must not be used together with `availability_topic`.
|
||||
required: false
|
||||
type: list
|
||||
keys:
|
||||
payload_available:
|
||||
description: The payload that represents the available state.
|
||||
required: false
|
||||
type: string
|
||||
default: online
|
||||
payload_not_available:
|
||||
description: The payload that represents the unavailable state.
|
||||
required: false
|
||||
type: string
|
||||
default: offline
|
||||
topic:
|
||||
description: An MQTT topic subscribed to receive availability (online/offline) updates.
|
||||
required: true
|
||||
type: string
|
||||
availability_mode:
|
||||
description: When `availability` is configured, this controls the conditions needed to set the entity to `available`. Valid entries are `all`, `any`, and `latest`. If set to `all`, `payload_available` must be received on all configured availability topics before the entity is marked as online. If set to `any`, `payload_available` must be received on at least one configured availability topic before the entity is marked as online. If set to `latest`, the last `payload_available` or `payload_not_available` received on any configured availability topic controls the availability.
|
||||
required: false
|
||||
type: string
|
||||
default: latest
|
||||
availability_topic:
|
||||
description: The MQTT topic subscribed to receive availability (online/offline) updates. Must not be used together with `availability`.
|
||||
required: false
|
||||
type: string
|
||||
device:
|
||||
description: "Information about the device this device tracker is a part of that ties it into the [device registry](https://developers.home-assistant.io/docs/en/device_registry_index.html)."
|
||||
required: false
|
||||
type: map
|
||||
keys:
|
||||
connections:
|
||||
description: "A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `'connections': ['mac', '02:5b:26:a8:dc:12']`."
|
||||
required: false
|
||||
type: [list, map]
|
||||
identifiers:
|
||||
description: A list of IDs that uniquely identify the device. For example a serial number.
|
||||
required: false
|
||||
type: [list, string]
|
||||
manufacturer:
|
||||
description: The manufacturer of the device.
|
||||
required: false
|
||||
type: string
|
||||
model:
|
||||
description: The model of the device.
|
||||
required: false
|
||||
type: string
|
||||
name:
|
||||
description: The name of the device.
|
||||
required: false
|
||||
type: string
|
||||
sw_version:
|
||||
description: The firmware version of the device.
|
||||
required: false
|
||||
type: string
|
||||
via_device:
|
||||
description: 'Identifier of a device that routes messages between this device and Home Assistant. Examples of such devices are hubs, or parent devices of a sub-device. This is used to show device topology in Home Assistant.'
|
||||
required: false
|
||||
type: string
|
||||
icon:
|
||||
description: The icon for the device tracker.
|
||||
required: false
|
||||
type: icon
|
||||
json_attributes_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation."
|
||||
required: false
|
||||
type: template
|
||||
json_attributes_topic:
|
||||
description: The MQTT topic subscribed to receive a JSON dictionary payload and then set as device_tracker attributes. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-topic-configuration) documentation.
|
||||
required: false
|
||||
type: string
|
||||
name:
|
||||
description: The name of the MQTT device_tracker.
|
||||
required: false
|
||||
type: string
|
||||
payload_available:
|
||||
description: The payload that represents the available state.
|
||||
required: false
|
||||
type: string
|
||||
default: online
|
||||
payload_home:
|
||||
description: The payload value that represents the 'home' state for the device.
|
||||
required: false
|
||||
type: string
|
||||
default: home
|
||||
payload_not_available:
|
||||
description: The payload that represents the unavailable state.
|
||||
required: false
|
||||
type: string
|
||||
default: offline
|
||||
payload_not_home:
|
||||
description: The payload value that represents the 'not_home' state for the device.
|
||||
required: false
|
||||
type: string
|
||||
default: not_home
|
||||
qos:
|
||||
description: The maximum QoS level of the state topic.
|
||||
required: false
|
||||
type: integer
|
||||
default: 0
|
||||
source_type:
|
||||
description: Attribute of a device tracker that affects state when being used to track a [person](/integrations/person/). Valid options are `gps`, `router`, `bluetooth`, or `bluetooth_le`.
|
||||
required: false
|
||||
type: string
|
||||
state_topic:
|
||||
description: The MQTT topic subscribed to receive device tracker state changes.
|
||||
required: true
|
||||
type: string
|
||||
unique_id:
|
||||
description: "An ID that uniquely identifies this device_tracker. If two device_trackers have the same unique ID, Home Assistant will raise an exception."
|
||||
required: false
|
||||
type: string
|
||||
value_template:
|
||||
description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) that returns a device tracker state."
|
||||
required: false
|
||||
type: template
|
||||
{% endconfiguration %}
|
||||
|
||||
## Discovery Example
|
||||
|
||||
You can use the discovery protocol to create a new device tracker and set it's state using the command line tool `mosquitto_pub` shipped with `mosquitto` or the `mosquitto-clients` package to send MQTT messages.
|
||||
|
||||
To create the device_tracker:
|
||||
|
||||
```bash
|
||||
mosquitto_pub -h 127.0.0.1 -t home-assistant/device_tracker/a4567d663eaf/config -m '{"state_topic": "a4567d663eaf/state", "name": "My Tracker", "payload_home": "home", "payload_not_home": "not_home"}'
|
||||
```
|
||||
|
||||
To set the state of the device tracker to "home":
|
||||
|
||||
```bash
|
||||
mosquitto_pub -h 127.0.0.1 -t a4567d663eaf/state -m 'home'
|
||||
```
|
||||
|
@ -49,8 +49,8 @@ If you have a sensor session running, and once you have enabled the Dexcom integ
|
||||
entity_id: sensor.dexcom_YOUR_USERNAME_glucose_value
|
||||
platform: numeric_state
|
||||
condition: time
|
||||
after: '22:00:00'
|
||||
before: '06:00:00'
|
||||
after: "22:00:00"
|
||||
before: "06:00:00"
|
||||
action:
|
||||
- service: light.turn_on
|
||||
data:
|
||||
|
@ -73,8 +73,8 @@ automation:
|
||||
action:
|
||||
service: notify.dovado
|
||||
data:
|
||||
message: 'The sun has set'
|
||||
target: '+14151234567'
|
||||
message: "The sun has set"
|
||||
target: "+14151234567"
|
||||
```
|
||||
|
||||
## Sensor
|
||||
|
@ -66,7 +66,7 @@ To use Dweet.io sensors in your installation, add the following to your `configu
|
||||
sensor:
|
||||
- platform: dweet
|
||||
device: THING_NAME
|
||||
value_template: '{{ value_json.VARIABLE }}'
|
||||
value_template: "{{ value_json.VARIABLE }}"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
@ -103,7 +103,7 @@ sensor:
|
||||
- platform: dweet
|
||||
name: Temperature
|
||||
device: THING_NAME
|
||||
value_template: '{{ value_json.VARIABLE }}'
|
||||
value_template: "{{ value_json.VARIABLE }}"
|
||||
unit_of_measurement: "°C"
|
||||
```
|
||||
|
||||
|
@ -284,9 +284,9 @@ dynalite:
|
||||
template: time_cover
|
||||
preset:
|
||||
'1':
|
||||
name: 'On'
|
||||
name: "On"
|
||||
'4':
|
||||
name: 'Off'
|
||||
name: "Off"
|
||||
template:
|
||||
room:
|
||||
room_on: 1
|
||||
|
@ -191,7 +191,7 @@ Set the oscillation angle of the selected fan(s).
|
||||
| `angle_low` | Yes | The angle at which the oscillation should start | 1 |
|
||||
| `angle_high` | Yes | The angle at which the oscillation should end | 255 |
|
||||
|
||||
#### Service `dyson.flow_direction_front` (only for DP04 and TP04)
|
||||
#### Service `dyson.set_flow_direction_front` (only for DP04 and TP04)
|
||||
|
||||
Set the fan flow direction.
|
||||
|
||||
|
@ -18,7 +18,7 @@ Enable the sensor by adding the following to your `configuration.yaml` file:
|
||||
# Example configuration.yaml entry
|
||||
ebusd:
|
||||
host: 127.0.0.1
|
||||
circuit: '700'
|
||||
circuit: "700"
|
||||
```
|
||||
|
||||
{% configuration %}
|
||||
|
@ -90,7 +90,7 @@ sensor:
|
||||
sensors:
|
||||
vacuum_filter:
|
||||
friendly_name: "Vacuum Filter Remaining Lifespan"
|
||||
unit_of_measurement: '%'
|
||||
unit_of_measurement: "%"
|
||||
value_template: "{{ state_attr('vacuum.my_vacuum_id', 'component_filter') }}"
|
||||
```
|
||||
|
||||
|
@ -52,12 +52,12 @@ Starting with [version 2 of the firmware](https://www.edimax.com/edimax/download
|
||||
sensors:
|
||||
edimax_current_power:
|
||||
friendly_name: Edimax Current power consumption
|
||||
unit_of_measurement: 'W'
|
||||
unit_of_measurement: "W"
|
||||
value_template: "{{ state_attr('switch.edimax_smart_plug', 'current_power_w') | replace('None', 0) }}"
|
||||
|
||||
edimax_total_power:
|
||||
friendly_name: Edimax Accumulated daily power consumption
|
||||
unit_of_measurement: 'kWh'
|
||||
unit_of_measurement: "kWh"
|
||||
value_template: "{{ state_attr('switch.edimax_smart_plug', 'today_energy_kwh') | replace('None', 0) }}"
|
||||
```
|
||||
|
||||
|
@ -45,7 +45,7 @@ version:
|
||||
description: The version of the Egardia system. `GATE-01`, `GATE-02` and `GATE-03` are currently supported.
|
||||
required: false
|
||||
type: string
|
||||
default: 'GATE-01'
|
||||
default: "GATE-01"
|
||||
port:
|
||||
description: The port of the alarm panel.
|
||||
required: false
|
||||
|
@ -33,7 +33,7 @@ envisalink:
|
||||
panel_type: HONEYWELL or DSC
|
||||
user_name: YOUR_USERNAME
|
||||
password: YOUR_PASSWORD
|
||||
code: '1234'
|
||||
code: "1234"
|
||||
port: 4025
|
||||
evl_version: 3
|
||||
keepalive_interval: 60
|
||||
@ -42,14 +42,14 @@ envisalink:
|
||||
panic_type: Police
|
||||
zones:
|
||||
11:
|
||||
name: 'Back Door'
|
||||
type: 'opening'
|
||||
name: "Back Door"
|
||||
type: "opening"
|
||||
21:
|
||||
name: 'First Floor Motion'
|
||||
type: 'motion'
|
||||
name: "First Floor Motion"
|
||||
type: "motion"
|
||||
partitions:
|
||||
1:
|
||||
name: 'Home Alarm'
|
||||
name: "Home Alarm"
|
||||
```
|
||||
|
||||
{% configuration %}
|
||||
|
@ -40,7 +40,7 @@ name:
|
||||
description: The name of the device used in the frontend.
|
||||
required: false
|
||||
type: string
|
||||
default: 'EPSON Projector'
|
||||
default: "EPSON Projector"
|
||||
{% endconfiguration %}
|
||||
|
||||
### Supported features
|
||||
|
@ -42,7 +42,7 @@ climate:
|
||||
- platform: eq3btsmart
|
||||
devices:
|
||||
room1:
|
||||
mac: '00:11:22:33:44:55'
|
||||
mac: "00:11:22:33:44:55"
|
||||
```
|
||||
|
||||
{% configuration %}
|
||||
|
@ -17,7 +17,7 @@ To add the Etherscan sensor to your installation, specify an Ethereum address to
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
- platform: etherscan
|
||||
address: '0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359'
|
||||
address: "0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359"
|
||||
- platform: etherscan
|
||||
address: "0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359"
|
||||
token: OMG
|
||||
|
@ -74,7 +74,7 @@ camera_view: live
|
||||
elements:
|
||||
- icon: 'mdi:arrow-up'
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
bottom: 50px
|
||||
right: 25px
|
||||
tap_action:
|
||||
@ -86,7 +86,7 @@ elements:
|
||||
type: icon
|
||||
- icon: 'mdi:arrow-down'
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
bottom: 0px
|
||||
right: 25px
|
||||
tap_action:
|
||||
@ -98,7 +98,7 @@ elements:
|
||||
type: icon
|
||||
- icon: 'mdi:arrow-left'
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
bottom: 25px
|
||||
right: 50px
|
||||
tap_action:
|
||||
@ -110,7 +110,7 @@ elements:
|
||||
type: icon
|
||||
- icon: 'mdi:arrow-right'
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
bottom: 25px
|
||||
right: 0px
|
||||
tap_action:
|
||||
@ -122,7 +122,7 @@ elements:
|
||||
type: icon
|
||||
- icon: 'mdi:run-fast'
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
top: 25px
|
||||
right: 25px
|
||||
tap_action:
|
||||
@ -134,7 +134,7 @@ elements:
|
||||
type: icon
|
||||
- icon: 'mdi:run'
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
top: 25px
|
||||
right: 0px
|
||||
tap_action:
|
||||
@ -146,7 +146,7 @@ elements:
|
||||
type: icon
|
||||
- icon: 'mdi:eye'
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 25px
|
||||
top: 50px
|
||||
tap_action:
|
||||
@ -158,7 +158,7 @@ elements:
|
||||
type: icon
|
||||
- icon: 'mdi:eye-off'
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 0px
|
||||
top: 50px
|
||||
tap_action:
|
||||
@ -170,7 +170,7 @@ elements:
|
||||
type: icon
|
||||
- icon: 'mdi:volume-high'
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 25px
|
||||
top: 75px
|
||||
tap_action:
|
||||
@ -182,7 +182,7 @@ elements:
|
||||
type: icon
|
||||
- icon: 'mdi:volume-off'
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 0px
|
||||
top: 75px
|
||||
tap_action:
|
||||
@ -194,7 +194,7 @@ elements:
|
||||
type: icon
|
||||
- icon: 'mdi:led-on'
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 25px
|
||||
top: 100px
|
||||
tap_action:
|
||||
@ -206,7 +206,7 @@ elements:
|
||||
type: icon
|
||||
- icon: 'mdi:led-off'
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 0px
|
||||
top: 100px
|
||||
tap_action:
|
||||
@ -218,7 +218,7 @@ elements:
|
||||
type: icon
|
||||
- icon: 'mdi:brightness-4'
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 25px
|
||||
top: 100px
|
||||
tap_action:
|
||||
@ -230,7 +230,7 @@ elements:
|
||||
type: icon
|
||||
- icon: 'mdi:brightness-5'
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 0px
|
||||
top: 100px
|
||||
tap_action:
|
||||
|
@ -47,7 +47,7 @@ automation:
|
||||
action:
|
||||
service: notify.facebook
|
||||
data:
|
||||
message: 'Good Evening'
|
||||
message: "Good Evening"
|
||||
target:
|
||||
- '+919413017584'
|
||||
- '+919784516314'
|
||||
|
@ -104,7 +104,7 @@ Use the `image_processing.detect_face` events to trigger automations, and breako
|
||||
platform: event
|
||||
event_type: image_processing.detect_face
|
||||
event_data:
|
||||
name: 'Ringo_Starr'
|
||||
name: "Ringo_Starr"
|
||||
action:
|
||||
service: notify.platform
|
||||
data:
|
||||
@ -184,7 +184,7 @@ you can create an automation to receive notifications on Facebox errors:
|
||||
action:
|
||||
- service: notify.pushbullet
|
||||
data_template:
|
||||
message: '{{ trigger.event.data.message }}'
|
||||
message: "{{ trigger.event.data.message }}"
|
||||
title: Facebox error
|
||||
```
|
||||
|
||||
|
@ -18,7 +18,7 @@ To enable your Family Hub camera in your installation, add the following to your
|
||||
# Example configuration.yaml entry
|
||||
camera:
|
||||
- platform: familyhub
|
||||
ip_address: 'IP_ADDRESS'
|
||||
ip_address: "IP_ADDRESS"
|
||||
```
|
||||
|
||||
{% configuration %}
|
||||
|
@ -106,5 +106,5 @@ sensor:
|
||||
name: Temperature
|
||||
file_path: /home/user/.homeassistant/sensor.json
|
||||
value_template: {% raw %}'{{ value_json.temperature }}'{% endraw %}
|
||||
unit_of_measurement: '°C'
|
||||
unit_of_measurement: "°C"
|
||||
```
|
||||
|
@ -142,7 +142,7 @@ automation:
|
||||
entity_id: media_player.nest_hub_bedroom
|
||||
media_content_id: >
|
||||
{{ state_attr('sensor.incidents','message_to_speech_url') }}
|
||||
media_content_type: 'audio/mp4'
|
||||
media_content_type: "audio/mp4"
|
||||
|
||||
- alias: 'Send response acknowledgement when a button is pressed'
|
||||
trigger:
|
||||
|
@ -99,8 +99,8 @@ switch:
|
||||
- light.desk
|
||||
- light.lamp
|
||||
name: Fluxer
|
||||
start_time: '7:00'
|
||||
stop_time: '23:00'
|
||||
start_time: "7:00"
|
||||
stop_time: "23:00"
|
||||
start_colortemp: 4000
|
||||
sunset_colortemp: 3000
|
||||
stop_colortemp: 1900
|
||||
|
@ -17,6 +17,7 @@ This integration will provide local control over your LED lights/strips and can
|
||||
The `flux_led` integration is configured through the Configuration -> Integrations page. You can select either auto configuration or manual configuration. For auto configuration the integration will automatically scan your network for any supported devices.
|
||||
|
||||
If you select the manual flow you can specify the name and host address of the light controller. You can add multiple lights/strips by adding additional instances of the integration.
|
||||
|
||||
### Effects
|
||||
|
||||
The Flux LED light offers a number of effects which are not included in other lighting packages. These can be selected from the front-end, or sent in the effect field of the `light.turn_on` command.
|
||||
|
@ -61,9 +61,9 @@ camera_image: camera.bedroom
|
||||
camera_view: live
|
||||
elements:
|
||||
- type: icon
|
||||
icon: 'mdi:arrow-up'
|
||||
icon: "mdi:arrow-up"
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 25px
|
||||
bottom: 50px
|
||||
tap_action:
|
||||
@ -73,9 +73,9 @@ elements:
|
||||
entity_id: camera.bedroom
|
||||
movement: up
|
||||
- type: icon
|
||||
icon: 'mdi:arrow-down'
|
||||
icon: "mdi:arrow-down"
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 25px
|
||||
bottom: 0px
|
||||
tap_action:
|
||||
@ -85,9 +85,9 @@ elements:
|
||||
entity_id: camera.bedroom
|
||||
movement: down
|
||||
- type: icon
|
||||
icon: 'mdi:arrow-left'
|
||||
icon: "mdi:arrow-left"
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 50px
|
||||
bottom: 25px
|
||||
tap_action:
|
||||
@ -97,9 +97,9 @@ elements:
|
||||
entity_id: camera.bedroom
|
||||
movement: left
|
||||
- type: icon
|
||||
icon: 'mdi:arrow-right'
|
||||
icon: "mdi:arrow-right"
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 0px
|
||||
bottom: 25px
|
||||
tap_action:
|
||||
@ -109,9 +109,9 @@ elements:
|
||||
entity_id: camera.bedroom
|
||||
movement: right
|
||||
- type: icon
|
||||
icon: 'mdi:arrow-top-left'
|
||||
icon: "mdi:arrow-top-left"
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 50px
|
||||
bottom: 50px
|
||||
tap_action:
|
||||
@ -121,9 +121,9 @@ elements:
|
||||
entity_id: camera.bedroom
|
||||
movement: top_left
|
||||
- type: icon
|
||||
icon: 'mdi:arrow-top-right'
|
||||
icon: "mdi:arrow-top-right"
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 0px
|
||||
bottom: 50px
|
||||
tap_action:
|
||||
@ -133,9 +133,9 @@ elements:
|
||||
entity_id: camera.bedroom
|
||||
movement: top_right
|
||||
- type: icon
|
||||
icon: 'mdi:arrow-bottom-left'
|
||||
icon: "mdi:arrow-bottom-left"
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 50px
|
||||
bottom: 0px
|
||||
tap_action:
|
||||
@ -145,9 +145,9 @@ elements:
|
||||
entity_id: camera.bedroom
|
||||
movement: bottom_left
|
||||
- type: icon
|
||||
icon: 'mdi:arrow-bottom-right'
|
||||
icon: "mdi:arrow-bottom-right"
|
||||
style:
|
||||
background: 'rgba(255, 255, 255, 0.5)'
|
||||
background: "rgba(255, 255, 255, 0.5)"
|
||||
right: 0px
|
||||
bottom: 0px
|
||||
tap_action:
|
||||
|
@ -67,8 +67,8 @@ alias: "Bathroom Motion Detected"
|
||||
trigger:
|
||||
platform: state
|
||||
entity_id: binary_sensor.motion_sensor_166d0001171111
|
||||
from: 'off'
|
||||
to: 'on'
|
||||
from: "off"
|
||||
to: "on"
|
||||
action:
|
||||
service: media_player.turn_on
|
||||
data:
|
||||
|
@ -83,15 +83,15 @@ sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
garage_door_status:
|
||||
friendly_name: 'State of the door'
|
||||
friendly_name: "State of the door"
|
||||
value_template: "{{ states('cover.garage_door') }}"
|
||||
garage_door_time_in_state:
|
||||
friendly_name: 'Since'
|
||||
friendly_name: "Since"
|
||||
value_template: "{{ state_attr('cover.garage_door', 'time_in_state') }}"
|
||||
garage_door_wifi_signal_strength:
|
||||
friendly_name: 'WiFi strength'
|
||||
friendly_name: "WiFi strength"
|
||||
value_template: "{{ state_attr('cover.garage_door', 'wifi_signal_strength') }}"
|
||||
unit_of_measurement: 'dB'
|
||||
unit_of_measurement: "dB"
|
||||
|
||||
group:
|
||||
garage_door:
|
||||
|
@ -89,7 +89,7 @@ camera:
|
||||
- platform: generic
|
||||
name: Weather
|
||||
still_image_url: https://www.yr.no/place/Norway/Oslo/Oslo/Oslo/meteogram.svg
|
||||
content_type: 'image/svg+xml'
|
||||
content_type: "image/svg+xml"
|
||||
```
|
||||
|
||||
### Local image
|
||||
|
@ -70,5 +70,5 @@ geo_location:
|
||||
- platform: geo_json_events
|
||||
url: https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson
|
||||
radius: 250
|
||||
entity_namespace: 'usgs_earthquakes'
|
||||
entity_namespace: "usgs_earthquakes"
|
||||
```
|
||||
|
@ -34,7 +34,7 @@ sensor:
|
||||
- platform: geo_rss_events
|
||||
name: NSW Fire Service
|
||||
url: https://www.rfs.nsw.gov.au/feeds/majorIncidents.xml
|
||||
unit_of_measurement: 'Incidents'
|
||||
unit_of_measurement: "Incidents"
|
||||
categories:
|
||||
- 'Emergency Warning'
|
||||
- 'Watch and Act'
|
||||
@ -87,11 +87,11 @@ sensor:
|
||||
- platform: geo_rss_events
|
||||
name: Qld Fire and Emergency Services
|
||||
url: https://www.qfes.qld.gov.au/data/alerts/bushfireAlert.xml
|
||||
unit_of_measurement: 'Alerts'
|
||||
unit_of_measurement: "Alerts"
|
||||
- platform: geo_rss_events
|
||||
name: Tas Fire Service
|
||||
url: http://www.fire.tas.gov.au/Show?pageId=colBushfireSummariesRss
|
||||
unit_of_measurement: 'Alerts'
|
||||
unit_of_measurement: "Alerts"
|
||||
- platform: geo_rss_events
|
||||
name: WA Department of Fire and Emergency Services
|
||||
url: https://www.emergency.wa.gov.au/data/incident_FCAD.rss
|
||||
|
@ -39,5 +39,5 @@ A full configuration sample including optional variables:
|
||||
# Example configuration.yaml entry
|
||||
tts:
|
||||
- platform: google_translate
|
||||
language: 'de'
|
||||
language: "de"
|
||||
```
|
||||
|
@ -142,11 +142,11 @@ You can also use the `homeassistant.update_entity` service to update the sensor
|
||||
initial_state: "on"
|
||||
trigger:
|
||||
- platform: time_pattern
|
||||
minutes: '/2'
|
||||
minutes: "/2"
|
||||
condition:
|
||||
- condition: time
|
||||
after: '08:00:00'
|
||||
before: '11:00:00'
|
||||
after: "08:00:00"
|
||||
before: "11:00:00"
|
||||
- condition: time
|
||||
weekday:
|
||||
- mon
|
||||
|
@ -50,7 +50,7 @@ The current price for the Load Zone will appear as a sensor:
|
||||
```yaml
|
||||
- id: '1572630019168'
|
||||
alias: Stop Tesla Charging if Power Price Spikes
|
||||
description: ''
|
||||
description: ""
|
||||
trigger:
|
||||
- above: '30'
|
||||
entity_id: sensor.lz_houston_price_now
|
||||
|
@ -54,12 +54,12 @@ name:
|
||||
# Example configuration.yaml entry
|
||||
sensor:
|
||||
- platform: growatt_server
|
||||
name: 'growatt home'
|
||||
name: "growatt home"
|
||||
plant_id: 12345678
|
||||
username: username
|
||||
password: password
|
||||
- platform: growatt_server
|
||||
name: 'growatt work'
|
||||
name: "growatt work"
|
||||
plant_id: 87654321
|
||||
username: username
|
||||
password: password
|
||||
|
@ -238,7 +238,7 @@ sensor:
|
||||
- platform: rest
|
||||
resource: https://api.ipify.org/?format=json
|
||||
name: External IP
|
||||
value_template: '{{ value_json.ip }}'
|
||||
value_template: "{{ value_json.ip }}"
|
||||
scan_interval: 10
|
||||
|
||||
automation:
|
||||
@ -248,7 +248,7 @@ automation:
|
||||
platform: state
|
||||
condition:
|
||||
- condition: template
|
||||
value_template: '{{ trigger.from_state.state != trigger.to_state.state }}'
|
||||
value_template: "{{ trigger.from_state.state != trigger.to_state.state }}"
|
||||
- condition: template
|
||||
value_template: '{{ not is_state("sensor.external_ip", "unavailable") }}'
|
||||
action:
|
||||
|
@ -180,10 +180,10 @@ sensor:
|
||||
sensors:
|
||||
family_room:
|
||||
value_template: '{{ state_attr("remote.family_room", "current_activity") }}'
|
||||
friendly_name: 'Family Room'
|
||||
friendly_name: "Family Room"
|
||||
bedroom:
|
||||
value_template: '{{ state_attr("remote.bedroom", "current_activity") }}'
|
||||
friendly_name: 'bedroom'
|
||||
friendly_name: "bedroom"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
@ -160,11 +160,11 @@ automation:
|
||||
initial_state: "on"
|
||||
trigger:
|
||||
- platform: time_pattern
|
||||
minutes: '/2'
|
||||
minutes: "/2"
|
||||
condition:
|
||||
- condition: time
|
||||
after: '08:00:00'
|
||||
before: '11:00:00'
|
||||
after: "08:00:00"
|
||||
before: "11:00:00"
|
||||
- condition: time
|
||||
weekday:
|
||||
- mon
|
||||
|
@ -34,8 +34,8 @@ sensor:
|
||||
entity_id: light.my_lamp
|
||||
state: "on"
|
||||
type: time
|
||||
start: '{{ now().replace(hour=0, minute=0, second=0) }}'
|
||||
end: '{{ now() }}'
|
||||
start: "{{ now().replace(hour=0, minute=0, second=0) }}"
|
||||
end: "{{ now() }}"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
@ -135,8 +135,8 @@ Here are some examples of periods you could work with, and what to write in your
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
start: '{{ now().replace(hour=0, minute=0, second=0) }}'
|
||||
end: '{{ now() }}'
|
||||
start: "{{ now().replace(hour=0, minute=0, second=0) }}"
|
||||
end: "{{ now() }}"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
@ -146,7 +146,7 @@ Here are some examples of periods you could work with, and what to write in your
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
end: '{{ now().replace(hour=0, minute=0, second=0) }}'
|
||||
end: "{{ now().replace(hour=0, minute=0, second=0) }}"
|
||||
duration:
|
||||
hours: 24
|
||||
```
|
||||
@ -158,7 +158,7 @@ Here are some examples of periods you could work with, and what to write in your
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
start: '{{ now().replace(hour=6, minute=0, second=0) }}'
|
||||
start: "{{ now().replace(hour=6, minute=0, second=0) }}"
|
||||
duration:
|
||||
hours: 5
|
||||
```
|
||||
@ -172,8 +172,8 @@ Here, last Monday is _today_ as a timestamp, minus 86400 times the current weekd
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
start: '{{ as_timestamp( now().replace(hour=0, minute=0, second=0) ) - now().weekday() * 86400 }}'
|
||||
end: '{{ now() }}'
|
||||
start: "{{ as_timestamp( now().replace(hour=0, minute=0, second=0) ) - now().weekday() * 86400 }}"
|
||||
end: "{{ now() }}"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
@ -183,7 +183,7 @@ Here, last Monday is _today_ as a timestamp, minus 86400 times the current weekd
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
end: '{{ now().replace(hour=0, minute=0, second=0) }}'
|
||||
end: "{{ now().replace(hour=0, minute=0, second=0) }}"
|
||||
duration:
|
||||
days: 30
|
||||
```
|
||||
@ -195,8 +195,8 @@ Here, last Monday is _today_ as a timestamp, minus 86400 times the current weekd
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
start: '{{ 0 }}'
|
||||
end: '{{ now() }}'
|
||||
start: "{{ 0 }}"
|
||||
end: "{{ now() }}"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
@ -313,81 +313,7 @@ When exposing a Television media player (a `media_player` with device class `tv`
|
||||
|
||||
## Disable Auto Start
|
||||
|
||||
Depending on your setup, it might be necessary to disable `Auto Start` for all accessories to be available for `HomeKit`. Only those entities that are fully set up when the `HomeKit` integration is started, can be added. To start `HomeKit` when `auto_start: false`, you can call the service `homekit.start`.
|
||||
|
||||
If you have Z-Wave entities you want to be exposed to HomeKit, then you'll need to disable auto start and then start it after the Z-Wave mesh is ready. This is because the Z-Wave entities won't be fully set up until then. This can be automated using an automation.
|
||||
|
||||
<div class='note'>
|
||||
|
||||
Please remember that you can only have a single `automation` entry. Add the automation to your existing automations.
|
||||
|
||||
</div>
|
||||
|
||||
```yaml
|
||||
# Example for Z-Wave
|
||||
homekit:
|
||||
auto_start: false
|
||||
|
||||
automation:
|
||||
- alias: 'Start HomeKit'
|
||||
trigger:
|
||||
- platform: event
|
||||
event_type: zwave.network_ready
|
||||
- platform: event
|
||||
event_type: zwave.network_complete
|
||||
- platform: event
|
||||
event_type: zwave.network_complete_some_dead
|
||||
action:
|
||||
- service: homekit.start
|
||||
```
|
||||
|
||||
For a general delay where your integration doesn't generate an event, you can also do:
|
||||
|
||||
```yaml
|
||||
# Example using a delay after the start of Home Assistant
|
||||
homekit:
|
||||
auto_start: false
|
||||
|
||||
automation:
|
||||
- alias: 'Start HomeKit'
|
||||
trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
action:
|
||||
- delay: 00:05 # Waits 5 minutes
|
||||
- service: homekit.start
|
||||
```
|
||||
|
||||
In some cases it might be desirable to check that all entities are available before starting `HomeKit`. This can be accomplished by adding an additional `binary_sensor` as follows:
|
||||
|
||||
{% raw %}
|
||||
|
||||
```yaml
|
||||
# Example checking specific entities to be available before start
|
||||
homekit:
|
||||
auto_start: false
|
||||
|
||||
automation:
|
||||
- alias: 'Start HomeKit'
|
||||
trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
action:
|
||||
- wait_template: >-
|
||||
{% if not states.light.kitchen_lights %}
|
||||
false
|
||||
{% elif not states.sensor.outside_temperature %}
|
||||
false
|
||||
# Repeat for every entity
|
||||
{% else %}
|
||||
true
|
||||
{% endif %}
|
||||
timeout: 00:15 # Waits 15 minutes
|
||||
continue_on_timeout: false
|
||||
- service: homekit.start
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
It is not needed (anymore) to disable `Auto Start` for all accessories to be available for `HomeKit` as Home Assistant restores all entities on start instantly.
|
||||
|
||||
## Configure Filter
|
||||
|
||||
|
@ -212,7 +212,7 @@ sensor:
|
||||
bedroom_valve:
|
||||
value_template: "{% raw %}{{ state_attr('climate.leq123456', 'level') }}{% endraw %}"
|
||||
entity_id: climate.leq123456
|
||||
friendly_name: 'Bedroom valve'
|
||||
friendly_name: "Bedroom valve"
|
||||
```
|
||||
|
||||
### Variables
|
||||
|
@ -102,11 +102,11 @@ sensor:
|
||||
monitored_variables:
|
||||
- name: CPU fanspeed
|
||||
sensor_type: server_health
|
||||
unit_of_measurement: '%'
|
||||
unit_of_measurement: "%"
|
||||
value_template: '{% raw %}{{ ilo_data.fans["Fan 1"].speed[0] }}{% endraw %}'
|
||||
- name: Inlet temperature
|
||||
sensor_type: server_health
|
||||
unit_of_measurement: '°C'
|
||||
unit_of_measurement: "°C"
|
||||
value_template: '{% raw %}{{ ilo_data.temperature["01-Inlet Ambient"].currentreading[0] }}{% endraw %}'
|
||||
- name: Server Health
|
||||
sensor_type: server_health
|
||||
|
@ -179,7 +179,7 @@ Example of adding a tag to your notification. This won't create new notification
|
||||
message: "Last known sensor state is {{ states('sensor.sensor') }}."
|
||||
data:
|
||||
data:
|
||||
tag: 'notification-about-sensor'
|
||||
tag: "notification-about-sensor"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
@ -125,7 +125,7 @@ If you want to apply additional IP filtering, and automatically ban brute force
|
||||
|
||||
```yaml
|
||||
127.0.0.1:
|
||||
banned_at: '2016-11-16T19:20:03'
|
||||
banned_at: "2016-11-16T19:20:03"
|
||||
```
|
||||
|
||||
After a ban is added a Persistent Notification is populated to the Home Assistant frontend.
|
||||
|
@ -46,7 +46,7 @@ automation:
|
||||
- service: humidifier.set_mode
|
||||
data:
|
||||
entity_id: humidifier.bedroom
|
||||
preset_mode: 'eco'
|
||||
preset_mode: "eco"
|
||||
```
|
||||
|
||||
### Service `humidifier.set_humidity`
|
||||
|
@ -93,7 +93,7 @@ automation:
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: light.hyperion
|
||||
to: 'on'
|
||||
to: "on"
|
||||
action:
|
||||
- service: light.turn_on
|
||||
data:
|
||||
@ -108,13 +108,13 @@ To have the lights playing an effect when pausing, idle or turn off a media play
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: media_player.plex
|
||||
to: 'off'
|
||||
to: "off"
|
||||
- platform: state
|
||||
entity_id: media_player.plex.plex
|
||||
to: 'paused'
|
||||
to: "paused"
|
||||
- platform: state
|
||||
entity_id: media_player.plex.plex
|
||||
to: 'idle'
|
||||
to: "idle"
|
||||
action:
|
||||
- service: light.turn_on
|
||||
data:
|
||||
@ -129,7 +129,7 @@ To capture the screen when playing something on a media_player you can use this
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: media_player.plex
|
||||
to: 'playing'
|
||||
to: "playing"
|
||||
action:
|
||||
- service: light.turn_on
|
||||
data:
|
||||
|
@ -29,9 +29,9 @@ There is two ways to integrate iCloud in Home Assistant
|
||||
|
||||
Menu: *Configuration* -> *Integrations*. Search for "iCloud", add your credentials, click submit.
|
||||
|
||||
If you add the integration for the first time for an account:
|
||||
1. Choose a trusted device from the list and submit.
|
||||
2. It will send you a text message on your trusted device, add the received code to the next form and submit (if you missed the right code, you will be back to the previous step, and retry).
|
||||
If you add the integration for the first time for an account, and two-factor authentication is enabled:
|
||||
1. After clicking submit, you will receive a verification code on your trusted iCloud devices.
|
||||
2. Press Allow on your device, and enter the 6 digit code in Home Assistant. Finally, click Submit.
|
||||
3. You are done!
|
||||
|
||||
If you already added the integration before, you are done!
|
||||
@ -83,9 +83,7 @@ You may receive an email and a notification from Apple saying that someone has l
|
||||
For the notification, press "Allow", then "OK".
|
||||
</div>
|
||||
|
||||
If two-step authentication is enabled for your iCloud account, some time after Home Assistant startup the integration will ask which device you want to use as the Trusted Device via a notification in the Home Assistant UI. The integration will send an SMS prompt to that device with the auth code to enter in Home Assistant. The duration of this authentication is determined by Apple, but is currently 2 months, so you will only need to verify your account every two months.
|
||||
|
||||
2 Factor Authentication is the improved version of two-step authentication and is still not supported by the pyicloud library. Therefore it's not possible to use it with the device_tracker yet.
|
||||
If two-step authentication is enabled for your iCloud account, some time after Home Assistant startup the integration will ask to enter the verification code you receive on your device via a notification in the Home Assistant UI. The duration of this authentication is determined by Apple, so you will need to verify your account every now and then.
|
||||
|
||||
To prevent excessive battery drainage, a dynamic interval is used for each individual device instead of a fixed interval for all devices linked to one account. The dynamic interval is based on the current zone of a device, the distance towards home and the battery level of the device.
|
||||
|
||||
|
@ -154,7 +154,7 @@ automation:
|
||||
action:
|
||||
service: script.ifttt_notify
|
||||
data:
|
||||
value1: 'HA Status:'
|
||||
value1: "HA Status:"
|
||||
value2: "{{ trigger.event.data.entity_id.split('_')[1] }} is "
|
||||
value3: "{{ trigger.event.data.to_state.state }}"
|
||||
```
|
||||
|
@ -167,7 +167,7 @@ ihc:
|
||||
sensor:
|
||||
- id: 12345
|
||||
name: Temperatur_living_room
|
||||
unit_of_measurement: '°C'
|
||||
unit_of_measurement: "°C"
|
||||
note: Floor and wall temp.
|
||||
position: On wall between windows
|
||||
- id: 23456
|
||||
|
@ -46,7 +46,7 @@ automation:
|
||||
event_type: image_processing.detect_face
|
||||
event_data:
|
||||
entity_id: image_processing.door
|
||||
name: 'Hans Maier'
|
||||
name: "Hans Maier"
|
||||
...
|
||||
```
|
||||
|
||||
@ -67,7 +67,7 @@ automation:
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: sensor.door_motion_sensor
|
||||
to: 'on'
|
||||
to: "on"
|
||||
action:
|
||||
- service: image_processing.scan
|
||||
data:
|
||||
|
@ -525,7 +525,7 @@ username: home-assistant
|
||||
field: value
|
||||
database: db1
|
||||
- name: Min for last hour
|
||||
unit_of_measurement: '%'
|
||||
unit_of_measurement: "%"
|
||||
value_template: '{% raw %}{{ value | round(1) }}{% endraw %}'
|
||||
group_function: min
|
||||
where: '"entity_id" = ''salon'' and time > now() - 1h'
|
||||
|
@ -75,7 +75,7 @@ automation:
|
||||
trigger:
|
||||
platform: state
|
||||
entity_id: binary_sensor.motion_garage
|
||||
to: 'on'
|
||||
to: "on"
|
||||
condition:
|
||||
condition: state
|
||||
entity_id: input_boolean.notify_home
|
||||
|
@ -136,7 +136,7 @@ If you have a `datetime` object you can use its `timestamp` method. Of if you ha
|
||||
target:
|
||||
entity_id: input_datetime.XXX
|
||||
data:
|
||||
time: '05:30:00'
|
||||
time: "05:30:00"
|
||||
# Sets time to time from datetime object
|
||||
- service: input_datetime.set_datetime
|
||||
target:
|
||||
@ -148,7 +148,7 @@ If you have a `datetime` object you can use its `timestamp` method. Of if you ha
|
||||
target:
|
||||
entity_id: input_datetime.XXX
|
||||
data:
|
||||
date: '2020-08-24'
|
||||
date: "2020-08-24"
|
||||
# Sets date to date from datetime object
|
||||
- service: input_datetime.set_datetime
|
||||
target:
|
||||
@ -160,7 +160,7 @@ If you have a `datetime` object you can use its `timestamp` method. Of if you ha
|
||||
target:
|
||||
entity_id: input_datetime.XXX
|
||||
data:
|
||||
datetime: '2020-08-25 05:30:00'
|
||||
datetime: "2020-08-25 05:30:00"
|
||||
# Sets date and time from datetime object
|
||||
- service: input_datetime.set_datetime
|
||||
target:
|
||||
|
@ -154,7 +154,7 @@ input_select:
|
||||
- Reading
|
||||
- Relax
|
||||
- 'OFF'
|
||||
initial: 'Select'
|
||||
initial: "Select"
|
||||
input_number:
|
||||
bedroom_brightness:
|
||||
name: Brightness
|
||||
@ -198,7 +198,7 @@ automation:
|
||||
- alias: Set temp slider
|
||||
trigger:
|
||||
platform: mqtt
|
||||
topic: 'setTemperature'
|
||||
topic: "setTemperature"
|
||||
action:
|
||||
service: input_number.set_value
|
||||
data:
|
||||
@ -214,7 +214,7 @@ automation:
|
||||
action:
|
||||
service: mqtt.publish
|
||||
data:
|
||||
topic: 'setTemperature'
|
||||
topic: "setTemperature"
|
||||
retain: true
|
||||
payload: "{{ states('input_number.target_temp') | int }}"
|
||||
```
|
||||
@ -249,7 +249,7 @@ automation:
|
||||
trigger:
|
||||
platform: state
|
||||
entity_id: switch.something
|
||||
to: 'on'
|
||||
to: "on"
|
||||
action:
|
||||
- delay: "00:{{ states('input_number.minutes') | int }}:{{ states('input_number.seconds') | int }}"
|
||||
- service: switch.turn_off
|
||||
|
@ -32,7 +32,7 @@ input_text:
|
||||
max: 40
|
||||
text3:
|
||||
name: Text 3
|
||||
pattern: '[a-fA-F0-9]*'
|
||||
pattern: "[a-fA-F0-9]*"
|
||||
text4:
|
||||
name: Text 4
|
||||
mode: password
|
||||
@ -121,7 +121,7 @@ input_select:
|
||||
- Reading
|
||||
- Relax
|
||||
- 'OFF'
|
||||
initial: 'Select'
|
||||
initial: "Select"
|
||||
input_text:
|
||||
bedroom:
|
||||
name: Brightness
|
||||
|
@ -33,7 +33,7 @@ islamic_prayer_times:
|
||||
{% configuration %}
|
||||
calculation_method:
|
||||
required: false
|
||||
default: 'isna'
|
||||
default: "isna"
|
||||
type: string
|
||||
description: "The calculation method used for prayer times. Must be one of: `karachi`, `isna`, `mwl`, `makkah`."
|
||||
{% endconfiguration %}
|
||||
|
@ -113,7 +113,7 @@ automation:
|
||||
event_type: isy994_control
|
||||
event_data:
|
||||
entity_id: light.lr_track_lights_front
|
||||
control: 'DFON'
|
||||
control: "DFON"
|
||||
value: 255
|
||||
formatted: "On"
|
||||
uom: "100"
|
||||
|
@ -19,7 +19,7 @@ The `evdev` package is used to interface with the keyboard and thus this is Linu
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
keyboard_remote:
|
||||
type: 'key_up'
|
||||
type: "key_up"
|
||||
```
|
||||
|
||||
{% configuration %}
|
||||
@ -62,7 +62,7 @@ A full configuration for two Keyboard Remotes could look like the one below:
|
||||
```yaml
|
||||
keyboard_remote:
|
||||
- device_descriptor: '/dev/input/by-id/bluetooth-keyboard'
|
||||
type: 'key_down'
|
||||
type: "key_down"
|
||||
emulate_key_hold: true
|
||||
emulate_key_hold_delay: 250
|
||||
emulate_key_hold_repeat: 33
|
||||
@ -76,8 +76,8 @@ Or like the following for one keyboard:
|
||||
|
||||
```yaml
|
||||
keyboard_remote:
|
||||
device_name: 'Bluetooth Keyboard'
|
||||
type: 'key_down'
|
||||
device_name: "Bluetooth Keyboard"
|
||||
type: "key_down"
|
||||
```
|
||||
|
||||
And an automation rule to breathe life into it:
|
||||
|
@ -282,7 +282,7 @@ default:
|
||||
|
||||
The `knx` binary sensor platform allows you to monitor [KNX](https://www.knx.org/) binary sensors.
|
||||
|
||||
Binary sensors are read-only. To write to the knx-bus configure an exposure [KNX Integration - Expose](/integrations/knx/#exposing-sensor-values-or-time-to-knx-bus).
|
||||
Binary sensors are read-only. To write to the KNX bus configure an exposure [KNX Integration Expose](/integrations/knx/#exposing-entity-states-entity-attributes-or-time-to-knx-bus).
|
||||
|
||||
```yaml
|
||||
knx:
|
||||
@ -917,7 +917,7 @@ name:
|
||||
|
||||
The `knx` sensor platform allows you to monitor [KNX](https://www.knx.org/) sensors.
|
||||
|
||||
Sensors are read-only. To write to the knx-bus configure an exposure [KNX Integration - Expose](/integrations/knx/#exposing-sensor-values-or-time-to-knx-bus) or use the `knx.send` service.
|
||||
Sensors are read-only. To write to the KNX bus configure an exposure [KNX Integration Expose](/integrations/knx/#exposing-entity-states-entity-attributes-or-time-to-knx-bus) or use the `knx.send` service.
|
||||
|
||||
```yaml
|
||||
# Example configuration.yaml entry
|
||||
@ -925,6 +925,7 @@ knx:
|
||||
sensor:
|
||||
- name: Heating.Valve1
|
||||
state_address: "2/0/0"
|
||||
type: "percent"
|
||||
```
|
||||
|
||||
In order to actively read the sensor data from the bus every 30 minutes you can add the following lines to your `configuration.yaml`:
|
||||
@ -935,6 +936,7 @@ knx:
|
||||
sensor:
|
||||
- name: Heating.Valve1
|
||||
state_address: "2/0/0"
|
||||
type: "percent"
|
||||
sync_state: every 30
|
||||
```
|
||||
|
||||
@ -943,6 +945,10 @@ state_address:
|
||||
description: KNX group address of the sensor.
|
||||
required: true
|
||||
type: string
|
||||
type:
|
||||
description: A type from the value types table below must be defined. The DPT of the group address should match the expected KNX DPT to be parsed correctly.
|
||||
required: true
|
||||
type: string
|
||||
name:
|
||||
description: A name for this device used within Home Assistant.
|
||||
required: false
|
||||
@ -952,10 +958,6 @@ sync_state:
|
||||
required: false
|
||||
type: [boolean, string, integer]
|
||||
default: true
|
||||
type:
|
||||
description: A type from the following table must be defined. The DPT of the group address should match the expected KNX DPT to be parsed correctly.
|
||||
required: true
|
||||
type: string
|
||||
always_callback:
|
||||
description: Defines if telegrams with equal payload as the previously received telegram should trigger a state update within Home Assistant.
|
||||
required: false
|
||||
|
@ -56,7 +56,7 @@ automation:
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: binary_sensor.motion_1
|
||||
to: 'on'
|
||||
to: "on"
|
||||
action:
|
||||
- service: light.turn_on
|
||||
data:
|
||||
|
@ -195,7 +195,7 @@ lock:
|
||||
optimistic: false
|
||||
qos: 1
|
||||
retain: true
|
||||
value_template: '{{ value.x }}'
|
||||
value_template: "{{ value.x }}"
|
||||
```
|
||||
|
||||
{% endraw %}
|
||||
|
@ -63,12 +63,12 @@ To explore the data available within the `data` attribute of a sensor use the `d
|
||||
- platform: template
|
||||
sensors:
|
||||
updated:
|
||||
friendly_name: 'Updated'
|
||||
friendly_name: "Updated"
|
||||
value_template: {% raw %}'{{state_attr('sensor.merton', 'updated')}}'{% endraw %}
|
||||
merton_pm10:
|
||||
friendly_name: 'Merton PM10'
|
||||
friendly_name: "Merton PM10"
|
||||
value_template: {% raw %}'{{state_attr('sensor.merton', 'data')[0].pollutants[0].summary}}'{% endraw %}
|
||||
westminster_s02:
|
||||
friendly_name: 'Westminster S02'
|
||||
friendly_name: "Westminster S02"
|
||||
value_template: {% raw %}'{{state_attr('sensor.westminster', 'data')[0].pollutants[3].summary}}'{% endraw %}
|
||||
```
|
||||
|
@ -47,11 +47,11 @@ Now you have the keys, add the following lines to your `configuration.yaml`, rep
|
||||
sensor:
|
||||
- platform: loopenergy
|
||||
electricity:
|
||||
electricity_serial: 'ELECTRICAL_SERIAL'
|
||||
electricity_secret: 'ELECTRICAL_SECRET'
|
||||
electricity_serial: "ELECTRICAL_SERIAL"
|
||||
electricity_secret: "ELECTRICAL_SECRET"
|
||||
gas:
|
||||
gas_serial: 'GAS_SERIAL'
|
||||
gas_secret: 'GAS_SECRET'
|
||||
gas_serial: "GAS_SERIAL"
|
||||
gas_secret: "GAS_SECRET"
|
||||
```
|
||||
|
||||
{% configuration %}
|
||||
|
@ -153,7 +153,7 @@ For more information on working with binary sensors in Home Assistant, see the [
|
||||
|
||||
## Pico and Shade Remotes
|
||||
|
||||
Pico and Shade remotes require a RA2 Select Main Repeater (`RR-SEL-REP2-BL`) or Lutron Caséta Smart Bridge PRO (`L-BDGPRO2-WH`) with Telnet Support enabled in the Lutron app under `Settings` >> `Advanced` >> `Intergration`
|
||||
Pico and Shade remotes require a RA2 Select Main Repeater (`RR-SEL-REP2-BL`) or Lutron Caséta Smart Bridge PRO (`L-BDGPRO2-WH`) with Telnet Support enabled in the Lutron app under `Settings` >> `Advanced` >> `Integration`
|
||||
|
||||
Device Triggers are implemented for `press` and `release` of each button on the remotes via watching for `lutron_caseta_button_event` events in the format:
|
||||
|
||||
|
@ -134,7 +134,7 @@ In the configuration example below:
|
||||
alarm_control_panel:
|
||||
- platform: manual
|
||||
name: Home Alarm
|
||||
code: '1234'
|
||||
code: "1234"
|
||||
arming_time: 30
|
||||
delay_time: 20
|
||||
trigger_time: 4
|
||||
@ -157,16 +157,16 @@ automation:
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: sensor.pir1
|
||||
to: 'active'
|
||||
to: "active"
|
||||
- platform: state
|
||||
entity_id: sensor.pir2
|
||||
to: 'active'
|
||||
to: "active"
|
||||
- platform: state
|
||||
entity_id: sensor.door
|
||||
to: 'open'
|
||||
to: "open"
|
||||
- platform: state
|
||||
entity_id: sensor.window
|
||||
to: 'open'
|
||||
to: "open"
|
||||
condition:
|
||||
- condition: state
|
||||
entity_id: alarm_control_panel.ha_alarm
|
||||
@ -184,7 +184,7 @@ automation:
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: alarm_control_panel.ha_alarm
|
||||
to: 'triggered'
|
||||
to: "triggered"
|
||||
action:
|
||||
- service: notify.notify
|
||||
data:
|
||||
@ -199,7 +199,7 @@ automation:
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: sensor.front_door_lock_alarm_type
|
||||
to: '19'
|
||||
to: "19"
|
||||
# many z-wave locks use Alarm Type 19 for 'Unlocked by Keypad'
|
||||
action:
|
||||
- service: alarm_control_panel.alarm_disarm
|
||||
@ -215,7 +215,7 @@ Sending a Notification when the Alarm is Armed (Away/Home), Disarmed and in Pend
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: alarm_control_panel.home_alarm
|
||||
to: 'disarmed'
|
||||
to: "disarmed"
|
||||
action:
|
||||
- service: notify.notify
|
||||
data:
|
||||
@ -227,7 +227,7 @@ Sending a Notification when the Alarm is Armed (Away/Home), Disarmed and in Pend
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: alarm_control_panel.home_alarm
|
||||
to: 'pending'
|
||||
to: "pending"
|
||||
action:
|
||||
- service: notify.notify
|
||||
data:
|
||||
@ -239,7 +239,7 @@ Sending a Notification when the Alarm is Armed (Away/Home), Disarmed and in Pend
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: alarm_control_panel.home_alarm
|
||||
to: 'armed_away'
|
||||
to: "armed_away"
|
||||
action:
|
||||
- service: notify.notify
|
||||
data:
|
||||
@ -251,7 +251,7 @@ Sending a Notification when the Alarm is Armed (Away/Home), Disarmed and in Pend
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: alarm_control_panel.home_alarm
|
||||
to: 'armed_home'
|
||||
to: "armed_home"
|
||||
action:
|
||||
- service: notify.notify
|
||||
data:
|
||||
|
@ -68,11 +68,11 @@ A full configuration sample including optional variables:
|
||||
# Example configuration.yaml entry
|
||||
tts:
|
||||
- platform: marytts
|
||||
host: 'localhost'
|
||||
host: "localhost"
|
||||
port: 59125
|
||||
codec: 'WAVE_FILE'
|
||||
voice: 'cmu-slt-hsmm'
|
||||
language: 'en_US'
|
||||
codec: "WAVE_FILE"
|
||||
voice: "cmu-slt-hsmm"
|
||||
language: "en_US"
|
||||
effect:
|
||||
Volume: "amount:2.0;",
|
||||
TractScaler: "amount:1.5;",
|
||||
|
@ -124,7 +124,7 @@ automation:
|
||||
action:
|
||||
service: notify.matrix_notify
|
||||
data:
|
||||
message: 'It looks like you wrote !testword'
|
||||
message: "It looks like you wrote !testword"
|
||||
- alias: 'React to an introduction'
|
||||
trigger:
|
||||
platform: event
|
||||
|
@ -50,8 +50,9 @@ neato:
|
||||
```
|
||||
|
||||
3. Restart Home Assistant
|
||||
4. Add Neato Botvac via *Configuration* -> *Integrations*
|
||||
5. Follow the instructions. After that, all the entities will automatically show up in Home Assistant.
|
||||
4. Make sure you visit Home Assistant via a the same domain you used as `redirect_url` before
|
||||
5. Add Neato Botvac via *Configuration* -> *Integrations*
|
||||
6. Follow the instructions. After that, all the entities will automatically show up in Home Assistant. Make sure you start only one configuration flow at a time. Even though you can click “Open Website” several times, press it only once and wait until this flow is complete.
|
||||
|
||||
{% configuration %}
|
||||
client_id:
|
||||
@ -75,10 +76,6 @@ After the update to firmware 4.0 (which adds cleaning maps) there is also suppor
|
||||
The `neato` vacuum platform allows you to control your [Neato Botvac Connected][botvac-connected].
|
||||
The status will contain attributes on the robots last clean session.
|
||||
|
||||
<div class='note'>
|
||||
If you notice the robot stops responding to commands check the state to see if the robot is "unavailable". If you see "unavailable" first try to restart the vacuum and wait about 5 minutes to see if it is no longer "unavailable". If you are still having issues check the Neato app and make sure your robot is connected and working. If it is not then follow the steps in the app to reset your robot and give it the same name as before then restart Home Assistant.
|
||||
</div>
|
||||
|
||||
### Services
|
||||
|
||||
Currently supported services are:
|
||||
@ -116,3 +113,17 @@ Some information about the capabilities might be found on the [Neato Developer P
|
||||
| `zone` | yes | Only supported on the Botvac D7. Name of the zone to clean from the Neato app. Use unique names for the zones to avoid the wrong zone from running. Defaults to no zone i.e., complete house cleanup. |
|
||||
|
||||
[botvac-connected]: https://neatorobotics.com/products
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### My robot is unavailable
|
||||
|
||||
Try to restart the vacuum and wait about 5 minutes to see if it is no longer unavailable. If you are still having issues check the Neato app and make sure your robot is connected and working. If it is not then follow the steps in the app to reset your robot and give it the same name as before then restart Home Assistant.
|
||||
|
||||
### My robot is not deteced by Home Assistant
|
||||
|
||||
Please check your logs if there are any warnings. When there is a message about your robot being offline, check if it is connected to the internet and available though the app. If there is a message about a bad response, try to reset this robot via your app.
|
||||
|
||||
### There is a warning about a bad response but everything works as expected
|
||||
|
||||
Do you have a stale robot in your configuration? Try to [look into your account](https://neatorobotics.com) and delete any stale robots. If these warnings are about actively used robots, please report an issue to help us solving this problem.
|
||||
|
@ -182,7 +182,7 @@ subscriber_id:
|
||||
|
||||
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**. Click **Add Integration** then locate 'Nest'.
|
||||
1. Using your externally accessible address from the Home Assistant front-end, navigate to **Configuration** then **Integrations**. Click **Add Integration** then locate 'Nest'.
|
||||
|
||||
1. You should get redirected to Google to choose an account. This should be the same developer account you configured above.
|
||||
|
||||
|
@ -3,7 +3,7 @@ title: "MQTT Number"
|
||||
description: "Instructions on how to interact with a device exposing a Number through MQTT from within Home Assistant."
|
||||
ha_category:
|
||||
- Number
|
||||
ha_release: 2020.02
|
||||
ha_release: 2021.2
|
||||
ha_iot_class: Configurable
|
||||
ha_domain: mqtt
|
||||
---
|
||||
|
@ -13,7 +13,7 @@ ha_codeowners:
|
||||
ha_domain: ozw
|
||||
---
|
||||
|
||||
This integration allows you to utilize OpenZWave's ozwdaemon to control a Z-Wave network over MQTT.
|
||||
This integration allows you to utilize OpenZWave's ozwdaemon to control a Z-Wave network over MQTT. If you're starting out with Z-Wave in Home Assistant, we recommend that you use [the Z-Wave JS integration](/integrations/zwave_js).
|
||||
|
||||
## Requirements
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user